cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cziege...@apache.org
Subject svn commit: rev 53964 - in cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal: . generation impl transformation
Date Thu, 07 Oct 2004 13:07:27 GMT
Author: cziegeler
Date: Thu Oct  7 06:07:26 2004
New Revision: 53964

Added:
   cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/generation/AbstractCopletGenerator.java
Modified:
   cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/LinkService.java
   cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java
   cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/AbstractCopletTransformer.java
Log:
Minor improvements

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/LinkService.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/LinkService.java
(original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/LinkService.java
Thu Oct  7 06:07:26 2004
@@ -33,6 +33,12 @@
     
     String DEFAULT_REQUEST_EVENT_PARAMETER_NAME = "cocoon-portal-event";
     
+    static class ParameterDescription {
+        public final String parameters;
+        public ParameterDescription(String parameters) {
+            this.parameters = parameters;
+        }
+    }
     /**
      * Get the uri for this coplet containing the additional event
      * @param event The event to add (null is also allowed for convenience)
@@ -41,8 +47,8 @@
     String getLinkURI(Event event);
 
     /**
-     * Get the uri for this coplet containing the additional events
-     * @param events The events to add
+     * Get the uri for this coplet containing the additional events.
+     * @param events The events to add: These can either be {@link Event}s or {@link #ParameterDescription}s.
      * @return A URI
      */
     String getLinkURI(List events);

Added: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/generation/AbstractCopletGenerator.java
==============================================================================
--- (empty file)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/generation/AbstractCopletGenerator.java
Thu Oct  7 06:07:26 2004
@@ -0,0 +1,155 @@
+/*
+ * Copyright 1999-2002,2004 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.generation;
+
+import java.util.Map;
+
+import org.apache.avalon.framework.parameters.ParameterException;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.generation.ServiceableGenerator;
+import org.apache.cocoon.portal.Constants;
+import org.apache.cocoon.portal.PortalService;
+import org.apache.cocoon.portal.coplet.CopletInstanceData;
+import org.xml.sax.SAXException;
+
+/**
+ * Abstract generator implementation that provides a method getCopletInstanceData().
+ * There are two possibilities how the generator obtains the information required for 
+ * getting the coplet instance data:<br><br>
+ * 1) If it is used within a coplet pipeline and this pipeline is called using the "cocoon:"
protocol,
+ * all required information are passed automatically.<br>
+ * 2) Otherwise the portal name and the coplet id must be passed to the generator 
+ * as paremeters in the following way:
+ *
+ * <pre>&lt;map:generator type="coplet"&gt;
+ * 	&lt;map:parameter name="portalName" type="exampleportal"/&gt;
+ * 	&lt;map:parameter name="copletId" type="examplecoplet"/&gt;
+ * &lt;/map:generator&gt;</pre>
+ *
+ * @author <a href="mailto:cziegeler@s-und-n.de">Carsten Ziegeler</a>
+ * @version CVS $Id: AbstractCopletTransformer.java 30941 2004-07-29 19:56:58Z vgritsenko
$
+ */
+public abstract class AbstractCopletGenerator 
+extends ServiceableGenerator {
+
+    /**
+     * Parameter name.
+     */
+    public static final String COPLET_ID_PARAM = "copletId";
+
+    /**
+     * Parameter name.
+     */
+    public static final String PORTAL_NAME_PARAM = "portalName";
+
+    /** The portal service */
+    private PortalService _portalService;
+    
+    /**
+     * Try to get the coplet instance data belonging to the current request
+     * @return The coplet instance data
+     * @throws SAXException If an errors occurs or the instance data is not available
+     */
+    protected CopletInstanceData getCopletInstanceData() 
+    throws SAXException {
+        CopletInstanceData cid = this.getCopletInstanceData(null);
+        if ( cid == null ) {
+            throw new SAXException("Could not find coplet instance data for the current pipeline.");
+        }
+        return cid;
+    }
+    
+    
+    /**
+     * Get the portal service
+     */
+    protected PortalService getPortalService()
+    throws SAXException {
+        if ( this._portalService == null ) {
+            try {
+                this._portalService = (PortalService)this.manager.lookup(PortalService.ROLE);
+                
+                if ( this._portalService.getPortalName() == null ) {
+                    // set portal name
+                    String portalName = this.parameters.getParameter(PORTAL_NAME_PARAM, 
+                                                                    (String)this.objectModel.get(Constants.PORTAL_NAME_KEY));
+                    if ( portalName == null ) {
+                        final Map context = (Map)this.objectModel.get(ObjectModelHelper.PARENT_CONTEXT);
+                        if ( context != null ) {
+                            portalName = (String) context.get(Constants.PORTAL_NAME_KEY);
+                        }
+                    }
+                    if ( portalName == null ) {
+                        throw new SAXException("portalName must be passed as parameter or
in the object model.");
+                    }
+                    this._portalService.setPortalName(portalName);
+                }
+            } catch (ServiceException se) {
+                throw new SAXException("Unable to get portal service.", se);
+            }
+        }
+        return this._portalService;
+    }
+    
+    
+    /**
+     * Try to get the coplet instance data with the given id
+     * @param copletId  The id of the coplet instance or null if this transformer
+     *                   is used inside a coplet pipeline
+     * @return The coplet instance data or null
+     * @throws SAXException If an error occurs
+     */
+    protected CopletInstanceData getCopletInstanceData(String copletId) 
+    throws SAXException {
+        final Map context = (Map)objectModel.get(ObjectModelHelper.PARENT_CONTEXT);
+        
+        if ( copletId == null ) {
+            // determine coplet id
+            if (context != null) {
+                copletId = (String)context.get(Constants.COPLET_ID_KEY);
+            } else {
+                copletId = (String)objectModel.get(Constants.COPLET_ID_KEY);
+                if ( copletId == null ) {
+                    try {
+                        copletId = this.parameters.getParameter(COPLET_ID_PARAM);
+                            
+                    } catch (ParameterException e) {
+                        throw new SAXException("copletId must be passed as parameter or in
the object model within the parent context.");
+                    }
+                }
+            }
+        }
+        if (copletId == null) {
+            throw new SAXException("copletId must be passed as parameter or in the object
model within the parent context.");
+        }
+
+        CopletInstanceData object = this.getPortalService().getComponentManager().getProfileManager().getCopletInstanceData(
copletId );
+            
+        return object;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.avalon.excalibur.pool.Recyclable#recycle()
+     */
+    public void recycle() {
+        if ( this._portalService != null ) {
+            this.manager.release( this._portalService );
+            this._portalService = null;            
+        }
+        super.recycle();
+    }
+}

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java
(original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java
Thu Oct  7 06:07:26 2004
@@ -175,7 +175,7 @@
             Iterator eventIterator = events.iterator();
             boolean found = false;
             while (!found && eventIterator.hasNext()) {
-                Event inEvent = (Event)eventIterator.next();
+                final Object inEvent = eventIterator.next();
                 if ( inEvent instanceof ComparableEvent
                      && current.equalsEvent((ComparableEvent)inEvent)) {
                      found = true;
@@ -195,8 +195,18 @@
         // now add events
         iter = events.iterator();
         while ( iter.hasNext()) {
-            final Event current = (Event)iter.next();
-            hasParams = this.addEvent(buffer, current, hasParams);
+            final Object current = iter.next();
+            if ( current instanceof Event ) {
+                hasParams = this.addEvent(buffer, (Event)current, hasParams);
+            } else if ( current instanceof ParameterDescription ) {
+                if ( hasParams ) {
+                    buffer.append('&');
+                } else {
+                    buffer.append('?');
+                    hasParams = true;
+                }
+                buffer.append(((ParameterDescription)current).parameters);
+            }
         }
         return buffer.toString();
     }

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/AbstractCopletTransformer.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/AbstractCopletTransformer.java
(original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache/cocoon/portal/transformation/AbstractCopletTransformer.java
Thu Oct  7 06:07:26 2004
@@ -41,7 +41,7 @@
  * &lt;/map:transform&gt;</pre>
  *
  * @author <a href="mailto:cziegeler@s-und-n.de">Carsten Ziegeler</a>
- * @version CVS $Id: AbstractCopletTransformer.java,v 1.9 2004/03/16 09:16:59 cziegeler Exp
$
+ * @version CVS $Id$
  */
 public abstract class AbstractCopletTransformer 
 extends AbstractSAXTransformer {
@@ -122,11 +122,14 @@
             if (context != null) {
                 copletId = (String)context.get(Constants.COPLET_ID_KEY);
             } else {
-                try {
-                    copletId = this.parameters.getParameter(COPLET_ID_PARAM);
+                copletId = (String)objectModel.get(Constants.COPLET_ID_KEY);
+                if ( copletId == null ) {
+                    try {
+                        copletId = this.parameters.getParameter(COPLET_ID_PARAM);
                         
-                } catch (ParameterException e) {
-                    throw new SAXException("copletId must be passed as parameter or in the
object model within the parent context.");
+                    } catch (ParameterException e) {
+                        throw new SAXException("copletId must be passed as parameter or in
the object model within the parent context.");
+                    }
                 }
             }
         }

Mime
View raw message