You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/02/12 13:45:02 UTC

svn commit: r377168 - in /cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile: ./ impl/

Author: cziegeler
Date: Sun Feb 12 04:45:01 2006
New Revision: 377168

URL: http://svn.apache.org/viewcvs?rev=377168&view=rev
Log:
Add profile manager aspects

Added:
    cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspect.java   (with props)
    cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspectContext.java   (with props)
    cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/DefaultProfileManagerAspectContext.java   (with props)
    cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileManagerAspectChain.java   (with props)
Modified:
    cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java
    cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java
    cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java

Added: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspect.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspect.java?rev=377168&view=auto
==============================================================================
--- cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspect.java (added)
+++ cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspect.java Sun Feb 12 04:45:01 2006
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.cocoon.portal.profile;
+
+import org.apache.cocoon.portal.scratchpad.Profile;
+
+/**
+ * The behaviour of the used profile manager can be extended by assigning one
+ * or more profile manager aspects to the profile manager.
+ *
+ * @since 2.2
+ * @version $Id$
+ */
+public interface ProfileManagerAspect {
+
+    /** The role to lookup an aspect. */
+    String ROLE = ProfileManagerAspect.class.getName();
+
+    void prepare(ProfileManagerAspectContext context,
+                 Profile profile);
+}

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspect.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspect.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspectContext.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspectContext.java?rev=377168&view=auto
==============================================================================
--- cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspectContext.java (added)
+++ cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspectContext.java Sun Feb 12 04:45:01 2006
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.cocoon.portal.profile;
+
+import java.util.Map;
+
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.portal.PortalService;
+
+/**
+ * The context for a {@link  ProfileManagerAspect}
+ *
+ * @since 2.2
+ * @version $Id$
+ */
+public interface ProfileManagerAspectContext {
+
+    /**
+     * Invoke next aspect .
+     */
+    void invokeNext()
+    throws ProcessingException;
+
+    /** 
+     * Get the {@link Parameters} of the aspect.
+     */
+    Parameters getAspectParameters();
+
+    /**
+     * Get the object model.
+     */
+    Map getObjectModel();
+
+    /**
+     * Get the portal service.
+     */
+    PortalService getPortalService();
+}

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspectContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManagerAspectContext.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java?rev=377168&r1=377167&r2=377168&view=diff
==============================================================================
--- cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java (original)
+++ cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java Sun Feb 12 04:45:01 2006
@@ -19,6 +19,12 @@
 import java.util.Iterator;
 import java.util.Map;
 
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
 import org.apache.cocoon.portal.coplet.adapter.CopletAdapter;
@@ -34,6 +40,7 @@
 import org.apache.cocoon.portal.layout.impl.CopletLayout;
 import org.apache.cocoon.portal.profile.PortalUser;
 import org.apache.cocoon.portal.profile.ProfileManager;
+import org.apache.cocoon.portal.profile.ProfileManagerAspect;
 import org.apache.cocoon.portal.scratchpad.Profile;
 
 /**
@@ -43,10 +50,50 @@
  */
 public abstract class AbstractProfileManager 
     extends AbstractComponent 
