cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From step...@apache.org
Subject cvs commit: xml-cocoon2/src/scratchpad/webapp/samples/slide description2html4content.xsl description2html4locks.xsl description2html4permissions.xsl description2html4properties.xsl slide.xconf web.xml
Date Thu, 30 Jan 2003 20:01:08 GMT
stephan     2003/01/30 12:01:08

  Modified:    src/scratchpad/src/org/apache/cocoon/components/repository/impl
                        SlidePrincipalProvider.java SlideRepository.java
               src/scratchpad/src/org/apache/cocoon/components/source/impl
                        SlideSource.java SlideSourceFactory.java
               src/scratchpad/src/org/apache/cocoon/generation
                        SourceDescriptionGenerator.java
               src/scratchpad/webapp/samples/slide
                        description2html4content.xsl
                        description2html4locks.xsl
                        description2html4permissions.xsl
                        description2html4properties.xsl slide.xconf web.xml
  Added:       src/scratchpad/lib slide-kernel-20020130.jar
                        slide-roles-20020130.jar slide-stores-20020130.jar
  Removed:     src/scratchpad/lib slide-kernel-20020814.jar
                        slide-roles-20020814.jar slide-stores-20020814.jar
  Log:
  Add new versions of the Jakarta Slide libs.
  Updated the Slide Source implementation to respect a precedenting
  initialization by the Slide WebDAV servlet.
  
  Revision  Changes    Path
  1.1                  xml-cocoon2/src/scratchpad/lib/slide-kernel-20020130.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/slide-roles-20020130.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/slide-stores-20020130.jar
  
  	<<Binary file>>
  
  
  1.8       +269 -183  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlidePrincipalProvider.java
  
  Index: SlidePrincipalProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlidePrincipalProvider.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SlidePrincipalProvider.java	7 Jan 2003 23:56:13 -0000	1.7
  +++ SlidePrincipalProvider.java	30 Jan 2003 20:01:07 -0000	1.8
  @@ -1,57 +1,53 @@
   /*
  - * The Apache Software License, Version 1.1
  - *
  - *
  - * Copyright (c) 2001 The Apache Software Foundation.  All rights
  - * reserved.
  - *
  - * Redistribution and use in source and binary forms, with or without
  - * modification, are permitted provided that the following conditions
  - * are met:
  - *
  - * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer.
  - *
  - * 2. Redistributions in binary form must reproduce the above copyright
  - *    notice, this list of conditions and the following disclaimer in
  - *    the documentation and/or other materials provided with the
  - *    distribution.
  - *
  - * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:
  - *       "This product includes software developed by the
  - *        Apache Software Foundation (http://www.apache.org/)."
  - *    Alternately, this acknowledgment may appear in the software itself,
  - *    if and wherever such third-party acknowledgments normally appear.
  - *
  - * 4. The names "Apache Cocoon" and "Apache Software Foundation" must
  - *    not be used to endorse or promote products derived from this
  - *    software without prior written permission. For written
  - *    permission, please contact apache@apache.org.
  - *
  - * 5. Products derived from this software may not be called "Apache",
  - *    nor may "Apache" appear in their name, without prior written
  - *    permission of the Apache Software Foundation.
  - *
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - * SUCH DAMAGE.
  - * ====================================================================
  - *
  - * This software consists of voluntary contributions made by many
  - * individuals on behalf of the Apache Software Foundation.  For more
  - * information on the Apache Software Foundation, please see
  - * <http://www.apache.org/>.
  - */
  +
  + ============================================================================
  +                   The Apache Software License, Version 1.1
  + ============================================================================
  +
  + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  +
  + Redistribution and use in source and binary forms, with or without modifica-
  + tion, are permitted provided that the following conditions are met:
  +
  + 1. Redistributions of  source code must  retain the above copyright  notice,
  +    this list of conditions and the following disclaimer.
  +
  + 2. Redistributions in binary form must reproduce the above copyright notice,
  +    this list of conditions and the following disclaimer in the documentation
  +    and/or other materials provided with the distribution.
  +
  + 3. The end-user documentation included with the redistribution, if any, must
  +    include  the following  acknowledgment:   "This product includes software
  +    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  +    Alternately, this  acknowledgment may  appear in the software itself,  if
  +    and wherever such third-party acknowledgments normally appear.
  +
  + 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
  +    used to  endorse or promote  products derived from  this software without
  +    prior written permission. For written permission, please contact
  +    apache@apache.org.
  +
  + 5. Products  derived from this software may not  be called "Apache", nor may
  +    "Apache" appear  in their name,  without prior written permission  of the
  +    Apache Software Foundation.
  +
  + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  + FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  + APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  + INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  + DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  + OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  + ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  + (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  +
  + This software  consists of voluntary contributions made  by many individuals
  + on  behalf of the Apache Software  Foundation and was  originally created by
  + Stefano Mazzocchi  <stefano@apache.org>. For more  information on the Apache
  + Software Foundation, please see <http://www.apache.org/>.
  +
  +*/
   
   package org.apache.cocoon.components.repository.impl;
   
  @@ -104,8 +100,8 @@
    * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
    * @version $Id$
    */
  -public class SlidePrincipalProvider extends AbstractLogEnabled 
  -    implements PrincipalProvider, Composable, Configurable, Initializable{
  +public class SlidePrincipalProvider extends AbstractLogEnabled
  +  implements PrincipalProvider, Composable, Configurable, Initializable {
   
       /** The component manager instance */
       private ComponentManager manager = null;
  @@ -126,13 +122,13 @@
       private Security security;
   
       /** Lock helper. */
  -    //private Lock lock;
  +    // private Lock lock;
   
       /** Macro helper. */
       private Macro macro;
   
       /** Slide token. */
  -    //private SlideToken slidetoken;
  +    // private SlideToken slidetoken;
   
       private String repository = null;
       private String namespace = null;
  @@ -140,19 +136,25 @@
       /**
        * Set the current <code>ComponentManager</code> instance used by this
        * <code>Composable</code>.
  +     *
  +     * @param manager
  +     *
  +     * @throws ComponentException
        */
       public void compose(ComponentManager manager) throws ComponentException {
           this.manager = manager;
       }
   
       /**
  -     * Pass the Configuration to the Configurable class. This method must 
  +     * Pass the Configuration to the Configurable class. This method must
        * always be called after the constructor and before any other method.
        *
        * @param configuration the class configurations.
  +     *
  +     * @throws ConfigurationException
        */
       public void configure(Configuration configuration)
  -        throws ConfigurationException {
  +      throws ConfigurationException {
   
           this.repository = configuration.getAttribute("repository", null);
           this.namespace = configuration.getAttribute("namespace", null);
  @@ -169,43 +171,46 @@
   
           ComponentSelector repositories = null;
           Repository repository = null;
  +
           try {
  -            repositories = (ComponentSelector)this.manager.lookup(Repository.ROLE+"Selector");
  +            repositories = (ComponentSelector) this.manager.lookup(Repository.ROLE+
  +                "Selector");
   
  -            repository = (Repository)repositories.select(this.repository);
  +            repository = (Repository) repositories.select(this.repository);
   
  -            if (!(repository instanceof SlideRepository)) {
  +            if ( !(repository instanceof SlideRepository)) {
                   getLogger().error("Can't get Slide repository");
  -                return ;
  +                return;
               }
   
  -            SlideRepository sliderepository =
  -                (SlideRepository)repository;
  +            SlideRepository sliderepository = (SlideRepository) repository;
   
  -            if (this.namespace==null)
  -                this.namespace = sliderepository.getDomain().getDefaultNamespace();
  +            this.nat = sliderepository.getNamespaceToken(namespace);
   
  -            if (sliderepository.getDomain().getNamespaceToken(this.namespace)==null)
  +            if (this.nat==null) {
                   throw new ProcessingException("Repository with the namespace '"+
  -                                              this.namespace+"' couldn't be found");
  +                                              this.namespace+
  +                                              "' couldn't be found");
  +            }
   
  -            this.nat = sliderepository.getDomain().getNamespaceToken(this.namespace);
               this.config = this.nat.getNamespaceConfig();
               this.structure = nat.getStructureHelper();
               this.content = nat.getContentHelper();
               this.security = nat.getSecurityHelper();
  -            //this.lock = nat.getLockHelper();
  +            // this.lock = nat.getLockHelper();
               this.macro = nat.getMacroHelper();
   
           } catch (ComponentException ce) {
               getLogger().error("Could not lookup for component.", ce);
           } finally {
  -            if ((repository!=null) && (repository instanceof Component))
  -                repositories.release((Component)repository);
  +            if ((repository!=null) && (repository instanceof Component)) {
  +                repositories.release((Component) repository);
  +            }
               repository = null;
   
  -            if (repositories!=null)
  +            if (repositories!=null) {
                   this.manager.release(repositories);
  +            }
               repositories = null;
           }
       }
  @@ -215,45 +220,57 @@
        *
        * @param caller The principal, which should do the operation
        * @return List of all principals
  +     *
  +     * @throws ProcessingException
        */
  -    public Principal[] getPrincipals(Principal caller) throws ProcessingException {
  +    public Principal[] getPrincipals(Principal caller)
  +      throws ProcessingException {
           try {
               SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
               String userspath = config.getUsersPath();
   
  -            ObjectNode userobjects = structure.retrieve(slidetoken, userspath);
  +            ObjectNode userobjects = structure.retrieve(slidetoken,
  +                                                        userspath);
   
               Vector principals = new Vector();
   
               String user;
               ObjectNode userobject;
  -            for(Enumeration children = userobjects.enumerateChildren(); children.hasMoreElements();) {
  -                user = (String)children.nextElement();
  +
  +            for (Enumeration children = userobjects.enumerateChildren();
  +                children.hasMoreElements(); ) {
  +                user = (String) children.nextElement();
   
                   userobject = structure.retrieve(slidetoken, user);
   
  -                if (!(userobject instanceof GroupNode)) {
  -                    String name = userobject.getUri().substring(userspath.length()+1);
  -                    
  +                if ( !(userobject instanceof GroupNode)) {
  +                    String name = userobject.getUri().substring(userspath.length()+
  +                                                                1);
  +
                       // FIXME the CVS code from slide does only implement getRoles
                       Enumeration roles = this.security.getRoles(userobject);
                       String role = null;
  -                    if (roles.hasMoreElements())
  -                        role = (String)roles.nextElement();
  +
  +                    if (roles.hasMoreElements()) {
  +                        role = (String) roles.nextElement();
  +                    }
   
                       String password = null;
  +
                       try {
  -                        NodeRevisionDescriptors revisionDescriptors = 
  -                            content.retrieve(slidetoken, user);
  +                        NodeRevisionDescriptors revisionDescriptors = content.retrieve(slidetoken,
  +                                                                          user);
   
                           // Retrieve latest revision descriptor
  -                        NodeRevisionDescriptor revisionDescriptor = 
  -                            this.content.retrieve(slidetoken, revisionDescriptors);
  +                        NodeRevisionDescriptor revisionDescriptor = this.content.retrieve(slidetoken,
  +                                                                        revisionDescriptors);
   
  -                        if (revisionDescriptor.getProperty("password", NodeProperty.SLIDE_NAMESPACE)!=null) 
  -                            password = (String)revisionDescriptor.getProperty("password", 
  +                        if (revisionDescriptor.getProperty("password", NodeProperty.SLIDE_NAMESPACE)!=
  +                            null) {
  +                            password = (String) revisionDescriptor.getProperty("password",
                                   NodeProperty.SLIDE_NAMESPACE).getValue();
  +                        }
                       } catch (RevisionDescriptorNotFoundException rdnfe) {
                           // ignore
                       }
  @@ -263,9 +280,11 @@
               }
   
               Principal[] principalArray = new Principal[principals.size()];
  -            int i=0;
  -            for(Enumeration e = principals.elements(); e.hasMoreElements() ; i++) 
  -                principalArray[i] = (Principal)e.nextElement();
  +            int i = 0;
  +
  +            for (Enumeration e = principals.elements(); e.hasMoreElements();
  +                i++)
  +                principalArray[i] = (Principal) e.nextElement();
   
               return principalArray;
           } catch (SlideException se) {
  @@ -279,8 +298,11 @@
        *
        * @param caller The principal, which should do the operation.
        * @param principal The Principal, which should be add/modified.
  +     *
  +     * @throws ProcessingException
        */
  -    public void addPrincipal(Principal caller, Principal principal) throws ProcessingException {
  +    public void addPrincipal(Principal caller,
  +                             Principal principal) throws ProcessingException {
           // do the actual transaction
           try {
               try {
  @@ -288,25 +310,27 @@
   
                   SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
  -                String strUri = config.getUsersPath() + "/" + principal.getName();
  +                String strUri = config.getUsersPath()+"/"+principal.getName();
   
                   // create the node in the structure
                   ObjectNode object;
  +
                   object = new slideroles.basic.UserRoleImpl();
                   structure.create(slidetoken, object, strUri);
   
                   // create a revision with the appropriate properties set
  -                NodeRevisionDescriptor revision = 
  -                    new NodeRevisionDescriptor(0);
  -                revision.setProperty(
  -                    new NodeProperty("resourcetype", "<collection/>",
  -                                     true));
  +                NodeRevisionDescriptor revision = new NodeRevisionDescriptor(0);
  +
  +                revision.setProperty(new NodeProperty("resourcetype",
  +                                                      "<collection/>", true));
                   revision.setCreationDate(new Date());
                   revision.setLastModified(new Date());
  -                revision.setProperty(new NodeProperty("getcontentlength", "0", true));
  +                revision.setProperty(new NodeProperty("getcontentlength",
  +                                                      "0", true));
                   revision.setProperty(new NodeProperty("source", "", true));
  -                revision.setProperty(new NodeProperty("password", principal.getPassword(),
  -                                     NodeProperty.SLIDE_NAMESPACE));
  +                revision.setProperty(new NodeProperty("password",
  +                                                      principal.getPassword(),
  +                                                      NodeProperty.SLIDE_NAMESPACE));
                   content.create(slidetoken, strUri, revision, null);
   
                   nat.commit();
  @@ -317,11 +341,13 @@
               } catch (ServiceAccessException e) {
                   // low level service access failed
                   getLogger().warn("Could not create principal", e);
  -                throw new ProcessingException("Could not create principal", e);
  +                throw new ProcessingException("Could not create principal",
  +                                              e);
               } catch (Exception e) {
                   // any other errors are unanticipated
                   getLogger().warn("Could not create principal", e);
  -                throw new ProcessingException("Could not create principal", e);
  +                throw new ProcessingException("Could not create principal",
  +                                              e);
               }
           } catch (Exception e) {
               // rollback the transaction
  @@ -340,20 +366,23 @@
        *
        * @param caller The principal, which should do the operation.
        * @param principal The Principal, which should be removed.
  +     *
  +     * @throws ProcessingException
        */
  -    public void removePrincipal(Principal caller, Principal principal)
  -        throws ProcessingException {
  +    public void removePrincipal(Principal caller,
  +                                Principal principal)
  +                                  throws ProcessingException {
   
  -        if (principal.getName().length() > 0) {
  +        if (principal.getName().length()>0) {
               // get the helpers
               Macro macro = nat.getMacroHelper();
   
               SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
               // get the path of the current authenticated user
  -            String selfUri = config.getUsersPath() + "/" + caller.getName();
  +            String selfUri = config.getUsersPath()+"/"+caller.getName();
   
  -            String strUri = config.getUsersPath() + "/" + principal.getName();
  +            String strUri = config.getUsersPath()+"/"+principal.getName();
   
               // do the actual transaction
               try {
  @@ -361,15 +390,18 @@
                       nat.begin();
   
                       // the user may not delete herself
  -                    if (!selfUri.equals(strUri))
  -                        macro.delete(slidetoken, strUri, new MacroParameters(true, false));
  +                    if ( !selfUri.equals(strUri)) {
  +                        macro.delete(slidetoken, strUri,
  +                                     new MacroParameters(true, false));
  +                    }
   
                       nat.commit();
   
                   } catch (MacroException e) {
                       // some aspect of the delete operation failed
                       getLogger().warn("Could not remove principal", e);
  -                    throw new ProcessingException("Could not remove principal", e);
  +                    throw new ProcessingException("Could not remove principal",
  +                                                  e);
                   }
               } catch (Exception e) {
                   // rollback the transaction
  @@ -388,35 +420,44 @@
        *
        * @param caller The principal, which should do the operation.
        * @return List of all groups.
  +     *
  +     * @throws ProcessingException
        */
  -    public PrincipalGroup[] getPrincipalGroups(Principal caller) throws ProcessingException {
  +    public PrincipalGroup[] getPrincipalGroups(Principal caller)
  +      throws ProcessingException {
           try {
               SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
               String userspath = config.getUsersPath();
   
  -            ObjectNode userobjects = structure.retrieve(slidetoken, userspath);
  +            ObjectNode userobjects = structure.retrieve(slidetoken,
  +                                                        userspath);
   
               Vector principalgroups = new Vector();
   
               String group;
               ObjectNode groupobject;
  -            for(Enumeration children = userobjects.enumerateChildren(); children.hasMoreElements();) {
  -                group = (String)children.nextElement();
  +
  +            for (Enumeration children = userobjects.enumerateChildren();
  +                children.hasMoreElements(); ) {
  +                group = (String) children.nextElement();
   
                   groupobject = structure.retrieve(slidetoken, group);
   
                   if (groupobject instanceof GroupNode) {
  -                    String name = groupobject.getUri().substring(userspath.length()+1);
  +                    String name = groupobject.getUri().substring(userspath.length()+
  +                                      1);
   
                       principalgroups.add(new PrincipalGroup(name));
                   }
               }
   
               PrincipalGroup[] principalgroupArray = new PrincipalGroup[principalgroups.size()];
  -            int i=0;
  -            for(Enumeration e = principalgroups.elements(); e.hasMoreElements() ; i++)
  -                principalgroupArray[i] = (PrincipalGroup)e.nextElement();
  +            int i = 0;
  +
  +            for (Enumeration e = principalgroups.elements();
  +                e.hasMoreElements(); i++)
  +                principalgroupArray[i] = (PrincipalGroup) e.nextElement();
   
               return principalgroupArray;
           } catch (SlideException se) {
  @@ -430,8 +471,12 @@
        *
        * @param caller The principal, which should do the operation.
        * @param group The group, which shoud be add/modified.
  +     *
  +     * @throws ProcessingException
        */
  -    public void addPrincipalGroup(Principal caller, PrincipalGroup group) throws ProcessingException {
  +    public void addPrincipalGroup(Principal caller,
  +                                  PrincipalGroup group)
  +                                    throws ProcessingException {
           // do the actual transaction
           try {
               try {
  @@ -439,21 +484,22 @@
   
                   SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
  -                String strUri = config.getUsersPath() + "/" + group.getName();
  +                String strUri = config.getUsersPath()+"/"+group.getName();
   
                   // create the node in the structure
                   ObjectNode object = new GroupNode();
  +
                   structure.create(slidetoken, object, strUri);
   
                   // create a revision with the appropriate properties set
  -                NodeRevisionDescriptor revision =
  -                    new NodeRevisionDescriptor(0);
  -                revision.setProperty(
  -                    new NodeProperty("resourcetype", "<collection/>",
  -                                     true));
  +                NodeRevisionDescriptor revision = new NodeRevisionDescriptor(0);
  +
  +                revision.setProperty(new NodeProperty("resourcetype",
  +                                                      "<collection/>", true));
                   revision.setCreationDate(new Date());
                   revision.setLastModified(new Date());
  -                revision.setProperty(new NodeProperty("getcontentlength", "0", true));
  +                revision.setProperty(new NodeProperty("getcontentlength",
  +                                                      "0", true));
                   revision.setProperty(new NodeProperty("source", "", true));
                   content.create(slidetoken, strUri, revision, null);
   
  @@ -488,20 +534,23 @@
        *
        * @param caller The principal, which should do the operation.
        * @param group The group, which shoud be removed.
  +     *
  +     * @throws ProcessingException
        */
  -    public void removePrincipalGroup(Principal caller, PrincipalGroup group)
  -        throws ProcessingException {
  +    public void removePrincipalGroup(Principal caller,
  +                                     PrincipalGroup group)
  +                                       throws ProcessingException {
   
  -        if (group.getName().length() > 0) {
  +        if (group.getName().length()>0) {
               // get the helpers
               Macro macro = nat.getMacroHelper();
   
               SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
               // get the path of the current authenticated user
  -            String selfUri = config.getUsersPath() + "/" + caller.getName();
  +            String selfUri = config.getUsersPath()+"/"+caller.getName();
   
  -            String strUri = config.getUsersPath() + "/" + group.getName();
  +            String strUri = config.getUsersPath()+"/"+group.getName();
   
               // do the actual transaction
               try {
  @@ -509,15 +558,18 @@
                       nat.begin();
   
                       // the user may not delete herself
  -                    if (!selfUri.equals(strUri))
  -                        macro.delete(slidetoken, strUri, new MacroParameters(true, false));
  +                    if ( !selfUri.equals(strUri)) {
  +                        macro.delete(slidetoken, strUri,
  +                                     new MacroParameters(true, false));
  +                    }
   
                       nat.commit();
   
                   } catch (MacroException e) {
                       // some aspect of the delete operation failed
                       getLogger().warn("Could not remove group", e);
  -                    throw new ProcessingException("Could not remove group", e);
  +                    throw new ProcessingException("Could not remove group",
  +                                                  e);
                   }
               } catch (Exception e) {
                   // rollback the transaction
  @@ -537,9 +589,11 @@
        * @param caller The principal, which should do the operation
        * @param group The given group.
        * @param principal The principal to add to this group.
  +     *
  +     * @throws ProcessingException
        */
  -    public void addMember(Principal caller, PrincipalGroup group, Principal principal) 
  -      throws ProcessingException {
  +    public void addMember(Principal caller, PrincipalGroup group,
  +                          Principal principal) throws ProcessingException {
           // do the actual transaction
           try {
               try {
  @@ -547,22 +601,27 @@
   
                   SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
  -                String strUri = config.getUsersPath() + "/" + group.getName() + "/" + principal.getName();
  +                String strUri = config.getUsersPath()+"/"+group.getName()+"/"+
  +                                principal.getName();
   
                   // create the node in the structure
                   LinkNode link = new LinkNode();
  -                structure.createLink(slidetoken, link, strUri, structure.retrieve(slidetoken, 
  -                    config.getUsersPath() + "/" + principal.getName()));
  +
  +                structure.createLink(slidetoken, link, strUri,
  +                                     structure.retrieve(slidetoken,
  +                                                        config.getUsersPath()+
  +                                                        "/"+
  +                                                        principal.getName()));
   
                   // create a revision with the appropriate properties set
  -                NodeRevisionDescriptor revision =
  -                    new NodeRevisionDescriptor(0);
  -                revision.setProperty(
  -                    new NodeProperty("resourcetype", "<collection/>",
  -                                     true));
  +                NodeRevisionDescriptor revision = new NodeRevisionDescriptor(0);
  +
  +                revision.setProperty(new NodeProperty("resourcetype",
  +                                                      "<collection/>", true));
                   revision.setCreationDate(new Date());
                   revision.setLastModified(new Date());
  -                revision.setProperty(new NodeProperty("getcontentlength", "0", true));
  +                revision.setProperty(new NodeProperty("getcontentlength",
  +                                                      "0", true));
                   revision.setProperty(new NodeProperty("source", "", true));
                   content.create(slidetoken, strUri, revision, null);
   
  @@ -593,82 +652,103 @@
   
       }
   
  -    /** 
  -     * Returns true if the passed principal is a member of the group. 
  +    /**
  +     * Returns true if the passed principal is a member of the group.
        *
        * @param caller The principal, which should do the operation
        * @param group The given group.
        * @param member The principal whose membership is to be checked.
        * @return True if the principal is a member of this group, false otherwise.
  +     *
  +     * @throws ProcessingException
        */
  -    public boolean isMember(Principal caller, PrincipalGroup group, Principal member) 
  -          throws ProcessingException {
  +    public boolean isMember(Principal caller, PrincipalGroup group,
  +                            Principal member) throws ProcessingException {
           Principal[] members = members(caller, group);
  -        for(int i=0; i<members.length; i++)
  -            if (members[i].equals(member))
  +
  +        for (int i = 0; i<members.length; i++)
  +            if (members[i].equals(member)) {
                   return true;
  +            }
           return false;
       }
   
  -    /** 
  -     * Returns an enumeration of the members in the group. The returned objects are instances of Principal 
  +    /**
  +     * Returns an enumeration of the members in the group. The returned objects are instances of Principal
        *
        * @param caller The principal, which should do the operation
        * @param group The given group.
        * @return An enumeration of the group members.
  +     *
  +     * @throws ProcessingException
        */
  -    public Principal[] members(Principal caller, PrincipalGroup group) throws ProcessingException {
  +    public Principal[] members(Principal caller,
  +                               PrincipalGroup group)
  +                                 throws ProcessingException {
           try {
               SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
               String userspath = config.getUsersPath();
   
  -            ObjectNode groupobject = structure.retrieve(slidetoken, userspath+"/"+group.getName());
  +            ObjectNode groupobject = structure.retrieve(slidetoken,
  +                                                        userspath+"/"+
  +                                                        group.getName());
   
               if (groupobject instanceof GroupNode) {
  -                Vector principals = new Vector(); 
  +                Vector principals = new Vector();
   
                   String user;
                   ObjectNode userobject;
  -                for(Enumeration children = groupobject.enumerateChildren(); children.hasMoreElements();) {
  -                    user = (String)children.nextElement();
  +
  +                for (Enumeration children = groupobject.enumerateChildren();
  +                    children.hasMoreElements(); ) {
  +                    user = (String) children.nextElement();
   
                       userobject = structure.retrieve(slidetoken, user);
   
  -                    if (!(userobject instanceof GroupNode)) {
  -                        String name = userobject.getUri().substring(userspath.length()+1);
  +                    if ( !(userobject instanceof GroupNode)) {
  +                        String name = userobject.getUri().substring(userspath.length()+
  +                                                                    1);
   
                           // FIXME the CVS code from slide does only implement getRoles
                           Enumeration roles = this.security.getRoles(userobject);
                           String role = null;
  -                        if (roles.hasMoreElements())
  -                            role = (String)roles.nextElement();
   
  -                        NodeRevisionDescriptors revisionDescriptors =
  -                            content.retrieve(slidetoken, userobject.getUri());
  +                        if (roles.hasMoreElements()) {
  +                            role = (String) roles.nextElement();
  +                        }
  +
  +                        NodeRevisionDescriptors revisionDescriptors = content.retrieve(slidetoken,
  +                                                                          userobject.getUri());
   
                           // Retrieve latest revision descriptor
                           NodeRevisionDescriptor revisionDescriptor = this.content.retrieve(slidetoken,
  -                                                                                          revisionDescriptors);
  +                                                                        revisionDescriptors);
                           String password = null;
  +
                           if ((revisionDescriptor.getProperty("password", NodeProperty.SLIDE_NAMESPACE)!=null) &&
  -                            (revisionDescriptor.getProperty("password", 
  -                                NodeProperty.SLIDE_NAMESPACE).getValue()!=null))
  -                            password = revisionDescriptor.getProperty("password", 
  -                                NodeProperty.SLIDE_NAMESPACE).getValue().toString();
  +                            (revisionDescriptor.getProperty("password", NodeProperty.SLIDE_NAMESPACE).getValue()!=
  +                             null)) {
  +                            password = revisionDescriptor.getProperty("password",
  +                                                                      NodeProperty.SLIDE_NAMESPACE).getValue().toString();
  +                        }
   
  -                        principals.add(new Principal(name/*, role*/, password));
  +                        principals.add(new Principal(name /* , role */,
  +                                                     password));
                       }
                   }
   
                   Principal[] principalArray = new Principal[principals.size()];
  -                int i=0;
  -                for(Enumeration e = principals.elements(); e.hasMoreElements() ; i++)
  -                    principalArray[i] = (Principal)e.nextElement();
  +                int i = 0;
  +
  +                for (Enumeration e = principals.elements();
  +                    e.hasMoreElements(); i++)
  +                    principalArray[i] = (Principal) e.nextElement();
   
                   return principalArray;
  -            } else
  +            } else {
                   return new Principal[0];
  +            }
   
           } catch (SlideException se) {
               throw new ProcessingException(se);
  @@ -681,31 +761,37 @@
        * @param caller The principal, which should do the operation
        * @param group The given group.
        * @param principal The principal to remove from this group.
  +     *
  +     * @throws ProcessingException
        */
  -    public void removeMember(Principal caller, PrincipalGroup group, Principal principal) 
  -        throws ProcessingException {
  +    public void removeMember(Principal caller, PrincipalGroup group,
  +                             Principal principal) throws ProcessingException {
   
  -        if ((group.getName().length() > 0) && (principal.getName().length() > 0)) {
  +        if ((group.getName().length()>0) &&
  +            (principal.getName().length()>0)) {
               // get the helpers
               Macro macro = nat.getMacroHelper();
   
               SlideToken slidetoken = new SlideTokenImpl(new CredentialsToken(caller));
   
  -            String strUri = config.getUsersPath() + "/" + group.getName() + "/" + principal.getName();
  +            String strUri = config.getUsersPath()+"/"+group.getName()+"/"+
  +                            principal.getName();
   
               // do the actual transaction
               try {
                   try {
                       nat.begin();
   
  -                    macro.delete(slidetoken, strUri, new MacroParameters(true, false));
  +                    macro.delete(slidetoken, strUri,
  +                                 new MacroParameters(true, false));
   
                       nat.commit();
   
                   } catch (MacroException e) {
                       // some aspect of the delete operation failed
                       getLogger().warn("Could not remove member", e);
  -                    throw new ProcessingException("Could not remove member", e);
  +                    throw new ProcessingException("Could not remove member",
  +                                                  e);
                   }
               } catch (Exception e) {
                   // rollback the transaction
  
  
  
  1.10      +53 -27    xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlideRepository.java
  
  Index: SlideRepository.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/repository/impl/SlideRepository.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SlideRepository.java	29 Jan 2003 13:06:11 -0000	1.9
  +++ SlideRepository.java	30 Jan 2003 20:01:07 -0000	1.10
  @@ -9,7 +9,7 @@
    Redistribution and use in source and binary forms, with or without modifica-
    tion, are permitted provided that the following conditions are met:
   
  - 1. Redistributions of  source code must  retain the above copyright notice,
  + 1. Redistributions of  source code must  retain the above copyright  notice,
       this list of conditions and the following disclaimer.
   
    2. Redistributions in binary form must reproduce the above copyright notice,
  @@ -17,12 +17,12 @@
       and/or other materials provided with the distribution.
   
    3. The end-user documentation included with the redistribution, if any, must
  -    include  the following  acknowledgment:  "This product includes software
  -    developed  by the  Apache Software Foundation (http://www.apache.org/)."
  -    Alternately, this  acknowledgment may  appear in the software itself, if
  +    include  the following  acknowledgment:   "This product includes software
  +    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  +    Alternately, this  acknowledgment may  appear in the software itself,  if
       and wherever such third-party acknowledgments normally appear.
   
  - 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not be
  + 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
       used to  endorse or promote  products derived from  this software without
       prior written permission. For written permission, please contact
       apache@apache.org.
  @@ -33,7 +33,7 @@
   
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  - FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL THE
  + FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
    APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
    INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
    DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  @@ -72,6 +72,7 @@
   
   import org.apache.slide.common.Domain;
   import org.apache.slide.common.EmbeddedDomain;
  +import org.apache.slide.common.NamespaceAccessToken;
   
   import org.xml.sax.InputSource;
   
  @@ -83,8 +84,7 @@
    */
   public class SlideRepository
     implements Repository, ThreadSafe, Composable, Configurable,
  -             LogEnabled /* , Initializable */, Disposable
  -{
  +             LogEnabled /* , Initializable */, Disposable {
   
       /** The component manager instance */
       protected ComponentManager manager = null;
  @@ -112,9 +112,7 @@
        * Set the current <code>ComponentManager</code> instance used by this
        * <code>Composable</code>.
        *
  -     * @param manager    
  -     *
  -     * @throws ComponentException
  +     * @param manager Component manager.
        */
       public void compose(ComponentManager manager) throws ComponentException {
           this.manager = manager;
  @@ -125,8 +123,6 @@
        * always be called after the constructor and before any other method.
        *
        * @param configuration the class configurations.
  -     *
  -     * @throws ConfigurationException
        */
       public void configure(Configuration configuration)
         throws ConfigurationException {
  @@ -138,8 +134,6 @@
        * Initialialize the component. Initialization includes
        * allocating any resources required throughout the
        * components lifecycle.
  -     *
  -     * @throws Exception if an error occurs
        */
       public void initialize() throws Exception {
   
  @@ -148,18 +142,18 @@
           Source source = null;
           Configuration configuration = null;
   
  -        this.domain = new EmbeddedDomain();
  -        // FIXME Could not remove deprecated method, because some important
  -        // messages were thrown over the domain logger
  -        domain.setLogger(new SlideLoggerAdapter(this.logger));
  -
           if (Domain.isInitialized()) {
               this.logger.info("Domain already initialized.");
               return;
  -        } else {
  -            this.logger.info("Initializing domain.");
           }
   
  +        this.logger.info("Initializing domain.");
  +
  +        this.domain = new EmbeddedDomain();
  +        // FIXME Could not remove deprecated method, because some important
  +        // messages were thrown over the domain logger
  +        domain.setLogger(new SlideLoggerAdapter(this.logger));
  +
           try {
               resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
   
  @@ -251,12 +245,36 @@
       }
   
       /**
  +     * Returns a token for the access of the default namespace.
        *
  +     * @return NamespaceAccessToken Access token to the namespace
  +     */
  +    public NamespaceAccessToken getDefaultNamespaceToken() {
  +        // Initialization on demand
  +        if ((domain==null) && ( !initialized)) {
  +            try {
  +                initialize();
  +            } catch (Exception e) {
  +                this.logger.error("Could not initialize Slide repository", e);
  +            }
  +        }
  +
  +        if (domain!=null) {
  +            return this.domain.getNamespaceToken(this.domain.getDefaultNamespace());
  +        }
  +
  +        return Domain.accessNamespace(null, Domain.getDefaultNamespace());
  +    }
  +
  +    /**
  +     * Returns a token for the access of a namespace.
        *
  -     * @return
  +     * @param namespaceName Name of the namespace on which access is requested
  +     * @return NamespaceAccessToken Access token to the namespace
        */
  -    public EmbeddedDomain getDomain() {
  -        if (domain==null) {
  +    public NamespaceAccessToken getNamespaceToken(String namespaceName) {
  +        // Initialization on demand
  +        if ((domain==null) && ( !initialized)) {
               try {
                   initialize();
               } catch (Exception e) {
  @@ -264,6 +282,14 @@
               }
           }
   
  -        return this.domain;
  +        if (namespaceName==null) {
  +            return getDefaultNamespaceToken();
  +        }
  +
  +        if (domain!=null) {
  +            return this.domain.getNamespaceToken(namespaceName);
  +        }
  +
  +        return Domain.accessNamespace(null, namespaceName);
       }
   }
  
  
  
  1.30      +102 -191  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSource.java
  
  Index: SlideSource.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSource.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- SlideSource.java	30 Jan 2003 08:37:34 -0000	1.29
  +++ SlideSource.java	30 Jan 2003 20:01:07 -0000	1.30
  @@ -9,7 +9,7 @@
    Redistribution and use in source and binary forms, with or without modifica-
    tion, are permitted provided that the following conditions are met:
   
  - 1. Redistributions of  source code must  retain the above copyright notice,
  + 1. Redistributions of  source code must  retain the above copyright  notice,
       this list of conditions and the following disclaimer.
   
    2. Redistributions in binary form must reproduce the above copyright notice,
  @@ -17,12 +17,12 @@
       and/or other materials provided with the distribution.
   
    3. The end-user documentation included with the redistribution, if any, must
  -    include  the following  acknowledgment:  "This product includes software
  -    developed  by the  Apache Software Foundation (http://www.apache.org/)."
  -    Alternately, this  acknowledgment may  appear in the software itself, if
  +    include  the following  acknowledgment:   "This product includes software
  +    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  +    Alternately, this  acknowledgment may  appear in the software itself,  if
       and wherever such third-party acknowledgments normally appear.
   
  - 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not be
  + 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
       used to  endorse or promote  products derived from  this software without
       prior written permission. For written permission, please contact
       apache@apache.org.
  @@ -33,7 +33,7 @@
   
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  - FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL THE
  + FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
    APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
    INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
    DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  @@ -108,9 +108,11 @@
   import org.apache.slide.lock.Lock;
   import org.apache.slide.lock.NodeLock;
   import org.apache.slide.macro.Macro;
  +import org.apache.slide.security.AccessDeniedException;
   import org.apache.slide.security.NodePermission;
   import org.apache.slide.security.Security;
   import org.apache.slide.structure.GroupNode;
  +import org.apache.slide.structure.LinkedObjectNotFoundException;
   import org.apache.slide.structure.ObjectNode;
   import org.apache.slide.structure.ObjectNotFoundException;
   import org.apache.slide.structure.Structure;
  @@ -123,20 +125,13 @@
    * @version $Id$
    */
   public class SlideSource extends AbstractLogEnabled
  -  implements Composable, Contextualizable, Source, WriteableSource,
  +  implements Contextualizable, Source, WriteableSource,
                ModifiableTraversableSource, MoveableSource, RestrictableSource,
  -             LockableSource, InspectableSource, VersionableSource
  -{
  -
  -    /** Component manager */
  -    private ComponentManager manager;
  +             LockableSource, InspectableSource, VersionableSource {
   
       /** Component context */
       private Context context;
   
  -    /** Sytem id */
  -    private String systemid;
  -
       /** Namespace access token. */
       private NamespaceAccessToken nat;
   
  @@ -166,7 +161,10 @@
       /** Pseudo scheme */
       private String scheme = "slide";
   
  -    /** The URI of the source*/
  +    /** The path of the source, which means the URI without the scheme */
  +    private String path;
  +
  +    /** Uniform resource ifdentifier */
       private String uri;
   
       /** Revision number */
  @@ -191,15 +189,15 @@
        * Create a slide source.
        *
        * @param nat Namespace access token
  -     * @param scheme Scheme of the source 
  -     * @param uri URI of the source.
  +     * @param scheme Scheme of the source
  +     * @param path Path of the source.
        * @param sourcecredential Credential, which should be used.
        * @param sourcerevision Revision, which should be used.
        * @param sourcerevisionbranch Branch, which should be used.
        *
        * @throws SourceException If Exception occurs during the initialization.
        */
  -    public SlideSource(NamespaceAccessToken nat, String scheme, String uri,
  +    public SlideSource(NamespaceAccessToken nat, String scheme, String path,
                          SourceCredential sourcecredential,
                          String sourcerevision,
                          String sourcerevisionbranch) throws SourceException {
  @@ -210,14 +208,9 @@
           this.nat = nat;
           this.config = this.nat.getNamespaceConfig();
           this.scheme = scheme;
  -        this.uri = uri;
  -        if ((this.uri==null) || (this.uri.length()==0)) {
  -            this.uri = "/";
  -        } else if ( !this.uri.startsWith("/")) {
  -            this.uri = "/"+this.uri;
  -        }
  +        this.path = path;
  +        this.uri = scheme+"://"+path;
   
  -        this.systemid = scheme+":/"+uri; // FIXME dirty hack
           this.sourcerevision = sourcerevision;
           this.sourcerevisionbranch = sourcerevisionbranch;
   
  @@ -228,51 +221,11 @@
           this.macro = nat.getMacroHelper();
   
           this.slideToken = new SlideTokenImpl(credToken);
  -    }
  -
  -    /**
  -     * Pass the ComponentManager to the composer. The Composable implementation
  -     * should use the specified ComponentManager to acquire the components it needs for execution
  -     *
  -     * @param manager The ComponentManager which this Composable uses
  -     *
  -     * @throws ComponentException If a exception occurs.
  -     */
  -    public void compose(ComponentManager manager) throws ComponentException {
  -        this.manager = manager;
  -
  -        try {
  -            initialize(); // FIXME SourceResolver doesn't handle Initializable
  -        } catch (Exception e) {
  -            throw new ComponentException("org.apache.excalibur.source.Source",
  -                                         "Could not initialize component", e);
  -        }
  -    }
  -
  -    /**
  -     * Pass the Context to the component.
  -     * This method is called after the LogEnabled.enableLogging() (if present)
  -     * method and before any other method.
  -     *
  -     * @param context The context.
  -     */
  -    public void contextualize(Context context) {
  -        this.context = context;
  -    }
  -
  -    /**
  -     * Initialialize the component. Initialization includes
  -     * allocating any resources required throughout the
  -     * components lifecycle.
  -     *
  -     * @throws Exception if an error occurs
  -     */
  -    public void initialize() throws Exception {
   
           try {
               this.revisionDescriptors = content.retrieve(this.slideToken,
                                                           this.config.getFilesPath()+
  -                                                        this.uri);
  +                                                        this.path);
   
               // Retrieve latest revision descriptor
               this.revisionDescriptor = content.retrieve(slideToken,
  @@ -283,14 +236,30 @@
   
           } catch (RevisionDescriptorNotFoundException rdnfe) {
   
  -            getLogger().warn("Could not retrieve revision descriptor", rdnfe);
  +            //getLogger().warn("Could not retrieve revision descriptor", rdnfe);
   
               this.revisionDescriptor = null;
               this.sourcerevision = null;
               this.sourcerevisionbranch = null;
           } catch (ObjectNotFoundException onfe) {
  -            getLogger().debug("Source doesn't exist", onfe);
  +            //getLogger().debug("Source doesn't exist", onfe);
  +            // ignore
  +        } catch (SlideException se) {
  +            throw new SourceException("Access denied for source '"+this.uri+
  +                                      "'", se);
           }
  +
  +    }
  +
  +    /**
  +     * Pass the Context to the component.
  +     * This method is called after the LogEnabled.enableLogging() (if present)
  +     * method and before any other method.
  +     *
  +     * @param context The context.
  +     */
  +    public void contextualize(Context context) {
  +        this.context = context;
       }
   
       /**
  @@ -308,7 +277,7 @@
           try {
               ObjectNode object = structure.retrieve(this.slideToken,
                                                      this.config.getFilesPath()+
  -                                                   this.uri);
  +                                                   this.path);
   
               return content.retrieve(slideToken, this.revisionDescriptors,
                                       this.revisionDescriptor).streamContent();
  @@ -323,7 +292,16 @@
        * @return System identifier for the source.
        */
       public String getURI() {
  -        return this.systemid;
  +        return this.uri;
  +    }
  +
  +    /**
  +     * @see org.apache.excalibur.source.Source#getScheme()
  +     *
  +     * @return Scheme of the source.
  +     */
  +    public String getScheme() {
  +        return this.scheme;
       }
   
       /**
  @@ -379,7 +357,7 @@
       public boolean exists() {
           try {
               structure.retrieve(this.slideToken,
  -                               this.config.getFilesPath()+this.uri);
  +                               this.config.getFilesPath()+this.path);
           } catch (SlideException e) {
               return false;
           }
  @@ -393,7 +371,7 @@
        *
        * @return a stream to write to
        *
  -     * @throws IOException    
  +     * @throws IOException
        * @throws SourceException
        */
       public OutputStream getOutputStream()
  @@ -441,8 +419,7 @@
        * A helper can the getOutputStream() method
        */
       public class SlideSourceOutputStream extends ByteArrayOutputStream
  -      implements LogEnabled
  -    {
  +      implements LogEnabled {
           private boolean isClosed = false;
           private Logger logger = null;
   
  @@ -458,7 +435,7 @@
           /**
            *
            *
  -         * @throws IOException    
  +         * @throws IOException
            */
           public void close() throws IOException {
               super.close();
  @@ -474,7 +451,7 @@
                   if (revisionDescriptor==null) {
                       revisionDescriptor = new NodeRevisionDescriptor(0);
   
  -                    String resourceName = config.getFilesPath()+uri;
  +                    String resourceName = config.getFilesPath()+path;
                       int lastSlash = resourceName.lastIndexOf('/');
   
                       if (lastSlash!=-1) {
  @@ -489,19 +466,17 @@
                   revisionDescriptor.setLastModified(new Date());
   
                   nat.begin();
  -
                   if (revisionNumber==null) {
  -                    content.create(slideToken, config.getFilesPath()+uri,
  +                    content.create(slideToken, config.getFilesPath()+path,
                                      revisionDescriptor, null);
                   }
  -                content.store(slideToken, config.getFilesPath()+uri,
  +                content.store(slideToken, config.getFilesPath()+path,
                                 revisionDescriptor, revisionContent);
  -
                   try {
                       nat.commit();
                   } catch (Exception cme) {
  -                    this.logger.warn("Could not commit the transaction.",
  -                                     cme);
  +                    throw new CascadingIOException("Could not commit the transaction",
  +                                                   cme);
                   }
   
               } catch (ObjectNotFoundException e) {
  @@ -512,7 +487,7 @@
                   try {
                       // Creating an object
                       structure.create(slideToken, subject,
  -                                     config.getFilesPath()+uri);
  +                                     config.getFilesPath()+path);
                   } catch (SlideException se) {
                       throw new CascadingIOException(se);
                   }
  @@ -535,7 +510,7 @@
                   String contentType = null;
   
                   try {
  -                    contentType = ((org.apache.cocoon.environment.Context) context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT)).getMimeType(uri);
  +                    contentType = ((org.apache.cocoon.environment.Context) context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT)).getMimeType(path);
                   } catch (ContextException ce) {
                       this.logger.warn("Could not get context to determine the mime type.");
                   }
  @@ -556,14 +531,15 @@
                   revisionContent.setContent(bytes);
   
                   try {
  -                    content.create(slideToken, config.getFilesPath()+uri,
  +                    content.create(slideToken, config.getFilesPath()+path,
                                      revisionDescriptor, revisionContent);
   
                       try {
                           nat.commit();
                       } catch (Exception cme) {
  -                        this.logger.warn("Could not commit the transaction.",
  -                                         cme);
  +                        throw new CascadingIOException("Could not commit the transaction",
  +                                                       cme);
  +
                       }
                   } catch (SlideException se) {
   
  @@ -574,21 +550,16 @@
                                            rbe);
                       }
   
  -                    this.logger.error("Could not create source", se);
  -                    throw new CascadingIOException(se.getMessage(), se);
  +                    throw new CascadingIOException("Could not create source",
  +                                                   se);
                   }
   
               } catch (Exception e) {
  -                this.logger.error("Could not create source", e);
  -                throw new CascadingIOException(e.getMessage(), e);
  -            } finally {
  -
  -                try {
  -                    nat.rollback();
  -                } catch (Exception rbe) {
  -                    this.logger.warn("Could not rollback the transaction.",
  -                                     rbe);
  +                if (e instanceof IOException) {
  +                    throw (IOException)e;
                   }
  +                throw new CascadingIOException("Could not create source", e);
  +            } finally {
   
                   this.isClosed = true;
               }
  @@ -610,7 +581,6 @@
            * <p>
            * After cancel, the stream should no more be used.
            *
  -         * @throws SourceException If the ouput stream can't be cancelled.
            */
           public void cancel() throws Exception {
               if (this.isClosed) {
  @@ -625,7 +595,8 @@
       /**
        * Move the current source to a specified destination.
        *
  -     * @param destination Destination of the source.
  +     *
  +     * @param source     
        *
        * @throws SourceException If an exception occurs during
        *                         the move.
  @@ -634,9 +605,9 @@
           if (source instanceof SlideSource) {
               try {
                   this.macro.move(slideToken,
  -                                this.config.getFilesPath()+this.uri,
  +                                this.config.getFilesPath()+this.path,
                                   this.config.getFilesPath()+
  -                                ((SlideSource) source).uri);
  +                                ((SlideSource) source).path);
               } catch (SlideException se) {
                   throw new SourceException("Could not move source.", se);
               }
  @@ -648,7 +619,8 @@
       /**
        * Copy the current source to a specified destination.
        *
  -     * @param destination Destination of the source.
  +     *
  +     * @param source     
        *
        * @throws SourceException If an exception occurs during
        *                         the copy.
  @@ -657,9 +629,9 @@
           if (source instanceof SlideSource) {
               try {
                   this.macro.copy(slideToken,
  -                                this.config.getFilesPath()+this.uri,
  +                                this.config.getFilesPath()+this.path,
                                   this.config.getFilesPath()+
  -                                ((SlideSource) source).uri);
  +                                ((SlideSource) source).path);
               } catch (SlideException se) {
                   throw new SourceException("Could not move source.", se);
               }
  @@ -676,7 +648,7 @@
       public void delete() throws SourceException {
           try {
               this.macro.delete(slideToken,
  -                              this.config.getFilesPath()+this.uri);
  +                              this.config.getFilesPath()+this.path);
           } catch (SlideException se) {
               throw new SourceException("Could not delete source.", se);
           }
  @@ -710,58 +682,6 @@
       }
   
       /**
  -     * Get the value of a parameter.
  -     * Using this it is possible to get custom information provided by the
  -     * source implementation, like an expires date, HTTP headers etc.
  -     *
  -     * @param name Name of the parameter.
  -     *
  -     * @return Value of the parameter.
  -     */
  -    public String getParameter(String name) {
  -        return null;
  -    }
  -
  -    /**
  -     * Get the value of a parameter.
  -     * Using this it is possible to get custom information provided by the
  -     * source implementation, like an expires date, HTTP headers etc.
  -     *
  -     * @param name Name of the parameter. 
  -     *
  -     * @return Value of the parameter a long.
  -     */
  -    public long getParameterAsLong(String name) {
  -        return 0;
  -    }
  -
  -    /**
  -     * Get parameter names
  -     * Using this it is possible to get custom information provided by the
  -     * source implementation, like an expires date, HTTP headers etc.
  -     *
  -     * @return
  -     */
  -    public Iterator getParameterNames() {
  -        return new EmptyIterator();
  -    }
  -
  -    class EmptyIterator implements Iterator
  -    {
  -
  -        public boolean hasNext() {
  -            return false;
  -        }
  -
  -        public Object next() {
  -            return null;
  -        }
  -
  -        public void remove() {
  -        }
  -    }
  -
  -    /**
        * Tests whether a resource is a collection resource.
        *
        * @return true if the descriptor represents a collection, false otherwise
  @@ -798,7 +718,7 @@
               int i = 0;
   
               for (Enumeration children = structure.retrieve(this.slideToken,
  -                this.config.getFilesPath()+this.uri).enumerateChildren();
  +                this.config.getFilesPath()+this.path).enumerateChildren();
                   children.hasMoreElements(); )
                   if (((String) children.nextElement()).startsWith(this.config.getFilesPath())) {
                       i++;
  @@ -824,7 +744,7 @@
               String child;
   
               for (Enumeration children = structure.retrieve(this.slideToken,
  -                this.config.getFilesPath()+this.uri).enumerateChildren();
  +                this.config.getFilesPath()+this.path).enumerateChildren();
                   children.hasMoreElements(); ) {
                   child = (String) children.nextElement();
   
  @@ -850,17 +770,17 @@
        * @return System identifier of the parent source.
        */
       public String getParentSource() {
  -        if ((this.uri==null) || (this.uri.length()<=1)) {
  +        if ((this.path==null) || (this.path.length()<=1)) {
               return null;
           }
   
  -        if (this.uri.endsWith("/")) {
  +        if (this.path.endsWith("/")) {
               return scheme+":/"+
  -                   this.uri.substring(0, this.uri.substring(0,
  -                       this.uri.length()-1).lastIndexOf("/"));
  +                   this.path.substring(0, this.path.substring(0,
  +                       this.path.length()-1).lastIndexOf("/"));
           }
   
  -        return scheme+":/"+this.uri.substring(0, this.uri.lastIndexOf("/"));
  +        return scheme+":/"+this.path.substring(0, this.path.lastIndexOf("/"));
       }
   
       /**
  @@ -897,10 +817,10 @@
   
           try {
               structure.create(slideToken, collection,
  -                             this.config.getFilesPath()+this.uri+"/"+
  +                             this.config.getFilesPath()+this.path+"/"+
                                collectionname);
               content.create(slideToken,
  -                           this.config.getFilesPath()+this.uri+"/"+
  +                           this.config.getFilesPath()+this.path+"/"+
                              collectionname, revisionDescriptor, null);
           } catch (SlideException se) {
               throw new SourceException("Could not create collection.", se);
  @@ -1123,15 +1043,15 @@
                                  boolean inheritable) throws SourceException {
           try {
               NodePermission permission = new NodePermission(this.config.getFilesPath()+
  -                                            this.uri, subject, action,
  -                                                      inheritable, negative);
  +                                            this.path, subject, action,
  +                                                       inheritable, negative);
   
               this.security.grantPermission(this.slideToken, permission);
   
               // Last modification date
               revisionDescriptor.setLastModified(new Date());
   
  -            content.store(slideToken, this.config.getFilesPath()+this.uri,
  +            content.store(slideToken, this.config.getFilesPath()+this.path,
                             revisionDescriptor, null);
   
           } catch (SlideException se) {
  @@ -1328,15 +1248,15 @@
                                       throws SourceException {
           try {
               NodePermission permission = new NodePermission(this.config.getFilesPath()+
  -                                            this.uri, subject, action,
  -                                                      inheritable, negative);
  +                                            this.path, subject, action,
  +                                                       inheritable, negative);
   
               this.security.revokePermission(this.slideToken, permission);
   
               // Last modification date
               revisionDescriptor.setLastModified(new Date());
   
  -            content.store(slideToken, this.config.getFilesPath()+this.uri,
  +            content.store(slideToken, this.config.getFilesPath()+this.path,
                             revisionDescriptor, null);
   
           } catch (SlideException se) {
  @@ -1359,7 +1279,7 @@
   
               ObjectNode current = structure.retrieve(this.slideToken,
                                                       this.config.getFilesPath()+
  -                                                    this.uri);
  +                                                    this.path);
   
               security.checkCredentials(this.slideToken, current,
                                         config.getReadPermissionsAction());
  @@ -1648,7 +1568,7 @@
               NodeLock lock;
   
               for (Enumeration locks = this.lock.enumerateLocks(this.slideToken,
  -                this.config.getFilesPath()+this.uri, false);
  +                this.config.getFilesPath()+this.path, false);
                   locks.hasMoreElements(); ) {
                   lock = (NodeLock) locks.nextElement();
   
  @@ -1682,7 +1602,7 @@
               // Last modification date
               revisionDescriptor.setLastModified(new Date());
   
  -            content.store(slideToken, this.config.getFilesPath()+this.uri,
  +            content.store(slideToken, this.config.getFilesPath()+this.path,
                             revisionDescriptor, null);
           } catch (SlideException se) {
               throw new SourceException("Could not set property", se);
  @@ -1761,7 +1681,7 @@
                   revisionDescriptor.setLastModified(new Date());
   
                   content.store(slideToken,
  -                              this.config.getFilesPath()+this.uri,
  +                              this.config.getFilesPath()+this.path,
                                 revisionDescriptor, null);
               }
           } catch (SlideException se) {
  @@ -1780,7 +1700,7 @@
           try {
               this.revisionDescriptors = content.retrieve(this.slideToken,
                                                           this.config.getFilesPath()+
  -                                                        this.uri);
  +                                                        this.path);
   
               return this.revisionDescriptors.hasRevisions();
   
  @@ -1815,7 +1735,7 @@
           try {
               this.revisionDescriptors = content.retrieve(this.slideToken,
                                                           this.config.getFilesPath()+
  -                                                        this.uri);
  +                                                        this.path);
   
               // Retrieve revision descriptor by the revision
               this.revisionDescriptor = content.retrieve(slideToken,
  @@ -1864,7 +1784,7 @@
           try {
               this.revisionDescriptors = content.retrieve(this.slideToken,
                                                           this.config.getFilesPath()+
  -                                                        this.uri);
  +                                                        this.path);
   
               return this.revisionDescriptors.getLatestRevision().toString();
   
  @@ -1872,15 +1792,6 @@
               throw new SourceException("Could not retrieve revision descriptor",
                                         se);
           }
  -    }
  -
  -    /**
  -     * @see org.apache.excalibur.source.Source#getProtocol()
  -     *
  -     * @return Scheme of the source.
  -     */
  -    public String getScheme() {
  -        return this.scheme;
       }
   }
   
  
  
  
  1.8       +146 -126  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSourceFactory.java
  
  Index: SlideSourceFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SlideSourceFactory.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SlideSourceFactory.java	30 Jan 2003 08:37:34 -0000	1.7
  +++ SlideSourceFactory.java	30 Jan 2003 20:01:08 -0000	1.8
  @@ -1,57 +1,53 @@
   /*
  - * The Apache Software License, Version 1.1
  - *
  - *
  - * Copyright (c) 2001 The Apache Software Foundation.  All rights
  - * reserved.
  - *
  - * Redistribution and use in source and binary forms, with or without
  - * modification, are permitted provided that the following conditions
  - * are met:
  - *
  - * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer.
  - *
  - * 2. Redistributions in binary form must reproduce the above copyright
  - *    notice, this list of conditions and the following disclaimer in
  - *    the documentation and/or other materials provided with the
  - *    distribution.
  - *
  - * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:
  - *       "This product includes software developed by the
  - *        Apache Software Foundation (http://www.apache.org/)."
  - *    Alternately, this acknowledgment may appear in the software itself,
  - *    if and wherever such third-party acknowledgments normally appear.
  - *
  - * 4. The names "Apache Cocoon" and "Apache Software Foundation" must
  - *    not be used to endorse or promote products derived from this
  - *    software without prior written permission. For written
  - *    permission, please contact apache@apache.org.
  - *
  - * 5. Products derived from this software may not be called "Apache",
  - *    nor may "Apache" appear in their name, without prior written
  - *    permission of the Apache Software Foundation.
  - *
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - * SUCH DAMAGE.
  - * ====================================================================
  - *
  - * This software consists of voluntary contributions made by many
  - * individuals on behalf of the Apache Software Foundation.  For more
  - * information on the Apache Software Foundation, please see
  - * <http://www.apache.org/>.
  - */
  +
  + ============================================================================
  +                   The Apache Software License, Version 1.1
  + ============================================================================
  +
  + Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  +
  + Redistribution and use in source and binary forms, with or without modifica-
  + tion, are permitted provided that the following conditions are met:
  +
  + 1. Redistributions of  source code must  retain the above copyright  notice,
  +    this list of conditions and the following disclaimer.
  +
  + 2. Redistributions in binary form must reproduce the above copyright notice,
  +    this list of conditions and the following disclaimer in the documentation
  +    and/or other materials provided with the distribution.
  +
  + 3. The end-user documentation included with the redistribution, if any, must
  +    include  the following  acknowledgment:   "This product includes software
  +    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  +    Alternately, this  acknowledgment may  appear in the software itself,  if
  +    and wherever such third-party acknowledgments normally appear.
  +
  + 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
  +    used to  endorse or promote  products derived from  this software without
  +    prior written permission. For written permission, please contact
  +    apache@apache.org.
  +
  + 5. Products  derived from this software may not  be called "Apache", nor may
  +    "Apache" appear  in their name,  without prior written permission  of the
  +    Apache Software Foundation.
  +
  + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
  + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  + FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
  + APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
  + INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
  + DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  + OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
  + ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
  + (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
  + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  +
  + This software  consists of voluntary contributions made  by many individuals
  + on  behalf of the Apache Software  Foundation and was  originally created by
  + Stefano Mazzocchi  <stefano@apache.org>. For more  information on the Apache
  + Software Foundation, please see <http://www.apache.org/>.
  +
  +*/
   
   package org.apache.cocoon.components.source.impl;
   
  @@ -72,6 +68,7 @@
   
   import org.apache.cocoon.components.repository.Repository;
   import org.apache.cocoon.components.repository.impl.SlideRepository;
  +import org.apache.cocoon.components.source.SourceUtil;
   import org.apache.cocoon.components.source.helpers.SourceCredential;
   
   import org.apache.excalibur.source.Source;
  @@ -79,8 +76,10 @@
   import org.apache.excalibur.source.SourceFactory;
   import org.apache.excalibur.source.SourceParameters;
   
  +import org.apache.slide.common.NamespaceAccessToken;
  +
   /**
  - * A factory for sources from a Jakarta SLide repository. 
  + * A factory for sources from a Jakarta Slide repository.
    *
    * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
    * @version $Id$
  @@ -90,108 +89,126 @@
   
       /** The component manager instance */
       private ComponentManager manager = null;
  -	private Context context;
  +    private Context context;
   
       /**
        * Set the current <code>ComponentManager</code> instance used by this
        * <code>Composable</code>.
  +     *
  +     * @param manager Component manager.
        */
       public void compose(ComponentManager manager) throws ComponentException {
           this.manager = manager;
       }
   
  -
       /**
        * Get a <code>Source</code> object.
  +     *
  +     * @param uri URI of the source.
        * @param parameters This is optional.
  +     *
  +     * @return A new source object.
        */
  -    public Source getSource(String location, Map parameters)
  -        throws MalformedURLException, IOException, SourceException {
  -        if ((this.getLogger()!=null) && (this.getLogger().isDebugEnabled())) {
  -            this.getLogger().debug( "Creating source object for " + location );
  -        }
  -
  -        String protocol = "slide";
  -        int position = location.indexOf("://");
  -        if (position >= 0) {
  -            protocol = location.substring(0, position);
  -            position += 3;
  -        } else
  -            position = 0;
  -
  -        // create the queryString (if available)
  -        String queryString = null;
  -        SourceParameters locationParameters = null;
  -        int queryStringPos = location.indexOf('?');
  -        if (queryStringPos != -1) {
  -            queryString = location.substring(queryStringPos + 1);
  -            location = location.substring(position-1, queryStringPos);
  -            locationParameters = new SourceParameters(queryString);
  -
  -        } else if (position > 0) {
  -            location = location.substring(position-1);
  -            locationParameters = new SourceParameters();
  -        }
  -
  -        if ((this.getLogger()!=null) && (this.getLogger().isDebugEnabled())) 
  -          this.getLogger().debug( "Location is  " + location + " QueryString is " + queryString);
  -        this.getLogger().debug( "Source parameters:  " + locationParameters.toString());
  -
  -        String repositoryname = locationParameters.getParameter("cocoon-repository", null);
  -        String namespace = locationParameters.getParameter("cocoon-repository-namespace", null);
  -        String principal = locationParameters.getParameter("cocoon-source-principal", "guest");
  -        String password = locationParameters.getParameter("cocoon-source-password", null);
  -        String revision = locationParameters.getParameter("cocoon-source-revision", null);
  -        String branch = locationParameters.getParameter("cocoon-source-branch", null);
  +    public Source getSource(String uri,
  +                            Map parameters)
  +                              throws MalformedURLException, IOException,
  +                                     SourceException {
  +        this.getLogger().debug("Creating source object for '"+uri+"'");
  +
  +        String scheme = SourceUtil.getScheme(uri);
  +
  +        String path = SourceUtil.getPathWithoutAuthority(uri);
  +
  +        if ((path==null) || (path.length()==0)) {
  +            path = "/";
  +        } else if ( !path.startsWith("/")) {
  +            path = "/"+path;
  +        }
  +
  +        String query = SourceUtil.getQuery(uri);
  +        SourceParameters queryParameters = null;
  +
  +        if ((query==null) || (query.length()==0)) {
  +            queryParameters = new SourceParameters();
  +        } else {
  +            queryParameters = new SourceParameters(query);
  +        }
  +
  +        this.getLogger().debug("Path is "+path);
  +        this.getLogger().debug("Query is "+query);
  +        this.getLogger().debug("Source parameters:  "+
  +                               queryParameters.toString());
  +
  +        String repositoryname = queryParameters.getParameter("cocoon-repository",
  +                                    null);
  +        String namespace = queryParameters.getParameter("cocoon-repository-namespace",
  +                               null);
  +        String principal = queryParameters.getParameter("cocoon-source-principal",
  +                               "guest");
  +        String password = queryParameters.getParameter("cocoon-source-password",
  +                              null);
  +        String revision = queryParameters.getParameter("cocoon-source-revision",
  +                              null);
  +        String branch = queryParameters.getParameter("cocoon-source-branch",
  +                            null);
   
           getLogger().debug("Used prinical '"+principal+"' for source");
   
           SourceCredential credential;
  -        if (password!=null)
  +
  +        if (password!=null) {
               credential = new SourceCredential(principal, password);
  -        else
  +        } else {
               credential = new SourceCredential(principal);
  +        }
   
  -        if (location.length()==0)
  -          location = "/";
  +        if (path.length()==0) {
  +            path = "/";
  +        }
   
           ComponentSelector repositories = null;
           Repository repository = null;
  +
           try {
  -            repositories = (ComponentSelector)this.manager.lookup(Repository.ROLE+"Selector");
  +            repositories = (ComponentSelector) this.manager.lookup(Repository.ROLE+
  +                "Selector");
   
  -            repository = (Repository)repositories.select(repositoryname);
  +            repository = (Repository) repositories.select(repositoryname);
   
  -            if (!(repository instanceof SlideRepository)) {
  -                getLogger().error("Can't get Slide repository"); 
  +            if ( !(repository instanceof SlideRepository)) {
  +                getLogger().error("Can't get Slide repository");
                   return null;
               }
   
  -            SlideRepository sliderepository = 
  -                (SlideRepository)repository;
  +            SlideRepository sliderepository = (SlideRepository) repository;
   
  -            if (namespace==null)
  -                namespace = sliderepository.getDomain().getDefaultNamespace();
  +            NamespaceAccessToken nat = sliderepository.getNamespaceToken(namespace);
  +
  +            if (nat==null) {
  +                throw new SourceException("Repository with the namespace '"+
  +                                          namespace+"' couldn't be found");
  +            }
   
  -            if (sliderepository.getDomain().getNamespaceToken(namespace)==null)
  -                throw new SourceException("Repository with the namespace '"+namespace+"' couldn't be found");
  +            SlideSource source = new SlideSource(nat, scheme, path,
  +                                                 credential, revision,
  +                                                 branch);
   
  -            SlideSource source = new SlideSource(sliderepository.getDomain().getNamespaceToken(namespace), 
  -                                   protocol, location, credential, revision, branch);
  +            source.enableLogging(getLogger());
               source.contextualize(this.context);
  -            source.compose(this.manager);
  -            
  +
               return source;
   
           } catch (ComponentException ce) {
               getLogger().error("Could not lookup for component.", ce);
           } finally {
  -            if ((repository!=null) && (repository instanceof Component))
  -                repositories.release((Component)repository);
  +            if ((repository!=null) && (repository instanceof Component)) {
  +                repositories.release((Component) repository);
  +            }
               repository = null;
   
  -            if (repositories!=null)
  +            if (repositories!=null) {
                   this.manager.release(repositories);
  +            }
               repositories = null;
           }
   
  @@ -200,21 +217,24 @@
   
       /**
        * Release a {@link Source} object.
  +     *
  +     * @param source Source, which should be released.
        */
  -    public void release( Source source ) {
  -        if ( null != source ) {
  -            if ( this.getLogger().isDebugEnabled() ) {
  -                this.getLogger().debug("Releasing source " + source.getURI());
  -            }
  +    public void release(Source source) {
  +        if (null!=source) {
  +            this.getLogger().debug("Releasing source "+source.getURI());
               // simply do nothing
           }
       }
  -	/**
  -	 * @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
  -	 */
  -	public void contextualize(Context context) throws ContextException {
  +
  +    /**
  +     * @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
  +     *
  +     * @param context The context.
  +     */
  +    public void contextualize(Context context) throws ContextException {
           this.context = context;
  -	}
  +    }
   
   }
   
  
  
  
  1.19      +33 -46    xml-cocoon2/src/scratchpad/src/org/apache/cocoon/generation/SourceDescriptionGenerator.java
  
  Index: SourceDescriptionGenerator.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/generation/SourceDescriptionGenerator.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- SourceDescriptionGenerator.java	30 Jan 2003 08:37:36 -0000	1.18
  +++ SourceDescriptionGenerator.java	30 Jan 2003 20:01:08 -0000	1.19
  @@ -9,7 +9,7 @@
    Redistribution and use in source and binary forms, with or without modifica-
    tion, are permitted provided that the following conditions are met:
   
  - 1. Redistributions of  source code must  retain the above copyright notice,
  + 1. Redistributions of  source code must  retain the above copyright  notice,
       this list of conditions and the following disclaimer.
   
    2. Redistributions in binary form must reproduce the above copyright notice,
  @@ -17,12 +17,12 @@
       and/or other materials provided with the distribution.
   
    3. The end-user documentation included with the redistribution, if any, must
  -    include  the following  acknowledgment:  "This product includes software
  -    developed  by the  Apache Software Foundation (http://www.apache.org/)."
  -    Alternately, this  acknowledgment may  appear in the software itself, if
  +    include  the following  acknowledgment:   "This product includes software
  +    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
  +    Alternately, this  acknowledgment may  appear in the software itself,  if
       and wherever such third-party acknowledgments normally appear.
   
  - 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not be
  + 4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
       used to  endorse or promote  products derived from  this software without
       prior written permission. For written permission, please contact
       apache@apache.org.
  @@ -33,7 +33,7 @@
   
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  - FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL THE
  + FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
    APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
    INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
    DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
  @@ -91,8 +91,7 @@
    * @version CVS $Id$
    */
   public class SourceDescriptionGenerator extends ComposerGenerator
  -  implements CacheableProcessingComponent, Recyclable
  -{
  +  implements CacheableProcessingComponent, Recyclable {
   
       /** Namespace of the source description. */
       private static final String SOURCE_NS = "http://xml.apache.org/cocoon/source/2.0";
  @@ -105,7 +104,7 @@
                                                       SOURCE_NODE_NAME;
   
       private static final String NAME_ATTR_NAME = "name";
  -    private static final String SYSTEMID_ATTR_NAME = "systemid";
  +    private static final String URI_ATTR_NAME = "uri";
       private static final String MIMETYPE_ATTR_NAME = "mime-type";
       private static final String CONTENTLENGTH_ATTR_NAME = "contentlength";
       private static final String LASTMODIFIED_ATTR_NAME = "lastmodified";
  @@ -175,11 +174,7 @@
        * @param resolver Source Resolver
        * @param objectModel Object model.
        * @param location Location of the source.
  -     * @param parameters Parameters for the generator. 
  -     *
  -     * @throws IOException If an IO exception occurs.
  -     * @throws ProcessingException If an exception occurs, during the processing.
  -     * @throws SAXException If a SAX exception occurs.
  +     * @param parameters Parameters for the generator.
        */
       public void setup(SourceResolver resolver, Map objectModel,
                         String location,
  @@ -264,14 +259,20 @@
        * @param uri Uri of the source.
        * @param deep Deep of the hirachy, which should traversed.
        */
  -    private void collectSources(Hashtable sources, String uri, int deep) {
  +    private void collectSources(Hashtable sources, String uri,
  +                                int deep) throws ProcessingException {
           Source source = null;
   
           try {
               source = this.resolver.resolveURI(uri+this.queryString);
           } catch (Exception e) {
  -            getLogger().warn("Could not retrieve source with the id '"+uri+
  -                             "'", e);
  +            if (sources.isEmpty()) {
  +                throw new ProcessingException("Could not retrieve source with the uri '"+
  +                                              uri+"'", e);
  +            }
  +
  +            getLogger().debug("Could not retrieve source with the uri '"+uri+
  +                              "'", e);
               return;
           }
   
  @@ -296,10 +297,6 @@
   
       /**
        * Generate XML data.
  -     *
  -     * @throws IOException If an IO exception occurs.
  -     * @throws ProcessingException If an exception occurs, during the processing.
  -     * @throws SAXException If a SAX exception occurs.
        */
       public void generate()
         throws IOException, SAXException, ProcessingException {
  @@ -308,6 +305,10 @@
               this.contentHandler.startDocument();
               this.contentHandler.startPrefixMapping(SOURCE_PREFIX, SOURCE_NS);
   
  +            if (((Source) this.cachedsources.get(this.source))==null) {
  +                throw new ProcessingException("Could not retrieve source with the uri '"+
  +                                              this.source+"'");
  +            }
               pushSourceDescription(this.source, this.deep);
   
               this.contentHandler.endPrefixMapping(SOURCE_PREFIX);
  @@ -321,29 +322,27 @@
       /**
        * Push a XML description of specified source.
        *
  -     * @param systemid System identifier of the source.
  +     * @param uri Uniform resource identifier of the source.
        * @param deep Deep of the hirachy, which should traversed.
  -     *
  -     * @throws IOException If an IO exception occurs.
  -     * @throws ProcessingException If an exception occurs, during the processing.
  -     * @throws SAXException If a SAX exception occurs.
  -     * @throws SourceException If a source exception occurs.
        */
  -    private void pushSourceDescription(String systemid,
  +    private void pushSourceDescription(String uri,
                                          int deep)
                                            throws SAXException,
                                                   SourceException,
                                                   ProcessingException,
                                                   IOException {
   
  -        Source source = (Source) this.cachedsources.get(systemid);
  +        Source source = (Source) this.cachedsources.get(uri);
  +
  +        if (source==null) {
  +            return;
  +        }
   
           try {
               AttributesImpl attributes = new AttributesImpl();
   
  -            attributes.addAttribute(SOURCE_NS, SYSTEMID_ATTR_NAME,
  -                                    SYSTEMID_ATTR_NAME, "CDATA",
  -                                    source.getURI());
  +            attributes.addAttribute(SOURCE_NS, URI_ATTR_NAME, URI_ATTR_NAME,
  +                                    "CDATA", source.getURI());
   
               String name = source.getURI();
   
  @@ -489,10 +488,7 @@
        * Push a XML description about all properties, which
        * the source owns.
        *
  -     * @param source Source.  
  -     *
  -     * @throws SAXException If a SAX exception occurs.  
  -     * @throws SourceException If a source exception occurs.
  +     * @param source Source.
        */
       private void pushLiveSourceProperties(InspectableSource source)
         throws SAXException, SourceException {
  @@ -526,9 +522,6 @@
        * were computed by source inspectors.
        *
        * @param source Source
  -     *
  -     * @throws SAXException If a SAX exception occurs.  
  -     * @throws SourceException If a source exception occurs.
        */
       private void pushComputedSourceProperties(Source source)
         throws SAXException, SourceException {
  @@ -573,9 +566,6 @@
        * Push a XML description of all permissions of a source.
        *
        * @param source Source
  -     *
  -     * @throws SAXException If a SAX exception occurs.  
  -     * @throws SourceException If a source exception occurs.
        */
       private void pushSourcePermissions(RestrictableSource source)
         throws SAXException, SourceException {
  @@ -628,9 +618,6 @@
        * Push a XML description about all locks of a source.
        *
        * @param source Source
  -     *
  -     * @throws SAXException If a SAX exception occurs.  
  -     * @throws SourceException If a source exception occurs.
        */
       public void pushSourceLocks(LockableSource source)
         throws SAXException, SourceException {
  
  
  
  1.7       +14 -14    xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4content.xsl
  
  Index: description2html4content.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4content.xsl,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- description2html4content.xsl	30 Aug 2002 08:08:10 -0000	1.6
  +++ description2html4content.xsl	30 Jan 2003 20:01:08 -0000	1.7
  @@ -24,24 +24,24 @@
          <table bgcolor="#000000" border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
            <tr>
               <td width="90%" align="left" bgcolor="#0086b2"><font size="+1" face="arial,helvetica,sanserif"
  -    color="#ffffff"><xsl:value-of select="source:source/@source:systemid"/></font></td>
  +    color="#ffffff"><xsl:value-of select="source:source/@source:uri"/></font></td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/users/">
                <i>users</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/content/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/content/{substring-after(source:source/@source:uri,'://')}">
                <i>content</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/properties/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/properties/{substring-after(source:source/@source:uri,'://')}">
                <i>properties</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/permissions/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/permissions/{substring-after(source:source/@source:uri,'://')}">
                <i>permissions</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/locks/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/locks/{substring-after(source:source/@source:uri,'://')}">
                <i>locks</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/logout.html">
  @@ -98,7 +98,7 @@
                 <tr>
                  <td width="100%" bgcolor="#ffffff" align="left">
                   <font size="+0" face="arial,helvetica,sanserif" color="#000000">
  -                 <a href="/cocoon/samples/slide/content/{substring-after(@source:systemid,'://')}"
  +                 <a href="/cocoon/samples/slide/content/{substring-after(@source:uri,'://')}"
                     ><xsl:value-of select="@source:name"/></a>
                   </font>
                  </td>
  @@ -147,7 +147,7 @@
                   <xsl:for-each select="source:children/source:source">
                    <tr>
                     <td align="left">&#160;&#160;
  -                   <a href="/cocoon/samples/slide/content/{substring-after(@source:systemid,'://')}"
  +                   <a href="/cocoon/samples/slide/content/{substring-after(@source:uri,'://')}"
                       ><xsl:value-of select="@source:name"/></a>
                     </td>
                     <td align="left"><xsl:value-of
  @@ -159,7 +159,7 @@
                     <td align="right">
                      <form action="" method="post">
                       <input type="hidden" name="method" value="doDeleteSource"/>
  -                    <input type="hidden" name="cocoon-source-uri" value="{@source:systemid}"/>
  +                    <input type="hidden" name="cocoon-source-uri" value="{@source:uri}"/>
                       <input type="submit" name="cocoon-action-deletesource" value="Delete"/>
                      </form>
                     </td>
  @@ -169,7 +169,7 @@
                   <tr>
                    <form action="" method="post" enctype="multipart/form-data">
                     <input type="hidden" name="method" value="doUploadSource"/>
  -                  <input type="hidden" name="cocoon-source-uri" value="{@source:systemid}"/>
  +                  <input type="hidden" name="cocoon-source-uri" value="{@source:uri}"/>
                     <td align="left">
                      <input type="text" name="cocoon-source-name" size="15" maxlength="40"/>(optional)
                     </td>
  @@ -186,7 +186,7 @@
                   <tr>
                    <form action="" method="post">
                     <input type="hidden" name="method" value="doCreateCollection"/>
  -                  <input type="hidden" name="cocoon-source-uri" value="{@source:systemid}"/>
  +                  <input type="hidden" name="cocoon-source-uri" value="{@source:uri}"/>
                     <td align="left" colspan="4">
                      <input type="text" name="cocoon-source-name" size="15" maxlength="40"/>
                     </td>
  @@ -200,22 +200,22 @@
                </xsl:when>
   
                <xsl:when test="@source:mime-type='image/gif'">
  -              <img src="/cocoon/samples/slide/view/{substring-after(@source:systemid,'://')}"/>
  +              <img src="/cocoon/samples/slide/view/{substring-after(@source:uri,'://')}"/>
                </xsl:when>
   
                <xsl:when test="@source:mime-type='image/jpeg'">
  -              <img src="/cocoon/samples/slide/view/{substring-after(@source:systemid,'://')}"/>
  +              <img src="/cocoon/samples/slide/view/{substring-after(@source:uri,'://')}"/>
                </xsl:when>
   
                <xsl:when test="@source:mime-type='text/plain'">
                 <pre>
  -               <xi:include href="{@source:systemid}" parse="text"/>
  +               <xi:include href="{@source:uri}" parse="text"/>
                 </pre>
                </xsl:when>
   
                <xsl:when test="@source:mime-type='text/xml'">
                 <pre>
  -               <xi:include href="{@source:systemid}" parse="text"/>
  +               <xi:include href="{@source:uri}" parse="text"/>
                 </pre>
                </xsl:when>
   
  
  
  
  1.4       +8 -8      xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4locks.xsl
  
  Index: description2html4locks.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4locks.xsl,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- description2html4locks.xsl	19 Aug 2002 08:08:11 -0000	1.3
  +++ description2html4locks.xsl	30 Jan 2003 20:01:08 -0000	1.4
  @@ -23,24 +23,24 @@
          <table bgcolor="#000000" border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
            <tr>
               <td width="90%" align="left" bgcolor="#0086b2"><font size="+1" face="arial,helvetica,sanserif"
  -    color="#ffffff"><xsl:value-of select="source:source/@source:systemid"/></font></td>
  +    color="#ffffff"><xsl:value-of select="source:source/@source:uri"/></font></td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/users/">
                <i>users</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/content/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/content/{substring-after(source:source/@source:uri,'://')}">
                <i>content</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/properties/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/properties/{substring-after(source:source/@source:uri,'://')}">
                <i>properties</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/permissions/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/permissions/{substring-after(source:source/@source:uri,'://')}">
                <i>permissions</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/locks/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/locks/{substring-after(source:source/@source:uri,'://')}">
                <i>locks</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/logout.html">
  @@ -97,7 +97,7 @@
                 <tr>
                  <td width="100%" bgcolor="#ffffff" align="left">
                   <font size="+0" face="arial,helvetica,sanserif" color="#000000">
  -                 <a href="/cocoon/samples/slide/locks/{substring-after(@source:systemid,'://')}"
  +                 <a href="/cocoon/samples/slide/locks/{substring-after(@source:uri,'://')}"
                     ><xsl:value-of select="@source:name"/></a>
                   </font>
                  </td>
  @@ -150,7 +150,7 @@
                   <td align="right">
                    <form action="" method="post">
                     <input type="hidden" name="method" value="doDeleteLock"/>
  -                  <input type="hidden" name="cocoon-source-uri" value="{../../@source:systemid}"/>
  +                  <input type="hidden" name="cocoon-source-uri" value="{../../@source:uri}"/>
                     <input type="hidden" name="cocoon-lock-subject" value="{@subject}"/>
   
                     <input type="submit" name="cocoon-action-deletelock" value="Delete"/>
  @@ -162,7 +162,7 @@
                 <tr>
                  <form action="" method="post">
                   <input type="hidden" name="method" value="doAddLock"/>
  -                <input type="hidden" name="cocoon-source-uri" value="{@source:systemid}"/>
  +                <input type="hidden" name="cocoon-source-uri" value="{@source:uri}"/>
                   <td align="left">
                    <input name="cocoon-lock-subject" type="text" size="20" maxlength="40"/>
                   </td>
  
  
  
  1.6       +10 -10    xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4permissions.xsl
  
  Index: description2html4permissions.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4permissions.xsl,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- description2html4permissions.xsl	19 Aug 2002 14:06:50 -0000	1.5
  +++ description2html4permissions.xsl	30 Jan 2003 20:01:08 -0000	1.6
  @@ -24,24 +24,24 @@
          <table bgcolor="#000000" border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
            <tr>
               <td width="90%" align="left" bgcolor="#0086b2"><font size="+1" face="arial,helvetica,sanserif"
  -    color="#ffffff"><xsl:value-of select="document/source:source/@source:systemid"/></font></td>
  +    color="#ffffff"><xsl:value-of select="document/source:source/@source:uri"/></font></td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/users/">
                <i>users</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/content/{substring-after(document/source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/content/{substring-after(document/source:source/@source:uri,'://')}">
                <i>content</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/properties/{substring-after(document/source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/properties/{substring-after(document/source:source/@source:uri,'://')}">
                <i>properties</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/permissions/{substring-after(document/source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/permissions/{substring-after(document/source:source/@source:uri,'://')}">
                <i>permissions</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/locks/{substring-after(document/source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/locks/{substring-after(document/source:source/@source:uri,'://')}">
                <i>locks</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/logout.html">
  @@ -98,7 +98,7 @@
                 <tr>
                  <td width="100%" bgcolor="#ffffff" align="left">
                   <font size="+0" face="arial,helvetica,sanserif" color="#000000">
  -                 <a href="/cocoon/samples/slide/permissions/{substring-after(@source:systemid,'://')}"
  +                 <a href="/cocoon/samples/slide/permissions/{substring-after(@source:uri,'://')}"
                     ><xsl:value-of select="@source:name"/></a>
                   </font>
                  </td>
  @@ -149,7 +149,7 @@
                   <td align="right">
                    <form action="" method="post">
                     <input type="hidden" name="method" value="doRemovePrincipalPermission"/>
  -                  <input type="hidden" name="cocoon-source-uri" value="{../../@source:systemid}"/>
  +                  <input type="hidden" name="cocoon-source-uri" value="{../../@source:uri}"/>
                     <input type="hidden" name="cocoon-source-permission-principal" value="{@principal}"/>
                     <input type="hidden" name="cocoon-source-permission-privilege" value="{@privilege}"/>
                     <input type="hidden" name="cocoon-source-permission-inheritable" value="{@inheritable}"/>
  @@ -164,7 +164,7 @@
                 <tr>
                  <form action="" method="post">
                   <input type="hidden" name="method" value="doAddPrincipalPermission"/>
  -                <input type="hidden" name="cocoon-source-uri" value="{@source:systemid}"/>
  +                <input type="hidden" name="cocoon-source-uri" value="{@source:uri}"/>
                   <td align="left">
                    <select name="cocoon-source-permission-principal">
                     <option>ALL</option>
  @@ -259,7 +259,7 @@
                  <td align="right">
                   <form action="" method="post">
                    <input type="hidden" name="method" value="doRemovePrincipalGroupPermission"/>
  -                 <input type="hidden" name="cocoon-source-uri" value="{../../@source:systemid}"/>
  +                 <input type="hidden" name="cocoon-source-uri" value="{../../@source:uri}"/>
                    <input type="hidden" name="cocoon-source-permission-principal-group" value="{@group}"/>
                    <input type="hidden" name="cocoon-source-permission-privilege" value="{@privilege}"/>
                    <input type="hidden" name="cocoon-source-permission-inheritable" value="{@inheritable}"/>
  @@ -274,7 +274,7 @@
                <tr>
                 <form action="" method="post">
                  <input type="hidden" name="method" value="doAddPrincipalGroupPermission"/>
  -               <input type="hidden" name="cocoon-source-uri" value="{@source:systemid}"/>
  +               <input type="hidden" name="cocoon-source-uri" value="{@source:uri}"/>
                  <td align="left">
                   <select name="cocoon-source-permission-principal-group">
                    <xsl:for-each select="/document/pl:list/pl:group">
  
  
  
  1.5       +8 -8      xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4properties.xsl
  
  Index: description2html4properties.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/description2html4properties.xsl,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- description2html4properties.xsl	19 Aug 2002 11:55:12 -0000	1.4
  +++ description2html4properties.xsl	30 Jan 2003 20:01:08 -0000	1.5
  @@ -23,24 +23,24 @@
          <table bgcolor="#000000" border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
            <tr>
               <td width="90%" align="left" bgcolor="#0086b2"><font size="+1" face="arial,helvetica,sanserif"
  -    color="#ffffff"><xsl:value-of select="source:source/@source:systemid"/></font></td>
  +    color="#ffffff"><xsl:value-of select="source:source/@source:uri"/></font></td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/users/">
                <i>users</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/content/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/content/{substring-after(source:source/@source:uri,'://')}">
                <i>content</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/properties/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/properties/{substring-after(source:source/@source:uri,'://')}">
                <i>properties</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/permissions/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/permissions/{substring-after(source:source/@source:uri,'://')}">
                <i>permissions</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a
  -    href="/cocoon/samples/slide/locks/{substring-after(source:source/@source:systemid,'://')}">
  +    href="/cocoon/samples/slide/locks/{substring-after(source:source/@source:uri,'://')}">
                <i>locks</i></a>
               </td>
               <td nowrap="nowrap" bgcolor="#ffffff"><a href="/cocoon/samples/slide/logout.html">
  @@ -97,7 +97,7 @@
                 <tr>
                  <td width="100%" bgcolor="#ffffff" align="left">
                   <font size="+0" face="arial,helvetica,sanserif" color="#000000">
  -                 <a href="/cocoon/samples/slide/properties/{substring-after(@source:systemid,'://')}"
  +                 <a href="/cocoon/samples/slide/properties/{substring-after(@source:uri,'://')}"
                     ><xsl:value-of select="@source:name"/></a>
                   </font>
                  </td>
  @@ -151,7 +151,7 @@
                   <xsl:if test="namespace-uri()!='DAV:' and ../@source:type='live'">
                    <form action="" method="post">
                     <input type="hidden" name="method" value="doDeleteProperty"/>
  -                  <input type="hidden" name="cocoon-source-uri" value="{../../@source:systemid}"/>
  +                  <input type="hidden" name="cocoon-source-uri" value="{../../@source:uri}"/>
                     <input type="hidden" name="cocoon-source-property-namespace" value="{namespace-uri()}"/>
                     <input type="hidden" name="cocoon-source-property-name" value="{local-name()}"/>
     
  @@ -165,7 +165,7 @@
                <tr>
                 <form action="" method="post">
                  <input type="hidden" name="method" value="doAddProperty"/>
  -               <input type="hidden" name="cocoon-source-uri" value="{@source:systemid}"/>
  +               <input type="hidden" name="cocoon-source-uri" value="{@source:uri}"/>
                   <td align="left">
                    <input name="cocoon-source-property-namespace" type="text" size="15" maxlength="40"/>
                   </td>
  
  
  
  1.12      +85 -1     xml-cocoon2/src/scratchpad/webapp/samples/slide/slide.xconf
  
  Index: slide.xconf
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/slide.xconf,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- slide.xconf	30 Aug 2002 08:00:34 -0000	1.11
  +++ slide.xconf	30 Jan 2003 20:01:08 -0000	1.12
  @@ -1,5 +1,23 @@
   <?xml version="1.0"?>
  -<slide default="myrepository">
  +<slide logger="org.apache.slide.util.logger.SimpleLogger" logger-level="6" default="myrepository">
  +  <!--
  +    logger
  +    ~~~~~~
  +    org.apache.slide.util.logger.SimpleLogger
  +       default logger with 1 log level
  +    log4j.Log4jLogger
  +       logger with fine granularity
  +       see http://jakarta.apache.org/log4j/
  +
  +    logger-level
  +    ~~~~~~~~~~~~
  +    0 EMERGENCY
  +    1 CRITICAL
  +    2 ERROR
  +    4 WARNING
  +    6 INFO
  +    7 DEBUG
  +    -->
   
       <namespace name="myrepository">
   
  @@ -292,4 +310,70 @@
               </objectnode>
           </data>
       </namespace>
  +
  +  <!--
  +    DeltaV global parameters
  +    ========================
  +    * historypath (mandatory=no, default="/history"):
  +    Specifies a Slide path which determines the location where this DeltaV
  +    server stores history data.
  +
  +    * workspacepath (mandatory=no, default="/workspace"):
  +    Specifies a Slide path which determines the location where this DeltaV
  +    server allows workspaces to reside.
  +
  +    * workingresourcepath (mandatory=no, default="/workingresource"):
  +    Specifies a Slide path which determines the location where this DeltaV
  +    server stores working resources.
  +
  +    * auto-version (mandatory=no, default="checkout-checkin"):
  +    Controls the DeltaV auto-version behaviour.
  +
  +    * auto-version-control (mandatory=no, default="false"):
  +    Indicates if a resource just created by a PUT should be set under
  +    version-control.
  +
  +   * versioncontrol-exclude (mandatory=no, default=""):
  +   Specifies a Slide path which determines resources which are excluded from version-control.
  +   The default value "" makes no path being excluded.
  +
  +    * checkout-fork (mandatory=no, default="forbidden"):
  +    Controls the DeltaV check-out behaviour when a version is already
  +    checked-out or has a successor.
  +
  +    * checkin-fork (mandatory=no, default="forbidden"):
  +    Controls the DeltaV check-out behaviour when a version has already a
  +    successor.
  +
  +    * standardLivePropertiesClass (mandatory=no,
  +    default="org.apache.slide.webdav.util.resourcekind.AbstractResourceKind"):
  +    Determines the "agent" knowing about what the standard live properties are.
  +    It should be a loadable class containing the following static methods:
  +    - boolean isLiveProperty(String propName)
  +    - boolean isProtectedProperty(String propName)
  +    - boolean isComputedProperty(String propName)
  +    - Set getAllLiveProperties()
  +    - Set getAllProtectedProperties()
  +    - Set getAllComputedProperties()
  +
  +    * uriRedirectorClass (mandatory=no,
  +    default="org.apache.slide.webdav.util.DeltavUriRedirector"):
  +    Determines the URI redirector class. The DeltaV URI redirector is in
  +    charge of the following redirections:
  +    - version URI to history URI, e.g. /history/2/1.4 to /history/2
  +    - latest revision number for history resource to 0.0
  +    - latest revision number for version resource to last URI token,
  +      e.g. /history/2/1.4 to 1.4
  +    It should be a loadable class containing the following static methods:
  +    - String redirectUri(String uri)
  +    - NodeRevisionNumber redirectLatestRevisionNumber(String uri)
  +    -->
  +  <parameter name="historypath">/history</parameter>
  +  <parameter name="workspacepath">/workspace</parameter>
  +  <parameter name="workingresourcepath">/workingresource</parameter>
  +  <parameter name="auto-version">checkout-checkin</parameter>
  +  <parameter name="auto-version-control">false</parameter>
  +  <parameter name="versioncontrol-exclude"></parameter>
  +  <parameter name="checkout-fork">forbidden</parameter>
  +  <parameter name="checkin-fork">forbidden</parameter>
   </slide>
  
  
  
  1.3       +147 -26   xml-cocoon2/src/scratchpad/webapp/samples/slide/web.xml
  
  Index: web.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/web.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- web.xml	27 Sep 2002 16:27:38 -0000	1.2
  +++ web.xml	30 Jan 2003 20:01:08 -0000	1.3
  @@ -23,7 +23,6 @@
         use the following servlet-class instead of the normal one
   
         <servlet-class>org.apache.cocoon.servlet.ParanoidCocoonServlet</servlet-class>
  -
       -->
       <servlet-class>org.apache.cocoon.servlet.CocoonServlet</servlet-class>
   
  @@ -38,10 +37,9 @@
       </init-param>
   
       <!--
  -      This parameter tells cocoon to load all the required libraries into
  -      it's own classloader instead of trusting the Servlet Vendor's
  -      classloader.  If you experience strange classloader issues,
  -      try setting this parameter to "true".
  +      This parameter tells cocoon to set the thread's context classloader to
  +      its own classloader. If you experience strange classloader issues,
  +      try setting this parameter to "true" or using ParanoidCocoonServlet.
       -->
       <init-param>
         <param-name>init-classloader</param-name>
  @@ -119,6 +117,15 @@
           <!-- For Database Driver: -->
           org.hsqldb.jdbcDriver
   
  +        <!-- For PostgeSQL Database: 
  +             org.postgresql.Driver -->
  +
  +        <!-- For Oracle Database:
  +             oracle.jdbc.driver.OracleDriver -->
  +
  +        <!-- ODBC 
  +             sun.jdbc.odbc.JdbcOdbcDriver -->
  + 
           <!-- For parent ComponentManager sample:
           org.apache.cocoon.samples.parentcm.Configurator
           -->
  @@ -126,38 +133,74 @@
       </init-param>
   
       <!--
  -      This parameter allows to specify where Cocoon should put files
  -      which are uploaded by the upload.xsp sample. The path specified
  -      is always relative to the context path of the servlet.
  +      This parameter allows to specify where Cocoon should put uploaded files.
  +      The path specified can be either absolute or relative to the context 
  +      path of the servlet. On windows platform, absolute directory must start
  +      with volume: C:\Path\To\Upload\Directory
  +
         The default directory is "upload-dir" in the work-directory
   
       <init-param>
         <param-name>upload-directory</param-name>
  -      <param-value>/WEB-INF/work/upload-dir</param-value>
  +      <param-value>WEB-INF/work/upload-dir</param-value>
       </init-param>
       -->
   
       <!--
  -      This parameter allows to specify where Cocoon should put files
  -      which are cached by the storing class. The path specified
  -      is always relative to the context path of the servlet.
  +      Causes all files in multipart requests to be saved to upload-dir.
  +      Default is true.  Unsupported values will be interpreted as false.
  +    -->
  +    <init-param>
  +      <param-name>autosave-uploads</param-name>
  +      <param-value>false</param-value>
  +    </init-param>
  +
  +    <!--
  +      Specify handling of name conflicts when saving uploaded files
  +      to disk.  Acceptable values are deny, allow, rename (default).
  +      Files are renamed x_filename where x is an integer value incremented
  +      to make the new filename unique.
  +    -->
  +    <init-param>
  +      <param-name>overwrite-uploads</param-name>
  +      <param-value>rename</param-value>
  +    </init-param>
  +    
  +    <!--
  +      Specify maximum allowed size of the upload. Defaults to 10 Mb.
  +
  +    <init-param>
  +      <param-name>upload-max-size</param-name>
  +      <param-value>10000000</param-value>
  +    </init-param>    
  +    -->
  +
  +    <!--
  +      This parameter allows to specify where Cocoon should create its page
  +      and other objects cache. The path specified can be either absolute or
  +      relative to the context path of the servlet. On windows platform,
  +      absolute directory must start with volume: C:\Path\To\Cache\Directory
  +      
         The default directory is "cache-dir" in the work-directory
   
       <init-param>
         <param-name>cache-directory</param-name>
  -      <param-value>/WEB-INF/work/cache-dir</param-value>
  +      <param-value>WEB-INF/work/cache-dir</param-value>
       </init-param>
       -->
   
       <!--
         This parameter allows to specify where Cocoon should put it's
  -      working files. The path specified is always relative to the
  -      context path of the Cocoon servlet.
  -      Usually it is obtained from the servlet engine.
  +      working files. The path specified is either absolute or relative
  +      to the context path of the Cocoon servlet.  On windows platform,
  +      absolute directory must start with volume: C:\Path\To\Work\Directory
  +
  +      The default directory is "cocoon-files" directory in the servlet
  +      context's temp directory (context property javax.servlet.context.tempdir).
   
       <init-param>
         <param-name>work-directory</param-name>
  -      <param-value>/WEB-INF/work</param-value>
  +      <param-value>WEB-INF/work</param-value>
       </init-param>
       -->
   
  @@ -194,9 +237,15 @@
       -->
   
       <!--
  -      This parameter allows you to select the request factory. Possible choices are as follows:
  -          - org.apache.cocoon.components.request.MultipartRequestFactoryImpl
  -          - org.apache.cocoon.components.request.MaybeUploadRequestFactoryImpl
  +      This parameter allows you to select the request factory. Possible
  +      choices are as follows:
  +        - org.apache.cocoon.components.request.MultipartRequestFactoryImpl
  +          This is the default factory.
  +        - org.apache.cocoon.components.request.MaybeUploadRequestFactoryImpl
  +          You can opt in for this factory if maybeupload.jar is
  +          present.
  +        - org.apache.cocoon.components.request.SimpleRequestFactoryImpl
  +          This factory does not allow uploads.
       -->
       <init-param>
         <param-name>request-factory</param-name>
  @@ -215,6 +264,55 @@
       -->
   
       <!--
  +       If true or not set, this class will try to catch and handle all Cocoon exceptions.
  +       If false, it will rethrow them to the servlet container.
  +    -->
  +    <init-param>
  +      <param-name>manage-exceptions</param-name>
  +      <param-value>true</param-value>
  +    </init-param>
  +    
  +    <!--
  +       If true, Avalon Excalibur instrumentation will be enabled on all Instrumentable
  +       components with Cocoon and your Cocoon application.
  +
  +    <init-param>
  +      <param-name>enable-instrumentation</param-name>
  +      <param-value>true</param-value>
  +    </init-param>
  +    -->
  +
  +    <!--
  +       This defines the location of the instrument manager configuration, only used
  +       if the init-param enable-instrumentation is enabled.
  +
  +    <init-param>
  +      <param-name>instrumentation-config</param-name>
  +      <param-value>/WEB-INF/instrumentation.xconf</param-value>
  +    </init-param>    
  +    -->
  +
  +    <!--
  +      Set encoding used by the container. If not set the ISO-8859-1 encoding will be assumed.
  +    -->
  +    <!--
  +    <init-param>
  +      <param-name>container-encoding</param-name>
  +      <param-value>utf-8</param-value>
  +    </init-param>
  +    -->
  +
  +    <!--
  +      Set form encoding. This will be the character set used to decode request parameters 
  +    -->
  +    <!--
  +    <init-param>
  +      <param-name>form-encoding</param-name>
  +      <param-value>utf-8</param-value>
  +    </init-param>
  +    -->
  +
  +    <!--
         This parameter allows you to startup Cocoon2 immediately after startup
         of your servlet engine.
       -->
  @@ -278,7 +376,7 @@
   
       <init-param>
         <param-name>domain</param-name>
  -      <param-value>/WEB-INF/Domain.xml</param-value>
  +      <param-value>/samples/slide/slide.xconf</param-value>
         <description>
           Path to the domain configuration file, relative to the path of the
           web application.
  @@ -303,7 +401,7 @@
         <description>
            Use the 'directory-browsing' init-parameter to turn off generation of
            HTML index pages that enable browsing of collections.
  -         The default value is 'true'. 
  +         The default value is 'true'.
         </description>
       </init-param>
   
  @@ -316,7 +414,6 @@
   
     </servlet>
   
  -
     <!--
       Cocoon handles all the URL space assigned to the webapp using its sitemap.
       It is recommended to leave it unchanged. Under some circumstances though
  @@ -354,7 +451,31 @@
       <mime-type>text/css</mime-type>
     </mime-mapping>
   
  -  <!-- Authetication for the WebDAV servlet -->
  +  <mime-mapping>
  +    <extension>xml</extension>
  +    <mime-type>text/xml</mime-type>
  +  </mime-mapping>
  +
  +  <mime-mapping>
  +    <extension>xsl</extension>
  +    <mime-type>text/xml</mime-type>
  +  </mime-mapping>
  +
  +  <mime-mapping>
  +    <extension>xconf</extension>
  +    <mime-type>text/xml</mime-type>
  +  </mime-mapping>
  +
  +  <mime-mapping>
  +    <extension>xmap</extension>
  +    <mime-type>text/xml</mime-type>
  +  </mime-mapping>
  +
  +  <mime-mapping>
  +    <extension>ent</extension>
  +    <mime-type>text/plain</mime-type>
  +  </mime-mapping>
  +
     <security-constraint>
       <web-resource-collection>
         <web-resource-name>DAV resource</web-resource-name>
  @@ -379,10 +500,10 @@
         <role-name>user</role-name>
       </auth-constraint>
     </security-constraint>
  -  
  +
     <login-config>
       <auth-method>BASIC</auth-method>
       <realm-name>Slide DAV Server</realm-name>
     </login-config>
  -  
  +
   </web-app>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org


Mime
View raw message