incubator-isis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From danhayw...@apache.org
Subject svn commit: r1207780 - in /incubator/isis/trunk/examples/onlinedemo: ./ dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/demo/ dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ dom/src/main/java/org/apache/isis/examples/onlinede...
Date Tue, 29 Nov 2011 08:12:04 GMT
Author: danhaywood
Date: Tue Nov 29 08:11:58 2011
New Revision: 1207780

URL: http://svn.apache.org/viewvc?rev=1207780&view=rev
Log:
ISIS-130: enhancements to the onlinedemo functionality

Added:
    incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/demo/
    incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/demo/DemoFixtures.java
    incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/demo/
    incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/demo/DemoFixturesDefault.java
    incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticationManagerSupportingInMemoryRegistrationInstaller.java
    incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticatorInMemory.java
      - copied, changed from r1207478, incubator/isis/trunk/framework/security/dflt/src/main/java/org/apache/isis/security/dflt/authentication/inmemory/AuthenticatorInMemory.java
    incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/users/
    incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/users/auth/
    incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/default.css
Removed:
    incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/users/
    incubator/isis/trunk/examples/onlinedemo/fixture/src/main/java/fixture/
    incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/objstore/dflt/
Modified:
    incubator/isis/trunk/examples/onlinedemo/   (props changed)
    incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Categories.java
    incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Category.java
    incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItem.java
    incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItems.java
    incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/CategoriesDefault.java
    incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/ToDoItemsDefault.java
    incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/isis.properties
    incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/web.xml

Propchange: incubator/isis/trunk/examples/onlinedemo/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Nov 29 08:11:58 2011
@@ -1,2 +1,3 @@
 .settings
 .project
+target

Added: incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/demo/DemoFixtures.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/demo/DemoFixtures.java?rev=1207780&view=auto
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/demo/DemoFixtures.java (added)
+++ incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/demo/DemoFixtures.java Tue Nov 29 08:11:58 2011
@@ -0,0 +1,36 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.examples.onlinedemo.dom.demo;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.Idempotent;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.examples.onlinedemo.dom.items.ToDoItem;
+
+@Named("Demo")
+public interface DemoFixtures {
+
+    @Idempotent
+    @MemberOrder(sequence="1")
+    public List<ToDoItem> resetDemoFixtures();
+
+}

Modified: incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Categories.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Categories.java?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Categories.java (original)
+++ incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Categories.java Tue Nov 29 08:11:58 2011
@@ -34,4 +34,6 @@ public interface Categories {
 
     public Category newCategory(
         @Named("Description") String description);
+
+    public Category find(String description);
 }

Modified: incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Category.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Category.java?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Category.java (original)
+++ incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/Category.java Tue Nov 29 08:11:58 2011
@@ -21,20 +21,33 @@ package org.apache.isis.examples.onlined
 
 import org.apache.isis.applib.AbstractDomainObject;
 import org.apache.isis.applib.annotation.Bounded;
+import org.apache.isis.applib.annotation.Immutable;
 import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.applib.filter.Filter;
 