-    implements ProfileManager, Receiver {
+    implements ProfileManager, Receiver, Configurable {
 
     /** Attribute to store the current user. */
     public static final String USER_ATTRIBUTE = AbstractProfileManager.class.getName() + "/User";
+
+    /** The configuration. */
+    protected Configuration configuration;
+
+    /** The chain for the configured profile manager aspects. */
+    protected ProfileManagerAspectChain chain;
+
+    /** The service selector for the profile manager aspects. */
+    protected ServiceSelector aspectSelector;
+
+    /**
+     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+     */
+    public void service(ServiceManager manager) throws ServiceException {
+        super.service(manager);
+        this.aspectSelector = (ServiceSelector) this.manager.lookup( ProfileManagerAspect.ROLE+"Selector");
+    }
+
+    /**
+     * @see org.apache.avalon.framework.activity.Disposable#dispose()
+     */
+    public void dispose() {
+        if (this.manager != null) {
+            if ( this.chain != null) {
+                this.chain.dispose( this.aspectSelector );
+            }
+            this.manager.release( this.aspectSelector );
+            this.aspectSelector = null;
+        }
+        super.dispose();
+    }
+
+    /**
+     * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
+     */
+    public void configure(Configuration config) throws ConfigurationException {
+        this.configuration = config;
+        this.chain = new ProfileManagerAspectChain();
+        this.chain.configure(this.aspectSelector, config.getChild("aspects"));
+    }
 
     /**
      * Receives any user related event and invokes login, logout etc.

Added: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/DefaultProfileManagerAspectContext.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/DefaultProfileManagerAspectContext.java?rev=377168&view=auto
==============================================================================
--- cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/DefaultProfileManagerAspectContext.java (added)
+++ cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/DefaultProfileManagerAspectContext.java Sun Feb 12 04:45:01 2006
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed 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.cocoon.portal.profile.impl;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.portal.PortalService;
+import org.apache.cocoon.portal.profile.ProfileManagerAspect;
+import org.apache.cocoon.portal.profile.ProfileManagerAspectContext;
+import org.apache.cocoon.portal.scratchpad.Profile;
+
+/**
+ * The aspect context is passed to every aspect.
+ * @since 2.2
+ * @version $Id$
+ */
+public final class DefaultProfileManagerAspectContext
+    implements ProfileManagerAspectContext {
+
+    private final PortalService service;
+    private final Map objectModel;
+    private final Iterator iterator;
+    private final Iterator configIterator;
+    private Parameters config;
+    private final Profile profile;
+ 
+    public DefaultProfileManagerAspectContext(ProfileManagerAspectChain chain,
+                                              PortalService             service,
+                                              Map                       objectModel,
+                                              Profile                   profile) {
+        this.service = service;
+        this.objectModel = objectModel;
+        this.iterator = chain.getIterator();
+        this.configIterator = chain.getConfigIterator();
+        this.profile = profile;
+    }
+
+	/**
+	 * @see org.apache.cocoon.portal.profile.ProfileManagerAspectContext#invokeNext()
+	 */
+	public void invokeNext() 
+    throws ProcessingException {
+        if (this.iterator.hasNext()) {
+            this.config = (Parameters)this.configIterator.next();
+            final ProfileManagerAspect aspect = (ProfileManagerAspect) iterator.next();
+            aspect.prepare(this, this.profile);
+        }
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.profile.ProfileManagerAspectContext#getAspectParameters()
+     */
+    public Parameters getAspectParameters() {
+        return this.config;
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.profile.ProfileManagerAspectContext#getObjectModel()
+     */
+    public Map getObjectModel() {
+        return this.objectModel;
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.profile.ProfileManagerAspectContext#getPortalService()
+     */
+    public PortalService getPortalService() {
+        return this.service;
+    }
+}

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/DefaultProfileManagerAspectContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/DefaultProfileManagerAspectContext.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java?rev=377168&r1=377167&r2=377168&view=diff
==============================================================================
--- cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java (original)
+++ cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java Sun Feb 12 04:45:01 2006
@@ -24,11 +24,12 @@
 import java.util.Map;
 
 import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.context.Context;
 import org.apache.avalon.framework.context.ContextException;
 import org.apache.avalon.framework.context.Contextualizable;
 import org.apache.avalon.framework.parameters.ParameterException;
-import org.apache.avalon.framework.parameters.Parameterizable;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
@@ -74,7 +75,7 @@
  */
 public class GroupBasedProfileManager 
     extends AbstractProfileManager
-    implements Parameterizable, Contextualizable, Disposable { 
+    implements Contextualizable, Disposable { 
 
     public static final String CATEGORY_GLOBAL = "global";
     public static final String CATEGORY_GROUP  = "group";
@@ -116,11 +117,12 @@
     }
 
     /**
-     * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
+     * @see org.apache.cocoon.portal.profile.impl.AbstractProfileManager#configure(org.apache.avalon.framework.configuration.Configuration)
      */
-    public void parameterize(Parameters params) throws ParameterException {
-        this.checkForChanges = params.getParameterAsBoolean("check-for-changes", this.checkForChanges);
-        this.parameters = params;
+    public void configure(Configuration config) throws ConfigurationException {
+        super.configure(config);
+        this.parameters = Parameters.fromConfiguration(config);
+        this.checkForChanges = this.parameters.getParameterAsBoolean("check-for-changes", this.checkForChanges);
     }
 
     /**

Added: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileManagerAspectChain.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileManagerAspectChain.java?rev=377168&view=auto
==============================================================================
--- cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileManagerAspectChain.java (added)
+++ cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileManagerAspectChain.java Sun Feb 12 04:45:01 2006
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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.cocoon.portal.profile.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceSelector;
+import org.apache.cocoon.portal.profile.ProfileManagerAspect;
+
+/**
+ * This chain holds all configured aspects for a profile manager.
+ * @since 2.2
+ * @version $Id$
+ */
+public final class ProfileManagerAspectChain {
+
+    protected List aspects = new ArrayList(3);
+
+    protected List configs = new ArrayList(3);
+
+    public void configure(ServiceSelector selector,
+                          Configuration   conf)
+    throws ConfigurationException {
+        if ( conf != null ) {
+            Configuration[] aspects = conf.getChildren("aspect");
+            for(int i=0; i < aspects.length; i++) {
+                final Configuration current = aspects[i];
+                final String role = current.getAttribute("type");
+                try {
+                    ProfileManagerAspect rAspect = (ProfileManagerAspect) selector.select(role);
+                    this.aspects.add(rAspect);               
+                    Parameters aspectConfiguration = Parameters.fromConfiguration(current);
+                    this.configs.add(aspectConfiguration);
+
+                } catch (ServiceException se) {
+                    throw new ConfigurationException("Unable to lookup profile manager aspect: " + role, se);
+                }
+            }
+        } else {
+            throw new ConfigurationException("No aspects configured.");
+        }
+    }
+
+    public Iterator getIterator() {
+        return this.aspects.iterator();
+    }
+
+    public Iterator getConfigIterator() {
+        return this.configs.iterator();
+    }
+
+    public void dispose(ServiceSelector selector) {
+        Iterator i = this.aspects.iterator();
+        while (i.hasNext()) {
+            final Object component = i.next();
+            selector.release(component);
+        }
+        this.aspects.clear();
+        this.configs.clear();
+    }
+}

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileManagerAspectChain.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileManagerAspectChain.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java?rev=377168&r1=377167&r2=377168&view=diff
==============================================================================
--- cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java (original)
+++ cocoon/trunk/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java Sun Feb 12 04:45:01 2006
@@ -22,7 +22,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.cocoon.portal.coplet.CopletBaseData;
@@ -42,8 +41,7 @@
  * @version $Id$
  */
 public class StaticProfileManager 
-extends AbstractProfileManager 
-implements Configurable {
+    extends AbstractProfileManager { 
 
     protected String profilesPath;
 
@@ -296,6 +294,7 @@
      */
     public void configure(Configuration configuration) 
     throws ConfigurationException {
+        super.configure(configuration);
         Configuration child = configuration.getChild("profiles-path");
         this.profilesPath = child.getValue("cocoon:/profiles");
     }