You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2006/12/11 18:41:28 UTC

svn commit: r485769 [1/3] - in /lenya/trunk/src: impl/test/org/apache/lenya/cms/publication/ impl/test/org/apache/lenya/transaction/ java/org/apache/lenya/ac/ java/org/apache/lenya/cms/observation/ java/org/apache/lenya/cms/repository/ java/org/apache/...

Author: andreas
Date: Mon Dec 11 09:41:23 2006
New Revision: 485769

URL: http://svn.apache.org/viewvc?view=rev&rev=485769
Log:
Refactored notification mechanism (more generic now), notify listeners after transactions are completed, added basic inbox functionality (mainly to simplify notification unit testing)

Added:
    lenya/trunk/src/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
    lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowEventDescriptor.java
    lenya/trunk/src/modules-core/workflow-impl/java/src/org/apache/lenya/cms/workflow/WorkflowNotifier.java
    lenya/trunk/src/modules/notification/config/cocoon-xconf/inboxmanager.xconf
    lenya/trunk/src/modules/notification/config/cocoon-xconf/notificationlistener.xconf
    lenya/trunk/src/modules/notification/config/cocoon-xconf/tab.xconf
    lenya/trunk/src/modules/notification/config/cocoon-xconf/usecase-inbox.xconf
    lenya/trunk/src/modules/notification/config/cocoon-xconf/usecase-sendMessage.xconf
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/AbstractInboxManager.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/Inbox.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/InboxManager.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/InboxNotifier.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/usecases/
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/usecases/Inbox.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/usecases/SendMessage.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/xml/
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/xml/XmlSourceInbox.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/inbox/xml/XmlSourceInboxManager.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/notification/NotificationEventDescriptor.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/notification/NotificationListener.java
    lenya/trunk/src/modules/notification/java/test/
    lenya/trunk/src/modules/notification/java/test/org/
    lenya/trunk/src/modules/notification/java/test/org/apache/
    lenya/trunk/src/modules/notification/java/test/org/apache/lenya/
    lenya/trunk/src/modules/notification/java/test/org/apache/lenya/notification/
    lenya/trunk/src/modules/notification/java/test/org/apache/lenya/notification/NotificationTest.java
    lenya/trunk/src/modules/notification/resources/
    lenya/trunk/src/modules/notification/resources/i18n/
    lenya/trunk/src/modules/notification/resources/i18n/cmsui.xml
    lenya/trunk/src/modules/notification/resources/i18n/cmsui_de.xml
    lenya/trunk/src/modules/notification/usecases/currentMessage.jx
    lenya/trunk/src/modules/notification/usecases/inbox.jx
    lenya/trunk/src/modules/notification/usecases/messageList.jx
    lenya/trunk/src/modules/notification/usecases/sendMessage.jx
Removed:
    lenya/trunk/src/java/org/apache/lenya/cms/repository/NodeListener.java
Modified:
    lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/DublinCoreTest.java
    lenya/trunk/src/impl/test/org/apache/lenya/transaction/MockUser.java
    lenya/trunk/src/java/org/apache/lenya/ac/Accreditable.java
    lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManager.java
    lenya/trunk/src/java/org/apache/lenya/ac/Item.java
    lenya/trunk/src/java/org/apache/lenya/ac/ItemManager.java
    lenya/trunk/src/java/org/apache/lenya/ac/User.java
    lenya/trunk/src/java/org/apache/lenya/cms/observation/DocumentEvent.java
    lenya/trunk/src/java/org/apache/lenya/cms/observation/ObservationRegistry.java
    lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEvent.java
    lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java
    lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryListener.java
    lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java
    lenya/trunk/src/java/org/apache/lenya/cms/repository/Session.java
    lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java
    lenya/trunk/src/java/org/apache/lenya/cms/workflow/DocumentWorkflowable.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/cifs/CIFSUser.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroup.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroupManager.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRange.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRangeManager.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileItemManager.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRole.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRoleManager.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUser.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUserManager.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroup.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractItem.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractRole.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractUser.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/file/FileGroupTest.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/file/FileRoleTest.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/file/FileUserTest.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/GroupManagerTest.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/RoleManagerTest.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/UserManagerTest.java
    lenya/trunk/src/modules-core/administration/java/src/org/apache/lenya/cms/ac/usecases/AddUser.java
    lenya/trunk/src/modules-core/janitor/java/src/org/apache/lenya/cms/janitor/ContentJanitor.java
    lenya/trunk/src/modules-core/ldap/java/src/org/apache/lenya/ac/ldap/LDAPUser.java
    lenya/trunk/src/modules-core/ldap/java/test/org/apache/lenya/ac/ldap/AbstractLDAPUserTest.java
    lenya/trunk/src/modules-core/observation-impl/java/src/org/apache/lenya/cms/observation/ObservationManager.java
    lenya/trunk/src/modules-core/observation-impl/java/test/org/apache/lenya/cms/observation/TestListener.java
    lenya/trunk/src/modules/contactform/java/src/org/apache/lenya/cms/contactform/ContactForm.java
    lenya/trunk/src/modules/export/java/src/org/apache/lenya/cms/export/Importer.java
    lenya/trunk/src/modules/lucene/java/src/org/apache/lenya/cms/lucene/IndexUpdaterImpl.java
    lenya/trunk/src/modules/notification/config/cocoon-xconf/notifier.xconf
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/notification/AbstractNotifier.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/notification/EmailNotifier.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/notification/Message.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/notification/NotificationUtil.java
    lenya/trunk/src/modules/notification/java/src/org/apache/lenya/notification/Notifier.java
    lenya/trunk/src/modules/notification/module.xml
    lenya/trunk/src/modules/repository/java/src/org/apache/lenya/cms/repo/adapter/RepoNode.java
    lenya/trunk/src/modules/sourcerepository/java/src/org/apache/lenya/cms/repository/SourceNode.java
    lenya/trunk/src/pubs/default/config/ac/usecase-policies.xml
    lenya/trunk/src/pubs/default/config/publication.xconf
    lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
    lenya/trunk/src/webapp/lenya/resources/css/tables.css

Modified: lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/DublinCoreTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/DublinCoreTest.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/DublinCoreTest.java (original)
+++ lenya/trunk/src/impl/test/org/apache/lenya/cms/publication/DublinCoreTest.java Mon Dec 11 09:41:23 2006
@@ -35,7 +35,6 @@
     private static final String AREA = "authoring";
     private static final String PATH = "/tutorial";
     private static final String LANGUAGE = "de";
