pnever      2003/05/30 08:44:43

  Modified:    src/webdav/server/org/apache/slide/webdav/method
                        PutMethod.java
  Log:
  Allow the content-type to be updated
  
  Revision  Changes    Path
  1.64      +97 -96    
jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PutMethod.java
  
  Index: PutMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/webdav/server/org/apache/slide/webdav/method/PutMethod.java,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- PutMethod.java    31 Mar 2003 15:23:27 -0000      1.63
  +++ PutMethod.java    30 May 2003 15:44:41 -0000      1.64
  @@ -92,28 +92,28 @@
   public class PutMethod
       extends AbstractWebdavMethod
       implements DeltavConstants {
  -
  -
  +    
  +    
       // -------------------------------------------------------------- Constants
       public final static boolean AUTO_VERSION_CONTROL = new Boolean(
           Domain.getParameter(I_AUTO_VERSION_CONTROL, I_AUTO_VERSION_CONTROL_DEFAULT) 
).booleanValue();
  -
  +    
       // ----------------------------------------------------- Instance Variables
  -
  +    
       /**
        * The VersioningHelper used by this instance.
        */
       protected VersioningHelper versioningHelper = null;
  -
  +    
       /**
        * Resource to be written.
        */
       protected String resourcePath;
       private boolean isInVersioncontrolExcludePath = false;
  -
  +    
       // ----------------------------------------------------------- Constructors
  -
  -
  +    
  +    
       /**
        * Constructor.
        *
  @@ -123,11 +123,11 @@
       public PutMethod(NamespaceAccessToken token, WebdavServletConfig config) {
           super(token, config);
       }
  -
  -
  +    
  +    
       // ------------------------------------------------------ Protected Methods
  -
  -
  +    
  +    
       /**
        * Parse XML request.
        *
  @@ -140,13 +140,13 @@
                                                                   req,
                                                                   resp,
                                                                   config);
  -
  +        
           resourcePath = requestUri;
           if (resourcePath == null) {
               resourcePath = "/";
           }
       }
  -
  +    
       /**
        * Execute request.
        *
  @@ -154,10 +154,10 @@
        */
       protected void executeRequest()
           throws WebdavException, IOException {
  -
  +        
           // Prevent dirty reads
           slideToken.setForceStoreEnlistment(true);
  -
  +        
           // check destination URI
           UriHandler destUh = UriHandler.getUriHandler(resourcePath);
           if( VersionControlMethod.VERSIONCONTROL_EXCLUDEPATH != null && 
VersionControlMethod.VERSIONCONTROL_EXCLUDEPATH.length() > 0 ) {
  @@ -165,7 +165,7 @@
               if( exUh.isAncestorOf(destUh) )
                   isInVersioncontrolExcludePath = true;
           }
  -
  +        
           if (destUh.isRestrictedUri()) {
               boolean sendError = true;
               if( destUh.isWorkingresourceUri() ) {
  @@ -182,15 +182,15 @@
                   throw new WebdavException( statusCode );
               }
           }
  -
  +        
           try {
  -
  +            
               try {
                   boolean isLockedNullResource = false;
  -
  +                
                   NodeRevisionDescriptors revisionDescriptors =
                       content.retrieve(slideToken, resourcePath);
  -
  +                
                   NodeRevisionNumber revisionNumber =
                       revisionDescriptors.getLatestRevision();
                   NodeRevisionDescriptor oldRevisionDescriptor = null;
  @@ -206,7 +206,7 @@
                       sendError( statusCode, 
getClass().getName()+".mustNotBeCollection" );
                       throw new WebdavException( statusCode );
                   }
  -
  +                
                   NodeRevisionDescriptor revisionDescriptor = null;
                   if (oldRevisionDescriptor == null) {
                       revisionDescriptor = new NodeRevisionDescriptor();
  @@ -214,44 +214,55 @@
                       revisionDescriptor = oldRevisionDescriptor;
                       revisionDescriptor.setContentLength(-1);
                   }
  -
  +                
                   ResourceKind resourceKind = 
AbstractResourceKind.determineResourceKind(token, resourcePath, revisionDescriptor);
  -
  +                
                   versioningHelper.isWriteLocked(slideToken, revisionDescriptors);
  -
  +                
                   // check preconditions
                   ViolatedPrecondition violatedPrecondition = 
getPreconditionViolation(revisionDescriptors, revisionDescriptor, resourceKind);
                   if (violatedPrecondition != null) {
                       throw new PreconditionViolationException(violatedPrecondition, 
resourcePath);
                   }
  -
  +                
                   // Changed for DeltaV --start--
                   boolean mustCheckIn = false;
                   if( Configuration.useVersionControl() &&
                          (resourceKind instanceof CheckedInVersionControlled) &&
                      
versioningHelper.mustCheckoutAutoVersionedVCR(revisionDescriptors, revisionDescriptor) 
) {
  -
  +                    
                       versioningHelper.checkout(revisionDescriptors, 
revisionDescriptor, false, false, true );
                       mustCheckIn = 
versioningHelper.mustCheckinAutoVersionedVCR(slideToken, revisionDescriptors, 
revisionDescriptor);
                   }
                   // Changed for DeltaV --end--
  -
  +                
                   NodeRevisionContent revisionContent =
                       new NodeRevisionContent();
                   //revisionContent.setContent(req.getReader());
                   revisionContent.setContent(req.getInputStream());
  -
  +                
                   // Get content length
                   revisionDescriptor.setContentLength(req.getContentLength());
  -
  +                
                   // Last modification date
                   revisionDescriptor.setLastModified(new Date());
  -
  +                
                   // Etag generation
                   revisionDescriptor.setETag(PropertyHelper.computeEtag(resourcePath, 
revisionDescriptor) );
  -
  -                // Normally assume the 'getcontentlanguage' and
  -                // 'getcontenttype' are set, however, before we clear the
  +                
  +                // Get content type (allow content-type to be updated here)
  +                String contentType = req.getContentType();
  +                if (contentType == null) {
  +                    contentType = getConfig().getServletContext()
  +                        .getMimeType(resourcePath);
  +                }
  +                if (contentType == null) {
  +                    contentType = getConfig().getDefaultMimeType();
  +                }
  +                revisionDescriptor.setContentType(contentType);
  +                
  +                // Normally assume the 'getcontentlanguage'
  +                // is set, however, before we clear the
                   // 'resourcetype' need to check for the case when a
                   // 'lock-null' is created just before the initial PUT. In
                   // that case need to add the missing properties.
  @@ -260,17 +271,7 @@
                       //              if 
(revisionDescriptor.getResourceType().equals("<lock-null/>")) {
                       isLockedNullResource = true;
                       revisionDescriptor.setContentLanguage("en");
  -
  -                    String contentType = req.getContentType();
  -                    if (contentType == null) {
  -                        contentType = getConfig().getServletContext()
  -                            .getMimeType(resourcePath);
  -                    }
  -                    if (contentType == null) {
  -                        contentType = getConfig().getDefaultMimeType();
  -                    }
  -                    revisionDescriptor.setContentType(contentType);
  -
  +                    
                       // Changed for DeltaV --start--
                       if( Configuration.useVersionControl() ) {
                           // Workspace
  @@ -278,20 +279,20 @@
                       }
                       // Changed for DeltaV --end--
                   }
  -
  +                
                   // Resource type
                   revisionDescriptor.setResourceType("");
  -
  +                
                   // Owner
                   if ( isLockedNullResource )
                       // set the owner when updating a lock-null resource
                       revisionDescriptor.setOwner(
                           slideToken.getCredentialsToken().
                               getPublicCredentials());
  -
  +                
                   content.store(slideToken, resourcePath, revisionDescriptor,
                                 revisionContent);
  -
  +                
                   // Changed for DeltaV --start--
                   // check if the resource should be put under version-control
                   if ( isLockedNullResource ) {
  @@ -303,43 +304,43 @@
                       versioningHelper.checkin(revisionDescriptors, 
revisionDescriptor, false, false, true ); //forkOk=false, keepCheckedOut=false
                   }
                   // Changed for DeltaV --end--
  -
  -
  +                
  +                
                   // ETag header
                   resp.setHeader("ETag", revisionDescriptor.getETag() );
  -
  +                
                   resp.setStatus(WebdavStatus.SC_NO_CONTENT);
  -
  +                
               } catch (LinkedObjectNotFoundException e) {
                   int statusCode = getErrorCode( e );
                   sendError( statusCode, e );
                   throw new WebdavException( statusCode );
               } catch (ObjectNotFoundException e) {
  -
  +                
                   // Todo : Check to see if parent exists
                   SubjectNode subject = new SubjectNode();
                   // Creating an object
                   structure.create(slideToken, subject, resourcePath);
  -
  +                
                   NodeRevisionDescriptor revisionDescriptor =
                       new NodeRevisionDescriptor(req.getContentLength());
  -
  +                
                   //NodeProperty property = null;
  -
  +                
                   // Creation date
  -
  +                
                   // Resource type
                   revisionDescriptor.setResourceType("");
  -
  +                
                   // Source
                   revisionDescriptor.setSource("");
  -
  +                
                   // Get content language
                   revisionDescriptor.setContentLanguage("en");
  -
  +                
                   // Get content length
                   revisionDescriptor.setContentLength(req.getContentLength());
  -
  +                
                   // Get content type
                   String contentType = req.getContentType();
                   if (contentType == null) {
  @@ -350,67 +351,67 @@
                       contentType = getConfig().getDefaultMimeType();
                   }
                   revisionDescriptor.setContentType(contentType);
  -
  +                
                   // Last modification date
                   revisionDescriptor.setLastModified(new Date());
  -
  +                
                   // Etag generation
                   revisionDescriptor.setETag(PropertyHelper.computeEtag(resourcePath, 
revisionDescriptor));
  -
  +                
                   // Owner
                   revisionDescriptor.setOwner(
                       slideToken.getCredentialsToken().
                           getPublicCredentials());
  -
  +                
                   // Added for DeltaV --start--
                   if( Configuration.useVersionControl() ) {
                       // Workspace
                       versioningHelper.setWorkspaceProperty( resourcePath, 
revisionDescriptor );
                   }
                   // Added for DeltaV --end--
  -
  +                
                   if (isMsProprietarySupport()) {
                       NodeProperty property = null;
                       // Is hidden
                       property = new NodeProperty("ishidden", "0", "MICROSOFT");
                       revisionDescriptor.setProperty(property);
  -
  +                    
                       // Is collection
                       property = new NodeProperty("iscollection", "0",
                                                   "MICROSOFT");
                       revisionDescriptor.setProperty(property);
  -
  +                    
                       // Is read only
                       property = new NodeProperty("isreadonly", "0",
                                                   "MICROSOFT");
                       revisionDescriptor.setProperty(property);
  -
  +                    
                       // Last accessed
                       property = new NodeProperty("lastaccessed",
                                                       (new Date()).toString(),
                                                   "MICROSOFT");
                       revisionDescriptor.setProperty(property);
  -
  +                    
                   }
  -
  +                
                   // Creating revisionDescriptor associated with the object
                   NodeRevisionContent revisionContent =
                       new NodeRevisionContent();
                   revisionContent.setContent(req.getInputStream());
  -
  +                
                   content.create(slideToken, resourcePath, revisionDescriptor,
                                  revisionContent);
  -
  +                
                   // check if the resource should be put under version-control
                   if ( Configuration.useVersionControl() && AUTO_VERSION_CONTROL && 
!isInVersioncontrolExcludePath ) {
                       versioningHelper.versionControl(resourcePath);
                   }
  -
  +                
                   // ETag header
                   resp.setHeader("ETag", revisionDescriptor.getETag() );
  -
  +                
                   resp.setStatus(WebdavStatus.SC_CREATED);
  -
  +                
               }
           }
           catch (PreconditionViolationException e) {
  @@ -423,7 +424,7 @@
               throw new WebdavException( statusCode );
           }
       }
  -
  +    
       /**
        * Checks the (DeltaV) preconditions
        * <ul>
  @@ -441,11 +442,11 @@
        */
       private ViolatedPrecondition getPreconditionViolation(NodeRevisionDescriptors 
revisionDescriptors, NodeRevisionDescriptor revisionDescriptor, ResourceKind 
resourceKind)
           throws ServiceAccessException {
  -
  +        
           if( Configuration.useVersionControl() ) {
  -
  +            
               if (resourceKind instanceof CheckedInVersionControlled) {
  -
  +                
                   // check precondition DAV:cannot-modify-version-controlled-content
                   String autoVersion = 
versioningHelper.getAutoVersionElementName(revisionDescriptor);
                   if (autoVersion == null) {
  @@ -464,7 +465,7 @@
                                                       WebdavStatus.SC_FORBIDDEN);
                   }
               }
  -
  +            
               // check precondition DAV:cannot-modify-version
               UriHandler uriHandler = UriHandler.getUriHandler(resourcePath);
               if (uriHandler.isVersionUri()) {
  @@ -474,12 +475,12 @@
           }
           return null;
       }
  -
  -
  -
  -
  -
  -
  +    
  +    
  +    
  +    
  +    
  +    
       /**
        * Get return status based on exception type.
        */
  @@ -500,17 +501,17 @@
               return super.getErrorCode(e);
           }
       }
  -
  -
  -
  +    
  +    
  +    
       /**
        * Returns true
        */
       protected boolean methodNeedsTransactionSupport() {
           return true;
       }
  -
  -
  +    
  +    
   }
   
   
  
  
  

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

Reply via email to