juergen     02/04/04 20:52:53

  Modified:    src/webdav/server/org/apache/slide/webdav/util
                        VersioningHelper.java
  Log:
  Added methods getUri() and updateVCR().
  Use updateVCR() to restore the VCR in method uncheckout().
  Removed no longer needed methods to backup/restore the properties.
  (ralf)
  
  Revision  Changes    Path
  1.19      +130 -110  
jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java
  
  Index: VersioningHelper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- VersioningHelper.java     4 Apr 2002 11:40:56 -0000       1.18
  +++ VersioningHelper.java     5 Apr 2002 04:52:53 -0000       1.19
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java,v
 1.18 2002/04/04 11:40:56 juergen Exp $
  - * $Revision: 1.18 $
  - * $Date: 2002/04/04 11:40:56 $
  + * $Header: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/util/VersioningHelper.java,v
 1.19 2002/04/05 04:52:53 juergen Exp $
  + * $Revision: 1.19 $
  + * $Date: 2002/04/05 04:52:53 $
    *
    * ====================================================================
    *
  @@ -341,7 +341,6 @@
               content.store(sToken, cinNrds.getUri(), cinNrd, null);
               
               // do the checkout
  -            backupProperties(rNrds, rNrd, vhrNrds);
               rNrd.removeProperty( cinProp );
               rNrd.setProperty(
                   new NodeProperty(P_CHECKED_OUT, cinProp.getValue()) );
  @@ -474,15 +473,8 @@
           PropertyHelper.removeHrefFromProperty(coutNrd, P_CHECKOUT_SET, 
rNrds.getUri());
           content.store( sToken, coutNrds.getUri(), coutNrd, null);
           
  -        // restore revision descriptor
  -        restoreProperties(rNrds, rNrd, vhrNrds);
  -        rNrd.setLastModified(new Date());
  -        rNrd.setProperty(new NodeProperty(P_CHECKED_IN, coutProp.getValue()) );
  -        NodeRevisionContent oldContent = new NodeRevisionContent();
  -        oldContent.setContent(coutNrc.getContentBytes());
  -        
  -        // Store changes
  -        content.store( sToken, rNrds.getUri(), rNrd, oldContent);
  +        // update properties and content
  +        updateVCR(rNrds, rNrd, coutNrds, coutNrd);
       }
       
       /**
  @@ -682,6 +674,100 @@
       }
       
       /**
  +     * Returns the URI of the resource defined by the given 
NodeRevisionDescriptor(s).
  +     *
  +     * @param      revisionDescriptors  the NodeRevisionDescriptors of the resource.
  +     * @param      revisionDescriptor   the NodeRevisionDescriptor of the resource.
  +     *
  +     * @return     the URI of the resource.
  +     *
  +     * @throws     SlideException
  +     */
  +    public String getUri(NodeRevisionDescriptors revisionDescriptors,
  +                                NodeRevisionDescriptor revisionDescriptor) throws 