-    private static final String CREATOR = "test";
 
     /**
      * Test the fetching, modification and refetching of a dc core object.
@@ -52,7 +51,6 @@
         
         Publication publication = getPublication("test");
         
-        DocumentFactory map = getFactory();
         Document doc = publication.getArea(AREA).getSite().getNode(PATH).getLink(LANGUAGE).getDocument();
         
         doc.getRepositoryNode().lock();
@@ -61,8 +59,13 @@
         String title = dcCore.getFirstValue(DublinCore.ELEMENT_TITLE);
         String subject = dcCore.getFirstValue(DublinCore.ELEMENT_SUBJECT);
         String creator = dcCore.getFirstValue(DublinCore.ELEMENT_CREATOR);
+        
+        if (creator == null) {
+            creator = "test";
+        }
 
-        dcCore.setValue(DublinCore.ELEMENT_CREATOR, CREATOR);
+        String newCreator = creator + "-test";
+        dcCore.setValue(DublinCore.ELEMENT_CREATOR, newCreator);
 
         Document doc2 = publication.getArea(AREA).getSite().getNode(PATH).getLink(LANGUAGE).getDocument();
 
@@ -70,7 +73,7 @@
         assertEquals(title, dcCore2.getFirstValue(DublinCore.ELEMENT_TITLE));
         assertEquals(subject, dcCore2.getFirstValue(DublinCore.ELEMENT_SUBJECT));
         assertFalse(creator.equals(dcCore2.getFirstValue(DublinCore.ELEMENT_CREATOR)));
-        assertEquals(CREATOR, dcCore2.getFirstValue(DublinCore.ELEMENT_CREATOR));
+        assertEquals(newCreator, dcCore2.getFirstValue(DublinCore.ELEMENT_CREATOR));
         
         doc.getRepositoryNode().unlock();
     }

Modified: lenya/trunk/src/impl/test/org/apache/lenya/transaction/MockUser.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/lenya/transaction/MockUser.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/impl/test/org/apache/lenya/transaction/MockUser.java (original)
+++ lenya/trunk/src/impl/test/org/apache/lenya/transaction/MockUser.java Mon Dec 11 09:41:23 2006
@@ -24,7 +24,9 @@
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Accreditable;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Group;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.User;
 
 public class MockUser implements User {
@@ -147,6 +149,16 @@
     public void removedFromGroup(Group group) {
         // TODO Auto-generated method stub
         
+    }
+
+    public AccreditableManager getAccreditableManager() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ItemManager getItemManager() {
+        // TODO Auto-generated method stub
+        return null;
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/ac/Accreditable.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/ac/Accreditable.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/ac/Accreditable.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/ac/Accreditable.java Mon Dec 11 09:41:23 2006
@@ -32,4 +32,5 @@
      * @return An array of accreditables.
      */
     Accreditable[] getAccreditables();
+    
 }

Modified: lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/ac/AccreditableManager.java Mon Dec 11 09:41:23 2006
@@ -71,5 +71,11 @@
      * @param listener An item manager listener.
      */
     void removeItemManagerListener(ItemManagerListener listener);
+    
+    /**
+     * @return A source URI to store configuration sources. This URI
+     * must point to a collection.
+     */
+    String getConfigurationCollectionUri();
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/ac/Item.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/ac/Item.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/ac/Item.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/ac/Item.java Mon Dec 11 09:41:23 2006
@@ -63,16 +63,15 @@
     void setDescription(String description);
     
     /**
-     * Sets the configuration directory of this item.
-     * @param configurationDirectory The configuration directory.
-     */
-    void setConfigurationDirectory(File configurationDirectory);
-
-    /**
      * Configures this item.
      * @param configuration The configuration.
      * @throws ConfigurationException when something went wrong.
      */
     void configure(Configuration configuration) throws ConfigurationException;
     
+    /**
+     * @return The item manager this item belongs to.
+     */
+    ItemManager getItemManager();
+
 }

Modified: lenya/trunk/src/java/org/apache/lenya/ac/ItemManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/ac/ItemManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/ac/ItemManager.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/ac/ItemManager.java Mon Dec 11 09:41:23 2006
@@ -35,5 +35,10 @@
      * @param listener The listener to remove.
      */
     void removeItemManagerListener(ItemManagerListener listener);
+
+    /**
+     * @return The accreditable manager this item manager belongs to.
+     */
+    AccreditableManager getAccreditableManager();
     
 }

Modified: lenya/trunk/src/java/org/apache/lenya/ac/User.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/ac/User.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/ac/User.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/ac/User.java Mon Dec 11 09:41:23 2006
@@ -112,4 +112,8 @@
      */
     boolean authenticate(String password);
     
+    /**
+     * @return The accreditable manager this accreditable belongs to.
+     */
+    AccreditableManager getAccreditableManager();
 }

Added: lenya/trunk/src/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java?view=auto&rev=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java Mon Dec 11 09:41:23 2006
@@ -0,0 +1,55 @@
+/*
+ * 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.lenya.cms.observation;
+
+import org.apache.avalon.framework.activity.Startable;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.thread.ThreadSafe;
+
+/**
+ * Abstract repository listener implementation which registeres with the observation
+ * registry at startup.
+ */
+public abstract class AbstractRepositoryListener extends AbstractLogEnabled implements Serviceable,
+        Startable, ThreadSafe, RepositoryListener {
+    
+    public void start() throws Exception {
+        ObservationRegistry registry = null;
+        try {
+            registry = (ObservationRegistry) this.manager.lookup(ObservationRegistry.ROLE);
+            registry.registerListener(this);
+        } finally {
+            if (registry != null) {
+                this.manager.release(registry);
+            }
+        }
+    }
+
+    public void stop() throws Exception {
+    }
+
+    protected ServiceManager manager;
+
+    public void service(ServiceManager manager) throws ServiceException {
+        this.manager = manager;
+    }
+
+}

Modified: lenya/trunk/src/java/org/apache/lenya/cms/observation/DocumentEvent.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/observation/DocumentEvent.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/observation/DocumentEvent.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/observation/DocumentEvent.java Mon Dec 11 09:41:23 2006
@@ -31,6 +31,16 @@
     private String language;
     private ResourceType resourceType;
 
