juergen     2002/06/28 00:35:17

  Modified:    src/webdav/server/org/apache/slide/webdav/method
                        ReportMethod.java
  Log:
  Fixed <version-tree> and <expand-property> report which failed due to changes in the 
DeltaV area.
  (ralf)
  
  Revision  Changes    Path
  1.38      +81 -117   
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/ReportMethod.java
  
  Index: ReportMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/ReportMethod.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- ReportMethod.java 26 Jun 2002 05:00:00 -0000      1.37
  +++ ReportMethod.java 28 Jun 2002 07:35:17 -0000      1.38
  @@ -136,6 +136,7 @@
   
   import org.apache.slide.webdav.util.resourcekind.ResourceKind;
   import org.apache.slide.webdav.util.resourcekind.AbstractResourceKind;
  +import org.apache.slide.webdav.util.resourcekind.Version;
   import org.apache.slide.webdav.util.resourcekind.VersionControlled;
   import org.apache.slide.webdav.util.resourcekind.CheckedOutVersionControlled;
   import org.apache.slide.webdav.util.resourcekind.CheckedInVersionControlled;
  @@ -648,67 +649,28 @@
        * @param      depth          the depth of the request.
        *
        * @throws     WebdavException
  -     * @throws     ObjectLockedException
  -     * @throws     RevisionDescriptorNotFoundException
  -     * @throws     ServiceAccessException
  -     * @throws     LinkedObjectNotFoundException
  -     * @throws     AccessDeniedException
  -     * @throws     ObjectNotFoundException
  +     * @throws     SlideException
        * @throws     JDOMException
        */
  -    protected void executeVersionTreeReport(String requestUri, Element 
parentElement, int depth) throws WebdavException, ObjectLockedException, 
RevisionDescriptorNotFoundException, ServiceAccessException, 
LinkedObjectNotFoundException, AccessDeniedException, ObjectNotFoundException, 
JDOMException {
  +    protected void executeVersionTreeReport(String requestUri, Element 
parentElement, int depth) throws WebdavException, SlideException, JDOMException {
           
  -        NodeRevisionDescriptors revisionDescriptors = null;
  -        NodeRevisionDescriptor revisionDescriptor = null;
  -        NodeRevisionNumber revisionNumber = null;
  -        String slideUri = null;
  -        UriHandler uriHandler = UriHandler.getUriHandler(requestUri);
  -        
  -        if (uriHandler.isHistoryUri()) {
  -            revisionDescriptors = content.retrieve(slideToken, requestUri);
  -            revisionNumber = new NodeRevisionNumber(0, 0);
  -            slideUri = requestUri;
  -        }
  -        else if (uriHandler.isVersionUri()) {
  -            String revisionUri = uriHandler.getAssociatedHistoryUri();
  -            revisionDescriptors = content.retrieve(slideToken, revisionUri);
  -            revisionNumber = revisionDescriptors.getInitialRevision();
  -            slideUri = revisionUri;
  -        }
  -        else {
  +        NodeRevisionDescriptors revisionDescriptors = content.retrieve(slideToken, 
requestUri);
  +        NodeRevisionDescriptor revisionDescriptor = content.retrieve(slideToken, 
revisionDescriptors);
  +        ResourceKind resourceKind = 
AbstractResourceKind.determineResourceKind(token,
  +                                                                               
revisionDescriptors,
  +                                                                               
revisionDescriptor);
  +        if (resourceKind instanceof VersionControlled) {
  +            requestUri = versioningHelper.getUriOfAssociatedVR(requestUri);
               revisionDescriptors = content.retrieve(slideToken, requestUri);
  -            revisionNumber = revisionDescriptors.getLatestRevision();
  -            slideUri = requestUri;
  -            
  -            // check if this is a VCR
  -            revisionDescriptor = content.retrieve(slideToken,
  +            revisionDescriptor = content.retrieve(slideToken, revisionDescriptors);
  +            resourceKind = AbstractResourceKind.determineResourceKind(token,
                                                     revisionDescriptors,
  -                                                  revisionNumber);
  -            
  -            NodeProperty lastCheckedInRevisionProperty = 
revisionDescriptor.getProperty(P_CHECKED_IN);
  -            if (lastCheckedInRevisionProperty == null) {
  -                lastCheckedInRevisionProperty = 
revisionDescriptor.getProperty(P_CHECKED_OUT);
  -            }
  -            if (lastCheckedInRevisionProperty != null) {
  -                String lastCheckedInRevisionUri = 
getElementValue((String)lastCheckedInRevisionProperty.getValue());
  -                UriHandler lastCheckedInRevisionUriHandler =
  -                    UriHandler.getUriHandler(lastCheckedInRevisionUri);
  -                String revisionUri = 
lastCheckedInRevisionUriHandler.getAssociatedHistoryUri();
  -                revisionDescriptors = content.retrieve(slideToken, revisionUri);
  -                revisionNumber = revisionDescriptors.getInitialRevision();
  -                slideUri = revisionUri;
  -                requestUri = lastCheckedInRevisionUri;
  +                                                                      
revisionDescriptor);
               }
  -        }
  -        
  -        
  -        revisionDescriptor = content.retrieve(slideToken,
  -                                              revisionDescriptors,
  -                                              revisionNumber);
           
           try {
  -            if ( Configuration.useVersionControl() && 
revisionDescriptors.isVersioned()){
  -                writeVersionTreeReport(slideUri, revisionDescriptors, 
revisionDescriptor, slideToken, requestUri, parentElement);
  +            if ( Configuration.useVersionControl() && (resourceKind instanceof 
Version) ) {
  +                writeVersionTreeReport(revisionDescriptors, revisionDescriptor, 
slideToken, requestUri, parentElement);
               }
               else {
                   parentElement.addContent(getErrorResponse(requestUri, 
WebdavStatus.SC_FORBIDDEN, C_SUPPORTED_REPORT));
  @@ -718,20 +680,6 @@
               throw new WebdavException(getErrorCode(e));
           }
           
  -        
  -        if ( WebdavUtils.isCollection(revisionDescriptor) && (depth > 0) ) {
  -            
  -            // traverse all child nodes
  -            ObjectNode objectNode = structure.retrieve(slideToken, slideUri);
  -            Enumeration children = structure.getChildren(slideToken, objectNode);
  -            if (depth != Integer.MAX_VALUE) {
  -                --depth;
  -            }
  -            while (children.hasMoreElements()) {
  -                objectNode = (ObjectNode)children.nextElement();
  -                executeVersionTreeReport(objectNode.getUri(), parentElement, depth);
  -            }
  -        }
       }
       
       
  @@ -740,7 +688,6 @@
        * Write the <code>version-tree</code> report for the given revision and
        * recursivly for all successors.
        *
  -     * @param      slideUri             the URI to access the resource in slide.
        * @param      revisionDescriptors  the NodeRevisionDescriptors of the resource.
        * @param      revisionDescriptor   the NodeRevisionDescriptor of the resource.
        * @param      slideToken           the SlideToken used to access the resource.
  @@ -757,16 +704,11 @@
        * @throws     LockTokenNotFoundException
        * @throws     JDOMException
        */
  -    private void writeVersionTreeReport(String slideUri, NodeRevisionDescriptors 
revisionDescriptors, NodeRevisionDescriptor revisionDescriptor, SlideToken slideToken, 
String requestUri, Element parentElement)  throws ObjectLockedException, 
ServiceAccessException, LinkedObjectNotFoundException, AccessDeniedException, 
ObjectNotFoundException, RevisionDescriptorNotFoundException, 
LockTokenNotFoundException, JDOMException  {
  +    private void writeVersionTreeReport(NodeRevisionDescriptors 
revisionDescriptors, NodeRevisionDescriptor revisionDescriptor, SlideToken slideToken, 
String requestUri, Element parentElement)  throws ObjectLockedException, 
ServiceAccessException, LinkedObjectNotFoundException, AccessDeniedException, 
ObjectNotFoundException, RevisionDescriptorNotFoundException, 
LockTokenNotFoundException, JDOMException  {
           
           PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token, 
slideToken);
           NodeRevisionNumber revisionNumber = revisionDescriptor.getRevisionNumber();
           
  -        if (revisionNumber.equals(new NodeRevisionNumber(0, 0))) {
  -            // this is a history
  -            parentElement.addContent(getErrorResponse(slideUri, 
WebdavStatus.SC_FORBIDDEN, C_SUPPORTED_REPORT));
  -        }
  -        else {
               // this is a versioned resource
               NodeRevisionDescriptor historyDescriptor = content.retrieve(slideToken, 
revisionDescriptors, new NodeRevisionNumber(0, 0));
               NodeProperty versionSetProperty = 
historyDescriptor.getProperty(P_VERSION_SET);
  @@ -780,17 +722,14 @@
                   NodeRevisionNumber currentRevisionNumber= null;
                   UriHandler currentUriHandler = null;
                   String currentRequestUri = null;
  -                String currentSlideUri = null;
                   
                   while (hrefIterator.hasNext()) {
                       
                       currentRequestUri = ((Element)hrefIterator.next()).getText();
                       currentUriHandler = UriHandler.getUriHandler(currentRequestUri);
  -                    currentSlideUri = currentUriHandler.getAssociatedHistoryUri();
                       currentRevisionNumber = new 
NodeRevisionNumber(currentUriHandler.getVersionName());
  -                    currentRevisionDescriptors = content.retrieve(slideToken, 
slideUri);
  -                    parentElement.addContent(getResponseElement(currentSlideUri, 
currentRevisionDescriptors, currentRevisionNumber, slideToken, currentRequestUri, 
getRequestedVersionTreeProperties()));
  -                }
  +                currentRevisionDescriptors = content.retrieve(slideToken, 
currentRequestUri);
  +                parentElement.addContent(getResponseElement(currentRequestUri, 
currentRevisionDescriptors, currentRevisionNumber, slideToken, currentRequestUri, 
getRequestedVersionTreeProperties()));
               }
           }
       }
  @@ -816,7 +755,9 @@
           
           Element href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
           String serverURL = HTTP_PROTOCOL + req.getServerName()+ ":" + 
req.getServerPort();
  -        href.setText(serverURL + req.getContextPath() + requestUri);
  +        href.setText(PropertyHelper.getAbsoluteURL(serverUri,
  +                                                   req.getContextPath(),
  +                                                   requestUri));
           response.addContent(href);
           
           PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token, 
slideToken);
  @@ -836,6 +777,45 @@
       
       
       /**
  +     * Returns the <code>&lt;response&gt;</code> for the revision
  +     * specified by the <code>revisionDescriptor</code>
  +     *
  +     * @param      slideUri             the URI to access the resource in slide.
  +     * @param      requestedResource    the RequestedResource.
  +     * @param      slideToken           the SlideToken used to access the resource.
  +     * @param      requestUri           the URI of the resource.
  +     * @param      requestedProperties  the requested properties.
  +     *
  +     * @throws     JDOMException
  +     */
  +    private Element getResponseElement(String slideUri, RequestedResource 
requestedResource, SlideToken slideToken, String requestUri, RequestedProperties 
requestedProperties)  throws JDOMException  {
  +        
  +        Element response = new Element(E_RESPONSE, 
NamespaceCache.DEFAULT_NAMESPACE);
  +        
  +        Element href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
  +        String serverURL = HTTP_PROTOCOL + req.getServerName()+ ":" + 
req.getServerPort();
  +        href.setText(PropertyHelper.getAbsoluteURL(serverUri,
  +                                                   req.getContextPath(),
  +                                                   requestUri));
  +        response.addContent(href);
  +        
  +        PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token, 
slideToken);
  +        
  +        try {
  +            List propstatList = 
retriever.getPropertiesOfObject(requestedProperties, requestedResource, 
req.getContextPath(), serverURL, true);
  +            Iterator iterator = propstatList.iterator();
  +            while (iterator.hasNext()) {
  +                response.addContent((Element)iterator.next());
  +            }
  +        }
  +        catch (Exception e) {
  +            response = getErrorResponse(requestUri, getErrorCode(e), null);
  +        }
  +        return response;
  +    }
  +    
  +    
  +    /**
        * Executes a requested <code>expand-propterty</code> report.
        *
        * @param      requestUri     the URI of the requested resource.
  @@ -1387,37 +1367,21 @@
       protected void writeExpandPropertyReport(String requestUri, Element 
parentElement, List requestedPropertyElementList) throws WebdavException, 
ObjectLockedException, RevisionDescriptorNotFoundException, ServiceAccessException, 
LinkedObjectNotFoundException, AccessDeniedException, ObjectNotFoundException, 
JDOMException {
           
           try {
  +            NodeRevisionDescriptors revisionDescriptors = 
content.retrieve(slideToken, requestUri);
  +            NodeRevisionDescriptor revisionDescriptor = 
content.retrieve(slideToken, revisionDescriptors);
  +            ResourceKind resourceKind = 
AbstractResourceKind.determineResourceKind(token,
  +                                                                                   
revisionDescriptors,
  +                                                                                   
revisionDescriptor);
  +            PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token, 
slideToken);
               
  -            NodeRevisionDescriptors revisionDescriptors = null;
  -            NodeRevisionDescriptor revisionDescriptor = null;
  -            NodeRevisionNumber revisionNumber = null;
  -            String slideUri = null;
  -            UriHandler uriHandler = UriHandler.getUriHandler(requestUri);
  -            
  -            if (uriHandler.isHistoryUri()) {
  -                revisionDescriptors = content.retrieve(slideToken, requestUri);
  -                revisionNumber = new NodeRevisionNumber(0, 0);
  -                slideUri = requestUri;
  -            }
  -            else if (uriHandler.isVersionUri()) {
  -                String revisionUri = uriHandler.getAssociatedHistoryUri();
  -                revisionDescriptors = content.retrieve(slideToken, revisionUri);
  -                revisionNumber = revisionDescriptors.getInitialRevision();
  -                slideUri = revisionUri;
  -            }
  -            else {
  -                revisionDescriptors = content.retrieve(slideToken, requestUri);
  -                revisionNumber = revisionDescriptors.getLatestRevision();
  -                slideUri = requestUri;
  -            }
               
  -            revisionDescriptor = content.retrieve(slideToken,
  +            Element response = getResponseElement(requestUri,
                                                     revisionDescriptors,
  -                                                  revisionNumber);
  -            PropertyRetrieverImpl retriever = new PropertyRetrieverImpl(token, 
slideToken);
  -            
  +                                                  
revisionDescriptor.getRevisionNumber(),
  +                                                  slideToken,
  +                                                  requestUri,
  +                                                  
createRequestedProperties(requestedPropertyElementList));
               
  -            Element response = getResponseElement(slideUri, revisionDescriptors, 
revisionNumber, slideToken, requestUri, 
createRequestedProperties(requestedPropertyElementList));
               parentElement.addContent(response);
               
               // check for nested <property> elements
  @@ -1435,7 +1399,9 @@
                           if (hrefElement.getText() != null) {
                               
                               // replace the <href> with <response> of the 
corresponding resource
  -                            writeExpandPropertyReport(hrefElement.getText(), 
hrefElement.getParent(), childPropertyList);
  +                            
writeExpandPropertyReport(getSlidePath(hrefElement.getText()),
  +                                                      hrefElement.getParent(),
  +                                                      childPropertyList);
                               hrefElement.getParent().removeContent(hrefElement);
                           }
                       }
  @@ -1638,11 +1604,9 @@
           Element response = new Element(E_RESPONSE, 
NamespaceCache.DEFAULT_NAMESPACE);
           
           Element href = new Element(E_HREF, NamespaceCache.DEFAULT_NAMESPACE);
  -        href.setText(HTTP_PROTOCOL +
  -                         getRequest().getServerName()+ ":" +
  -                         getRequest().getServerPort() +
  -                         getRequest().getContextPath() +
  -                         requestUri);
  +        href.setText(PropertyHelper.getAbsoluteURL(serverUri,
  +                                                   getRequest().getContextPath(),
  +                                                   requestUri));
           response.addContent(href);
           Element propStat = new Element(E_PROPSTAT, 
NamespaceCache.DEFAULT_NAMESPACE);
           response.addContent(propStat);
  
  
  

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

Reply via email to