SlideException {
  +        return getUri(nsaToken, sToken, content, revisionDescriptors, 
revisionDescriptor);
  +    }
  +    
  +    /**
  +     * Updates the VCR specified by <code>vcrPath</code> with the properties
  +     * and the content of the VR specified by the given <code>vrPath</code>.
  +     *
  +     * @param      vcrUri  the URI of the VCR to update.
  +     * @param      vrUri   the URI of the VR from which to update.
  +     *
  +     * @throws     SlideException
  +     */
  +    protected void updateVCR(String vcrUri, String vrUri) throws SlideException {
  +        
  +        NodeRevisionDescriptors vcrRevisionDescriptors = 
retrieveRevisionDescriptors(vcrUri);
  +        NodeRevisionDescriptor vcrRevisionDescriptor = 
retrieveLatestRevisionDescriptor(vcrUri, vcrRevisionDescriptors);
  +        
  +        NodeRevisionDescriptors vrRevisionDescriptors = 
retrieveRevisionDescriptors(vrUri);
  +        NodeRevisionDescriptor vrRevisionDescriptor = 
retrieveLatestRevisionDescriptor(vrUri, vrRevisionDescriptors);
  +        
  +    }
  +    
  +    /**
  +     * Updates the VCR specified by <code>vcrRevisionDescriptors</code> and
  +     * <code>vcrRevisionDescriptors</code> with the properties and the content
  +     * of the VR specified by the given <code>vrRevisionDescriptors</code>
  +     * and <code>vrRevisionDescriptor</code>.
  +     *
  +     * @param      vcrRevisionDescriptors  the NodeRevisionDescriptors of the VCR 
to update.
  +     * @param      vcrRevisionDescriptor   the NodeRevisionDescriptor of the VCR to 
update.
  +     * @param      vrRevisionDescriptors   the NodeRevisionDescriptors of the VR 
from
  +     *                                     which to update.
  +     * @param      vrRevisionDescriptor    the NodeRevisionDescriptor of the VR from
  +     *                                     which to update.
  +     *
  +     * @throws     SlideException
  +     */
  +    protected void updateVCR(NodeRevisionDescriptors vcrRevisionDescriptors, 
NodeRevisionDescriptor vcrRevisionDescriptor, NodeRevisionDescriptors 
vrRevisionDescriptors, NodeRevisionDescriptor vrRevisionDescriptor) throws 
SlideException {
  +        
  +        ResourceKind vrResourceKind = 
AbstractResourceKind.determineResourceKind(vrRevisionDescriptor);
  +        
  +        // remove all VCR properties first
  +        Enumeration propertyEnum = vcrRevisionDescriptor.enumerateProperties();
  +        while (propertyEnum.hasMoreElements()) {
  +            
vcrRevisionDescriptor.removeProperty((NodeProperty)propertyEnum.nextElement());
  +        }
  +        
  +        // set initial properties
  +        Iterator iterator = 
pHelp.createInitialProperties(VersionImpl.getInstance()).iterator();
  +        while (iterator.hasNext()) {
  +            vcrRevisionDescriptor.setProperty((NodeProperty)iterator.next());
  +        }
  +        
  +        // copy dead properties of VR to VCR
  +        propertyEnum = vrRevisionDescriptor.enumerateProperties();
  +        while (propertyEnum.hasMoreElements()) {
  +            NodeProperty p = (NodeProperty)propertyEnum.nextElement();
  +            if( ! vrResourceKind.isSupportedLiveProperty(p.getName()) ) {
  +                vcrRevisionDescriptor.setProperty(p);
  +            }
  +        }
  +        
  +        // set up "special" properties
  +        String vrUri = getUri(vrRevisionDescriptors, vrRevisionDescriptor);
  +        vcrRevisionDescriptor.setProperty(new NodeProperty(P_CHECKED_IN,
  +                                                           
pHelp.createHrefValue(vrUri)) );
  +        vcrRevisionDescriptor.setLastModified(new Date());
  +        
vcrRevisionDescriptor.setContentLength(vrRevisionDescriptor.getContentLength());
  +        vcrRevisionDescriptor.setContentType(vrRevisionDescriptor.getContentType());
  +        vcrRevisionDescriptor.setETag(vcrRevisionDescriptors.getUri().hashCode()+
  +                                          
"_"+vcrRevisionDescriptor.getContentLength());
  +        
  +        // update content
  +        NodeRevisionContent vrContent = content.retrieve(sToken, 
vrRevisionDescriptors, vrRevisionDescriptor);
  +        NodeRevisionContent vcrContent = new NodeRevisionContent();
  +        vcrContent.setContent(vrContent.getContentBytes());
  +        
  +        // Store changes
  +        content.store( sToken, vcrRevisionDescriptors.getUri(), 
vcrRevisionDescriptor, vcrContent);
  +    }
  +    
  +    
  +    /**
        * Expects a String containing an XML Element like
        * <code>&lt;example&gt;value&lt;/example&gt;</code>
        * and returns the text <code>value</code> of this element.
  @@ -875,112 +961,46 @@
       }
       
       /**
  -     * Backups the properties of the given <code>revisionDescriptor</code>
  -     * at the {@link #VHR_BACKUP_REVISION_NUMBER special revision} of the
  -     * NodeRevisionDescriptors of the VHR associated with the VCR.
  -     *
  -     * @param      revisionDescriptors         the NodeRevisionDescriptors of the
  -     *                                         VCR to backup.
  -     * @param      revisionDescriptor          the NodeRevisionDescriptor of the
  -     *                                         VCR to backup.
  -     * @param      historyRevisionDescriptors  the NodeRevisionDescriptors of the
  -     *                                         VHR associated with the VCR.
  +     * Returns the URI of the resource defined by the given 
NodeRevisionDescriptor(s).
        *
  -     * @throws     SlideException
  -     */
  -    protected void backupProperties(NodeRevisionDescriptors revisionDescriptors, 
NodeRevisionDescriptor revisionDescriptor, NodeRevisionDescriptors 
historyRevisionDescriptors) throws SlideException {
  -        
  -        NodeRevisionDescriptor backup = cloneRevisionDescriptor(revisionDescriptor, 
VHR_BACKUP_REVISION_NUMBER);
  -        try {
  -            content.retrieve(sToken, historyRevisionDescriptors, 
backup.getRevisionNumber());
  -            content.store(sToken, historyRevisionDescriptors.getUri(), backup, 
null);
  -        }
  -        catch (RevisionDescriptorNotFoundException e) {
  -            content.create(sToken, historyRevisionDescriptors.getUri(),null,  
backup, null);
  -        }
  -    }
  -    
  -    /**
  -     * Restores the properties of the given <code>revisionDescriptor</code>
  -     * from the {@link #VHR_BACKUP_REVISION_NUMBER special revision} of the
  -     * NodeRevisionDescriptors of the VHR associated with the VCR.
        *
  -     * @param      revisionDescriptors         the NodeRevisionDescriptors of the
  -     *                                         VCR to restore.
  -     * @param      revisionDescriptor          the NodeRevisionDescriptor of the
  -     *                                         VCR to restore.
  -     * @param      historyRevisionDescriptors  the NodeRevisionDescriptors of the
  -     *                                         VHR associated with the VCR.
  +     * @param      nsaToken             the NamespaceAccessToken to use.
  +     * @param      sToken               the SlideToken to use.
  +     * @param      content              the Content helper to use.
  +     * @param      revisionDescriptors  the NodeRevisionDescriptors of the resource.
  +     * @param      revisionDescriptor   the NodeRevisionDescriptor of the resource.
  +     *
  +     * @return     the URI of the resource.
        *
        * @throws     SlideException
        */
  -    protected void restoreProperties(NodeRevisionDescriptors revisionDescriptors, 
NodeRevisionDescriptor revisionDescriptor, NodeRevisionDescriptors 
historyRevisionDescriptors) throws SlideException {
  -
  -        NodeRevisionDescriptor backup = content.retrieve(sToken, 
historyRevisionDescriptors, VHR_BACKUP_REVISION_NUMBER);
  -        copyRevisionDescriptor(backup, revisionDescriptor);
  -        content.store(sToken, revisionDescriptors.getUri(), revisionDescriptor, 
null);
  +    public static String getUri(NamespaceAccessToken nsaToken,
  +                                SlideToken sToken,
  +                                Content content,
  +                                NodeRevisionDescriptors revisionDescriptors,
  +                                NodeRevisionDescriptor revisionDescriptor) throws 
SlideException {
  +
  +        StringBuffer uri = new StringBuffer();
  +        UriHandler uriHandler = UriHandler.getUriHandler(nsaToken, 
revisionDescriptors.getUri());
  +        if ( ! uriHandler.isHistoryUri() ) {
  +            // any resource
  +            uri.append(revisionDescriptors.getUri());
       }
  -        
  -    /**
  -     * Returns a clone of the given <code>revisionDescriptor</code> with
  -     * the given <code>revisionNumber</code>.
  -     *
  -     * @param      revisionDescriptor  the NodeRevisionDescriptor to clone.
  -     * @param      revisionNumber      the NodeRevsionNumber to use for the clone.
  -     *
  -     * @return     the cloned NodeRevisionDescriptor.
  -     */
  -    private NodeRevisionDescriptor cloneRevisionDescriptor(NodeRevisionDescriptor 
revisionDescriptor, NodeRevisionNumber revisionNumber) {
  -        
  -        String branchName = revisionDescriptor.getBranchName();
  -        Enumeration labelEnum = revisionDescriptor.enumerateLabels();
  -        Vector labels = new Vector();
  -        while (labelEnum.hasMoreElements()) {
  -            labels.add(labelEnum.nextElement());
  -        }
  -        Hashtable properties = new Hashtable();
  -        Enumeration propertiesEnum = revisionDescriptor.enumerateProperties();
  -        NodeProperty property = null;
  -        String name = null;
  -        String namespace = null;
  -        while (propertiesEnum.hasMoreElements()) {
  -            property = (NodeProperty)propertiesEnum.nextElement();
  -            name = property.getName();
  -            namespace = property.getNamespace();
  -            if (namespace != null) {
  -                name = namespace + name;
  +        else {
  +            if (revisionDescriptor.getRevisionNumber().equals(new 
NodeRevisionNumber(0, 0))) {
  +                // history resource
  +                uri.append(revisionDescriptors.getUri());
  +        }
  +            else {
  +                // version resource
  +                uri.append(revisionDescriptors.getUri());
  +                if ( ! revisionDescriptors.getUri().endsWith("/") ) {
  +                    uri.append("/");
                   }
  -            properties.put(name, property);
  +                uri.append(revisionDescriptor.getRevisionNumber().toString());
               }
  -        NodeRevisionDescriptor backup = new NodeRevisionDescriptor(revisionNumber, 
branchName, labels, properties);
  -        return backup;
  -        }
  -        
  -    /**
  -     * Copies the labels and properties of the given <code>source</code>
  -     * to the <code>destination</code> NodeRevisionDescriptor.
  -     *
  -     * @param      source       the NodeRevisionDescriptor to copy the labels
  -     *                          and properties from.
  -     * @param      destination  the NodeRevisionDescriptor to copy the labels
  -     *                          and properties to.
  -     */
  -    private void copyRevisionDescriptor(NodeRevisionDescriptor source, 
NodeRevisionDescriptor destination) {
  -        
  -        destination.removeLabels();
  -        Enumeration labelEnum = source.enumerateLabels();
  -        while (labelEnum.hasMoreElements()) {
  -            destination.addLabel((String)labelEnum.nextElement());
  -                }
  -        
  -        Enumeration propertiesEnum = destination.enumerateProperties();
  -        while (propertiesEnum.hasMoreElements()) {
  -            destination.removeProperty((NodeProperty)propertiesEnum.nextElement());
  -            }
  -        propertiesEnum = source.enumerateProperties();
  -        while (propertiesEnum.hasMoreElements()) {
  -            destination.setProperty((NodeProperty)propertiesEnum.nextElement());
           }
  +        return uri.toString();
       }
       
   }
  
  
  

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

Reply via email to