luetzkendorf    2004/12/21 08:19:50

  Modified:    src/webdav/server/org/apache/slide/webdav/util/properties
                        AbstractPropertyDefinition.java
                        AclRestrictionsProperty.java PropertyManager.java
               src/webdav/server/org/apache/slide/webdav/util/resourcekind
                        AbstractResourceKind.java ResourceKind.java
  Added:       src/webdav/server/org/apache/slide/webdav/util/properties
                        PropertyComputer.java PropertyDefaultProvider.java
               src/webdav/server/org/apache/slide/webdav/util/resourcekind
                        resource_kinds.dtd resource_kinds.xml
                        ResourceKindImpl.java ResourceKindManager.java
  Removed:     src/webdav/server/org/apache/slide/webdav/util/properties
                        PropertyDefinition.java
  Log:
  next step in restructureing live-properties management
  
  Revision  Changes    Path
  1.2       +1 -1      
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/AbstractPropertyDefinition.java
  
  Index: AbstractPropertyDefinition.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/AbstractPropertyDefinition.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractPropertyDefinition.java   15 Dec 2004 18:03:03 -0000      1.1
  +++ AbstractPropertyDefinition.java   21 Dec 2004 16:19:49 -0000      1.2
  @@ -8,7 +8,7 @@
   /**
    * @author Stefan L�tzkendorf
    */
  -public abstract class AbstractPropertyDefinition implements 
