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]