You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by st...@apache.org on 2002/07/02 18:54:25 UTC

cvs commit: xml-cocoon2/src/scratchpad/webapp/samples/slide rdf2html4properties.xsl rdf2html.xsl sitemap.xmap slide.xconf

stephan     2002/07/02 09:54:25

  Modified:    src/scratchpad/src/org/apache/cocoon/acting
                        SourceUploadAction.java
               src/scratchpad/src/org/apache/cocoon/components/source/helpers
                        SourcePermission.java
               src/scratchpad/src/org/apache/cocoon/components/source/impl
                        GIFSourceInspector.java SlideSource.java
                        SlideSourceFactory.java SourceInspectorManager.java
               src/scratchpad/src/org/apache/cocoon/generation
                        SourceDescriptionGenerator.java
               src/scratchpad/webapp/samples/slide rdf2html.xsl
                        sitemap.xmap slide.xconf
  Added:       src/scratchpad/src/org/apache/cocoon/components/source/helpers
                        AbstractSourcePermission.java
                        GroupSourcePermission.java
                        UserSourcePermission.java
               src/scratchpad/webapp/samples/slide rdf2html4properties.xsl
  Log:
  Separate the permission into user & group permissions.
  Finished the SourceInspector, which now works.
  Change the stylesheet to make the look closer the other
  cocoon sites.
  
  Revision  Changes    Path
  1.2       +20 -8     xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/SourceUploadAction.java
  
  Index: SourceUploadAction.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/acting/SourceUploadAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SourceUploadAction.java	27 Jun 2002 16:53:37 -0000	1.1
  +++ SourceUploadAction.java	2 Jul 2002 16:54:25 -0000	1.2
  @@ -61,7 +61,9 @@
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.acting.AbstractAction;
   import org.apache.cocoon.components.request.multipart.FilePartFile;
  +import org.apache.cocoon.components.source.RestrictableSource;
   import org.apache.cocoon.components.source.WriteableSource;
  +import org.apache.cocoon.components.source.helpers.SourceCredential;
   import org.apache.cocoon.environment.ObjectModelHelper;
   import org.apache.cocoon.environment.Redirector;
   import org.apache.cocoon.environment.Request;
  @@ -124,13 +126,29 @@
   
           String uri = parameters.getParameter("uri", request.getParameter("uri"));
           String filename = parameters.getParameter("filename", request.getParameter("filename"));
  +        String principal = parameters.getParameter("cocoon-source-principal",
  +                              request.getParameter("cocoon-source-principal"));
  +        String password = parameters.getParameter("cocoon-source-password",
  +                              request.getParameter("cocoon-source-password"));
   
           if ((request.get("file")!=null) && 
               (request.get("file") instanceof FilePartFile)) {
               File uploadFile = ((FilePartFile)request.get("file")).getFile();
   
               try {
  -                Source source = resolver.resolveURI(uri+"/"+filename);
  +                if ((uri==null) || (uri.length()==0))
  +                    uri = filename;
  +                else if (uri.endsWith("/"))
  +                    uri = uri+filename;
  +                else
  +                    uri = uri+"/"+filename;
  +
  +                System.out.println("uri="+uri);
  +
  +                Source source = resolver.resolveURI(uri);
  +
  +                if (source instanceof RestrictableSource)
  +                    ((RestrictableSource)source).setSourceCredential(new SourceCredential(principal, password));
   
                   if (source instanceof WriteableSource) {
                       WriteableSource writeablesource = (WriteableSource)source;
  @@ -156,12 +174,6 @@
                   throw new ProcessingException("Exception occurs while storing the content", ioe);
               }
           }
  -
  -        /*System.out.println("file="+uploadFile);
  -
  -        String[] filelist = uploadDir.list();
  -        for (int i = 0; i < filelist.length; i++)
  -            System.out.println("File [" + i + "]=" + filelist[i]);*/
   
           return null;
       }
  
  
  
  1.4       +9 -65     xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/helpers/SourcePermission.java
  
  Index: SourcePermission.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/helpers/SourcePermission.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SourcePermission.java	1 Jul 2002 16:41:55 -0000	1.3
  +++ SourcePermission.java	2 Jul 2002 16:54:25 -0000	1.4
  @@ -56,16 +56,12 @@
   package org.apache.cocoon.components.source.helpers;
   
   /**
  - * This class represents a permission for a source
  + * This interface represents a permission for a source
    *
    * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
    * @version $Id$
    */
  -public class SourcePermission {
  -
  -    public final static String PRINCIPAL_SELF              = "self";
  -    public final static String PRINCIPAL_ALL               = "all";
  -    public final static String PRINCIPAL_GUEST             = "guest";
  +public interface SourcePermission {
   
       public final static String PRIVILEGE_ALL               = "all";
       public final static String PRIVILEGE_READ              = "read";
  @@ -94,97 +90,45 @@
       public final static String PRIVILEGE_GRANT_PERMISSION  = "grant-permission";
       public final static String PRIVILEGE_REVOKE_PERMISSION = "revoke-permission";
   
  -    private String  principal;
  -    private String  privilege;
  -    private boolean inheritable;
  -    private boolean negative;
  -
  -    /**
  -     * Creates a new permission
  -     *
  -     * @param principal Principal of the permission
  -     * @param privilege Privilege of the permission
  -     * @param inheritable If the permission is inheritable
  -     * @param negative If the permission is negative
  -     */
  -    public SourcePermission(String principal, String privilege, 
  -                            boolean inheritable, boolean negative) {
  -
  -        this.principal   = principal;
  -        this.privilege   = privilege;
  -        this.inheritable = inheritable;
  -        this.negative    = negative;
  -    }
  -
  -    /**
  -     * Sets the principal of the permission
  -     *
  -     * @param principal Principal of the permission
  -     */
  -    public void setPrincipal(String principal) {
  -        this.principal   = principal;
  -    }
  -
  -    /**
  -     * Returns the principal of the permission
  -     * 
  -     * @return Principal of the permission
  -     */
  -    public String getPrincipal() {
  -        return this.principal;
  -    }
  -
       /**
        * Sets the privilege of the permission
        *
        * @param privilege Privilege of the permission
        */
  -    public void setPrivilege(String privilege) {
  -        this.privilege   = privilege;
  -    }
  +    public void setPrivilege(String privilege);
   
       /**
        * Returns the privilege of the permission
        * 
        * @return Privilege of the permission
        */
  -    public String getPrivilege() {
  -        return this.privilege;
  -    }
  +    public String getPrivilege();
   
       /**
        * Sets the inheritable flag
        *
        * @param inheritable If the permission is inheritable
        */
  -    public void setInheritable(boolean inheritable) {
  -        this.inheritable = inheritable;
  -    }
  +    public void setInheritable(boolean inheritable);
   
       /**
        * Returns the inheritable flag
        *
        * @return If the permission is inheritable
        */
  -    public boolean isInheritable() {
  -        return this.inheritable;
  -    }
  +    public boolean isInheritable();
   
       /**
        * Sets the negative flag
        *
        * @param negative If the permission is a negative permission
        */
  -    public void setNegative(boolean negative) {
  -        this.negative = negative;
  -    }
  +    public void setNegative(boolean negative);
   
       /**
        * Returns the negative flag
        * 
        * @return If the permission is a negative permission
        */
  -    public boolean isNegative() {
  -        return this.negative;
  -    }
  +    public boolean isNegative();
   }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/helpers/AbstractSourcePermission.java
  
  Index: AbstractSourcePermission.java
  ===================================================================
  /*
   * 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/>.
   */
  
  package org.apache.cocoon.components.source.helpers;
  
  /**
   * This class is an abstract implementation of a source permission
   *
   * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
   * @version $Id: AbstractSourcePermission.java,v 1.1 2002/07/02 16:54:25 stephan Exp $
   */
  public abstract class AbstractSourcePermission implements SourcePermission{
  
      private String  privilege;
      private boolean inheritable;
      private boolean negative;
  
      /**
       * Sets the privilege of the permission
       *
       * @param privilege Privilege of the permission
       */
      public void setPrivilege(String privilege) {
          this.privilege   = privilege;
      }
  
      /**
       * Returns the privilege of the permission
       * 
       * @return Privilege of the permission
       */
      public String getPrivilege() {
          return this.privilege;
      }
  
      /**
       * Sets the inheritable flag
       *
       * @param inheritable If the permission is inheritable
       */
      public void setInheritable(boolean inheritable) {
          this.inheritable = inheritable;
      }
  
      /**
       * Returns the inheritable flag
       *
       * @return If the permission is inheritable
       */
      public boolean isInheritable() {
          return this.inheritable;
      }
  
      /**
       * Sets the negative flag
       *
       * @param negative If the permission is a negative permission
       */
      public void setNegative(boolean negative) {
          this.negative = negative;
      }
  
      /**
       * Returns the negative flag
       * 
       * @return If the permission is a negative permission
       */
      public boolean isNegative() {
          return this.negative;
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/helpers/GroupSourcePermission.java
  
  Index: GroupSourcePermission.java
  ===================================================================
  /*
   * 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/>.
   */
  
  package org.apache.cocoon.components.source.helpers;
  
  /**
   * This class represents a source permission for groups
   *
   * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
   * @version $Id: GroupSourcePermission.java,v 1.1 2002/07/02 16:54:25 stephan Exp $
   */
  public class GroupSourcePermission extends AbstractSourcePermission {
  
      private String group;
  
      /**
       * Creates a new permission
       *
       * @param principal Principal of the permission
       * @param privilege Privilege of the permission
       * @param inheritable If the permission is inheritable
       * @param negative If the permission is negative
       */
      public GroupSourcePermission(String group, String privilege, 
                                   boolean inheritable, boolean negative) {
  
          this.group = group;
          setPrivilege(privilege);
          setInheritable(inheritable);
          setNegative(negative);
      }
  
      /**
       * Sets the group of users for the permission
       *
       * @param group Group of users
       */
      public void setGroup(String group) {
          this.group = group;
      }
  
      /**
       * Returns the group of users for the permission
       * 
       * @return Group of users
       */
      public String getGroup() {
          return this.group;
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/helpers/UserSourcePermission.java
  
  Index: UserSourcePermission.java
  ===================================================================
  /*
   * 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/>.
   */
  
  package org.apache.cocoon.components.source.helpers;
  
  /**
   * This class represents a source permission for users
   *
   * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
   * @version $Id: UserSourcePermission.java,v 1.1 2002/07/02 16:54:25 stephan Exp $
   */
  public class UserSourcePermission extends AbstractSourcePermission {
  
      public final static String PRINCIPAL_SELF              = "SELF";
      public final static String PRINCIPAL_ALL               = "ALL";
      public final static String PRINCIPAL_GUEST             = "GUEST";
  
      private String principal;
  
      /**
       * Creates a new permission
       *
       * @param principal Principal of the permission
       * @param privilege Privilege of the permission
       * @param inheritable If the permission is inheritable
       * @param negative If the permission is negative
       */
      public UserSourcePermission(String principal, String privilege, 
                              boolean inheritable, boolean negative) {
  
          this.principal   = principal;
          setPrivilege(privilege);
          setInheritable(inheritable);
          setNegative(negative);
      }
  
      /**
       * Sets the principal of the permission
       *
       * @param principal Principal of the permission
       */
      public void setPrincipal(String principal) {
          this.principal   = principal;
      }
  
      /**
       * Returns the principal of the permission
       * 
       * @return Principal of the permission
       */
      public String getPrincipal() {
          return this.principal;
      }
  }
  
  
  
  1.2       +2 -1      xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/GIFSourceInspector.java
  
  Index: GIFSourceInspector.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/GIFSourceInspector.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- GIFSourceInspector.java	29 Jun 2002 21:04:11 -0000	1.1
  +++ GIFSourceInspector.java	2 Jul 2002 16:54:25 -0000	1.2
  @@ -109,6 +109,7 @@
   
           if ((source.getSystemId().endsWith(".gif")) &&
               (isGIFFile(source))) {
  +
               int[] size = getGifSize(source);
               return new SourceProperty[] {
                   new SourceProperty(PROPERTY_NS, IMAGE_WIDTH_PROPERTY_NAME, String.valueOf(size[0])),
  
  
  
  1.9       +118 -63   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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- SlideSource.java	1 Jul 2002 16:41:55 -0000	1.8
  +++ SlideSource.java	2 Jul 2002 16:54:25 -0000	1.9
  @@ -73,10 +73,12 @@
   import org.apache.cocoon.components.source.TraversableSource;
   import org.apache.cocoon.components.source.WriteableSource;
   import org.apache.cocoon.components.source.VersionableSource;
  +import org.apache.cocoon.components.source.helpers.GroupSourcePermission;
   import org.apache.cocoon.components.source.helpers.SourceCredential;
   import org.apache.cocoon.components.source.helpers.SourceLock;
   import org.apache.cocoon.components.source.helpers.SourcePermission;
   import org.apache.cocoon.components.source.helpers.SourceProperty;
  +import org.apache.cocoon.components.source.helpers.UserSourcePermission;
   
   import org.apache.excalibur.source.Source;
   import org.apache.excalibur.source.SourceException;
  @@ -107,6 +109,7 @@
   //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.ObjectNode;
   import org.apache.slide.structure.ObjectNotFoundException;
   import org.apache.slide.structure.Structure;
  @@ -144,6 +147,9 @@
       /** Namespace access token. */
       private NamespaceAccessToken nat;
   
  +    /** Configuration of namespace */
  +    private NamespaceConfig config;
  +
       /** Structure helper. */
       private Structure structure;
   
  @@ -195,8 +201,14 @@
   
           this.credToken = new CredentialsToken(this.sourcecredential.getPrincipal());
           this.nat = nat;
  +        this.config = this.nat.getNamespaceConfig();
           this.protocol = protocol;
           this.uri = uri;
  +        if ((this.uri==null) || (this.uri.length()==0))
  +            this.uri = "/";
  +        else if (!this.uri.startsWith("/"))
  +            this.uri = "/"+this.uri;
  +            
           this.systemid = protocol+":/"+uri; // FIXME dirty hack
           this.sourcerevision = sourcerevision;
           this.sourcerevisionbranch = sourcerevisionbranch;
  @@ -239,7 +251,7 @@
       public void initialize() throws Exception {
       
           try {
  -            this.revisionDescriptors = content.retrieve(this.slideToken, this.uri);
  +            this.revisionDescriptors = content.retrieve(this.slideToken, this.config.getFilesPath()+this.uri);
   
               // Retrieve latest revision descriptor
               this.revisionDescriptor = content.retrieve(slideToken, revisionDescriptors);
  @@ -270,7 +282,7 @@
       public InputStream getInputStream()
           throws IOException, SourceException {
           try {
  -            ObjectNode object = structure.retrieve(this.slideToken, this.uri);
  +            ObjectNode object = structure.retrieve(this.slideToken, this.config.getFilesPath()+this.uri);
   
               return content.retrieve(slideToken, this.revisionDescriptors,
                          this.revisionDescriptor).streamContent();
  @@ -330,7 +342,7 @@
        */
       public boolean exists() {
           try {
  -            structure.retrieve(this.slideToken, this.uri);
  +            structure.retrieve(this.slideToken, this.config.getFilesPath()+this.uri);
           } catch (SlideException e) {
               return false;
           }
  @@ -396,7 +408,7 @@
                   if (revisionDescriptor==null) {
                       revisionDescriptor = new NodeRevisionDescriptor(0);
   
  -                    String resourceName = uri;
  +                    String resourceName = config.getFilesPath()+uri;
                       int lastSlash = resourceName.lastIndexOf('/');
                       if (lastSlash != -1)
                           resourceName = resourceName.substring(lastSlash + 1);
  @@ -411,8 +423,8 @@
                   //nat.begin();
   
                   if (revisionNumber==null)
  -                    content.create(slideToken, uri, revisionDescriptor, null);
  -                content.store(slideToken, uri, revisionDescriptor,
  +                    content.create(slideToken, config.getFilesPath()+uri, revisionDescriptor, null);
  +                content.store(slideToken, config.getFilesPath()+uri, revisionDescriptor,
                                 revisionContent);
   
                   //nat.commit();
  @@ -424,7 +436,7 @@
   
                   try {
                       // Creating an object 
  -                    structure.create(slideToken, subject, uri);
  +                    structure.create(slideToken, subject, config.getFilesPath()+uri);
                   } catch (SlideException se) {
                       // FIXME correct exception handling
                       e.printStackTrace();
  @@ -467,7 +479,7 @@
                   revisionContent.setContent(bytes);
   
                   try {
  -                    content.create(slideToken, uri, revisionDescriptor,
  +                    content.create(slideToken, config.getFilesPath()+uri, revisionDescriptor,
                                      revisionContent);
                   } catch (SlideException se) {
                       // FIXME correct exception handling
  @@ -583,8 +595,9 @@
           try {
               int i=0;
               for(Enumeration children=structure.retrieve(this.slideToken,
  -                this.uri).enumerateChildren(); children.hasMoreElements();i++) 
  -                children.nextElement();
  +                this.config.getFilesPath()+this.uri).enumerateChildren(); children.hasMoreElements();) 
  +                if (((String)children.nextElement()).startsWith(this.config.getFilesPath()))
  +                    i++;
               return i;
           } catch (SlideException se) {
               throw new SourceException("Could not get children", se);
  @@ -601,11 +614,16 @@
               int i=0;
               String child;
               for(Enumeration children=structure.retrieve(this.slideToken, 
  -                this.uri).enumerateChildren(); children.hasMoreElements();i++) {
  +                this.config.getFilesPath()+this.uri).enumerateChildren(); children.hasMoreElements();) {
     
                   child = (String)children.nextElement();
  -                if (i==index)
  -                    return protocol+":/"+child;
  +
  +                if (child.startsWith(this.config.getFilesPath())) {
  +                    if (i==index)
  +                        return protocol+":/"+child.substring(this.config.getFilesPath().length());
  +
  +                    i++;
  +                }
               }
               return null;
           } catch (SlideException se) {
  @@ -642,6 +660,7 @@
               throw new NullPointerException();
           this.sourcecredential = sourcecredential;
           this.credToken = new CredentialsToken(this.sourcecredential.getPrincipal());
  +        this.slideToken = new SlideTokenImpl(credToken);
       }
   
       /**
  @@ -655,73 +674,101 @@
   
           NamespaceConfig config = this.nat.getNamespaceConfig();
   
  -        String principal = config.getUsersPath()+"/"+sourcepermission.getPrincipal();
  +        String subject = null;
  +        if (sourcepermission instanceof UserSourcePermission) {
  +            subject = config.getUsersPath()+((UserSourcePermission)sourcepermission).getPrincipal();
  +
  +            // Test if user exists
  +            try {
  +                ObjectNode objectnode = structure.retrieve(this.slideToken, subject);
  +                if (!(objectnode instanceof SubjectNode))
  +                    return;
  +            } catch (SlideException e) {
  +                return;
  +            }
  +
  +        } else if (sourcepermission instanceof GroupSourcePermission) {
  +            subject = config.getUsersPath()+((GroupSourcePermission)sourcepermission).getGroup();
  +
  +            // Test if group exists
  +            try {
  +                ObjectNode objectnode = structure.retrieve(this.slideToken, subject);
  +                if (!(objectnode instanceof GroupNode))
  +                    return;
  +            } catch (SlideException e) {
  +                return;
  +            }
  +
  +            subject = "+"+subject; // Additional '+' to expand the group
  +        } else
  +            return; // If not user or group
  +
           boolean negative = sourcepermission.isNegative();
           boolean inheritable = sourcepermission.isInheritable();
   
           if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_ALL)) {
  -            addPermission(principal, "/", negative, inheritable);
  +            addPermission(subject, "/", negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ)) { 
  -            addPermission(principal, config.getReadObjectAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getReadLocksAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getReadRevisionMetadataAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getReadRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadLocksAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadRevisionContentAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_SOURCE)) {
  -            addPermission(principal, config.getReadObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadObjectAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_LOCKS)) {
  -            addPermission(principal, config.getReadLocksAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadLocksAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_PROPERTY)) {
  -            addPermission(principal, config.getReadRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadRevisionMetadataAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_CONTENT)) {
  -            addPermission(principal, config.getReadRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadRevisionContentAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_WRITE)) {
  -            addPermission(principal, config.getCreateObjectAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getRemoveObjectAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getLockObjectAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getCreateRevisionContentAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getModifyRevisionContentAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getRemoveRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getCreateObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getRemoveObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getLockObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getCreateRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getModifyRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getRemoveRevisionContentAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_SOURCE)) {
  -            addPermission(principal, config.getCreateObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getCreateObjectAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_SOURCE)) {
  -            addPermission(principal, config.getRemoveObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getRemoveObjectAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_LOCK_SOURCE)) {
  -            addPermission(principal, config.getLockObjectAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getLockObjectAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_PROPERTY)) {
  -            addPermission(principal, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getCreateRevisionMetadataAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_MODIFY_PROPERTY)) {
  -            addPermission(principal, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getModifyRevisionMetadataAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_PROPERTY)) {
  -            addPermission(principal, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getRemoveRevisionMetadataAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_CREATE_CONTENT)) {
  -            addPermission(principal, config.getCreateRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getCreateRevisionContentAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_MODIFY_CONTENT)) {
  -            addPermission(principal, config.getModifyRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getModifyRevisionContentAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REMOVE_CONTENT)) {
  -            addPermission(principal, config.getRemoveRevisionContentAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getRemoveRevisionContentAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_READ_ACL)) {
  -            addPermission(principal, config.getReadPermissionsAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getReadPermissionsAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_WRITE_ACL)) {
  -            addPermission(principal, config.getGrantPermissionAction().getUri(), negative, inheritable);
  -            addPermission(principal, config.getRevokePermissionAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getGrantPermissionAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getRevokePermissionAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_GRANT_PERMISSION)) {
  -            addPermission(principal, config.getGrantPermissionAction().getUri(), negative, inheritable);
  +            addPermission(subject, config.getGrantPermissionAction().getUri(), negative, inheritable);
           } else if (sourcepermission.getPrivilege().equals(SourcePermission.PRIVILEGE_REVOKE_PERMISSION)) {
  -            addPermission (principal, config.getRevokePermissionAction().getUri(), negative, inheritable);
  +            addPermission (subject, config.getRevokePermissionAction().getUri(), negative, inheritable);
           }
       }
   
       /**
        * Add permission to the list of permissions to set.
        */
  -    private void addPermission(String principal, String action,
  +    private void addPermission(String subject, String action,
                                  boolean negative, boolean inheritable) throws SourceException {
           try {
               NodePermission permission = new NodePermission
  -                (this.uri, principal, action, inheritable, negative);
  +                (this.config.getFilesPath()+this.uri, subject, action, inheritable, negative);
               this.security.grantPermission(this.slideToken, permission);
           } catch (SlideException se) {
               getLogger().warn("Couldn't grant permission", se);
  @@ -740,7 +787,7 @@
   
               NamespaceConfig config = this.nat.getNamespaceConfig();
   
  -            ObjectNode current = structure.retrieve(this.slideToken, this.uri);
  +            ObjectNode current = structure.retrieve(this.slideToken, this.config.getFilesPath()+this.uri);
   
               security.checkCredentials(this.slideToken, current, config.getReadPermissionsAction());
   
  @@ -892,18 +939,26 @@
   
                           boolean isAll = isRead && isWrite && isReadAcl && isWriteAcl;
   
  -
  -                        SourcePermission sourcepermission = new SourcePermission(null, null,
  -                                                                                 inheritedPermissions, negative);
  +                        SourcePermission sourcepermission = null;
   
                           if (principal.equals("~"))
  -                            sourcepermission.setPrincipal(SourcePermission.PRINCIPAL_SELF);
  +                            sourcepermission = new UserSourcePermission(UserSourcePermission.PRINCIPAL_SELF, null,
  +                                                                        inheritedPermissions, negative);
                           else if (principal.equals("nobody")) 
  -                            sourcepermission.setPrincipal(SourcePermission.PRINCIPAL_GUEST);
  +                            sourcepermission = new UserSourcePermission(UserSourcePermission.PRINCIPAL_GUEST, null,
  +                                                                        inheritedPermissions, negative);
  +                        else if (principal.equals(userspath))
  +                            sourcepermission = new UserSourcePermission(UserSourcePermission.PRINCIPAL_ALL, null,
  +                                                                        inheritedPermissions, negative);
                           else if (principal.startsWith(userspath+"/"))
  -                            sourcepermission.setPrincipal(principal.substring(userspath.length()+1));
  +                            sourcepermission = new UserSourcePermission(principal.substring(userspath.length()+1), null,
  +                                                                        inheritedPermissions, negative);
  +                        else if (principal.startsWith("+"+userspath+"/"))
  +                            sourcepermission = new GroupSourcePermission(principal.substring(userspath.length()+2), null,
  +                                                                         inheritedPermissions, negative);
                           else
  -                            sourcepermission.setPrincipal(principal);
  +                            sourcepermission = new UserSourcePermission(principal, null,
  +                                                                        inheritedPermissions, negative);
   
                           if (isAll) {
                               sourcepermission.setPrivilege(SourcePermission.PRIVILEGE_ALL);
  @@ -1001,7 +1056,7 @@
               Vector sourcelocks = new Vector();
   
               NodeLock lock;
  -            for(Enumeration locks = this.lock.enumerateLocks(this.slideToken, this.uri, false);
  +            for(Enumeration locks = this.lock.enumerateLocks(this.slideToken, this.config.getFilesPath()+this.uri, false);
                   locks.hasMoreElements();) {
   
                   lock = (NodeLock) locks.nextElement();
  @@ -1030,7 +1085,7 @@
           try {
               revisionDescriptor.setProperty(sourceproperty.getName(), sourceproperty.getNamespace(),
                                              sourceproperty.getValueAsString());
  -            content.store(slideToken, this.uri, revisionDescriptor, null);
  +            content.store(slideToken, this.config.getFilesPath()+this.uri, revisionDescriptor, null);
           } catch (SlideException se) {
               throw new SourceException("Could not set property", se);
           }
  @@ -1080,7 +1135,7 @@
           try {
               if (revisionDescriptor!=null) {
                   revisionDescriptor.removeProperty(name,namespace);
  -                content.store(slideToken, this.uri, revisionDescriptor, null);
  +                content.store(slideToken, this.config.getFilesPath()+this.uri, revisionDescriptor, null);
               }
           } catch (SlideException se) {
               throw new SourceException("Could not remove property", se);
  @@ -1092,7 +1147,7 @@
        */
       public boolean isVersioned() throws SourceException {
           try {
  -            this.revisionDescriptors = content.retrieve(this.slideToken, this.uri);
  +            this.revisionDescriptors = content.retrieve(this.slideToken, this.config.getFilesPath()+this.uri);
   
               return this.revisionDescriptors.hasRevisions();
   
  @@ -1115,7 +1170,7 @@
           this.sourcerevision = sourcerevision;
   
           try {
  -            this.revisionDescriptors = content.retrieve(this.slideToken, this.uri);
  +            this.revisionDescriptors = content.retrieve(this.slideToken, this.config.getFilesPath()+this.uri);
   
               // Retrieve revision descriptor by the revision
               this.revisionDescriptor = content.retrieve(slideToken, revisionDescriptors, 
  @@ -1147,7 +1202,7 @@
        */
       public String getLatestSourceRevision() throws SourceException {
           try {
  -            this.revisionDescriptors = content.retrieve(this.slideToken, this.uri);
  +            this.revisionDescriptors = content.retrieve(this.slideToken, this.config.getFilesPath()+this.uri);
   
               return this.revisionDescriptors.getLatestRevision().toString();
   
  
  
  
  1.2       +7 -7      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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SlideSourceFactory.java	26 Jun 2002 15:08:16 -0000	1.1
  +++ SlideSourceFactory.java	2 Jul 2002 16:54:25 -0000	1.2
  @@ -141,12 +141,12 @@
               locationParameters = new SourceParameters();
           }
   
  -        String repository = locationParameters.getParameter("repository", null);
  -        String namespace = locationParameters.getParameter("namespace", null);
  -        String principal = locationParameters.getParameter("principal", "guest");
  -        String password = locationParameters.getParameter("password", null);
  -        String revision = locationParameters.getParameter("revision", null);
  -        String branch = locationParameters.getParameter("branch", null);
  +        String repository = 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);
   
           SourceCredential credential;
           if (password!=null)
  
  
  
  1.3       +2 -2      xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SourceInspectorManager.java
  
  Index: SourceInspectorManager.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/source/impl/SourceInspectorManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SourceInspectorManager.java	29 Jun 2002 21:04:11 -0000	1.2
  +++ SourceInspectorManager.java	2 Jul 2002 16:54:25 -0000	1.3
  @@ -120,7 +120,7 @@
   
           ClassLoader classloader = Thread.currentThread().getContextClassLoader();
   
  -        final Configuration[] configurations = configuration.getChildren("inspector");
  +        final Configuration[] configurations = configuration.getChildren("sourceinspector");
           for(int i=0; i<configurations.length; i++) {
               String className = configurations[i].getAttribute( "class", "" );
   
  
  
  
  1.7       +30 -5     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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SourceDescriptionGenerator.java	1 Jul 2002 16:41:55 -0000	1.6
  +++ SourceDescriptionGenerator.java	2 Jul 2002 16:54:25 -0000	1.7
  @@ -72,10 +72,12 @@
   import org.apache.cocoon.components.source.SourceInspector;
   import org.apache.cocoon.components.source.WriteableSource;
   import org.apache.cocoon.components.source.VersionableSource;
  +import org.apache.cocoon.components.source.helpers.GroupSourcePermission;
   import org.apache.cocoon.components.source.helpers.SourceCredential;
   import org.apache.cocoon.components.source.helpers.SourceLock;
   import org.apache.cocoon.components.source.helpers.SourcePermission;
   import org.apache.cocoon.components.source.helpers.SourceProperty;
  +import org.apache.cocoon.components.source.helpers.UserSourcePermission;
   //import org.apache.cocoon.environment.Source;
   import org.apache.cocoon.environment.SourceResolver;
   import org.apache.cocoon.xml.EmbeddedXMLPipe;
  @@ -126,11 +128,13 @@
       private static final String PERMISSION_NODE_NAME   = "permission";
       private static final String LOCKS_NODE_NAME        = "locks";
       private static final String LOCK_NODE_NAME         = "lock";
  +    private static final String PARENT_NODE_NAME       = "parent";
       private static final String CHILDREN_NODE_NAME     = "children";
    
       private static final String URI_ATTR_NAME          = "about";
   
       private static final String PRINCIPAL_ATTR_NAME    = "principal";
  +    private static final String GROUP_ATTR_NAME        = "group";
       private static final String PRIVILEGE_ATTR_NAME    = "privilege";
       private static final String INHERITABLE_ATTR_NAME  = "inheritable";
       private static final String NEGATIVE_ATTR_NAME     = "negative";
  @@ -291,8 +295,23 @@
   
               if (source instanceof LockableSource)
                   pushSourceLocks((LockableSource)source);
  -            if ((source instanceof TraversableSource) && (deep>0))
  -                pushSourceChilds((TraversableSource)source, deep);
  +            if (source instanceof TraversableSource) {
  +
  +                TraversableSource traversablesource = (TraversableSource)source;
  +
  +                if (traversablesource.getParent()!=null) {
  +                    this.contentHandler.startElement(SOURCE_NS, PARENT_NODE_NAME,
  +                        SOURCE_PREFIX+":"+PARENT_NODE_NAME, new AttributesImpl());
  +                    this.contentHandler.characters(traversablesource.getParent().toCharArray(), 0,
  +                                                   traversablesource.getParent().length());
  +                    this.contentHandler.endElement(SOURCE_NS, PARENT_NODE_NAME,
  +                        SOURCE_PREFIX+":"+PARENT_NODE_NAME);
  +                }
  +
  +                if (deep>0)
  +                    pushSourceChilds(traversablesource, deep);
  +            }
  +
               this.contentHandler.endElement(RDF_NS, DESCRIPTION_NODE_NAME, RDF_PREFIX+':'+DESCRIPTION_NODE_NAME);
   
               if ((source instanceof TraversableSource) && (deep>0)) {
  @@ -387,8 +406,14 @@
                                                    RDF_PREFIX+':'+SEQUENCEITEM_NODE_NAME, new AttributesImpl());
   
                   AttributesImpl attributes = new AttributesImpl();
  -                attributes.addAttribute("", PRINCIPAL_ATTR_NAME, PRINCIPAL_ATTR_NAME, "CDATA",
  -                                        permissions[i].getPrincipal());
  +
  +                if (permissions[i] instanceof UserSourcePermission)
  +                    attributes.addAttribute("", PRINCIPAL_ATTR_NAME, PRINCIPAL_ATTR_NAME, "CDATA",
  +                                            ((UserSourcePermission)permissions[i]).getPrincipal());
  +                else if (permissions[i] instanceof GroupSourcePermission)
  +                    attributes.addAttribute("", GROUP_ATTR_NAME, GROUP_ATTR_NAME, "CDATA",
  +                                            ((GroupSourcePermission)permissions[i]).getGroup());
  +
                   attributes.addAttribute("", PRIVILEGE_ATTR_NAME, PRIVILEGE_ATTR_NAME, "CDATA",
                                           permissions[i].getPrivilege());
                   attributes.addAttribute("", INHERITABLE_ATTR_NAME, INHERITABLE_ATTR_NAME, "CDATA",
  
  
  
  1.3       +79 -8     xml-cocoon2/src/scratchpad/webapp/samples/slide/rdf2html.xsl
  
  Index: rdf2html.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/rdf2html.xsl,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- rdf2html.xsl	1 Jul 2002 16:41:55 -0000	1.2
  +++ rdf2html.xsl	2 Jul 2002 16:54:25 -0000	1.3
  @@ -30,11 +30,17 @@
       </td>
      </tr>
      <tr>
  -    <td colspan="3" bgcolor="#eeeeee"><a href="/cocoon/mount/slide/browse/">Home</a></td>
  +    <td colspan="1" bgcolor="#eeeeee"><a href="/cocoon/samples/slide/browse/">Home</a></td>
  +    <td colspan="2" bgcolor="#eeeeee">
  +     <xsl:if test="source:parent">
  +      <a href="/cocoon/samples/slide/browse/{substring-after(source:parent,'://')}">Back</a>
  +     </xsl:if>
  +    </td>
  +    
       <td colspan="2" bgcolor="#eeeeee">
        <xsl:if test="dav:getcontentlength!='' and dav:getcontentlength!='0'">
         <xsl:if test="dav:resourcetype!='&lt;collection/>'">
  -       <a href="/cocoon/mount/slide/view/{@rdf:about}">Download</a>
  +       <a href="/cocoon/samples/slide/view/{@rdf:about}">Download</a>
         </xsl:if>
        </xsl:if>
       </td>
  @@ -82,7 +88,8 @@
         </tr>
   
         <xsl:for-each select="*[local-name()!='children' and 
  -        local-name()!='permissions' and local-name()!='locks']">
  +        local-name()!='permissions' and local-name()!='locks' and
  +        local-name()!='parent']">
          <tr bgcolor="#eeeeee">
           <td align="left"><tt><xsl:value-of select="namespace-uri(.)"/></tt></td>
           <td align="left"><tt><xsl:value-of select="local-name(.)"/></tt></td>
  @@ -139,13 +146,77 @@
          <td align="right"></td>
         </tr>
   
  -      <xsl:apply-templates select="source:permissions/rdf:Seq/rdf:li/source:permission"/>
  +      <xsl:apply-templates select="source:permissions/rdf:Seq/rdf:li/source:permission[@principal]"/>
   
         <tr bgcolor="#eeeeee">
          <form action="" method="post">
           <input type="hidden" name="uri" value="{@rdf:about}"/>
           <td align="left">
  -         <input name="permissonprincipal" type="text" size="25" maxlength="40"/>
  +         <select name="permissonprincipal">
  +          <option>ALL</option>
  +          <option>SELF</option>
  +          <option>GUEST</option>
  +         </select>
  +        </td>
  +        <td align="left">
  +         <select name="permissonprivilege">
  +          <option>all</option>
  +          <option>read</option>
  +          <option>write</option>
  +          <option>read-acl</option>
  +          <option>write-acl</option>
  +          <option>read-source</option>
  +          <option>create-source</option>
  +          <option>remove-source</option>
  +          <option>lock-source</option>
  +          <option>read-locks</option>
  +          <option>read-property</option>
  +          <option>create-property</option>
  +          <option>modify-property</option>
  +          <option>remove-property</option>
  +          <option>read-content</option>
  +          <option>create-content</option>
  +          <option>modify-content</option>
  +          <option>remove-content</option>
  +          <option>grant-permission</option>
  +          <option>revoke-permission</option>
  +         </select>
  +        </td>
  +        <td align="left">
  +         <select name="permissoninheritable">
  +          <option>true</option>
  +          <option>false</option>
  +         </select>
  +        </td>
  +        <td align="left">
  +         <select name="permissondeny">
  +          <option>true</option>
  +          <option>false</option>
  +         </select>
  +        </td>
  +        <td align="right">
  +         <input type="submit" name="cocoon-action-addpermission" value="Add/Modify"/>
  +        </td>
  +       </form>
  +      </tr>
  +
  +      <tr bgcolor="#cccccc">
  +       <td align="left"><tt><b>Group</b></tt></td>
  +       <td align="left"><tt><b>Privilege</b></tt></td>
  +       <td align="left"><tt><b>Inheritable</b></tt></td>
  +       <td align="left"><tt><b>Deny</b></tt></td>
  +       <td align="right"></td>
  +      </tr>
  +
  +      <xsl:apply-templates select="source:permissions/rdf:Seq/rdf:li/source:permission[@group]"/>
  +
  +      <tr bgcolor="#eeeeee">
  +       <form action="" method="post">
  +        <input type="hidden" name="uri" value="{@rdf:about}"/>
  +        <td align="left">
  +         <select name="permissongroup">
  +          <option>groupA</option>
  +         </select>
           </td>
           <td align="left">
            <select name="permissonprivilege">
  @@ -307,7 +378,7 @@
   
    <xsl:template match="source:permission">
     <tr bgcolor="#eeeeee">
  -   <td align="left"><tt><xsl:value-of select="@principal"/></tt></td>
  +   <td align="left"><tt><xsl:value-of select="@principal"/><xsl:value-of select="@group"/></tt></td>
      <td align="left"><tt><xsl:value-of select="@privilege"/></tt></td>
      <td align="left"><tt><xsl:value-of select="@inheritable"/></tt></td>
      <td align="left"><tt><xsl:value-of select="@negative"/></tt></td>
  @@ -344,7 +415,7 @@
    <xsl:template match="rdf:li" mode="enumerate">
     <tr bgcolor="#eeeeee">
      <td align="left">&#160;&#160;
  -    <a href="/cocoon/mount/slide/browse/{substring-after(@rdf:resource,'://')}"
  +    <a href="/cocoon/samples/slide/browse/{substring-after(@rdf:resource,'://')}"
         ><tt><xsl:value-of select="@rdf:resource"/></tt></a>
      </td>
      <xsl:variable name="location"><xsl:value-of select="@rdf:resource"/></xsl:variable>
  @@ -364,7 +435,7 @@
   <!-- <xsl:template match="rdf:Description" mode="enumerate">
     <tr bgcolor="#eeeeee">
      <td align="left">&#160;&#160;
  -    <a href="/cocoon/mount/slide/browse/{source:uri}"><tt><xsl:value-of select="source:uri"/></tt></a>
  +    <a href="/cocoon/samples/slide/browse/{source:uri}"><tt><xsl:value-of select="source:uri"/></tt></a>
      </td>
      <td align="left"><tt></tt></td>
      <td align="left"><tt><xsl:value-of select="dav:getcontentlength"/></tt></td>
  
  
  
  1.2       +6 -4      xml-cocoon2/src/scratchpad/webapp/samples/slide/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/scratchpad/webapp/samples/slide/sitemap.xmap,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- sitemap.xmap	1 Jul 2002 15:09:21 -0000	1.1
  +++ sitemap.xmap	2 Jul 2002 16:54:25 -0000	1.2
  @@ -147,15 +147,17 @@
        <map:parameter name="handler" value="slidehandler"/>-->
   
        <map:match pattern="browse/**">
  -      <map:act set="slide-actions"/>
  +      <map:act set="slide-actions">
  +       <map:parameter name="cocoon-source-principal" value="root"/>
  +      </map:act>
   
  -      <map:generate type="sourcedescription" src="slide://{1}?principal=root">
  +      <map:generate type="sourcedescription" src="slide://{1}?cocoon-source-principal=root">
          <map:parameter name="repository" value="slide"/>
          <map:parameter name="namespace" value="myrepository"/>
          <map:parameter name="principal" value="root"/>
         </map:generate>
   
  -      <map:transform src="rdf2html.xsl">
  +      <map:transform src="rdf2html4properties.xsl">
          <map:parameter name="use-request-parameters" value="true"/>
          <!--<map:parameter name="namespace" value="{1}"/>-->
         </map:transform>
  @@ -164,7 +166,7 @@
        </map:match>
   
        <map:match pattern="view/**">
  -      <map:read src="slide://{1}?repository=slide&amp;namespace=myrepository&amp;principal=root"/>
  +      <map:read src="slide://{1}?cocoon-source-principal=root"/>
        </map:match>
   
   <!--    </map:act>
  
  
  
  1.3       +5 -5      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- slide.xconf	1 Jul 2002 16:41:55 -0000	1.2
  +++ slide.xconf	2 Jul 2002 16:54:25 -0000	1.3
  @@ -63,7 +63,7 @@
   
      <!-- Paths configuration -->
      <userspath>/users</userspath>
  -   <guestpath>/users/anonymous</guestpath>
  +   <guestpath>guest</guestpath>
      <filespath>/files</filespath>
      <parameter name="dav">true</parameter>
      <parameter name="standalone">true</parameter>
  @@ -96,7 +96,7 @@
       <!-- /users -->
       <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users">
        <permission action="/actions" subject="~"/>
  -     <permission action="/actions" subject="/users/anonymous" inheritable="true" negative="true"/>
  +     <permission action="/actions" subject="/users/guest" inheritable="true" negative="true"/>
        <permission action="/actions/read" subject="/users" inheritable="false"/>
   
        <!-- Permission group example -->
  @@ -124,7 +124,7 @@
        </objectnode>
   
        <!-- /users/guest represents an authenticated or unauthenticated guest user -->
  -     <objectnode classname="slideroles.basic.GuestRoleImpl" uri="/users/anonymous">
  +     <objectnode classname="slideroles.basic.GuestRoleImpl" uri="/users/guest">
         <revision>
          <property name="password"/>
         </revision>
  @@ -138,9 +138,9 @@
       </objectnode>
    
       <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/files">
  -     <permission action="/actions" subject="/users/anonymous"/> 
  +     <permission action="/actions" subject="/users/guest"/> 
        <permission action="/actions/manage" subject="/users/john"/>
  -     <permission action="/actions/write" subject="/users/groupA"/>
  +     <permission action="/actions/write" subject="+/users/groupA"/>
        <permission action="/actions/read" subject="nobody"/>
       </objectnode>
      </objectnode>
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/webapp/samples/slide/rdf2html4properties.xsl
  
  Index: rdf2html4properties.xsl
  ===================================================================
  <?xml version="1.0"?>
  <xsl:stylesheet version="1.0"
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                  xmlns:source="http://xml.apache.org/cocoon/source/1.0"
                  xmlns:dav="DAV:">
  
   <xsl:output indent="yes"/>
  
   <xsl:template match="/">
    <html>
     <head>
      <title>Apache Cocoon @version@</title>
      <link rel="SHORTCUT ICON" href="favicon.ico"/>
     </head>
     <body bgcolor="#ffffff" link="#0086b2" vlink="#00698c" alink="#743e75">
      <table border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
       <tr>
        <td width="*"><font face="arial,helvetica,sanserif" color="#000000">The Apache Software Foundation is proud to present...</font></td>
        <td width="40%" align="center"><img border="0" src="/cocoon/samples/images/cocoon.gif"/></td>
        <td width="30%" align="center"><font face="arial,helvetica,sanserif" color="#000000"><b>version @version@</b></font></td>
       </tr>
       <tr>
         <table bgcolor="#000000" border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
           <tr>
              <td width="90%" align="right" bgcolor="#0086b2"><i>orthogonal views: </i></td>
              <td nowrap="nowrap" bgcolor="#ffffff"><a href="?cocoon-view=content"><i>content</i></a></td>
              <td nowrap="nowrap" bgcolor="#ffffff"><a href="?cocoon-view=pretty-content"><i>properties</i></a></td>
              <td nowrap="nowrap" bgcolor="#ffffff"><a href="?cocoon-view=links"><i>permissions</i></a></td>
              <td nowrap="nowrap" bgcolor="#ffffff"><a href="?cocoon-view=links"><i>locks</i></a></td>
            </tr>
         </table>
       </tr>
      </table>
  
      <xsl:apply-templates select="rdf:RDF/rdf:Description[1]"/>
  
      <p align="center">
       <font size="-1">
        Copyright &#169; @year@ <a href="http://www.apache.org/">The Apache Software Foundation</a>.<br/>
        All rights reserved.
       </font>
      </p>
     </body>
    </html>
   </xsl:template>
  
   <xsl:template match="rdf:Description">
  
    <table width="100%">
     <tr>
      <td width="200" valign="top">
       <table border="0" bgcolor="#000000" cellpadding="0" cellspacing="0" width="97%">
        <tbody>
         <tr>
          <td>
           <table bgcolor="#000000" border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
            <tr>
             <td bgcolor="#0086b2" width="100%" align="left">
              <font size="+1" face="arial,helvetica,sanserif" color="#ffffff"><xsl:value-of select="@rdf:about"/></font>
             </td>
            </tr>
            <tr>
             <td width="100%" bgcolor="#ffffff" align="left">
              <table bgcolor="#ffffff" border="0" cellspacing="0" cellpadding="2"  width="100%" align="center">
               <xsl:if test="source:parent">
                <tr>
                 <td width="100%" bgcolor="#ffffff" align="left">
                  <a href="/cocoon/samples/slide/browse/{substring-after(source:parent,'://')}">Back</a>
                 </td>
                </tr>
               </xsl:if>
               <tr>
                <td width="100%" bgcolor="#ffffff" align="left">
                 <br/>
                </td>
               </tr>
               <xsl:for-each select="source:children/rdf:Seq/rdf:li">
                <tr>
                 <td width="100%" bgcolor="#ffffff" align="left">
                  <font size="+0" face="arial,helvetica,sanserif" color="#000000">
                   <a href="/cocoon/samples/slide/browse/{substring-after(@rdf:resource,'://')}"
                    ><xsl:value-of select="@rdf:resource"/></a>
                  </font>
                 </td>
                </tr>
               </xsl:for-each>
              </table>
             </td>
            </tr>
           </table>
  
          </td>
         </tr> 
        </tbody>
       </table>
  
       <br/>
      </td>
  
      <td valign="top">
       <table border="0" bgcolor="#000000" cellpadding="0" cellspacing="0" width="97%">
        <tbody>
         <tr>
          <td>
           <table bgcolor="#000000" border="0" cellspacing="2" cellpadding="2" align="center" width="100%">
            <tr>
             <td bgcolor="#0086b2" width="100%" align="left">
              <font size="+1" face="arial,helvetica,sanserif" color="#ffffff">Properties</font>
             </td>
            </tr>
            <tr>
             <td width="100%" bgcolor="#ffffff" align="left">
              <table bgcolor="#ffffff" border="0" cellspacing="0" cellpadding="2"  width="100%" align="center">
  
               <font size="+0" face="arial,helvetica,sanserif" color="#000000">
  
               <tr>
                <td align="left"><b>Namespace</b></td>
                <td align="left"><b>Name</b></td>
                <td align="left"><b>Value</b></td>
                <td align="right"></td>
               </tr>
  
               <xsl:for-each select="*[local-name()!='children' and 
                  local-name()!='permissions' and local-name()!='locks' and
                  local-name()!='parent']">
                <tr>
                 <td align="left"><xsl:value-of select="namespace-uri(.)"/></td>
                 <td align="left"><xsl:value-of select="local-name(.)"/></td>
                 <td align="left"><xsl:value-of select="."/></td>
                 <td align="right">
                  <form action="" method="get">
                   <input type="hidden" name="uri" value="{../@rdf:about}"/>
                   <input type="hidden" name="namespace" value="{namespace-uri()}"/>
                   <input type="hidden" name="name" value="{local-name()}"/>
   
                   <input type="submit" name="cocoon-action-deleteproperty" value="Delete"/>
                  </form>
                 </td>
                </tr>
               </xsl:for-each>
  
               <tr>
                <form action="" method="get">
                 <input type="hidden" name="uri" value="{@rdf:about}"/>
                  <td align="left">
                   <input name="namespace" type="text" size="25" maxlength="40"/>
                  </td>
                  <td align="left">
                   <input name="name" type="text" size="15" maxlength="40"/>
                  </td>
                  <td align="left">
                   <input name="value" type="text" size="15" maxlength="40"/>
                  </td>
                  <td align="right">
                   <input type="submit" name="cocoon-action-addproperty" value="Add/Modify"/>
                  </td>
                 </form>
                </tr>
  
                </font>
  
              </table>
             </td>
            </tr>
           </table>
  
          </td>
         </tr> 
        </tbody>
       </table>
  
       <br/>
      </td>
     </tr>
    </table>
  
   </xsl:template>
  
  </xsl:stylesheet>
  
  
  

----------------------------------------------------------------------
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