PropertyDefinition
  +public abstract class AbstractPropertyDefinition implements PropertyComputer
   {
   
       public Object createDefaultValue(NamespaceAccessToken accessToken,
  
  
  
  1.2       +1 -1      
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/AclRestrictionsProperty.java
  
  Index: AclRestrictionsProperty.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/AclRestrictionsProperty.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AclRestrictionsProperty.java      15 Dec 2004 18:03:03 -0000      1.1
  +++ AclRestrictionsProperty.java      21 Dec 2004 16:19:49 -0000      1.2
  @@ -31,7 +31,7 @@
       {
           // no restrictions in Slide implementation?
           if (revisionDescriptor.exists(AclConstants.PN_ACL_RESTRICTIONS)) {
  -            Object v = 
revisionDescriptor.getProperty(AclConstants.P_ACL_RESTRICTIONS).getValue();
  +            Object v = 
revisionDescriptor.getProperty(AclConstants.PN_ACL_RESTRICTIONS).getValue();
               try {
                   return (v instanceof XMLValue)
                       ? (XMLValue)v
  
  
  
  1.2       +10 -6     
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/PropertyManager.java
  
  Index: PropertyManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/PropertyManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PropertyManager.java      15 Dec 2004 18:03:03 -0000      1.1
  +++ PropertyManager.java      21 Dec 2004 16:19:49 -0000      1.2
  @@ -53,10 +53,17 @@
       public static PropertyManager getInstance() {
           return INSTANCE;
       }
  -    
  +
  +    public boolean isComputedProperty(PropertyName property) {
  +        return this.computesProperties.containsKey(property);
  +    }
  +    public PropertyComputer getComputedProperty(PropertyName name) {
  +        return (PropertyComputer)this.computesProperties.get(name);
  +    }
       public Iterator getComputedProperties() {
           return null;
       }
  +
       public Iterator getProtectedProperties() {
           return null;
       }
  @@ -64,17 +71,14 @@
           return null;
       }
       
  -    public PropertyDefinition getPropertyDefinition(PropertyName 
propertyName) {
  +    public PropertyComputer getPropertyDefinition(PropertyName propertyName) 
{
           return null;
       }
   
  -    public void registerProperty(PropertyDefinition definition) {
  +    public void registerProperty(PropertyComputer definition) {
           if (definition.isComputed()) {
               
this.computesProperties.put(definition.getPropertyName(),definition);
           }
       }
       
  -    public PropertyDefinition getComputedProperty(PropertyName name) {
  -        return (PropertyDefinition)this.computesProperties.get(name);
  -    }
   }
  
  
  
  1.1                  
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/PropertyComputer.java
  
  Index: PropertyComputer.java
  ===================================================================
  // vi: set ts=3 sw=3:
  package org.apache.slide.webdav.util.properties;
  
  import org.apache.slide.common.NamespaceAccessToken;
  import org.apache.slide.common.PropertyName;
  import org.apache.slide.common.SlideException;
  import org.apache.slide.content.NodeRevisionDescriptor;
  import org.apache.slide.content.NodeRevisionDescriptors;
  import org.apache.slide.webdav.util.WebdavContext;
  import org.apache.slide.webdav.util.resourcekind.ResourceKind;
  
  
  /**
   * @author Stefan L�tzkendorf
   */
  public interface PropertyComputer
  {
      public PropertyName getPropertyName();
      
      public boolean isLive();
      public boolean isProtected();
      public boolean isComputed();
      
      public Object createDefaultValue(
              NamespaceAccessToken accessToken, 
              ResourceKind resourceKind, 
              String resourcePath)
          throws UnsupportedOperationException;
      
      public boolean isSupportedPropertyValue(Object value);
      
      public Object computeValue(
              NamespaceAccessToken nsaToken,
              NodeRevisionDescriptors revisionDescriptors, 
              NodeRevisionDescriptor revisionDescriptor, 
              WebdavContext context) 
          throws SlideException, UnsupportedOperationException;
  }
  
  
  
  1.1                  
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/properties/PropertyDefaultProvider.java
  
  Index: PropertyDefaultProvider.java
  ===================================================================
  // vi: set ts=3 sw=3:
  package org.apache.slide.webdav.util.properties;
  
  
  /**
   * Interface for objects that can provide default values for properties.
   */
  public interface PropertyDefaultProvider
  {
  
  }
  
  
  
  1.34      +20 -4     
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/AbstractResourceKind.java
  
  Index: AbstractResourceKind.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/AbstractResourceKind.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- AbstractResourceKind.java 15 Dec 2004 18:03:04 -0000      1.33
  +++ AbstractResourceKind.java 21 Dec 2004 16:19:49 -0000      1.34
  @@ -36,6 +36,7 @@
   
   import org.apache.slide.common.NamespaceAccessToken;
   import org.apache.slide.common.NamespaceConfig;
  +import org.apache.slide.common.PropertyName;
   import org.apache.slide.content.NodeRevisionDescriptor;
   import org.apache.slide.content.NodeRevisionDescriptors;
   import org.apache.slide.util.Configuration;
  @@ -46,6 +47,7 @@
   import org.apache.slide.webdav.util.DeltavConstants;
   import org.apache.slide.webdav.util.UriHandler;
   import org.apache.slide.webdav.util.WebdavConstants;
  +import org.apache.slide.webdav.util.properties.PropertyComputer;
   import org.jdom.Element;
   import org.jdom.JDOMException;
   
  @@ -250,10 +252,10 @@
           else if( uh.isWorkingresourceUri() ) {
               return WorkingImpl.getInstance();
           }
  -        else if( nrd.exists(P_CHECKED_IN) ) {
  +        else if( nrd.exists(PN_CHECKED_IN) ) {
               return CheckedInVersionControlledImpl.getInstance();
           }
  -        else if( nrd.exists(P_CHECKED_OUT) ) {
  +        else if( nrd.exists(PN_CHECKED_OUT) ) {
               return CheckedOutVersionControlledImpl.getInstance();
           }
           else if( config.isPrincipal(resourcePath) ) {
  @@ -325,7 +327,23 @@
       }
       
       
  +    
  +    // 
-------------------------------------------------------------------------
  +    private Set myLiveProperties = new HashSet();
  +    private Set myProtectedProperties = new HashSet();
  +    private Map myComputedProperties = new HashMap();
  +    
  +    void addComputedProperty(PropertyName name, PropertyComputer computer) {
  +        this.myComputedProperties.put(name, computer);
  +        this.myProtectedProperties.add(name);
  +        this.myLiveProperties.add(name);
  +    }
  +    
  +    // 
-------------------------------------------------------------------------
  +    
       private Set supportedLiveProperties = null;
  +    private Set supportedComputedProperties = null;
  +    private Set supportedProtectedProperties = null;
       
       /**
        * Get the set properties supported by this resource kind.
  @@ -339,8 +357,6 @@
       }
       
       
  -    private Set supportedComputedProperties = null;
  -    private Set supportedProtectedProperties = null;
       /**
        * Get the set properties supported by this resource kind.
        * @param filter Q_PROTECTED_ONLY or Q_COMPUTED_ONLY (no filtering if 
null)
  
  
  
  1.9       +0 -3      
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/ResourceKind.java
  
  Index: ResourceKind.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/ResourceKind.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ResourceKind.java 15 Dec 2004 18:03:05 -0000      1.8
  +++ ResourceKind.java 21 Dec 2004 16:19:49 -0000      1.9
  @@ -23,7 +23,6 @@
   
   package org.apache.slide.webdav.util.resourcekind;
   
  -import java.util.Iterator;
   import java.util.Set;
   
   
  @@ -36,8 +35,6 @@
        * Get the set live properties supported by this resource kind.
        */
       Set getSupportedLiveProperties();
  -    
  -    //Iterator getSupportedLivePropertyNames();
       
       /**
        * Get the set live properties supported by this resource kind.
  
  
  
  1.1                  
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/resource_kinds.dtd
  
  Index: resource_kinds.dtd
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <!ELEMENT resource-kinds (resource-kind*)>
  
  
  <!ELEMENT resource-kind (super-kinds?, live-properties?, supported-methods?, 
supported-reports?)>
  <!ATTLIST resource-kind
    name ID #REQUIRED
  >
    
  
  <!ELEMENT super-kinds (super-kind*)>
  <!ELEMENT super-kind EMPTY>
  <!ATTLIST super-kind
    ref IDREF #REQUIRED
  >
  
  <!ELEMENT live-properties (live-property*)>
  
  <!ELEMENT live-property EMPTY>
  <!ATTLIST live-property 
    name CDATA #REQUIRED
    namespace CDATA #IMPLIED 
    features CDATA #IMPLIED
    computed CDATA #IMPLIED
    protected (true|false) 'false'
  >
  
  <!ELEMENT supported-methods (method*)>
  <!ELEMENT method EMPTY>
  <!ATTLIST method 
    name CDATA #REQUIRED
    features CDATA #IMPLIED
  >
  
  <!ELEMENT supported-reports (report*)>
  <!ELEMENT report EMPTY>
  <!ATTLIST report
    name CDATA #REQUIRED
    namespace CDATA #IMPLIED 
    features CDATA #IMPLIED
  >
  
  
  
  1.1                  
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/resource_kinds.xml
  
  Index: resource_kinds.xml
  ===================================================================
  <!DOCTYPE resource-kinds SYSTEM "resource_kinds.dtd">
  <resource-kinds>
        <resource-kind name="Activity">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <live-properties>
                        <live-property name="activity-version-set" 
features="activity"/>
                        <live-property name="activity-checkout-set" 
features="activity"/>
                        <live-property name="subactivity-set" 
features="activity"/>
                        <live-property name="current-workspace-set" 
features="activity"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="Baseline">
                <super-kinds>
                        <super-kind ref="Version"/>
                </super-kinds>
                <live-properties>
                        <live-property name="baseline-collection" 
features="baseline"/>
                        <live-property name="subbaseline-set" 
features="baseline"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="CheckedInVersionControlled">
                <super-kinds>
                        <super-kind ref="VersionControlled"/>
                </super-kinds>
                <live-properties>
                        <live-property name="checked-in" 
features="version-control"/>
                </live-properties>
                <supported-methods>
                        <method name="CHECKOUT" features="checkout-in-place"/>
                        <method name="UPDATE" features="update"/>
                </supported-methods>
        </resource-kind>
        <resource-kind name="CheckedOut">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <live-properties>
                        <live-property name="checked-out" 
features="version-control"/>
                        <live-property name="predecessor-set" 
features="version-control"/>
                        <live-property name="checkout-fork" 
features="checkout-in-place"/>
                        <live-property name="checkin-fork" 
features="checkout-in-place"/>
                        <live-property name="merge-set" features="merge"/>
                        <live-property name="auto-merge-set" features="merge"/>
                        <live-property name="unreserved" features="activity"/>
                        <live-property name="activity-set" features="activity"/>
                </live-properties>
                <supported-methods>
                        <method name="CHECKIN" features="checkout-in-place"/>
                </supported-methods>
        </resource-kind>
        <resource-kind name="CheckedOutVersionControlledConfiguration">
                <super-kinds>
                        <super-kind ref="VersionControlledConfiguration"/>
                </super-kinds>
                <live-properties>
                        <live-property name="subbaseline-set" 
features="baseline"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="CheckedOutVersionControlled">
                <super-kinds>
                        <super-kind ref="VersionControlled"/>
                        <super-kind ref="CheckedOut"/>
                </super-kinds>
                <supported-methods>
                        <method name="UNCHECKOUT" features="checkout-in-place"/>
                </supported-methods>
        </resource-kind>
        <resource-kind name="CollectionVersion">
                <super-kinds>
                        <super-kind ref="Version"/>
                </super-kinds>
                <live-properties>
                        <live-property name="version-controlled-binding-set" 
features="version-controlled-collection"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="DeltavCompliantCollection">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <supported-methods>
                        <method name="BIND" features="bind"/>
                        <method name="UNBIND" features="bind"/>
                        <method name="REBIND" features="bind"/>
                        <method name="BASELINE-CONTROL" features="baseline"/>
                </supported-methods>
        </resource-kind>
        <resource-kind name="DeltavCompliant">
                <live-properties>
        <live-property name="creationdate"
          protected="true"/>
        <live-property name="modificationdate"
          protected="true"/>
                        <live-property name="displayname"/>
                        <live-property name="getcontentlanguage"/>
        <live-property name="getcontentlength"
          protected="true"/>
                        <live-property name="getcontenttype"/>
        <live-property name="getetag"
          protected="true"/>
        <live-property name="getlastmodified"
          protected="true"/>
        <live-property name="resourcetype"
          protected="true"/>
                        <live-property name="source"/>
        <live-property name="lock-discovery" features="locking"
          
computed="org.apache.slide.webdav.util.properties.LockDiscoveryProperty"/>
        <live-property name="supported-lock" features="locking"
          
computed="org.apache.slide.webdav.util.properties.SupportedLockProperty"/>
        <live-property name="owner" features="acl"
          computed="org.apache.slide.webdav.util.properties.OwnerProperty"/>
        <live-property name="creationuser" features="acl"
          
computed="org.apache.slide.webdav.util.properties.CreationUserProperty"/>
        <live-property name="modificationuser" features="acl"
          
computed="org.apache.slide.webdav.util.properties.ModificationUserProperty"/>
        <live-property name="supported-privilege-set" features="acl"
          
computed="org.apache.slide.webdav.util.properties.SupportedPrivilegeSetProperty"/>
        <live-property name="current-user-privilege-set" features="acl"
          
computed="org.apache.slide.webdav.util.properties.CurrentuserPrivilegeSetProperty"/>
        <live-property name="acl" features="acl"
          computed="org.apache.slide.webdav.util.properties.AclProperty"/>
        <live-property name="acl-restrictions" features="acl"
          
computed="org.apache.slide.webdav.util.properties.AclRestrictionsProperty"/>
        <live-property name="inherited-acl-set" features="acl"
          
computed="org.apache.slide.webdav.util.properties.InheritedAclSetProperty"/>
        <live-property name="principal-collection-set" features="acl"
          
computed="org.apache.slide.webdav.util.properties.PrincipalCollectionSetProperty"/>
                        <live-property name="privilege-collection-set" 
features="acl"
          
computed="org.apache.slide.webdav.util.properties.PrivilegeCollectionSetProperty"/>
                        <live-property name="resource-id" features="bind"/>
                        <live-property name="parent-set" features="bind"/>
                        <live-property name="comment" 
features="version-control"/>
                        <live-property name="creator-displayname" 
features="version-control"/>
                        <live-property name="supported-method-set" 
features="version-control"/>
        <live-property name="supported-live-property-set" 
features="version-control"
          
computed="org.apache.slide.webdav.util.properties.SupportedLivePropertySetProperty"/>
        <live-property name="supported-report-set" features="version-control"
          
computed="org.apache.slide.webdav.util.properties.SupportedReportSetProperty"/>
        <live-property name="workspace" features="workspace"
          computed="org.apache.slide.webdav.util.properties.WorkspaceProperty"/>
                        <live-property name="version-controlled-configuration" 
features="baseline"/>
                </live-properties>
                <supported-methods>
                        <method name="CONNECT"/>
                        <method name="COPY"/>
                        <method name="DELETE"/>
                        <method name="GET"/>
                        <method name="HEAD"/>
                        <method name="MOVE"/>
                        <method name="OPTIONS"/>
                        <method name="PORT"/>
                        <method name="PROPFIND"/>
                        <method name="PROPPATCH"/>
                        <method name="PUT"/>
                        <method name="TRACE"/>
                        <method name="LOCK" features="locking"/>
                        <method name="UNLOCK" features="locking"/>
                        <method name="ACL" features="acl"/>
                        <method name="REPORT" features="acl version-control"/>
                        <method name="SEARCH" features="dasl"/>
                </supported-methods>
                <supported-reports>
                        <report name="expand-property" features="acl 
version-control"/>
                </supported-reports>
        </resource-kind>
        <resource-kind name="DeltavCompliantUnmappedUrl">
                <supported-methods>
                        <method name="PUT"/>
                        <method name="MKCOL"/>
                        <method name="VERSION-CONTROL" 
features="version-control"/>
                        <method name="MKWORKSPACE" features="workspace"/>
                        <method name="MKREDIRECTREF" features="redirect-refs"/>
                </supported-methods>
        </resource-kind>
        <resource-kind name="Versionable">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <supported-methods>
                        <method name="VERSION-CONTROL" 
features="version-control"/>
                </supported-methods>
        </resource-kind>
        <resource-kind name="VersionControlledCollection">
                <super-kinds>
                        <super-kind ref="VersionControlled"/>
                </super-kinds>
                <live-properties>
                        <live-property name="eclipsed-set" 
features="version-controlled-collection"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="VersionControlledConfiguration">
                <super-kinds>
                        <super-kind ref="VersionControlled"/>
                </super-kinds>
                <live-properties>
                        <live-property name="baseline-controlled-collection" 
features="baseline"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="VersionControlled">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <live-properties>
                        <live-property name="auto-version" 
features="version-control"/>
        <live-property name="version-history" features="version-history"
          
computed="org.apache.slide.webdav.util.properties.VersionHistoryProperty"/>
                </live-properties>
                <supported-methods>
                        <method name="VERSION-CONTROL" 
features="version-control"/>
                        <method name="MERGE" features="merge"/>
                </supported-methods>
                <supported-reports>
                        <report name="version-tree" features="version-control"/>
                </supported-reports>
        </resource-kind>
        <resource-kind name="VersionHistory">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <live-properties>
                        <live-property name="version-set" 
features="version-control"/>
        <live-property name="root-version" features="version-history"
          
computed="org.apache.slide.webdav.util.properties.RootVersionProperty"/>
                </live-properties>
                <supported-reports>
                        <report name="version-tree" features="version-control"/>
                </supported-reports>
        </resource-kind>
        <resource-kind name="Version">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <live-properties>
                        <live-property name="predecessor-set" 
features="version-control"/>
        <live-property name="successor-set" features="version-control"
          
computed="org.apache.slide.webdav.util.properties.SuccessorSetProperty"/>
        <live-property name="checkout-set" features="version-control"
          
computed="org.apache.slide.webdav.util.properties.CheckoutSetProperty"/>
                        <live-property name="version-name" 
features="version-control"/>
                        <live-property name="checkout-fork" 
features="checkout-in-place"/>
                        <live-property name="checkin-fork" 
features="checkout-in-place"/>
        <live-property name="version-history" features="version-history"
          
computed="org.apache.slide.webdav.util.properties.VersionHistoryProperty"/>
                        <live-property name="label-name-set" features="label"/>
                        <live-property name="activity-set" features="activity"/>
                </live-properties>
                <supported-methods>
                        <method name="LABEL" features="label"/>
                        <method name="CHECKOUT" features="working-resource"/>
                </supported-methods>
                <supported-reports>
                        <report name="version-tree" features="version-control"/>
                </supported-reports>
        </resource-kind>
        <resource-kind name="Working">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                        <super-kind ref="CheckedOut"/>
                </super-kinds>
                <live-properties>
                        <live-property name="auto-update" 
features="working-resource"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="Workspace">
                <super-kinds>
                        <super-kind ref="DeltavCompliantCollection"/>
                </super-kinds>
                <live-properties>
        <live-property name="workspace-checkout-set" 
features="working-workspace"
          
computed="org.apache.slide.webdav.util.properties.WorkspaceCheckoutSetProperty"/>
                        <live-property name="baseline-controled-collection-set" 
features="baseline"/>
                        <live-property name="current-activity-set" 
features="activity"/>
                </live-properties>
        </resource-kind>
        <resource-kind name="Principal">
                <super-kinds>
                        <super-kind ref="DeltavCompliant"/>
                </super-kinds>
                <live-properties>
                        <live-property name="alternate-URI-set" features="acl"/>
                        <live-property name="principal-URL" features="acl"/>
                        <live-property name="group-member-set" features="acl"/>
        <live-property name="group-membership" features="acl"
          
computed="org.apache.slide.webdav.util.properties.GroupMembershipProperty"/>
                </live-properties>
        </resource-kind>
  </resource-kinds>
  
  
  
  1.1                  
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/ResourceKindImpl.java
  
  Index: ResourceKindImpl.java
  ===================================================================
  // vi: set ts=3 sw=3:
  package org.apache.slide.webdav.util.resourcekind;
  
  import java.util.Collections;
  import java.util.HashSet;
  import java.util.Set;
  
  import org.apache.commons.collections.CollectionUtils;
  import org.apache.commons.collections.IteratorUtils;
  import org.apache.commons.collections.Transformer;
  
  import org.apache.slide.common.PropertyName;
  import org.apache.slide.webdav.util.DeltavConstants;
  
  
  /**
   * @author Stefan L�tzkendorf
   */
  class ResourceKindImpl implements ResourceKind
  {
      private String name;
      /** Set of [EMAIL PROTECTED] org.apache.slide.common.PropertyName} s. */
      private Set liveProperties;
      private Set protectedProperties;
      private Set computedProperties;
      private Set methodNames;
      private Set reportsNames;
  
      ResourceKindImpl(String name) {
          this.name = name;
      }
      
      public Set getSupportedLiveProperties()
      {
          Set result = new HashSet();
  
          CollectionUtils.addAll(result,
              IteratorUtils.transformedIterator(
                  getSupportedLivePropertyNames().iterator(),
                  new Transformer() {
                      public Object transform(Object propertyName) {
                          return ((PropertyName)propertyName).getName();
                      }
                  }));
          
          return result;
      }
  
      public boolean isSupportedLiveProperty(String prop)
      {
          return isSupportedLiveProperty(PropertyName.getPropertyName(prop));
      }
      
      public boolean isSupportedLiveProperty(PropertyName prop)
      {
          return this.liveProperties.contains(prop);
      }
  
      public Set getSupportedLivePropertyNames() 
      {
          return Collections.unmodifiableSet(this.liveProperties);
      }
  
      public Set getSupportedLiveProperties(String filter)
      {
          Set result = new HashSet();
  
          CollectionUtils.addAll(result,
              IteratorUtils.transformedIterator(
                  getSupportedLivePropertyNames(filter).iterator(),
                  new Transformer() {
                      public Object transform(Object propertyName) {
                          return ((PropertyName)propertyName).getName();
                      }
                  }));
          
          return result;
      }
      /** 
       * Get the set live properties supported by this resource kind.
       * @param filter Q_PROTECTED_ONLY or Q_COMPUTED_ONLY (no filtering if 
null)
       */
      public Set getSupportedLivePropertyNames(String filter)
      {
          if (DeltavConstants.Q_COMPUTED_ONLY.equals(filter)) {
              return Collections.unmodifiableSet(this.computedProperties);
          }
          if (DeltavConstants.Q_PROTECTED_ONLY.equals(filter)) {
              return Collections.unmodifiableSet(this.protectedProperties);
          }
          return Collections.unmodifiableSet(this.liveProperties);
      }
  
      public Set getSupportedLiveProperties(String[] excludedFeatures)
      {
          throw new UnsupportedOperationException();
      }
  
      public Set getSupportedLiveProperties(String filter,
              String[] excludedFeatures)
      {
          throw new UnsupportedOperationException();
      }
  
  
      public Set getSupportedMethods()
      {
          return Collections.unmodifiableSet(this.methodNames);
      }
      public boolean isSupportedMethod(String method)
      {
          return this.methodNames.contains(method);
      }
  
      public Set getSupportedReports()
      {
          return Collections.unmodifiableSet(this.reportsNames);
      }
  
      
      public boolean isSupportedPropertyValue(String propertyName, Object value)
      {
          // TODO Auto-generated method stub
          return false;
      }
      
      public String toString() {
          return this.name;
      }
  }
  
  
  
  1.1                  
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/resourcekind/ResourceKindManager.java
  
  Index: ResourceKindManager.java
  ===================================================================
  // vi: set ts=3 sw=3:
  package org.apache.slide.webdav.util.resourcekind;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import org.apache.slide.common.NamespaceAccessToken;
  import org.apache.slide.common.NamespaceConfig;
  import org.apache.slide.common.PropertyName;
  import org.apache.slide.content.NodeRevisionDescriptor;
  import org.apache.slide.webdav.util.DeltavConstants;
  import org.apache.slide.webdav.util.UriHandler;
  import org.apache.slide.webdav.util.WebdavConstants;
  import org.apache.slide.webdav.util.properties.PropertyComputer;
  
  
  /**
   * @author Stefan L�tzkendorf
   */
  public class ResourceKindManager
  {
      public static Kind ACTIVITY = new Kind("Activity", 
ActivityImpl.getInstance());
      public static Kind BASELINE = new Kind("Baseline", 
BaselineImpl.getInstance());
      public static Kind CHECKED_IN_VERSION_CONTROLLED = new 
Kind("CheckedInVersionControlled", 
CheckedInVersionControlledImpl.getInstance());
      public static Kind CHECKED_OUT = new Kind("CheckedOut", 
CheckedOutImpl.getInstance());
      public static Kind CHECKED_OUT_VERSION_CONTROLLED_CONFIG = new 
Kind("CheckedOutVersionControlledConfiguration", 
CheckedOutVersionControlledConfigurationImpl.getInstance());
      public static Kind CHECKED_OUT_VERSION_CONTROLLED = new 
Kind("CheckedOutVersionControlled", 
CheckedOutVersionControlledImpl.getInstance());
      public static Kind COLLECTION_VERSION = new Kind("CollecionVersion", 
CollectionVersionImpl.getInstance());
      public static Kind DELTAV_COMPLIANT = new Kind("DeltavCompliant", 
DeltavCompliantImpl.getInstance());
      public static Kind DELTAV_COMPLIANT_COLL = new 
Kind("DeltavCompliantCollection", DeltavCompliantCollectionImpl.getInstance());
      public static Kind DELTAV_COMPLIANT_UNMAPPED_URL = new 
Kind("DeltavCompliantUnmappedUrl", 
DeltavCompliantUnmappedUrlImpl.getInstance());
      public static Kind VERSIONABLE = new Kind("Versionable", 
VersionableImpl.getInstance());
      public static Kind VERSION = new Kind("Version", 
VersionImpl.getInstance());
      public static Kind VERSION_CONTROLLED = new Kind("VersionControlled", 
VersionControlledImpl.getInstance());
      public static Kind VERSION_CONTROLLED_COLL = new 
Kind("VersionControlledCollection", 
VersionControlledCollectionImpl.getInstance());
      public static Kind VERSION_CONTROLLED_CONFIG = new 
Kind("VersionControlledConfiguration", 
VersionControlledConfigurationImpl.getInstance());
      public static Kind VERSION_HISTORY = new Kind("VersionHistory", 
VersionHistoryImpl.getInstance());
      public static Kind WORKING = new Kind("Working", 
WorkingImpl.getInstance());
      public static Kind WORKSPACE = new Kind("Workspace", 
WorkspaceImpl.getInstance());
      public static Kind PRINCIPAL = new Kind("Principal", 
PrincipalImpl.getInstance());
      
      static public ResourceKind determineResourceKind(NamespaceAccessToken 
nsaToken, 
              String resourcePath, NodeRevisionDescriptor nrd) 
      {
          UriHandler uh = UriHandler.getUriHandler(resourcePath);
          NamespaceConfig config = nsaToken.getNamespaceConfig();
          
          if( nrd == null ) {
              return DeltavCompliantUnmappedUrlImpl.getInstance();
          }
          else if( uh.isHistoryUri() ) {
              return VersionHistoryImpl.getInstance();
          }
          else if( uh.isVersionUri() ) {
              return VersionImpl.getInstance();
          }
          else if( uh.isWorkspaceUri() ) {
              return WorkspaceImpl.getInstance();
          }
          else if( uh.isWorkingresourceUri() ) {
              return WorkingImpl.getInstance();
          }
          else if( nrd.exists(DeltavConstants.PN_CHECKED_IN) ) {
              return CheckedInVersionControlledImpl.getInstance();
          }
          else if( nrd.exists(DeltavConstants.PN_CHECKED_OUT) ) {
              return CheckedOutVersionControlledImpl.getInstance();
          }
          else if( config.isPrincipal(resourcePath) ) {
              return PrincipalImpl.getInstance();
          }
          else if( nrd.propertyValueContains(WebdavConstants.PN_RESOURCETYPE, 
WebdavConstants.E_COLLECTION) ) {
              return DeltavCompliantCollectionImpl.getInstance();
          }
          else {
              return VersionableImpl.getInstance();
          }
      }
  
      
      
      void addComputedProperty(Kind resourceKind, PropertyName name, 
PropertyComputer computer) {
          //resourceKind.instance.
      }
      
      
      
      public static Kind getKind(String name) {
          return (Kind)Kind.kinds.get(name);
      }
      
      public static final class Kind {
          protected static Map kinds = new HashMap();
          protected String name;
          protected AbstractResourceKind instance;
          protected Kind(String name, ResourceKind instance) {
              this.name = name;
              this.instance = (AbstractResourceKind)instance; // valid?
              kinds.put(name, this);
          }
          public String toString()
          {
              return this.name;
          }
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to