+
+    /**
+     * The change action.
+     */
+    public static final Object CHANGED = "changed";
+    /**
+     * The removal action.
+     */
+    public static final Object REMOVED = "removed";
+
     /**
      * Ctor.
      * @param session The session.
@@ -39,10 +49,12 @@
      * @param uuid The UUID.
      * @param language The language.
      * @param resourceType The resource type.
+     * @param descriptor More information about the event, for example
+     *        {@link #CHANGED} or {@link #REMOVED}.
      */
     public DocumentEvent(Session session, String pubId, String area, String uuid, String language,
-            ResourceType resourceType) {
-        super(session);
+            ResourceType resourceType, Object descriptor) {
+        super(session, descriptor);
         this.pubId = pubId;
         this.area = area;
         this.uuid = uuid;

Modified: lenya/trunk/src/java/org/apache/lenya/cms/observation/ObservationRegistry.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/observation/ObservationRegistry.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/observation/ObservationRegistry.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/observation/ObservationRegistry.java Mon Dec 11 09:41:23 2006
@@ -18,12 +18,11 @@
 package org.apache.lenya.cms.observation;
 
 import org.apache.lenya.cms.publication.Document;
-import org.apache.lenya.cms.repository.NodeListener;
 
 /**
  * Observation registry.
  */
-public interface ObservationRegistry extends NodeListener {
+public interface ObservationRegistry extends RepositoryListener {
 
     /**
      * The Avalon service role.

Modified: lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEvent.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEvent.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEvent.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEvent.java Mon Dec 11 09:41:23 2006
@@ -18,6 +18,7 @@
 package org.apache.lenya.cms.observation;
 
 import org.apache.lenya.cms.repository.Session;
+import org.apache.lenya.util.Assert;
 
 /**
  * A repository event provides additional information if a document was added, changed, or removed.
@@ -25,13 +26,20 @@
 public class RepositoryEvent {
 
     private Session session;
+    private Object descriptor = null;
 
     /**
      * Ctor.
      * @param session The session.
+     * @param descriptor More information about the event.
      */
-    public RepositoryEvent(Session session) {
+    public RepositoryEvent(Session session, Object descriptor) {
+        
+        Assert.notNull("session", session);
         this.session = session;
+        
+        Assert.notNull("descriptor", descriptor);
+        this.descriptor = descriptor;
     }
     
     /**
@@ -39,6 +47,13 @@
      */
     public Session getSession() {
         return this.session;
+    }
+
+    /**
+     * @return The descriptor.
+     */
+    public Object getDescriptor() {
+        return this.descriptor;
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java Mon Dec 11 09:41:23 2006
@@ -25,6 +25,7 @@
 import org.apache.lenya.cms.publication.DocumentUtil;
 import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.repository.Node;
+import org.apache.lenya.cms.repository.Session;
 
 /**
  * Factory to create repository events.
@@ -34,25 +35,55 @@
     /**
      * Creates a repository event for a node.
      * @param manager The service manager.
+     * @param session The session.
+     * @param logger The logger.
+     * @param descriptor The descriptor.
+     * @return An event.
+     */
+    public static final RepositoryEvent createEvent(ServiceManager manager,
+            Session session, Logger logger, Object descriptor) {
+            return new RepositoryEvent(session, descriptor);
+    }
+
+    /**
+     * Creates a repository event for a node.
+     * @param manager The service manager.
+     * @param doc The document.
+     * @param logger The logger.
+     * @param descriptor The descriptor.
+     * @return An event.
+     */
+    public static final RepositoryEvent createEvent(ServiceManager manager, Document doc,
+            Logger logger, Object descriptor) {
+        try {
+            return new DocumentEvent(doc.getRepositoryNode().getSession(), doc.getPublication()
+                    .getId(), doc.getArea(), doc.getUUID(), doc.getLanguage(), doc
+                    .getResourceType(), descriptor);
+        } catch (DocumentException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    /**
+     * Creates a repository event for a node.
+     * @param manager The service manager.
      * @param node The node.
      * @param logger The logger.
+     * @param descriptor The descriptor.
      * @return An event.
      */
-    public static final RepositoryEvent createEvent(ServiceManager manager, Node node, Logger logger) {
+    public static final RepositoryEvent createEvent(ServiceManager manager, Node node,
+            Logger logger, Object descriptor) {
         RepositoryEvent event;
         Document doc = null;
         if (!node.getSourceURI().endsWith("meta")) {
             doc = getDocument(manager, node, logger);
         }
         if (doc != null) {
-            try {
-                event = new DocumentEvent(node.getSession(), doc.getPublication().getId(), doc
-                        .getArea(), doc.getUUID(), doc.getLanguage(), doc.getResourceType());
-            } catch (DocumentException e) {
-                throw new RuntimeException(e);
-            }
+            event = createEvent(manager, doc, logger, descriptor);
         } else {
-            event = new RepositoryEvent(node.getSession());
+            event = new RepositoryEvent(node.getSession(), descriptor);
         }
         return event;
     }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryListener.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryListener.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryListener.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/observation/RepositoryListener.java Mon Dec 11 09:41:23 2006
@@ -23,15 +23,9 @@
 public interface RepositoryListener {
 
     /**
-     * Called when a document was changed.
+     * Called when an event was fired.
      * @param event The event.
      */
-    void documentChanged(DocumentEvent event);
+    void eventFired(RepositoryEvent event);
 
-    /**
-     * Called when a document was removed.
-     * @param event The event.
-     */
-    void documentRemoved(DocumentEvent event);
-    
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/Node.java Mon Dec 11 09:41:23 2006
@@ -134,8 +134,4 @@
      */
     History getHistory();
     
-    /**
-     * @return The event to use when this node is added/changed/removed.
-     */
-    RepositoryEvent getEvent();
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/Session.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/Session.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/Session.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/Session.java Mon Dec 11 09:41:23 2006
@@ -18,6 +18,8 @@
 package org.apache.lenya.cms.repository;
 
 import org.apache.lenya.ac.Identity;
+import org.apache.lenya.cms.observation.RepositoryEvent;
+import org.apache.lenya.cms.observation.RepositoryListener;
 import org.apache.lenya.transaction.UnitOfWork;
 
 /**
@@ -55,13 +57,18 @@
      * @param listener The listener to add.
      * @throws RepositoryException if the listener is already registered.
      */
-    void addListener(NodeListener listener) throws RepositoryException;
+    void addListener(RepositoryListener listener) throws RepositoryException;
     
     /**
      * Checks if a listener is registered.
      * @param listener The listener.
      * @return A boolean value.
      */
-    boolean isListenerRegistered(NodeListener listener);
+    boolean isListenerRegistered(RepositoryListener listener);
+    
+    /**
+     * @param event The event to add to the queue.
+     */
+    void enqueueEvent(RepositoryEvent event);
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java Mon Dec 11 09:41:23 2006
@@ -17,8 +17,10 @@
  */
 package org.apache.lenya.cms.repository;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.avalon.framework.container.ContainerUtil;
@@ -28,6 +30,7 @@
 import org.apache.lenya.ac.Identity;
 import org.apache.lenya.cms.observation.ObservationRegistry;
 import org.apache.lenya.cms.observation.RepositoryEvent;
+import org.apache.lenya.cms.observation.RepositoryListener;
 import org.apache.lenya.transaction.IdentityMap;
 import org.apache.lenya.transaction.Lock;
 import org.apache.lenya.transaction.Lockable;
@@ -93,40 +96,19 @@
      */
     public void commit() throws RepositoryException {
         
-        Set modifiedEvents = createEvents(this.modifiedObjects);
-        Set removedEvents = createEvents(this.removedObjects);
-        
         try {
             getUnitOfWork().commit();
         } catch (TransactionException e) {
             throw new RepositoryException(e);
         }
         
-        for (Iterator i = modifiedEvents.iterator(); i.hasNext(); ) {
-            RepositoryEvent event = (RepositoryEvent) i.next();
-            for (Iterator l = this.listeners.iterator(); l.hasNext(); ) {
-                NodeListener listener = (NodeListener) l.next();
-                listener.nodeChanged(event);
-            }
-        }
-        for (Iterator i = removedEvents.iterator(); i.hasNext(); ) {
+        for (Iterator i = this.events.iterator(); i.hasNext(); ) {
             RepositoryEvent event = (RepositoryEvent) i.next();
             for (Iterator l = this.listeners.iterator(); l.hasNext(); ) {
-                NodeListener listener = (NodeListener) l.next();
-                listener.nodeRemoved(event);
-            }
-        }
-    }
-
-    protected Set createEvents(Set transactionables) {
-        Set events = new HashSet();
-        for (Iterator i = transactionables.iterator(); i.hasNext(); ) {
-            Transactionable t = (Transactionable) i.next();
-            if (t instanceof Node) {
-                events.add(((Node) t).getEvent());
+                RepositoryListener listener = (RepositoryListener) l.next();
+                listener.eventFired(event);
             }
         }
-        return events;
     }
 
     /**
@@ -189,7 +171,7 @@
 
     private Set listeners = new HashSet();
 
-    public void addListener(NodeListener listener) throws RepositoryException {
+    public void addListener(RepositoryListener listener) throws RepositoryException {
         if (this.listeners.contains(listener)) {
             throw new RepositoryException("The listener [" + listener
                     + "] is already registered for node [" + this + "]!");
@@ -197,8 +179,15 @@
         this.listeners.add(listener);
     }
 
-    public boolean isListenerRegistered(NodeListener listener) {
+    public boolean isListenerRegistered(RepositoryListener listener) {
         return this.listeners.contains(listener);
+    }
+
+    private List events = new ArrayList();
+    
+    public void enqueueEvent(RepositoryEvent event) {
+        Assert.isTrue("event belongs to session", event.getSession() == this);
+        this.events.add(event);
     }
 
 }

Modified: lenya/trunk/src/java/org/apache/lenya/cms/workflow/DocumentWorkflowable.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/workflow/DocumentWorkflowable.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/workflow/DocumentWorkflowable.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/workflow/DocumentWorkflowable.java Mon Dec 11 09:41:23 2006
@@ -33,6 +33,8 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.lenya.ac.Identity;
 import org.apache.lenya.cms.metadata.MetaData;
+import org.apache.lenya.cms.observation.RepositoryEvent;
+import org.apache.lenya.cms.observation.RepositoryEventFactory;
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.ResourceType;
 import org.apache.lenya.cms.repository.Session;
@@ -173,6 +175,11 @@
 
         String string = number + " " + encodeVersion(workflow, version);
         addToMetaData(string);
+        
+        WorkflowEventDescriptor descriptor = new WorkflowEventDescriptor(version);
+        RepositoryEvent event = RepositoryEventFactory.createEvent(
+                this.manager, getDocument(), getLogger(), descriptor);
+        getDocument().getRepositoryNode().getSession().enqueueEvent(event);
     }
 
     protected void addToMetaData(String versionString) {

Added: lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowEventDescriptor.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowEventDescriptor.java?view=auto&rev=485769
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowEventDescriptor.java (added)
+++ lenya/trunk/src/java/org/apache/lenya/cms/workflow/WorkflowEventDescriptor.java Mon Dec 11 09:41:23 2006
@@ -0,0 +1,45 @@
+/*
+ * 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.lenya.cms.workflow;
+
+import org.apache.lenya.util.Assert;
+import org.apache.lenya.workflow.Version;
+
+/**
+ * Descriptor for workflow events.
+ */
+public class WorkflowEventDescriptor {
+
+    private Version version;
+
+    /**
+     * @param version The version.
+     */
+    public WorkflowEventDescriptor(Version version) {
+        Assert.notNull("version", version);
+        this.version = version;
+    }
+    
+    /**
+     * @return The version.
+     */
+    public Version getVersion() {
+        return this.version;
+    }
+    
+}

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/cifs/CIFSUser.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/cifs/CIFSUser.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/cifs/CIFSUser.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/cifs/CIFSUser.java Mon Dec 11 09:41:23 2006
@@ -22,10 +22,12 @@
 import java.io.IOException;
 import java.util.Properties;
 
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.file.FileUser;
 
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.Logger;
 
 import jcifs.smb.NtlmPasswordAuthentication;
 import jcifs.smb.SmbAuthException;
@@ -42,11 +44,11 @@
 public class CIFSUser extends FileUser {
 
     /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
+     * 
+     */
+    private static final long serialVersionUID = 1L;
 
-	private static Properties defaultProperties = null;
+    private static Properties defaultProperties = null;
 
     // The name for the cifs.properties domain controller lookup
     private static final String DOMAIN_CONTROLLER = "domain-controller";
@@ -54,25 +56,28 @@
     // The name for the cifs.properties domain name lookup
     private static final String DOMAIN = "domain";
 
-
     /**
-    * Creates a new CIFSUser object.
-    */
-    public CIFSUser() {
+     * Creates a new CIFSUser object.
+     * @param itemManager The item manager.
+     * @param logger The logger.
+     */
+    public CIFSUser(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
 
     }
 
     /**
-    * Create a CIFSUser
-     * @param configurationDirectory The configuration directory
+     * Create a CIFSUser
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id The user ID.
      * @param fullName The user's name.
      * @param email The e-mail address.
      * @param password The password.
-    */
-    public CIFSUser(File configurationDirectory, String id,
-                    String fullName,String email,String password) {
-        super(configurationDirectory, id, fullName, email, password);
+     */
+    public CIFSUser(ItemManager itemManager, Logger logger, String id, String fullName,
+            String email, String password) {
+        super(itemManager, logger, id, fullName, email, password);
 
     }
 
@@ -81,17 +86,18 @@
      * @throws ConfigurationException when something went wrong.
      */
     protected void initialize() throws ConfigurationException {
-       try {
+        try {
             readProperties(super.getConfigurationDirectory());
         } catch (final IOException ioe) {
-            throw new ConfigurationException("Reading cifs.properties file in ["+
-                        super.getConfigurationDirectory()+"] failed", ioe);
+            throw new ConfigurationException("Reading cifs.properties file in ["
+                    + super.getConfigurationDirectory() + "] failed", ioe);
         }
     }
 
     /**
      * Create a new CIFSUser from a configuration
-     * @param config the <code>Configuration</code> specifying the user details
+     * @param config the <code>Configuration</code> specifying the user
+     *        details
      * @throws ConfigurationException if the user could not be instantiated
      */
     public void configure(Configuration config) throws ConfigurationException {
@@ -100,37 +106,32 @@
     }
 
     /**
-     * Authenticate a user. This is done by NTDomain Authentication
-     *  using jcifs
+     * Authenticate a user. This is done by NTDomain Authentication using jcifs
      * @param password to authenticate with
      * @return true if the given password matches the password for this user
      */
     public boolean authenticate(String password) {
 
-        System.setProperty("jcifs.smb.client.disablePlainTextPasswords",
-                            "true" );
+        System.setProperty("jcifs.smb.client.disablePlainTextPasswords", "true");
         try {
-            UniAddress mydomaincontroller = UniAddress.getByName(
-                                                getDomainController());
-            NtlmPasswordAuthentication mycreds = new
-                                NtlmPasswordAuthentication(
-                                        getDomainName(),
-                                        super.getId(),
-                                        password);
-            SmbSession.logon( mydomaincontroller, mycreds );
+            UniAddress mydomaincontroller = UniAddress.getByName(getDomainController());
+            NtlmPasswordAuthentication mycreds = new NtlmPasswordAuthentication(getDomainName(),
+                    super.getId(), password);
+            SmbSession.logon(mydomaincontroller, mycreds);
             // SUCCESS
             return true;
-        } catch( final SmbAuthException sae ) {
+        } catch (final SmbAuthException sae) {
             // AUTHENTICATION FAILURE
-			if (getLogger().isInfoEnabled()) {
-	            getLogger().info("Authentication against [" + getDomainController() +"]" +
-                         " failed for " + getDomainName() + "/" +  super.getId());
+            if (getLogger().isInfoEnabled()) {
+                getLogger().info(
+                        "Authentication against [" + getDomainController() + "]" + " failed for "
+                                + getDomainName() + "/" + super.getId());
             }
             return false;
-        } catch(final SmbException se ) {
+        } catch (final SmbException se) {
             // NETWORK PROBLEMS?
-			return false;
-        } catch(final  UnknownHostException unho) {
+            return false;
+        } catch (final UnknownHostException unho) {
             return false;
         }
 
@@ -165,16 +166,16 @@
      * Get the domain controller we want to authenticate against
      * @return the name of the domain controller
      */
-     private String getDomainController() {
-         return (String)defaultProperties.get(DOMAIN_CONTROLLER);
-     }
+    private String getDomainController() {
+        return (String) defaultProperties.get(DOMAIN_CONTROLLER);
+    }
 
     /**
      * Get the domain name
      * @return the domain name
      */
-     private String getDomainName() {
-         return (String)defaultProperties.get(DOMAIN);
-     }
+    private String getDomainName() {
+        return (String) defaultProperties.get(DOMAIN);
+    }
 
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileAccreditableManager.java Mon Dec 11 09:41:23 2006
@@ -229,7 +229,7 @@
      * @see org.apache.lenya.ac.impl.AbstractAccreditableManager#initializeGroupManager()
      */
     protected GroupManager initializeGroupManager() throws AccessControlException {
-        FileGroupManager _manager = FileGroupManager.instance(getConfigurationDirectory(), getLogger());
+        FileGroupManager _manager = FileGroupManager.instance(this, getConfigurationDirectory(), getLogger());
         return _manager;
     }
 
@@ -237,7 +237,7 @@
      * @see org.apache.lenya.ac.impl.AbstractAccreditableManager#initializeIPRangeManager()
      */
     protected IPRangeManager initializeIPRangeManager() throws AccessControlException {
-        FileIPRangeManager _manager = FileIPRangeManager.instance(getConfigurationDirectory(), getLogger());
+        FileIPRangeManager _manager = FileIPRangeManager.instance(this, getConfigurationDirectory(), getLogger());
         return _manager;
     }
 
@@ -245,7 +245,7 @@
      * @see org.apache.lenya.ac.impl.AbstractAccreditableManager#initializeRoleManager()
      */
     protected RoleManager initializeRoleManager() throws AccessControlException {
-        FileRoleManager _manager = FileRoleManager.instance(getConfigurationDirectory(), getLogger());
+        FileRoleManager _manager = FileRoleManager.instance(this, getConfigurationDirectory(), getLogger());
         return _manager;
     }
 
@@ -253,9 +253,17 @@
      * @see org.apache.lenya.ac.impl.AbstractAccreditableManager#initializeUserManager()
      */
     protected UserManager initializeUserManager() throws AccessControlException {
-        FileUserManager _manager = FileUserManager.instance(getConfigurationDirectory(),
+        FileUserManager _manager = FileUserManager.instance(this, getConfigurationDirectory(),
                 getUserTypes(), getLogger());
         return _manager;
+    }
+
+    public String getConfigurationCollectionUri() {
+        try {
+            return "file://" + getConfigurationDirectory().getCanonicalPath();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroup.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroup.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroup.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroup.java Mon Dec 11 09:41:23 2006
@@ -26,8 +26,10 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Item;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.impl.AbstractGroup;
 import org.apache.lenya.ac.impl.ItemConfiguration;
 
@@ -46,19 +48,23 @@
 
     /**
      * Creates a new FileGroup object.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public FileGroup() {
-	    // do nothing
+    public FileGroup(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
     }
 
     /**
      * Create a new instance of <code>FileGroup</code>
-     * @param _configurationDirectory to which the group will be attached to
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id the ID of the group
      */
-    public FileGroup(File _configurationDirectory, String id) {
-        super(id);
-        setConfigurationDirectory(_configurationDirectory);
+    public FileGroup(ItemManager itemManager, Logger logger, String id) {
+        super(itemManager, logger, id);
+        FileItemManager fileItemManager = (FileItemManager) itemManager;
+        setConfigurationDirectory(fileItemManager.getConfigurationDirectory());
     }
 
     /**
@@ -122,10 +128,7 @@
         return this.configurationDirectory;
     }
 
-    /**
-     * @see org.apache.lenya.ac.Item#setConfigurationDirectory(java.io.File)
-     */
-    public void setConfigurationDirectory(File _configurationDirectory) {
+    protected void setConfigurationDirectory(File _configurationDirectory) {
         assert (_configurationDirectory != null) && _configurationDirectory.isDirectory();
         this.configurationDirectory = _configurationDirectory;
     }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroupManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroupManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroupManager.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileGroupManager.java Mon Dec 11 09:41:23 2006
@@ -26,6 +26,7 @@
 
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.GroupManager;
 import org.apache.lenya.ac.Item;
@@ -39,26 +40,27 @@
 
     /**
      * Ctor.
+     * @param mgr The accreditable manager.
      */
-    private FileGroupManager() {
-        super();
+    private FileGroupManager(AccreditableManager mgr) {
+        super(mgr);
     }
-    
+
     /**
-     * Return the <code>GroupManager</code> for the given publication.
-     * The <code>GroupManager</code> is a singleton.
-     *
+     * Return the <code>GroupManager</code> for the given publication. The
+     * <code>GroupManager</code> is a singleton.
+     * @param mgr The accreditable manager.
      * @param configurationDirectory for which the GroupManager is requested
      * @param logger The logger.
      * @return a <code>GroupManager</code>
      * @throws AccessControlException if no GroupManager could be instanciated
      */
-    public static FileGroupManager instance(File configurationDirectory, Logger logger)
-        throws AccessControlException {
+    public static FileGroupManager instance(AccreditableManager mgr, File configurationDirectory,
+            Logger logger) throws AccessControlException {
         assert configurationDirectory != null;
 
         if (!instances.containsKey(configurationDirectory)) {
-            FileGroupManager manager = new FileGroupManager();
+            FileGroupManager manager = new FileGroupManager(mgr);
             manager.enableLogging(logger);
             manager.configure(configurationDirectory);
             instances.put(configurationDirectory, manager);
@@ -69,7 +71,7 @@
 
     /**
      * Get all groups
-     *
+     * 
      * @return an array of groups.
      */
     public Group[] getGroups() {
@@ -85,14 +87,14 @@
      * @see org.apache.lenya.ac.GroupManager#add(java.lang.String)
      */
     public Group add(String id) throws AccessControlException {
-        Group group = new FileGroup(getConfigurationDirectory(), id);
+        Group group = new FileGroup(this, getLogger(), id);
         super.add(group);
         return group;
     }
 
     /**
      * Remove a group from this manager
-     *
+     * 
      * @param group the group to be removed
      * @throws AccessControlException when the notification failed.
      */
@@ -102,16 +104,17 @@
 
     /**
      * Get the group with the given group name.
-     *
+     * 
      * @param groupId the id of the requested group
-     * @return a <code>Group</code> or null if there is no group with the given name
+     * @return a <code>Group</code> or null if there is no group with the
+     *         given name
      */
     public Group getGroup(String groupId) {
         return (Group) getItem(groupId);
     }
 
     protected static final String SUFFIX = ".gml";
-    
+
     /**
      * @see org.apache.lenya.ac.file.FileItemManager#getSuffix()
      */

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRange.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRange.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRange.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRange.java Mon Dec 11 09:41:23 2006
@@ -29,7 +29,9 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.Machine;
 import org.apache.lenya.ac.impl.AbstractIPRange;
 import org.apache.lenya.ac.impl.ItemConfiguration;
@@ -75,19 +77,23 @@
 
     /**
      * Ctor.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public FileIPRange() {
-	    // do nothing
-   }
+    public FileIPRange(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
+    }
 
     /**
      * Ctor.
-     * @param configurationDirectory The configuration directory.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id The IP range ID.
      */
-    public FileIPRange(File configurationDirectory, String id) {
-        super(id);
-        setConfigurationDirectory(configurationDirectory);
+    public FileIPRange(ItemManager itemManager, Logger logger, String id) {
+        super(itemManager, logger, id);
+        FileItemManager fileItemManager = (FileItemManager) itemManager;
+        setConfigurationDirectory(fileItemManager.getConfigurationDirectory());
     }
 
     /**

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRangeManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRangeManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRangeManager.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileIPRangeManager.java Mon Dec 11 09:41:23 2006
@@ -26,6 +26,7 @@
 
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.IPRange;
 import org.apache.lenya.ac.IPRangeManager;
 import org.apache.lenya.ac.Item;
@@ -37,9 +38,10 @@
 
     /**
      * Ctor.
+     * @param mgr The accreditable manager.
      */
-    private FileIPRangeManager() {
-	    // do nothing
+    private FileIPRangeManager(AccreditableManager mgr) {
+        super(mgr);
     }
 
     protected static final String SUFFIX = ".ipml";
@@ -55,12 +57,13 @@
 
     /**
      * Return an instance of FileIPRangeManager
+     * @param mgr The accreditable manager.
      * @param configurationDirectory a directory
      * @param logger The logger.
      * @return an <code>IPRangeManager</code> value
      * @exception AccessControlException if an error occurs
      */
-    public static FileIPRangeManager instance(File configurationDirectory, Logger logger)
+    public static FileIPRangeManager instance(AccreditableManager mgr, File configurationDirectory, Logger logger)
             throws AccessControlException {
 
         assert configurationDirectory != null;
@@ -70,7 +73,7 @@
         }
 
         if (!instances.containsKey(configurationDirectory)) {
-            FileIPRangeManager manager = new FileIPRangeManager();
+            FileIPRangeManager manager = new FileIPRangeManager(mgr);
             manager.enableLogging(logger);
             manager.configure(configurationDirectory);
             instances.put(configurationDirectory, manager);
@@ -93,7 +96,7 @@
     }
 
     public IPRange add(String id) throws AccessControlException {
-        IPRange range = new FileIPRange(getConfigurationDirectory(), id);
+        IPRange range = new FileIPRange(this, getLogger(), id);
         super.add(range);
         return range;
     }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileItemManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileItemManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileItemManager.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileItemManager.java Mon Dec 11 09:41:23 2006
@@ -23,6 +23,7 @@
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
+import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -35,27 +36,34 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.Groupable;
 import org.apache.lenya.ac.Item;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.ItemManagerListener;
 import org.apache.lenya.ac.impl.ItemConfiguration;
 
 /**
- * Abstract superclass for classes that manage items loaded from configuration files.
+ * Abstract superclass for classes that manage items loaded from configuration
+ * files.
  */
-public abstract class FileItemManager extends AbstractLogEnabled {
+public abstract class FileItemManager extends AbstractLogEnabled implements ItemManager {
 
     private Map items = new HashMap();
     private File configurationDirectory;
     private DirectoryChangeNotifier notifier;
 
+    private AccreditableManager accreditableManager;
+
     /**
      * Create a new ItemManager.
+     * @param accreditableManager The {@link AccreditableManager}.
      */
-    protected FileItemManager() {
-	    // do nothing
+    protected FileItemManager(AccreditableManager accreditableManager) {
+        this.accreditableManager = accreditableManager;
     }
 
     /**
@@ -149,8 +157,10 @@
         String klass = ItemConfiguration.getItemClass(config);
         if (item == null) {
             try {
-                item = (Item) Class.forName(klass).newInstance();
-                item.enableLogging(getLogger());
+                Class[] paramTypes = { ItemManager.class, Logger.class };
+                Constructor ctor = Class.forName(klass).getConstructor(paramTypes);
+                Object[] params = { this, getLogger() };
+                item = (Item) ctor.newInstance(params);
             } catch (Exception e) {
                 String errorMsg = "Exception when trying to instanciate: " + klass
                         + " with exception: " + e.fillInStackTrace();
@@ -160,7 +170,6 @@
                 getLogger().error(errorMsg);
                 throw new AccessControlException(errorMsg, e);
             }
-            item.setConfigurationDirectory(this.configurationDirectory);
         }
 
         try {
@@ -198,7 +207,7 @@
     }
 
     protected void removeItem(File file) {
-	    // do nothing
+        // do nothing
     }
 
     /**
@@ -231,7 +240,8 @@
     /**
      * Add an Item to this manager
      * @param item to be added
-     * @throws AccessControlException when the notification threw this exception.
+     * @throws AccessControlException when the notification threw this
+     *         exception.
      */
     public void add(Item item) throws AccessControlException {
         assert item != null;
@@ -245,7 +255,8 @@
     /**
      * Remove an item from this manager
      * @param item to be removed
-     * @throws AccessControlException when the notification threw this exception.
+     * @throws AccessControlException when the notification threw this
+     *         exception.
      */
     public void remove(Item item) throws AccessControlException {
         this.items.remove(item.getId());
@@ -258,7 +269,8 @@
     /**
      * Update an item.
      * @param newItem The new version of the item.
-     * @throws AccessControlException when the notification threw this exception.
+     * @throws AccessControlException when the notification threw this
+     *         exception.
      */
     public void update(Item newItem) throws AccessControlException {
         this.items.remove(newItem.getId());
@@ -395,8 +407,8 @@
         private Set changedFiles = new HashSet();
 
         /**
-         * Checks if the directory has changed (a new file was added, a file was removed, a file has
-         * changed).
+         * Checks if the directory has changed (a new file was added, a file was
+         * removed, a file has changed).
          * @return A boolean value.
          * @throws IOException when something went wrong.
          */
@@ -422,7 +434,8 @@
                     }
 
                 } else {
-                    Long lastModifiedObject = (Long) this.canonicalPath2LastModified.get(canonicalPath);
+                    Long lastModifiedObject = (Long) this.canonicalPath2LastModified
+                            .get(canonicalPath);
                     long lastModified = lastModifiedObject.longValue();
                     if (lastModified < files[i].lastModified()) {
                         this.changedFiles.add(files[i]);
@@ -447,7 +460,8 @@
                 }
             }
 
-            return !this.addedFiles.isEmpty() || !this.removedFiles.isEmpty() || !this.changedFiles.isEmpty();
+            return !this.addedFiles.isEmpty() || !this.removedFiles.isEmpty()
+                    || !this.changedFiles.isEmpty();
         }
 
         /**
@@ -474,6 +488,10 @@
             return (File[]) this.changedFiles.toArray(new File[this.changedFiles.size()]);
         }
 
+    }
+
+    public AccreditableManager getAccreditableManager() {
+        return this.accreditableManager;
     }
 
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRole.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRole.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRole.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRole.java Mon Dec 11 09:41:23 2006
@@ -24,8 +24,10 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Item;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.impl.AbstractRole;
 import org.apache.lenya.ac.impl.ItemConfiguration;
 
@@ -37,27 +39,33 @@
 
     /**
      * Creates a new file role.
-     * @param _configurationDirectory The configuration directory.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id The role ID.
      */
-    public FileRole(File _configurationDirectory, String id) {
+    public FileRole(ItemManager itemManager, Logger logger, String id) {
+        this(itemManager, logger);
         setId(id);
-        setConfigurationDirectory(_configurationDirectory);
     }
 
     protected static final String ROLE = "role";
 
     /**
      * Creates a new FileRole object.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public FileRole() {
-	    // do nothing
+    public FileRole(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
+        FileItemManager fileItemManager = (FileItemManager) itemManager;
+        setConfigurationDirectory(fileItemManager.getConfigurationDirectory());
     }
 
     /**
      * Configure this instance of <code>FileRole</code>
      * @param config containing the role details
-     * @throws ConfigurationException if the <code>FileRole</code> could not be configured
+     * @throws ConfigurationException if the <code>FileRole</code> could not
+     *         be configured
      */
     public void configure(Configuration config) throws ConfigurationException {
         new ItemConfiguration().configure(this, config);
@@ -100,10 +108,7 @@
         return this.configurationDirectory;
     }
 
-    /**
-     * @see org.apache.lenya.ac.Item#setConfigurationDirectory(java.io.File)
-     */
-    public void setConfigurationDirectory(File file) {
+    protected void setConfigurationDirectory(File file) {
         this.configurationDirectory = file;
     }
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRoleManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRoleManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRoleManager.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileRoleManager.java Mon Dec 11 09:41:23 2006
@@ -24,6 +24,7 @@
 
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Item;
 import org.apache.lenya.ac.Role;
 import org.apache.lenya.ac.RoleManager;
@@ -39,22 +40,24 @@
     /**
      * Return the <code>RoleManager</code> for this configuration directory. The
      * <code>RoleManager</code> is a singleton.
+     * @param mgr The accreditable manager.
      */
-    protected FileRoleManager() {
-	    // do nothing
+    protected FileRoleManager(AccreditableManager mgr) {
+        super(mgr);
     }
 
     /**
      * Returns the role manager for this configuration directory.
+     * @param mgr The accreditable manager.
      * @param configurationDirectory The configuration directory.
      * @param logger The logger.
      * @return A role manager.
      * @throws AccessControlException when something went wrong.
      */
-    public static FileRoleManager instance(File configurationDirectory, Logger logger)
+    public static FileRoleManager instance(AccreditableManager mgr, File configurationDirectory, Logger logger)
             throws AccessControlException {
         if (!instances.containsKey(configurationDirectory)) {
-            FileRoleManager manager = new FileRoleManager();
+            FileRoleManager manager = new FileRoleManager(mgr);
             manager.enableLogging(logger);
             manager.configure(configurationDirectory);
             instances.put(configurationDirectory, manager);
@@ -108,5 +111,9 @@
      */
     public void remove(Role role) throws AccessControlException {
         super.remove(role);
+    }
+
+    protected Item createItem() {
+        return new FileRole(this, getLogger());
     }
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUser.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUser.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUser.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUser.java Mon Dec 11 09:41:23 2006
@@ -25,9 +25,12 @@
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Group;
+import org.apache.lenya.ac.GroupManager;
 import org.apache.lenya.ac.Item;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.impl.AbstractUser;
 import org.apache.lenya.ac.impl.ItemConfiguration;
 
@@ -38,10 +41,10 @@
 public class FileUser extends AbstractUser implements Item, Serializable {
 
     /**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	protected static final String ID = "identity";
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+    protected static final String ID = "identity";
     protected static final String EMAIL = "email";
     protected static final String MENU_LOCALE = "default-menu-locale";
     protected static final String DOCUMENT_LOCALE = "default-document-locale";
@@ -52,29 +55,36 @@
 
     /**
      * Creates a new FileUser object.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public FileUser() {
-	    // do nothing
+    public FileUser(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
+        FileItemManager fileItemManager = (FileItemManager) itemManager;
+        setConfigurationDirectory(fileItemManager.getConfigurationDirectory());
     }
 
     /**
      * Create a FileUser
-     * @param _configurationDirectory where the user will be attached to
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id the user id
      * @param fullName the full name of the user
      * @param email the users email address
      * @param password the users password
      */
-    public FileUser(File _configurationDirectory, String id, String fullName, String email,
-            String password) {
-        super(id, fullName, email, password);
-        setConfigurationDirectory(_configurationDirectory);
+    public FileUser(ItemManager itemManager, Logger logger, String id, String fullName,
+            String email, String password) {
+        super(itemManager, logger, id, fullName, email, password);
+        FileItemManager fileItemManager = (FileItemManager) itemManager;
+        setConfigurationDirectory(fileItemManager.getConfigurationDirectory());
     }
 
     /**
      * Configure this FileUser.
      * @param config where the user details are specified
-     * @throws ConfigurationException if the necessary details aren't specified in the config
+     * @throws ConfigurationException if the necessary details aren't specified
+     *         in the config
      */
     public void configure(Configuration config) throws ConfigurationException {
         new ItemConfiguration().configure(this, config);
@@ -89,14 +99,11 @@
         if (groups.length == 1) {
             groups = groups[0].getChildren(GROUP);
 
-            FileGroupManager manager = null;
-
+            GroupManager manager;
             try {
-                manager = FileGroupManager.instance(this.configurationDirectory, getLogger());
+                manager = getAccreditableManager().getGroupManager();
             } catch (AccessControlException e) {
-                throw new ConfigurationException(
-                        "Exception when trying to fetch GroupManager for directory: ["
-                                + this.configurationDirectory + "]", e);
+                throw new ConfigurationException("configuration failed: ", e);
             }
 
             for (int i = 0; i < groups.length; i++) {
@@ -120,7 +127,8 @@
     }
 
     /**
-     * Create a configuration from the current user details. Can be used for saving.
+     * Create a configuration from the current user details. Can be used for
+     * saving.
      * @return a <code>Configuration</code>
      */
     protected Configuration createConfiguration() {
@@ -143,7 +151,7 @@
         child = new DefaultConfiguration(DOCUMENT_LOCALE);
         child.setValue(getDefaultDocumentLocale());
         config.addChild(child);
-        
+
         // add password node
         child = new DefaultConfiguration(PASSWORD);
         child.setValue(getEncryptedPassword());
@@ -207,10 +215,7 @@
         return this.configurationDirectory;
     }
 
-    /**
-     * @see org.apache.lenya.ac.Item#setConfigurationDirectory(java.io.File)
-     */
-    public void setConfigurationDirectory(File _configurationDirectory) {
+    protected void setConfigurationDirectory(File _configurationDirectory) {
         assert (_configurationDirectory != null) && _configurationDirectory.isDirectory();
         this.configurationDirectory = _configurationDirectory;
     }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUserManager.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUserManager.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUserManager.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/file/FileUserManager.java Mon Dec 11 09:41:23 2006
@@ -27,6 +27,7 @@
 
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Item;
 import org.apache.lenya.ac.User;
 import org.apache.lenya.ac.UserManager;
@@ -44,24 +45,27 @@
     /**
      * Create a UserManager
      * 
+     * @param mgr The accreditable manager.
      * @param _userTypes The supported user types.
      * @throws AccessControlException if the UserManager could not be instantiated.
      */
-    private FileUserManager(UserType[] _userTypes)
+    private FileUserManager(AccreditableManager mgr, UserType[] _userTypes)
             throws AccessControlException {
+        super(mgr);
         this.userTypes = new HashSet(Arrays.asList(_userTypes));
     }
 
     /**
      * Describe <code>instance</code> method here.
      * 
+     * @param mgr The accreditable manager.
      * @param configurationDirectory a directory
      * @param userTypes The supported user types.
      * @param logger The logger.
      * @return an <code>UserManager</code> value
      * @exception AccessControlException if an error occurs
      */
-    public static FileUserManager instance(File configurationDirectory, UserType[] userTypes, Logger logger)
+    public static FileUserManager instance(AccreditableManager mgr, File configurationDirectory, UserType[] userTypes, Logger logger)
             throws AccessControlException {
 
         assert configurationDirectory != null;
@@ -71,7 +75,7 @@
         }
 
         if (!instances.containsKey(configurationDirectory)) {
-            FileUserManager manager = new FileUserManager(userTypes);
+            FileUserManager manager = new FileUserManager(mgr, userTypes);
             manager.enableLogging(logger);
             manager.configure(configurationDirectory);
             instances.put(configurationDirectory, manager);

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroup.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroup.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroup.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroup.java Mon Dec 11 09:41:23 2006
@@ -23,10 +23,12 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Accreditable;
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.Groupable;
+import org.apache.lenya.ac.ItemManager;
 
 
 /**
@@ -36,16 +38,21 @@
     
     /**
      * Creates a new group.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public AbstractGroup() {
-	    // do nothing
+    public AbstractGroup(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
     }
 
     /**
      * Creates a new group.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id The group ID.
      */
-    public AbstractGroup(String id) {
+    public AbstractGroup(ItemManager itemManager, Logger logger, String id) {
+        super(itemManager, logger);
         setId(id);
     }
 

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractGroupable.java Mon Dec 11 09:41:23 2006
@@ -22,9 +22,12 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.Accreditable;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Group;
 import org.apache.lenya.ac.Groupable;
+import org.apache.lenya.ac.ItemManager;
 
 /**
  * Abstract implementation for group members.
@@ -34,9 +37,11 @@
     
     /**
      * Ctor.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public AbstractGroupable() {
-	    // do nothing
+    public AbstractGroupable(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
     }
 
     private Set groups = new HashSet();
@@ -92,6 +97,10 @@
         }
 
         return (Accreditable[]) accreditables.toArray(new Accreditable[accreditables.size()]);
+    }
+    
+    public AccreditableManager getAccreditableManager() {
+        return getItemManager().getAccreditableManager();
     }
 
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractIPRange.java Mon Dec 11 09:41:23 2006
@@ -25,8 +25,10 @@
 import java.net.UnknownHostException;
 import java.util.Arrays;
 
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.IPRange;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.Machine;
 import org.apache.lenya.net.InetAddressUtil;
 
@@ -67,9 +69,13 @@
      */
 
     /**
+     * Ctor.
      * Initializes the the IP range with the local host (127.0.0.1/24 for IPv4, ::1/128 for IPv6).
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public AbstractIPRange() {
+    public AbstractIPRange(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
         try {
             this.networkAddress = InetAddress.getLocalHost();
             byte[] mask = null;
@@ -96,9 +102,12 @@
 
     /**
      * Ctor.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id The IP range ID.
      */
-    public AbstractIPRange(String id) {
+    public AbstractIPRange(ItemManager itemManager, Logger logger, String id) {
+        super(itemManager, logger);
         setId(id);
     }
 
@@ -112,10 +121,7 @@
         return this.configurationDirectory;
     }
 
-    /**
-     * @see org.apache.lenya.ac.Item#setConfigurationDirectory(java.io.File)
-     */
-    public void setConfigurationDirectory(File _configurationDirectory) {
+    protected void setConfigurationDirectory(File _configurationDirectory) {
         this.configurationDirectory = _configurationDirectory;
     }
 

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractItem.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractItem.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractItem.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractItem.java Mon Dec 11 09:41:23 2006
@@ -18,9 +18,14 @@
 
 package org.apache.lenya.ac.impl;
 
+import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.lenya.ac.AccreditableManager;
 import org.apache.lenya.ac.Item;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.ItemUtil;
+import org.apache.lenya.util.Assert;
 
 /**
  * Abstract superclass for all access control objects that can be managed by an
@@ -33,11 +38,27 @@
     private String description = "";
     private String name = "";
 
+    private AccreditableManager accreditableManager;
+    private ItemManager itemManager;
+    
     /**
      * Ctor.
+     * @param itemManager The item manager this item belongs to.
+     * @param logger The logger.
      */
-    public AbstractItem() {
-        // do nothing
+    public AbstractItem(ItemManager itemManager, Logger logger) {
+        Assert.notNull("item manager", itemManager);
+        this.itemManager = itemManager;
+        
+        Assert.notNull("logger", logger);
+        ContainerUtil.enableLogging(this, logger);
+    }
+    
+    /**
+     * @return The accreditable manager.
+     */
+    public AccreditableManager getAccreditableManager() {
+        return this.accreditableManager;
     }
 
     /**
@@ -128,4 +149,9 @@
         }
         return 0;
     }
+    
+    public ItemManager getItemManager() {
+        return this.itemManager;
+    }
+    
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractRole.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractRole.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractRole.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractRole.java Mon Dec 11 09:41:23 2006
@@ -21,7 +21,9 @@
 package org.apache.lenya.ac.impl;
 
 import org.apache.avalon.framework.logger.Logger;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.Role;
+import org.apache.lenya.util.Assert;
 
 
 /**
@@ -31,18 +33,22 @@
     
     /**
      * Creates a new instance of Role.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public AbstractRole() {
-	    // do nothing
+    public AbstractRole(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
     }
 
     /**
      * Creates a new instance of Role.
-     * @param name The role name.
+     * @param itemManager The item manager.
      * @param logger The logger.
+     * @param name The role name.
      */
-    public AbstractRole(String name, Logger logger) {
-        assert name != null;
+    public AbstractRole(ItemManager itemManager, Logger logger, String name) {
+        this(itemManager, logger);
+        Assert.notNull("name", name);
         setName(name);
     }
 

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractUser.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractUser.java?view=diff&rev=485769&r1=485768&r2=485769
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractUser.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/AbstractUser.java Mon Dec 11 09:41:23 2006
@@ -18,7 +18,9 @@
 
 package org.apache.lenya.ac.impl;
 
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.ItemManager;
 import org.apache.lenya.ac.Password;
 import org.apache.lenya.ac.User;
 
@@ -30,24 +32,30 @@
 
     private String email;
     private String encryptedPassword;
-    private	String defaultMenuLocale;
+    private String defaultMenuLocale;
     private String defaultDocumentLocale;
 
     /**
      * Creates a new User.
+     * @param itemManager The item manager.
+     * @param logger The logger.
      */
-    public AbstractUser() {
-	    // do nothing
+    public AbstractUser(ItemManager itemManager, Logger logger) {
+        super(itemManager, logger);
     }
 
     /**
      * Create a User instance
+     * @param itemManager The item manager.
+     * @param logger The logger.
      * @param id the user id
      * @param fullName the full name of the user
      * @param _email the users email address
      * @param password the users password
      */
-    public AbstractUser(String id, String fullName, String _email, String password) {
+    public AbstractUser(ItemManager itemManager, Logger logger, String id, String fullName,
+            String _email, String password) {
+        this(itemManager, logger);
         setId(id);
         setName(fullName);
         this.email = _email;
@@ -62,7 +70,6 @@
         return this.email;
     }
 
-
     /**
      * Set the email address
      * @param _email the new email address
@@ -80,8 +87,9 @@
     }
 
     /**
-     * This method can be used for subclasses to set the password without it being encrypted again.
-     * Some subclass might have knowledge of the encrypted password and needs to be able to set it.
+     * This method can be used for subclasses to set the password without it
+     * being encrypted again. Some subclass might have knowledge of the
+     * encrypted password and needs to be able to set it.
      * @param _encryptedPassword the encrypted password
      */
     protected void setEncryptedPassword(String _encryptedPassword) {
@@ -96,30 +104,34 @@
         return this.encryptedPassword;
     }
 
-	/**
-	 * @return Returns the defaultDocumentLocale.
-	 */
-	public String getDefaultDocumentLocale() {
-		return defaultDocumentLocale;
-	}
-	/**
-	 * @param defaultDocumentLocale The defaultDocumentLocale to set.
-	 */
-	public void setDefaultDocumentLocale(String defaultDocumentLocale) {
-		this.defaultDocumentLocale = defaultDocumentLocale;
-	}
-	/**
-	 * @return Returns the defaultMenuLocale.
-	 */
-	public String getDefaultMenuLocale() {
-		return defaultMenuLocale;
-	}
-	/**
-	 * @param defaultMenuLocale The defaultMenuLocale to set.
-	 */
-	public void setDefaultMenuLocale(String defaultMenuLocale) {
-		this.defaultMenuLocale = defaultMenuLocale;
-	}
+    /**
+     * @return Returns the defaultDocumentLocale.
+     */
+    public String getDefaultDocumentLocale() {
+        return defaultDocumentLocale;
+    }
+
+    /**
+     * @param defaultDocumentLocale The defaultDocumentLocale to set.
+     */
+    public void setDefaultDocumentLocale(String defaultDocumentLocale) {
+        this.defaultDocumentLocale = defaultDocumentLocale;
+    }
+
+    /**
+     * @return Returns the defaultMenuLocale.
+     */
+    public String getDefaultMenuLocale() {
+        return defaultMenuLocale;
+    }
+
+    /**
+     * @param defaultMenuLocale The defaultMenuLocale to set.
+     */
+    public void setDefaultMenuLocale(String defaultMenuLocale) {
+        this.defaultMenuLocale = defaultMenuLocale;
+    }
+
     /**
      * Save the user
      * @throws AccessControlException if the save failed
@@ -135,8 +147,8 @@
     }
 
     /**
-     * Authenticate a user. This is done by encrypting the given password and comparing this to the
-     * encryptedPassword.
+     * Authenticate a user. This is done by encrypting the given password and
+     * comparing this to the encryptedPassword.
      * @param password to authenticate with
      * @return true if the given password matches the password for this user
      */



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org