+import com.google.common.base.Objects;
+
+@Immutable
 @Bounded
 public class Category extends AbstractDomainObject {
 
-    // {{ Title
-    public String title() {
-        return getDescription();
+    // {{ filters (programmatic)
+    public static Filter<Category> matching(final String description) {
+        return new Filter<Category>() {
+
+            @Override
+            public boolean accept(Category category) {
+                return Objects.equal(category.getDescription(), description);
+            }};
     }
     // }}
 
+
     // {{ Description
     private String description;
 
+    @Title
     @MemberOrder(sequence = "1")
     public String getDescription() {
         return description;

Modified: incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItem.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItem.java?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItem.java (original)
+++ incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItem.java Tue Nov 29 08:11:58 2011
@@ -20,19 +20,73 @@
 package org.apache.isis.examples.onlinedemo.dom.items;
 
 import org.apache.isis.applib.annotation.Disabled;
+import org.apache.isis.applib.annotation.Hidden;
 import org.apache.isis.applib.annotation.Ignore;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Named;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.clock.Clock;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.filter.Filters;
+import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.value.Date;
 
-public class ToDoItem {
+import com.google.common.base.Objects;
+
+public class ToDoItem implements Comparable<ToDoItem> {
+
+    // {{ filters (programmatic)
+    public static Filter<ToDoItem> thoseDue() {
+        return Filters.and(
+                Filters.not(thoseComplete()), 
+                new Filter<ToDoItem>() {
+            @Override
+            public boolean accept(ToDoItem t) {
+                return t.isDue();
+            }
+        });
+    }
+    
+    public static Filter<ToDoItem> thoseComplete() {
+        return new Filter<ToDoItem>() {
+            @Override
+            public boolean accept(ToDoItem t) {
+                return t.isComplete();
+            }
+        };
+    }
+
+    public static Filter<ToDoItem> thoseOwnedBy(final String currentUser) {
+        return new Filter<ToDoItem>() {
+            @Override
+            public boolean accept(ToDoItem toDoItem) {
+                return Objects.equal(toDoItem.getUserName(), currentUser);
+            }
+            
+        };
+    }
+    // }}
+    
+    
+    // {{ Identification
+    public String title() {
+        final TitleBuffer buf = new TitleBuffer();
+        buf.append(getDescription());
+        if(isComplete()) {
+            buf.append(" - Completed!");
+        } else {
+            if(getDueBy() != null) {
+                buf.append(" due by ", getDueBy());
+            }
+        }
+        return buf.toString();
+    }
+    // }}
+
 
     // {{ Description
     private String description;
 
-    @Title
     @MemberOrder(sequence = "1")
     public String getDescription() {
         return description;
@@ -69,6 +123,19 @@ public class ToDoItem {
     }
     // }}
 
+    // {{ UserName (property)
+    private String userName;
+
+    @MemberOrder(sequence = "1")
+    @Hidden
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(final String userName) {
+        this.userName = userName;
+    }
+    // }}
 
 
     // {{ Complete
@@ -76,7 +143,7 @@ public class ToDoItem {
 
     @Disabled
     @MemberOrder(sequence = "3")
-    public boolean getComplete() {
+    public boolean isComplete() {
         return complete;
     }
 
@@ -87,8 +154,9 @@ public class ToDoItem {
 
     // {{ completed
     @MemberOrder(sequence = "1")
-    public void completed() {
+    public ToDoItem completed() {
         setComplete(true);
+        return this;
     }
     public String disableCompleted() {
         return complete?"Already completed":null;
@@ -97,14 +165,16 @@ public class ToDoItem {
 
     // {{ notYetCompleted
     @MemberOrder(sequence = "2")
-    public void notYetCompleted() {
+    public ToDoItem notYetCompleted() {
         setComplete(false);
+        return this;
     }
     public String disableNotYetCompleted() {
         return !complete?"Not yet completed":null;
     }
     // }}
 
+    
     // {{ clone (action)
     @Named("Clone")
     @MemberOrder(sequence = "1")
@@ -125,15 +195,45 @@ public class ToDoItem {
     }
     // }}
 
+    // {{ compareTo (programmatic)
+    /**
+     * by complete flag, then due by date, then description
+     */
+    @Ignore
+    @Override
+    public int compareTo(ToDoItem other) {
+        if(isComplete() && !other.isComplete()) {
+            return +1;
+        }
+        if(!isComplete() && other.isComplete()) {
+            return -1;
+        }
+        if(getDueBy() == null && other.getDueBy() != null) {
+            return +1;
+        }
+        if(getDueBy() != null && other.getDueBy() == null) {
+            return -1;
+        }
+        if( getDueBy() == null && other.getDueBy() == null || 
+            getDueBy().equals(this.getDescription())) {
+            return getDescription().compareTo(other.getDescription());
+        }
+        return (int) (getDueBy().getMillisSinceEpoch() - other.getDueBy().getMillisSinceEpoch());
+    }
+    // }}
+
     
     // {{ injected: ToDoItems
     private ToDoItems toDoItems;
-
     public void setToDoItems(final ToDoItems toDoItems) {
         this.toDoItems = toDoItems;
     }
     // }}
 
 
+
+    
+    
+
     
 }

Modified: incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItems.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItems.java?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItems.java (original)
+++ incubator/isis/trunk/examples/onlinedemo/dom/src/main/java/org/apache/isis/examples/onlinedemo/dom/items/ToDoItems.java Tue Nov 29 08:11:58 2011
@@ -34,10 +34,19 @@ public interface ToDoItems {
     @MemberOrder(sequence="1")
     public List<ToDoItem> toDosForToday();
 
+    
     @MemberOrder(sequence="2")
     public ToDoItem newToDo(
         @Named("Description") String description, 
         Category category, 
         @Named("Due by") @Optional Date dueBy);
 
+
+    @QueryOnly
+    @MemberOrder(sequence="3")
+    public List<ToDoItem> allToDos();
+
+    @MemberOrder(sequence="4")
+    public void removeCompleted();
+
 }

Added: incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/demo/DemoFixturesDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/demo/DemoFixturesDefault.java?rev=1207780&view=auto
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/demo/DemoFixturesDefault.java (added)
+++ incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/demo/DemoFixturesDefault.java Tue Nov 29 08:11:58 2011
@@ -0,0 +1,109 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.examples.onlinedemo.objstore.dflt.demo;
+
+import java.util.List;
+
+import org.apache.isis.applib.AbstractFactoryAndRepository;
+import org.apache.isis.applib.clock.Clock;
+import org.apache.isis.applib.value.Date;
+import org.apache.isis.examples.onlinedemo.dom.demo.DemoFixtures;
+import org.apache.isis.examples.onlinedemo.dom.items.Categories;
+import org.apache.isis.examples.onlinedemo.dom.items.Category;
+import org.apache.isis.examples.onlinedemo.dom.items.ToDoItem;
+import org.apache.isis.examples.onlinedemo.dom.items.ToDoItems;
+
+public class DemoFixturesDefault extends AbstractFactoryAndRepository implements DemoFixtures {
+
+    // {{ Id, iconName
+    @Override
+    public String getId() {
+        return "fixtures";
+    }
+
+    public String iconName() {
+        return "Fixtures";
+    }
+    // }}
+
+    @Override
+    public List<ToDoItem> resetDemoFixtures() {
+        Category domesticCategory = findOrCreateCategory("Domestic");
+        Category professionalCategory = findOrCreateCategory("Professional");
+        
+        removeAllToDosForCurrentUser();
+        
+        createToDoItemForCurrentUser("Buy milk", domesticCategory, daysFromToday(0));
+        createToDoItemForCurrentUser("Buy stamps", domesticCategory, daysFromToday(0));
+        createToDoItemForCurrentUser("Pick up laundry", domesticCategory, daysFromToday(6));
+        createToDoItemForCurrentUser("Write blog post", professionalCategory, null);
+        createToDoItemForCurrentUser("Organize brown bag", professionalCategory, daysFromToday(14));
+        
+        getContainer().flush();
+        
+        return toDoItems.allToDos();
+    }
+
+    // {{ helpers
+    private Category findOrCreateCategory(String description) {
+        Category category = categories.find(description);
+        if(category != null) {
+            return category;
+        }
+        return categories.newCategory(description);
+    }
+
+    private void removeAllToDosForCurrentUser() {
+        final List<ToDoItem> allToDos = toDoItems.allToDos();
+        for (ToDoItem toDoItem : allToDos) {
+            getContainer().remove(toDoItem);
+        }
+    }
+
+    private ToDoItem createToDoItemForCurrentUser(String description, Category category, Date dueBy) {
+        return toDoItems.newToDo(description, category, dueBy);
+    }
+
+    private static Date daysFromToday(int i) {
+        final Date date = new Date(Clock.getTimeAsDateTime());
+        date.add(0, 0, i);
+        return date;
+    }
+    // }}
+
+
+    // {{ injected: Categories
+    private Categories categories;
+
+    public void setCategories(final Categories categories) {
+        this.categories = categories;
+    }
+    // }}
+
+
+    // {{ injected: ToDoItems
+    private ToDoItems toDoItems;
+    public void setToDoItems(ToDoItems toDoItems) {
+        this.toDoItems = toDoItems;
+    }
+    // }}
+    
+
+}

Modified: incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/CategoriesDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/CategoriesDefault.java?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/CategoriesDefault.java (original)
+++ incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/CategoriesDefault.java Tue Nov 29 08:11:58 2011
@@ -49,10 +49,19 @@ public class CategoriesDefault extends A
 
     @Override
     public Category newCategory(String description) {
-        final Category category = newTransientInstance(Category.class);
+        Category category = find(description);
+        if(category != null) {
+            return category;
+        }
+        category = newTransientInstance(Category.class);
         category.setDescription(description);
         persist(category);
         return category;
     }
 
+    @Override
+    public Category find(String description) {
+        return firstMatch(Category.class, Category.matching(description));
+    }
+
 }

Modified: incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/ToDoItemsDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/ToDoItemsDefault.java?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/ToDoItemsDefault.java (original)
+++ incubator/isis/trunk/examples/onlinedemo/objstore-default/src/main/java/org/apache/isis/examples/onlinedemo/objstore/dflt/items/ToDoItemsDefault.java Tue Nov 29 08:11:58 2011
@@ -19,17 +19,17 @@
 
 package org.apache.isis.examples.onlinedemo.objstore.dflt.items;
 
+import java.util.Collections;
 import java.util.List;
 
-
 import org.apache.isis.applib.AbstractFactoryAndRepository;
-import org.apache.isis.applib.clock.Clock;
-import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.filter.Filters;
 import org.apache.isis.applib.value.Date;
 import org.apache.isis.examples.onlinedemo.dom.items.Category;
 import org.apache.isis.examples.onlinedemo.dom.items.ToDoItem;
 import org.apache.isis.examples.onlinedemo.dom.items.ToDoItems;
 
+
 public class ToDoItemsDefault extends AbstractFactoryAndRepository implements ToDoItems {
 
     // {{ Id, iconName
@@ -42,30 +42,57 @@ public class ToDoItemsDefault extends Ab
         return "ToDoItem";
     }
     // }}
-
     
+    // {{ ToDosForToday (action)
     @Override
     public List<ToDoItem> toDosForToday() {
-        return allMatches(ToDoItem.class, new Filter<ToDoItem>() {
-            @Override
-            public boolean accept(ToDoItem t) {
-                return !t.getComplete() && t.isDue();
-            }
-        });
+        return allMatches(ToDoItem.class, Filters.and(ToDoItem.thoseOwnedBy(currentUser()), ToDoItem.thoseDue()));
     }
-
+    // }}
     
-    // {{ NewToDo
+    // {{ NewToDo (action)
     @Override
     public ToDoItem newToDo(String description, Category category, Date dueBy) {
         ToDoItem toDoItem = newTransientInstance(ToDoItem.class);
         toDoItem.setDescription(description);
         toDoItem.setCategory(category);
         toDoItem.setDueBy(dueBy);
+        toDoItem.setUserName(currentUser());
         persist(toDoItem);
         return toDoItem;
     }
     // }}
 
+    // {{ AllToDos (action)
+    @Override
+    public List<ToDoItem> allToDos() {
+        final String currentUser = currentUser();
+        final List<ToDoItem> items = allMatches(ToDoItem.class, ToDoItem.thoseOwnedBy(currentUser));
+        Collections.sort(items);
+        return items;
+    }
+    // }}
+
+    // {{ AllToDos (action)
+
+    @Override
+    public void removeCompleted() {
+        final List<ToDoItem> complete= allMatches(ToDoItem.class, ToDoItem.thoseComplete());
+        for (ToDoItem toDoItem : complete) {
+            getContainer().remove(toDoItem);
+        }
+        final int size = complete.size();
+        getContainer().informUser("" + size + " item" +
+        		(size != 1? "s": "") +
+        		" removed");
+    }
+    // }}
+
+    // {{ helpers
+    private String currentUser() {
+        return getContainer().getUser().getName();
+    }
+    // }}
+
 
 }

Added: incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticationManagerSupportingInMemoryRegistrationInstaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticationManagerSupportingInMemoryRegistrationInstaller.java?rev=1207780&view=auto
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticationManagerSupportingInMemoryRegistrationInstaller.java (added)
+++ incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticationManagerSupportingInMemoryRegistrationInstaller.java Tue Nov 29 08:11:58 2011
@@ -0,0 +1,43 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.examples.onlinedemo.auth;
+
+import java.util.List;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.runtime.authentication.standard.Authenticator;
+import org.apache.isis.runtimes.dflt.runtime.authentication.AuthenticationManagerStandardInstallerAbstractForDfltRuntime;
+import org.apache.isis.security.file.authentication.FileAuthenticator;
+
+import com.google.common.collect.Lists;
+
+public class AuthenticationManagerSupportingInMemoryRegistrationInstaller extends
+    AuthenticationManagerStandardInstallerAbstractForDfltRuntime {
+
+    public AuthenticationManagerSupportingInMemoryRegistrationInstaller() {
+        super("demo");
+    }
+
+    @Override
+    protected List<Authenticator> createAuthenticators(IsisConfiguration configuration) {
+        return Lists.<Authenticator>newArrayList(new FileAuthenticator(configuration), new AuthenticatorInMemory(configuration));
+    }
+
+}

Copied: incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticatorInMemory.java (from r1207478, incubator/isis/trunk/framework/security/dflt/src/main/java/org/apache/isis/security/dflt/authentication/inmemory/AuthenticatorInMemory.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticatorInMemory.java?p2=incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticatorInMemory.java&p1=incubator/isis/trunk/framework/security/dflt/src/main/java/org/apache/isis/security/dflt/authentication/inmemory/AuthenticatorInMemory.java&r1=1207478&r2=1207780&rev=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/framework/security/dflt/src/main/java/org/apache/isis/security/dflt/authentication/inmemory/AuthenticatorInMemory.java (original)
+++ incubator/isis/trunk/examples/onlinedemo/webapp/src/main/java/org/apache/isis/examples/onlinedemo/auth/AuthenticatorInMemory.java Tue Nov 29 08:11:58 2011
@@ -17,11 +17,10 @@
  *  under the License.
  */
 
-package org.apache.isis.security.dflt.authentication.inmemory;
+package org.apache.isis.examples.onlinedemo.auth;
 
 import java.util.Map;
 
-import org.apache.isis.core.commons.components.Noop;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequestPassword;
@@ -34,41 +33,50 @@ import com.google.common.base.Objects;
 import com.google.common.collect.Maps;
 
 public class AuthenticatorInMemory extends AuthenticatorAbstract implements Registrar {
-    
-    private Map<String,String> users = Maps.newHashMap();
 
+    private static AuthenticatorInMemory instance;
+    /**
+     * Rather nasty, but is required to make available to the Users repository.
+     */
+    public static AuthenticatorInMemory getInstance() {
+        return instance;
+    }
+
+    private Map<String, String> passwordsByUser = Maps.newHashMap();
+    
     public AuthenticatorInMemory(final IsisConfiguration configuration) {
         super(configuration);
+        instance = this;
     }
 
     @Override
-    public boolean canAuthenticate(final AuthenticationRequest request) {
-        return request instanceof AuthenticationRequestPassword;
+    public final boolean canAuthenticate(final Class<? extends AuthenticationRequest> authenticationRequestClass) {
+        return AuthenticationRequestPassword.class.isAssignableFrom(authenticationRequestClass);
     }
 
     @Override
-    public boolean isValid(final AuthenticationRequest request) {
-        final AuthenticationRequestPassword requestPassword = (AuthenticationRequestPassword) request;
-        final String password = users.get(requestPassword.getName());
-        return Objects.equal(requestPassword.getPassword(), password);
+    public boolean isValid(final AuthenticationRequest authRequest) {
+        final AuthenticationRequestPassword request = (AuthenticationRequestPassword) authRequest;
+        final String userId = request.getName();
+        return Objects.equal(request.getPassword(), passwordsByUser.get(userId));
     }
 
     @Override
-    public boolean canRegister(final RegistrationDetails registrationDetails) {
-        return registrationDetails instanceof RegistrationDetailsPassword;
+    public boolean canRegister(final Class<? extends RegistrationDetails> registrationDetailsClass) {
+        return RegistrationDetailsPassword.class.isAssignableFrom(registrationDetailsClass);
     }
 
     @Override
     public boolean register(final RegistrationDetails registrationDetails) {
         final RegistrationDetailsPassword registration = (RegistrationDetailsPassword) registrationDetails;
-        final String user = registration.getUser();
-        final String existingPassword = users.get(user);
-        if(existingPassword != null) { 
+        final String userId = registration.getUser();
+        if(passwordsByUser.containsKey(userId)) {
             return false;
         }
-        final String password = registration.getPassword();
-        users.put(user, password);
+        passwordsByUser.put(userId, registration.getPassword());
         return true;
     }
+    
 
 }
+

Modified: incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/isis.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/isis.properties?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/isis.properties (original)
+++ incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/isis.properties Tue Nov 29 08:11:58 2011
@@ -14,14 +14,14 @@
 #  KIND, either express or implied.  See the License for the
 #  specific language governing permissions and limitations
 #  under the License.
-isis.services.prefix = org.apache.isis.examples.onlinedemo.objstore.dflt
-isis.services = items.ToDoItemsDefault, items.CategoriesDefault
+isis.services.prefix = org.apache.isis.examples.onlinedemo
+isis.services = objstore.dflt.items.ToDoItemsDefault, objstore.dflt.items.CategoriesDefault, objstore.dflt.demo.DemoFixturesDefault
 
-isis.fixtures.prefix= org.apache.isis.examples.onlinedemo.fixture
-//isis.fixtures= LogonAsSvenFixture,todo.ToDoItemsFixture
-isis.fixtures= items.ToDoItemsFixture
+isis.fixtures.prefix= org.apache.isis.examples.onlinedemo
+//isis.fixtures= fixture.LogonAsSvenFixture,fixture.items.ToDoItemsFixture
 
-isis.exploration.users=sven, dick, bob
+
+#isis.exploration.users=sven, dick, bob
 
 
 isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor
@@ -34,7 +34,6 @@ isis.persistor.object-factory=org.apache
 
 
 isis.persistor.domain-object-container=org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault
-#isis.persistor.domain-object-container=org.apache.isis.progmodel.wrapper.metamodel.DomainObjectContainerWrapperFactory
 
 isis.authentication=org.apache.isis.examples.onlinedemo.auth.AuthenticationManagerSupportingInMemoryRegistrationInstaller
 

Modified: incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/web.xml?rev=1207780&r1=1207779&r2=1207780&view=diff
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/WEB-INF/web.xml Tue Nov 29 08:11:58 2011
@@ -78,12 +78,10 @@
     <filter>
         <filter-name>IsisSessionFilterForHtml</filter-name>
         <filter-class>org.apache.isis.runtimes.dflt.webapp.IsisSessionFilter</filter-class>
-        <!-- 
         <init-param>
-            <param-name>logonPage</param-name>
+            <param-name>redirectToOnNoSessionException</param-name>
             <param-value>/logon.htmlviewer</param-value>
         </init-param>
-        -->
         <init-param>
             <param-name>cacheAuthSessionOnHttpSession</param-name>
             <param-value>true</param-value>
@@ -214,4 +212,5 @@
         <url-pattern>*.html</url-pattern>
     </servlet-mapping>
 	
+	
 </web-app>

Added: incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/default.css
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/default.css?rev=1207780&view=auto
==============================================================================
--- incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/default.css (added)
+++ incubator/isis/trunk/examples/onlinedemo/webapp/src/main/webapp/default.css Tue Nov 29 08:11:58 2011
@@ -0,0 +1,939 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+/* Start Global styles */
+
+body {
+  background: #101254;
+  text-align: center;
+}
+#wrapper {
+  width: 980px;
+  min-height: 800px;
+  border:3px solid #7F81C0;
+  margin:8px auto;
+  text-align: left;
+  background: white;
+}
+
+.header-icon > img {
+	max-width: 40px;
+	height: 40px;
+}
+	
+BODY {
+	font-family: Arial, Sans-Serif;
+	margin: 0 0 10px 0;
+	color: black;
+
+/*
+	background: url(default-images/poweredby-logo.png);
+	background-repeat: no-repeat;
+	background-position: 95% 95%;
+*/
+}
+
+IMG {
+	border: 0;
+}
+
+A {
+	text-decoration: none;
+}
+
+A:hover {
+	text-decoration: underline;
+}
+
+/* End Global styles */ /* Start Heading */ 
+
+div#site-header:after {
+	bottom: 0px;
+	display: block;
+	text-align: right;
+	float:right;
+	bottom: 0;
+	font-size: 70%;
+	color: gray;
+}
+
+div#site-header {
+	background: url(images/banner-bg.png); 
+	background-repeat: repeat-x white-space :   nowrap;
+	list-style: none;
+	margin: 0px;
+	height: 100px;
+}
+
+div#site-logo {
+	background: url(images/banner.png);
+	background-repeat: no-repeat;
+	background-position: left;
+	position: absolute;
+	width: 980px;
+	height: 100px;
+	margin: 0 auto;
+}
+
+div#page-header {
+	display: none;
+}
+
+/* END Heading */
+DIV#body {
+	display: block;
+	padding-bottom: 10px;
+}
+
+div#navigation {
+	margin: 0;
+	padding: 0px;
+}
+
+/* Start options*/
+DIV.options {
+	background-color: #eeeeee;
+	margin: 0;
+	padding: 4px 0px 4px 5px;
+	min-height: 20px;
+	align: right;
+	float:right;
+}
+
+
+DIV.options H4 {
+	display: none;
+}
+
+DIV.options DIV.item {
+	display: inline;
+	border-right: 1px solid #000000;
+	font-family: arial, 'sans serif';
+	font-weight: bold;
+	color: #00000;
+	font-size: 70%;
+	margin: 0 6px 0 6px;
+	padding 0 0 0 0;
+	min-width: 200px;
+}
+
+DIV.options DIV.item IMG {
+	display: none;
+}
+
+DIV.options DIV.item a:link {
+	color: #000000;
+	text-decoration: none;
+	margin: 0 5px 0 0px;
+	padding: 0 2px 0 0px;
+}
+
+DIV.options DIV.item a:hover {
+	background-color: #dddddd;
+	margin: 0 5px 0 0px;
+	padding: 0 2px 0 0px;
+}
+
+DIV.options DIV.item a:visited {
+	color: #000000;
+	text-decoration: none;
+	margin: 0 5px 0 0px;
+	padding: 0 2px 0 0px;
+}
+
+/* End options */ 
+
+/* Start services */
+DIV.services {
+	background-color: #7F81C0;
+	margin: 0;
+	padding: 4px 20px 4px 5px;
+	min-height: 20px;
+
+}
+
+DIV.services H4 {
+	display: none;
+}
+
+DIV.services DIV.item {
+	display: inline;
+	border-right: 1px solid #ffffff;
+	font-family: arial, 'sans serif';
+	font-weight: bold;
+	color: #ffffff;
+	font-size: 70%;
+	margin: 3px;
+}
+
+DIV.services DIV.item IMG {
+	display: none;
+}
+
+DIV.services DIV.item a:link {
+	color: #ffffff;
+	text-decoration: none;
+	margin: 0 5px 0 5px;
+	padding: 0 2px 0 0px;
+}
+
+DIV.services DIV.item a:hover {
+	background-color: #2683E2;
+	margin: 0 5px 0 5px;
+	padding: 0 2px 0 0px;
+}
+
+DIV.services DIV.item a:visited {
+	color: #ffffff;
+	text-decoration: none;
+	margin: 0 5px 0 5px;
+	padding: 0 2px 0 0px;
+}
+
+DIV.services DIV.item-selected {
+	background-color: #2683E2;
+	display: inline;
+	border-right: 1px solid #ffffff;
+	font-family: arial, 'sans serif';
+	font-weight: bold;
+	color: #ffffff;
+	font-size: 70%;
+}
+
+DIV.services DIV.item-selected a:link {
+	color: #ffffff;
+	text-decoration: none;
+	margin: 0 5px 0 5px;
+	padding: 0 2px 0 0px;
+}
+
+DIV.services DIV.item-selected a:hover {
+	background-color: #556677;
+	margin: 0 5px 0 5px;
+	padding: 0 2px 0 0px;
+}
+
+DIV.services DIV.item-selected a:visited {
+	color: #ffffff;
+	text-decoration: none;
+	margin: 0 5px 0 5px;
+	padding: 0 2px 0 0px;
+}
+
+/* End services */ /* Start History */
+DIV.history {
+	background-color: #D6D6D6;
+	margin: 0;
+	padding: 1px 30px 0 5px;
+	min-height: 26px;
+}
+
+DIV.history H4 {
+	display: none;
+}
+
+DIV.history DIV.item {
+	display: inline;
+	border-right: 1px solid #ffffff;
+	font-family: arial, 'sans serif';
+	font-weight: bold;
+	color: #29357D;
+	font-size: 70%;
+}
+
+DIV.history DIV.item IMG {
+	position: relative;
+	top: 4px;
+	height: 16px;
+	padding: 0 5px 0 0px;
+}
+
+DIV.history DIV.item a:link {
+	color: #29357D;
+	text-decoration: none;
+	margin: 5px;
+	padding: 1px 3px 1px 3px;
+}
+
+DIV.history DIV.item a:hover {
+	background-color: #B7B6B6;
+	padding: 1px 3px 1px 3px;
+}
+
+DIV.history DIV.item a:visited {
+	color: #29357D;
+	text-decoration: none;
+	padding: 1px 3px 1px 3px;
+}
+
+DIV.history DIV.item-selected {
+	background-color: #2683E2;
+	display: inline;
+	border-right: 1px solid #ffffff;
+	font-family: arial, 'sans serif';
+	font-weight: bold;
+	color: #29357D;
+	font-size: 70%;
+	height: 30px;
+}
+
+DIV.history DIV.item-selected a:hover {
+	background-color: #556677;
+	padding: 1px 3px 1px 3px;
+}
+
+DIV.history DIV.item-selected a:link {
+	color: #29357D;
+	text-decoration: none;
+	margin: 10px;
+	padding: 1px 3px 1px 3px;
+}
+
+DIV.history DIV.item-selected a:visited {
+	color: #29357D;
+	text-decoration: none;
+	padding: 1px 3px 1px 3px;
+}
+
+/* INVISIBLE character for empty item. FIREFOX ONLY*/
+DIV.history:after {
+	content: "X";
+	display: inline;
+	text-align: right;
+	font-size: 70%;
+	color: #D6D6D6;
+}
+
+/* End History */ /* Start Context */
+div#context {
+	background-color: #F0F0F0;
+	margin: 0;
+	padding: 1px 30px 0 7px;
+	min-height: 26px;
+}
+
+div#context span.disabled {
+	display: inline;
+	font-family: arial, 'sans serif';
+	font-weight: normal;
+	color: #666666;
+	font-size: 70%;
+	padding: 0px 5px 0px 7px;
+	white-space: nowrap;
+}
+
+div#context span.disabled IMG {
+	display: none
+}
+
+div#context span.disabled a:link {
+	color: #29357D;
+	text-decoration: none;
+	margin: 5px;
+	padding: 1px 3px 1px 3px;
+}
+
+div#context span.disabled a:hover {
+	background-color: #B7B6B6;
+	padding: 1px 3px 1px 3px;
+}
+
+div#context span.disabled a:visited {
+	color: #29357D;
+	text-decoration: none;
+	padding: 1px 3px 1px 3px;
+}
+
+div#context a.linked {
+	display: inline;
+	font-family: arial, 'sans serif';
+	font-weight: normal;
+	color: #29357D;
+	font-size: 70%;
+	padding: 0px 5px 0px 7px;
+}
+
+div#context a.linked IMG {
+	display: none
+}
+
+div#context a.linked a:link {
+	color: #29357D;
+	text-decoration: none;
+	margin: 5px;
+	padding: 1px 3px 1px 3px;
+}
+
+div#context a.linked  a:hover {
+	background-color: #29357D;
+	padding: 1px 3px 1px 3px;
+	text-decoration: underline;
+}
+
+div#context a.linked  a:visited {
+	color: #29357D;
+	text-decoration: none;
+	padding: 1px 3px 1px 3px;
+}
+
+/* INVISIBLE character for empty breadcrumbs. FIREFOX ONLY*/
+span.disabled:after {
+	content: "X";
+	display: inline;
+	text-align: right;
+	font-size: 70%;
+	color: #F0F0F0;
+}
+
+/* End Context */ /*
+div#help-bar {
+	position: relative;
+	right: 50px;
+	top: 10px;
+	text-align: right; 
+	font-family : arial, 'sans serif'; 
+	font-weight : normal;  
+	color: #0000FF; 
+	font-size : 90%; 
+	line-height : 110%;
+	text-decoration: underline;
+	height: 22px;
+}
+*/
+DIV#body DIV#view {
+	position: relative;
+	top: 0px;
+	left: 0px;
+	margin: 0px;
+}
+
+/* Start of Message Header */
+DIV.message-header {
+	position: relative;
+	top: 40px;
+	padding: 5px 25px 5px 25px;
+	margin: 0 50px 0 255px;
+	vertical-align: middle;
+	COLOR: #003366;
+	FONT-WEIGHT: bold;
+	FONT-SIZE: 80%;
+	LEFT: auto;
+	FONT-STYLE: normal;
+	FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif;
+	width: 40%;
+}
+
+DIV.message-header DIV.warning {
+	COLOR: #ff0033;
+	padding: 5px 25px 5px 25px;
+	background: url(default-images/sign-warning.png);
+	background-repeat: no-repeat;
+	background-color: #D6D6D6;
+	background-position: 5px 5px;
+}
+
+DIV.message-header DIV.message {
+	COLOR: #003366;
+	padding: 5px 25px 5px 25px;
+	background: url(default-images/sign-info.png);
+	background-repeat: no-repeat;
+	background-color: #D6D6D6;
+	background-position: 5px 5px;
+}
+
+DIV.message-header DIV.message {
+	FONT-WEIGHT: normal;
+}
+
+/* End of Message Header */ /* Start of Object Header */
+DIV.header {
+	position: relative;
+	top: 40px;
+	display: block;
+	background-color: #F0F0F0;
+	min-height: 48px;
+	margin: 0 50px 0 280px;
+
+}
+
+SPAN.header-icon IMG {
+	float: left;
+}
+
+SPAN.header-text {
+	float: left;
+	position: relative;
+	top: 10px;
+	margin-left: 7px;
+	FONT-WEIGHT: bold;
+	FONT-SIZE: 16px;
+	LEFT: auto;
+	COLOR: #003366;
+	FONT-STYLE: normal;
+	FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif;
+}
+
+/* End of Object Header */ /* Start of Object Contents */
+DIV#content {
+	position: relative;
+	display: block;
+	top: 40px;
+	margin: 0 50px 10px 280px;
+}
+
+/* Start of Object Fields */
+DIV.field {
+	margin: 0;
+	padding: 5px 0px 5px 0px;
+	border-top: 1px solid #666666;
+	min-height: 20px;
+}
+
+DIV.field SPAN.value IMG,DIV.field DIV.value IMG {
+	position: relative;
+	top: 3px;
+	margin: 0px 5px 0 0;
+	height: 16px;
+}
+
+DIV.field SPAN.value A,DIV.field DIV.value A {
+	position: relative;
+	top: -2px;
+	margin: 0px 5px 0 0;
+	height: 16px;
+}
+
+DIV.field DIV.icon IMG {
+	position: relative;
+	top: 0px;
+	margin: 0px 5px 0 0;
+	height: 16px;
+}
+
+.label,.value {
+	font-size: 80%;
+	color: #333399;
+}
+
+DIV.field DIV.icon {
+	display: inline;
+	color: #333399;
+	position: absolute;
+	left: 200px;
+}
+
+DIV.field span.label,DIV.field DIV.label {
+	width: 170px;
+	display: block;
+	/*content: ":";*/
+	margin: 0 0 -18px 7px;
+}
+
+DIV.field span.separator {
+	display: inline;
+	position: relative;
+	margin: 0 0 -15px 180px;
+	vertical-align: top;
+}
+
+DIV.field span.value, DIV.field DIV.value, DIV.field INPUT.value, DIV.field SELECT.value
+	{
+	top: -2px;
+	position: relative;
+	margin: 0px 10px -5px 0px;
+	display: inline;
+}
+
+DIV.field span.value PRE {
+	color: #333399;
+	margin: 0;
+	font-family: inherit;
+}
+
+
+DIV.field textarea.value {
+	font-family: inherit;
+}
+
+
+DIV.field span.optional {
+	margin: -35px 0 0 0;
+	font-size: 70%;
+	color: grey;
+}
+
+DIV.field span.required {
+	display: inline;
+	position: relative;
+	margin: 0;
+	vertical-align: top;
+	color: red;
+}
+
+DIV.field span.error {
+	display: inline;
+	position: relative;
+	color: red;
+	font-size: 70%;
+}
+
+/* INVISIBLE character for empty value FIREFOX ONLY*/
+DIV.field span.value:after {
+	content: "X";
+	display: inline;
+	text-align: right;
+	font-size: 70%;
+	color: white;
+}
+
+/* INVISIBLE character for empty value FIREFOX ONLY*/
+DIV.field span.label:after {
+	content: "X";
+	display: inline;
+	text-align: right;
+	font-size: 70%;
+	color: white;
+}
+
+/* End of Object Fields */ /* Start of Object Table */
+DIV#content TABLE {
+	position: relative;
+	float: left;
+	width: 100%;
+	border: 0;
+	margin: 0 0 10px 0;
+	border-collapse: collapse;
+}
+
+DIV#content TH {
+	padding: 6px;
+	border: 1px solid #ffffff;
+	background-color: #D6D6D6;
+	font-family: arial, 'sans serif';
+	font-weight: bold;
+	color: black;
+	font-size: 70%;
+}
+
+DIV#content TD {
+	background-color: #ffffff;
+	border-right: 0;
+	border-left: 0;
+	border-bottom: 1px solid black;
+	padding: 6px;
+	font-family: arial, 'sans serif';
+	font-weight: normal;
+	font-size: 80%;
+	color: #333399;
+	margin: 0;
+	text-align: left;
+}
+
+DIV#content TD.rowstart {
+	background-color: #F0F0F0;
+}
+
+DIV#content TD A:visited {
+	color: #0000FF;
+}
+
+DIV#content H4 {
+	font-family: arial, 'sans serif';
+	font-weight: normal;
+	color: #000000;
+	font-size: 70%;
+	border-top: 1px solid black;
+	margin: -2px 0 0 0px;
+	padding: 5px;
+}
+
+TD DIV.icon {
+	font-size: 100%;
+	margin-top: 5px;
+}
+
+TD DIV.icon IMG {
+	float: left;
+	margin: -1px 5px 5px 0px;
+	height: 16px;
+}
+
+TD DIV.action-button {
+	background-color: #ffffff;
+	font-size: 130%;
+	text-decoration: none;
+}
+
+/* End of Object Table */
+INPUT.action-button,DIV.action-button {
+	background-color: #F0F0F0;
+	padding: 10px;
+	display: block;
+	margin: 0;
+	min-height: 20px;
+}
+
+INPUT.action-button,DIV.action-button A {
+	background: url(default-images/bg-button.gif);
+	background-repeat: repeat-x;
+	padding: 2px;
+	margin: 5px;
+	border: 1px solid #333399;
+	font-family: arial, 'sans serif';
+	font-weight: normal;
+	color: #000000;
+	font-size: 70%;
+	font-weight: normal;
+	text-align: center;
+}
+
+DIV.action-button a:link {
+	color: #000000;
+}
+
+DIV.action-button a:visited {
+	color: #000000;
+}
+
+DIV.action-button a:hover {
+	color: #000000;
+	text-decoration: none;
+}
+
+INPUT.action-button,DIV.action-button INPUT {
+	float: left;
+}
+
+/* End of Object Contents */ /* Start of Object Actions Menu */
+DIV#body DIV#view DIV#menu {
+	position: relative;
+	top: 40px;
+	left: 0;
+	background-color: #ffffff;
+	border-top: 1px solid #00336F;
+	margin: 0px;
+	width: 210px;
+	display: block;
+	float: left;
+}
+
+DIV#body DIV#menu H3 {
+	display: none;
+}
+
+DIV#menu SPAN.name {
+	display: block;
+	font-size: 80%;
+	background-color: #ffffff;
+	color: #333399;
+	line-height: 100%;
+	margin: 0 0 0 10px;
+}
+
+DIV.menu-item  a:link {
+	color: #333399;
+}
+
+DIV.menu-item  a:visited {
+	color: #333399;
+}
+
+DIV.submenu-item {
+	font-size: 80%;
+	background-color: #ffffff;
+	color: #1A59A7;
+	margin: 0px;
+	padding: 5px 0px 5px 10px;
+	border-bottom: 1px solid #00336F;
+	line-height: 100%;
+}
+
+DIV.submenu-item DIV.menu-item {
+	background: url(default-images/submenu-bullet.gif);
+	background-repeat: no-repeat;
+	background-position: left;
+	background-color: #ffffff;
+	margin: 0px;
+	line-height: 100%;
+	border: 0;
+	padding: 4px 5px 0px 10px;
+	font-family: arial, 'sans serif';
+	font-weight: normal;
+	color: #1A59A7;
+	font-size: 85%;
+}
+
+DIV.menu-item {
+	background-color: #ffffff;
+	margin: 0px;
+	line-height: 110%;
+	border-bottom: 1px solid #00336F;
+	padding: 5px 5px 5px 10px;
+	font-family: arial, 'sans serif';
+	font-weight: normal;
+	color: #1A59A7;
+	font-size: 80%;
+}
+
+DIV.menu-item DIV.disabled {
+	color: #a0a0a0;
+}
+
+DIV.menu-item a:link {
+	color: #1A59A7;
+}
+
+DIV.menu-item a:visited {
+	color: #1A59A7;
+}
+
+DIV.menu-item a:hover {
+	color: #006666;
+	text-decoration: underline;
+}
+
+DIV.submenu-item DIV.menu-item a:link {
+	color: #1A59A7;
+}
+
+DIV.submenu-item DIV.menu-item a:visited {
+	color: #1A59A7;
+}
+
+DIV.submenu-item DIV.menu-item a:hover {
+	color: #006666;
+	text-decoration: underline;
+}
+
+/* End of Object Menu */
+DIV.page-footer {
+	position: absolute;
+	right: 10px;
+	bottom: 10px;
+	font-size: 50%;
+	color: #333399;
+}
+
+H1 {
+	font-size: 140%;
+	margin-top: -8px;
+}
+
+H2 {
+	font-size: 90%;
+	color: #333399;
+	letter-spacing: 1pt;
+	text-indent:-1pt;
+	margin: 0;
+}
+
+H3 {
+	font-size: 80%;
+	color: #ffffff;
+	letter-spacing: 1pt;
+	text-indent:-1pt;
+	margin: 15px 10px 5px 10px;
+}
+
+H4 {
+	font-size: 80%;
+	color: #333399;
+	letter-spacing: 1pt;
+	text-indent:-1pt;
+	margin: 10px 10px 0px 10px;
+}
+
+DIV.text {
+	font-size: 100%;
+	color: #336699;
+	letter-spacing: 1pt;
+	text-indent:-1pt;
+	margin: 10px 10px 0px 10px;
+}
+
+DIV.error {
+	font-size: 120%;
+	color: #cc0000;
+	letter-spacing: 1pt;
+	text-indent:-1pt;
+	margin: 10px 10px 0px 10px;
+}
+
+PRE.error-trace {
+	font-size: 80%;
+	color: #cc0000;
+	margin: 10px 10px 0px 10px;
+}
+
+DIV#debug { /*	float: left;*/
+	background-color: #F0F0F0;
+	margin: 30px;
+	padding: 1px 10px 0 7px;
+	min-height: 22px;
+	border: 1px;
+}
+
+DIV#debug H4 {
+	display: inline;
+	font-size: 80%;
+	color: #999;
+	margin: 0 5px 0 10px;
+}
+
+DIV#debug DIV.detail {
+	display: inline;
+	font-size: 80%;
+	color: #999;
+	margin: 0 5px 0 10px;
+}
+
+DIV#page-footer {
+	display: none;
+}
+
+SPAN.message {
+	position: relative;
+	top: 30px;
+	font-size: 100%;
+	color: #336699;
+	margin: 40px 0 0 0;
+	padding: 10px;
+}
+/* Think this is now redundant
+DIV.items {
+	position: relative;
+} 
+*/
+
+
+SPAN.about {
+	display: block;
+	padding: 4px;
+}
+
+
+SPAN.user {
+	display: block;
+	padding: 4px;
+}
+
+.nav-link {
+    display: block;
+    padding: 10px;
+    font-size: 75%;
+}
\ No newline at end of file



Mime
View raw message