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 2003/05/27 16:07:17 UTC

cvs commit: cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl StaticProfileManager.java AuthenticationProfileManager.java

cziegeler    2003/05/27 07:07:16

  Modified:    src/blocks/portal/samples/profiles/copletdata portal.xml
               src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl
                        URICopletAdapter.java AbstractCopletAdapter.java
               src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter
                        CopletAdapter.java
               src/blocks/portal/java/org/apache/cocoon/portal/profile
                        ProfileManager.java
               src/blocks/portal/samples/profiles/mapping layout.xml
               src/blocks/portal/samples/news sitemap.xmap
               src/blocks/portal/java/org/apache/cocoon/portal/profile/impl
                        StaticProfileManager.java
                        AuthenticationProfileManager.java
  Log:
  Fixing mapping
  Adding error-content
  
  Revision  Changes    Path
  1.5       +8 -0      cocoon-2.1/src/blocks/portal/samples/profiles/copletdata/portal.xml
  
  Index: portal.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/samples/profiles/copletdata/portal.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- portal.xml	26 May 2003 10:15:00 -0000	1.4
  +++ portal.xml	27 May 2003 14:07:16 -0000	1.5
  @@ -86,6 +86,14 @@
         <coplet-base-data>URICoplet</coplet-base-data>
         <attribute>
         	<name>uri</name>
  +      	<value xsi:type="java:java.lang.String" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">cocoon:/news/liverss?feed=http://radio.weblogs.com/0107211/rss.xml</value>
  +      </attribute>
  +      <attribute>
  +      	<name>buffer</name>
  +      	<value xsi:type="java:java.lang.Boolean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">true</value>
  +      </attribute>
  +      <attribute>
  +      	<name>error-uri</name>
         	<value xsi:type="java:java.lang.String" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">cocoon:/news/CZ_weblog.rss</value>
         </attribute>
      </coplet-data>
  
  
  
  1.10      +30 -2     cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/URICopletAdapter.java
  
  Index: URICopletAdapter.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/URICopletAdapter.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- URICopletAdapter.java	26 May 2003 12:49:14 -0000	1.9
  +++ URICopletAdapter.java	27 May 2003 14:07:16 -0000	1.10
  @@ -101,7 +101,14 @@
       
       public void streamContent(CopletInstanceData coplet, ContentHandler contentHandler)
       throws SAXException {
  -		final String uri = (String)coplet.getCopletData().getAttribute("uri");
  +        final String uri = (String)coplet.getCopletData().getAttribute("uri");
  +        this.streamContent( coplet, uri, contentHandler);
  +    }
  +
  +    public void streamContent(final CopletInstanceData coplet, 
  +                               final String uri,
  +                               final ContentHandler contentHandler)
  +    throws SAXException {
   		Source copletSource = null;
   		PortalService portalService = null;
   		try {
  @@ -213,6 +220,27 @@
           } finally {
               this.manager.release( eventManager );
           }
  +    }
  +
  +    /**
  +     * Render the error content for a coplet
  +     * @param coplet
  +     * @param handler
  +     * @return True if the error content has been rendered, otherwise false
  +     * @throws SAXException
  +     */
  +    protected boolean renderErrorContent(CopletInstanceData coplet, ContentHandler handler)
  +    throws SAXException {
  +        final String uri = (String) this.getConfiguration(coplet, "error-uri");
  +        if ( uri != null ) {
  +            // TODO - if an error occured for this coplet, remember this
  +            //         and use directly the error-uri from now on
  +            // We need for this the ability to dynamically add aspects to
  +            // objects!
  +            this.streamContent( coplet, uri, handler);
  +            return true;
  +        }
  +        return false;
       }
   
   }
  
  
  
  1.4       +23 -10    cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/AbstractCopletAdapter.java
  
  Index: AbstractCopletAdapter.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/AbstractCopletAdapter.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractCopletAdapter.java	26 May 2003 10:15:01 -0000	1.3
  +++ AbstractCopletAdapter.java	27 May 2003 14:07:16 -0000	1.4
  @@ -69,6 +69,8 @@
   
   /**
    * This is the adapter to use pipelines as coplets
  + * 
  + * TODO - implement timeout
    *
    * @author <a href="mailto:cziegeler@s-und-n.de">Carsten Ziegeler</a>
    * @author <a href="mailto:volker.schmitt@basf-it-services.com">Volker Schmitt</a>
  @@ -114,9 +116,7 @@
       public void toSAX(CopletInstanceData coplet, ContentHandler contentHandler)
       throws SAXException {
           Boolean bool = (Boolean) this.getConfiguration( coplet, "buffer" );
  -        // FIXME - remove this
  -        bool = new Boolean(true);
  -        
  +
           if ( bool != null && bool.booleanValue() ) {
               boolean read = false;
               XMLSerializer serializer = null;
  @@ -152,12 +152,14 @@
                       this.manager.release( deserializer );
                   }
               } else {
  -                // FIXME - get correct error message
  -                contentHandler.startDocument();
  -                XMLUtils.startElement( contentHandler, "p");
  -                XMLUtils.data( contentHandler, "The coplet " + coplet.getId() + " is currently not available.");
  -                XMLUtils.endElement(contentHandler, "p");
  -                contentHandler.endDocument();                
  +                if ( !this.renderErrorContent(coplet, contentHandler)) {
  +                    // FIXME - get correct error message
  +                    contentHandler.startDocument();
  +                    XMLUtils.startElement( contentHandler, "p");
  +                    XMLUtils.data( contentHandler, "The coplet " + coplet.getId() + " is currently not available.");
  +                    XMLUtils.endElement(contentHandler, "p");
  +                    contentHandler.endDocument();                
  +                }
               }
           } else {
               this.streamContent( coplet, contentHandler );
  @@ -177,4 +179,15 @@
       public void logout(CopletInstanceData coplet) {
       }
       
  +    /**
  +     * Render the error content for a coplet
  +     * @param coplet
  +     * @param handler
  +     * @return True if the error content has been rendered, otherwise false
  +     * @throws SAXException
  +     */
  +    protected boolean renderErrorContent(CopletInstanceData coplet, ContentHandler handler)
  +    throws SAXException {
  +        return false;
  +    }
   }
  
  
  
  1.5       +1 -4      cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/CopletAdapter.java
  
  Index: CopletAdapter.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/CopletAdapter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- CopletAdapter.java	26 May 2003 10:15:01 -0000	1.4
  +++ CopletAdapter.java	27 May 2003 14:07:16 -0000	1.5
  @@ -99,7 +99,6 @@
        * Destroy the coplet
        * This method is invoked when a coplet instance will be destroyed
        * For each coplet, this method is only invoked once.
  -     * TODO - not implemented yet
        * @param coplet
        */
       void destroy(CopletInstanceData coplet);
  @@ -114,7 +113,6 @@
        * User logs in to a coplet
        * This method is invoked when a user logs in for each coplet instance
        * of the user
  -     * TODO - not implemented yet
        */
       void login(CopletInstanceData coplet);
           
  @@ -122,7 +120,6 @@
        * User logs out from a coplet
        * This method is invoked when a user logs out for each coplet instance
        * of this user.
  -     * TODO - not implemented yet
        */
       void logout(CopletInstanceData coplet);
   }
  
  
  
  1.5       +7 -1      cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileManager.java
  
  Index: ProfileManager.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/ProfileManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ProfileManager.java	27 May 2003 09:15:07 -0000	1.4
  +++ ProfileManager.java	27 May 2003 14:07:16 -0000	1.5
  @@ -79,6 +79,12 @@
       
       List getCopletInstanceData(CopletData data);
       
  +    // TODO - not called yet
  +    void login();
  +    
  +    // TODO - not called yet
  +    void logout();
  +    
       void register(CopletInstanceData coplet);
       
       void unregister(CopletInstanceData coplet);
  
  
  
  1.12      +4 -1      cocoon-2.1/src/blocks/portal/samples/profiles/mapping/layout.xml
  
  Index: layout.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/samples/profiles/mapping/layout.xml,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- layout.xml	27 May 2003 09:17:33 -0000	1.11
  +++ layout.xml	27 May 2003 14:07:16 -0000	1.12
  @@ -49,7 +49,10 @@
       <class name="org.apache.cocoon.portal.layout.impl.CompositeLayoutImpl"
              extends="org.apache.cocoon.portal.layout.AbstractLayout">
           <map-to xml="composite-layout"/>
  -        <field name="items" type="org.apache.cocoon.portal.layout.Item" collection="collection" set-method="addItem">
  +        <field name="items" type="org.apache.cocoon.portal.layout.Item" 
  +               collection="collection" 
  +               set-method="addItem"
  +               get-method="getItems">
               <bind-xml auto-naming="deriveByClass" />
           </field>
       </class>
  
  
  
  1.2       +7 -13     cocoon-2.1/src/blocks/portal/samples/news/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/samples/news/sitemap.xmap,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- sitemap.xmap	7 May 2003 06:22:30 -0000	1.1
  +++ sitemap.xmap	27 May 2003 14:07:16 -0000	1.2
  @@ -1,20 +1,9 @@
   <?xml version="1.0"?>
  -
   <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
  -<!-- =========================== Components ================================ -->
  -<!-- =========================== Views =================================== -->
  -
  - <map:views>
  -  <map:view name="content" from-label="content">
  -   <map:serialize type="xml"/>
  -  </map:view>
  - </map:views>
  -<!-- =========================== Pipelines ================================= -->
   
    <map:pipelines>
  -  <!-- News Portal2 Demo Pipelines. Structure like forrest seed. -->
  -		
  -  <map:pipeline>	
  +    
  +    <map:pipeline>	
   
       <map:match pattern="images/*.gif">
           <map:read mime-type="image/gif" src="content/resources/images/{1}.gif"/>
  @@ -26,6 +15,11 @@
           <map:generate type="file" src="content/xdocs/{1}.xml" label="content" />
           <map:transform type="xslt" src="content/resources/xsl/document2html.xsl"/>
           <map:serialize type="html"/>
  +    </map:match>
  +    <map:match pattern="liverss">
  +        <map:generate type="file" src="{request-param:feed}" label="content" />
  +        <map:transform type="xslt" src="content/resources/xsl/rss2html_news.xsl"/>
  +        <map:serialize type="xml"/>
       </map:match>
       <map:match pattern="*.rss">
           <map:generate type="file" src="content/rss/{1}.xml" label="content" />
  
  
  
  1.2       +8 -1      cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java
  
  Index: StaticProfileManager.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StaticProfileManager.java	27 May 2003 11:54:18 -0000	1.1
  +++ StaticProfileManager.java	27 May 2003 14:07:16 -0000	1.2
  @@ -280,4 +280,11 @@
   
       public void saveUserProfiles() {
       }
  +    
  +    public void login() {
  +    }
  +    
  +    public void logout() {
  +    }
  +    
   }
  
  
  
  1.3       +55 -6     cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java
  
  Index: AuthenticationProfileManager.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AuthenticationProfileManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AuthenticationProfileManager.java	27 May 2003 12:24:36 -0000	1.2
  +++ AuthenticationProfileManager.java	27 May 2003 14:07:16 -0000	1.3
  @@ -61,6 +61,7 @@
   import org.apache.avalon.framework.component.Component;
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.thread.ThreadSafe;
  @@ -69,6 +70,7 @@
   import org.apache.cocoon.portal.coplet.CopletData;
   import org.apache.cocoon.portal.coplet.CopletFactory;
   import org.apache.cocoon.portal.coplet.CopletInstanceData;
  +import org.apache.cocoon.portal.coplet.adapter.CopletAdapter;
   import org.apache.cocoon.portal.layout.CompositeLayout;
   import org.apache.cocoon.portal.layout.Item;
   import org.apache.cocoon.portal.layout.Layout;
  @@ -81,7 +83,6 @@
   import org.apache.commons.lang.exception.ExceptionUtils;
   import org.apache.excalibur.source.SourceNotFoundException;
   import org.apache.excalibur.source.SourceValidity;
  -import org.exolab.castor.mapping.Mapping;
   
   /**
    * The profile manager using the authentication framework
  @@ -99,10 +100,6 @@
   
       protected ComponentManager manager;
   
  -    private Mapping layoutMapping;
  -
  -    private Map layoutStati = new HashMap(100);
  -    
       private Map attributes = new HashMap();
       
       private ReadWriteLock lock = new ReadWriteLock();
  @@ -127,6 +124,42 @@
           }
       }
       
  +    public void login() {
  +        // TODO - we should move most of the stuff from getPortalLayout to here
  +        // for now we use a hack :)
  +        this.getPortalLayout(null);
  +    }
  +    
  +    public void logout() {
  +        PortalService service = null;
  +        String attribute = null;
  +        ComponentSelector adapterSelector = null;
  +        try {
  +            adapterSelector = (ComponentSelector)this.manager.lookup(CopletAdapter.ROLE+"Selector");
  +            service = (PortalService) this.manager.lookup(PortalService.ROLE);
  +
  +            attribute = AuthenticationProfileManager.class.getName()+"/"+service.getPortalName()+"/CopletInstanceData";
  +            CopletInstanceDataManager copletInstanceDataManager = (CopletInstanceDataManager)service.getAttribute(attribute);
  +            
  +            Iterator iter = copletInstanceDataManager.getCopletInstanceData().values().iterator();
  +            while ( iter.hasNext() ) {
  +                CopletInstanceData cid = (CopletInstanceData) iter.next();
  +                CopletAdapter adapter = null;
  +                try {
  +                    adapter = (CopletAdapter) adapterSelector.select(cid.getCopletData().getCopletBaseData().getCopletAdapterName());
  +                    adapter.logout( cid );
  +                } finally {
  +                    adapterSelector.release( adapter );
  +                }
  +            }
  +        } catch (ComponentException e) {
  +            throw new CascadingRuntimeException("Unable to lookup portal service.", e);
  +        } finally {
  +            this.manager.release(service);
  +            this.manager.release(adapterSelector);
  +        }        
  +    }
  +    
       /**
        * @see org.apache.cocoon.portal.profile.ProfileManager#getPortalLayout(Object)
        */
  @@ -134,11 +167,13 @@
           PortalService service = null;
           LayoutFactory factory = null;
           CopletFactory copletFactory = null;
  +        ComponentSelector adapterSelector = null;
           
           try {
               service = (PortalService) this.manager.lookup(PortalService.ROLE);
               factory = (LayoutFactory) this.manager.lookup(LayoutFactory.ROLE);
               copletFactory = (CopletFactory) this.manager.lookup(CopletFactory.ROLE);
  +            adapterSelector = (ComponentSelector)this.manager.lookup(CopletAdapter.ROLE+"Selector");
               
               if ( null == key ) {
                   Layout l = (Layout) service.getTemporaryAttribute("DEFAULT_LAYOUT");
  @@ -205,6 +240,19 @@
   					map.put("profile", "layout");
   					map.put("objectmap", copletInstanceDataManager.getCopletInstanceData());
   					layout = (Layout)this.getOrCreateProfile(keyMap, map, portalPrefix+"/Layout", service, factory);
  +                    
  +                    // now invoke login on each instance
  +                    Iterator iter =  copletInstanceDataManager.getCopletInstanceData().values().iterator();
  +                    while ( iter.hasNext() ) {
  +                        CopletInstanceData cid = (CopletInstanceData) iter.next();
  +                        CopletAdapter adapter = null;
  +                        try {
  +                            adapter = (CopletAdapter) adapterSelector.select(cid.getCopletData().getCopletBaseData().getCopletAdapterName());
  +                            adapter.login( cid );
  +                        } finally {
  +                            adapterSelector.release( adapter );
  +                        }
  +                    }
   				} finally {
   					this.lock.releaseLocks();
   				}
  @@ -218,6 +266,7 @@
               this.manager.release(service);
               this.manager.release((Component)factory);
               this.manager.release((Component)copletFactory);
  +            this.manager.release(adapterSelector);
           }
       }