You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by re...@locus.apache.org on 2000/09/05 01:49:14 UTC
cvs commit: jakarta-slide/src/share/org/apache/slide/webdav/method CopyMethod.java LockMethod.java MkcolMethod.java MoveMethod.java PropFindMethod.java PropPatchMethod.java PutMethod.java WebdavMethod.java
remm 00/09/04 16:49:13
Modified: . STATUS.html
src/share/org/apache/slide/content NodeProperty.java
NodeRevisionDescriptor.java
src/share/org/apache/slide/store
DescriptorsStoreDatabaseImpl.java
src/share/org/apache/slide/webdav/method CopyMethod.java
LockMethod.java MkcolMethod.java MoveMethod.java
PropFindMethod.java PropPatchMethod.java
PutMethod.java WebdavMethod.java
Log:
- Status update
- Improved XML namespace management support, in PROPFIND,
PROPPATCH, and internally in Slide
- Remove non-native DAV mode
- DAV basic properties are now enforced on all objects
- JDBC store will correctly handle negative permissions
Revision Changes Path
1.15 +40 -19 jakarta-slide/STATUS.html
Index: STATUS.html
===================================================================
RCS file: /home/cvs/jakarta-slide/STATUS.html,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- STATUS.html 2000/08/13 02:41:30 1.14
+++ STATUS.html 2000/09/04 23:49:10 1.15
@@ -55,6 +55,7 @@
<li><a href="#Utility">Utility Components</a>
<li><a href="#Webdav">WebDAV Server</a>
<li><a href="#Samples">Samples and Tests</a>
+ <li><a href="#Documentation">Documentation</a>
</ul>
<br><br>
@@ -69,6 +70,22 @@
<th width="60%">Action Item</th>
<th width="30%">Volunteers</th>
</tr>
+ <tr>
+ <td align="center">High</td>
+ <td>
+ Make the helpers pluggable.
+ [org.apache.slide.common]
+ </td>
+ <td><a href="mailto:remm@apache.org">Remy Maucherat</a></td>
+ </tr>
+ <tr>
+ <td align="center">High</td>
+ <td>
+ Improve lifecycle handling of namespaces.
+ [org.apache.slide.common]
+ </td>
+ <td><a href="mailto:remm@apache.org">Remy Maucherat</a></td>
+ </tr>
</table>
@@ -132,19 +149,12 @@
</tr>
<tr>
<td align="center">Low</td>
- <td>
- Add negative permissions support.
- [org.apache.slide.security]
- </td>
- <td><a href="mailto:remm@apache.org">Remy Maucherat</a></td>
- </tr>
- <tr>
- <td align="center">Low</td>
<td>
- Make lock tokens able to hold multiple lock types.
- [org.apache.slide.lock]
+ Add additional helper macros (for exemple, macros for users / groups
+ management).
+ [org.apache.slide.macro]
</td>
- <td><a href="mailto:remm@apache.org">Remy Maucherat</a></td>
+ <td>---</td>
</tr>
</table>
@@ -284,13 +294,6 @@
<tr>
<td align="center">Medium</td>
<td>
- XML Namespace support in PROPATCH and PROPFIND.
- </td>
- <td>---</td>
- </tr>
- <tr>
- <td align="center">Medium</td>
- <td>
MKCOL doesn't return 409 - Conflict.
</td>
<td>---</td>
@@ -354,9 +357,27 @@
</table>
+ <a name="Documentation"></a>
+ <div align="center"><h1>Documentation</h1></div>
+ <table border="1" width="100%">
+ <tr>
+ <th width="10%">Priority</th>
+ <th width="60%">Action Item</th>
+ <th width="30%">Volunteers</th>
+ </tr>
+ <tr>
+ <td align="center">High</td>
+ <td>
+ Document the object model.
+ </td>
+ <td><a href="mailto:remm@apache.org">Remy Maucherat</a></td>
+ </tr>
+ </table>
+
+
<br>
<div align="center"><hr width="75%"><font size="2">
- $Id: STATUS.html,v 1.14 2000/08/13 02:41:30 remm Exp $
+ $Id: STATUS.html,v 1.15 2000/09/04 23:49:10 remm Exp $
</font></div>
</body>
1.2 +30 -59 jakarta-slide/src/share/org/apache/slide/content/NodeProperty.java
Index: NodeProperty.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeProperty.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- NodeProperty.java 2000/05/09 02:47:24 1.1
+++ NodeProperty.java 2000/09/04 23:49:10 1.2
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeProperty.java,v 1.1 2000/05/09 02:47:24 remm Exp $
- * $Revision: 1.1 $
- * $Date: 2000/05/09 02:47:24 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeProperty.java,v 1.2 2000/09/04 23:49:10 remm Exp $
+ * $Revision: 1.2 $
+ * $Date: 2000/09/04 23:49:10 $
*
* ====================================================================
*
@@ -72,11 +72,17 @@
* Node property class
*
* @author <a href="mailto:remm@exoffice.com">Remy Maucherat</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
public final class NodeProperty implements Serializable, Cloneable {
+ // -------------------------------------------------------------- Constants
+
+
+ public static final String DEFAULT_NAMESPACE = "DAV:";
+
+
// ----------------------------------------------------------- Constructors
@@ -89,8 +95,7 @@
public NodeProperty(String name, Object value) {
setName(name);
setValue(value);
- this.definition = new String();
- this.definitionName = new String();
+ this.namespace = DEFAULT_NAMESPACE;
this.type = new String();
this.protectedProperty = false;
this.permissions = new Vector();
@@ -115,14 +120,11 @@
*
* @param name Name
* @param value Value
- * @param definitionName Definition name
- * @param definition Definition
+ * @param namespace Namespace
*/
- public NodeProperty(String name, Object value, String definitionName,
- String definition) {
+ public NodeProperty(String name, Object value, String namespace) {
this(name, value);
- setDefinitionName(definitionName);
- setDefinition(definition);
+ setNamespace(namespace);
}
@@ -131,14 +133,13 @@
*
* @param name Name
* @param value Value
- * @param definitionName Definition name
- * @param definition Definition
+ * @param namespace Namespace
* @param type Type info
+ * @param protectedProperty Protected property
*/
- public NodeProperty(String name, Object value, String definitionName,
- String definition, String type,
- boolean protectedProperty) {
- this(name, value, definitionName, definition);
+ public NodeProperty(String name, Object value, String namespace,
+ String type, boolean protectedProperty) {
+ this(name, value, namespace);
setType(type);
this.protectedProperty = protectedProperty;
}
@@ -160,18 +161,12 @@
/**
- * Definition of the property.
+ * Namespace of the property.
*/
- private String definition;
+ private String namespace;
/**
- * Name of the definition.
- */
- private String definitionName;
-
-
- /**
* Property value.
*/
private Object value;
@@ -229,49 +224,25 @@
/**
- * Definition accessor.
+ * Namespace accessor.
*
* @return String definition
- */
- public String getDefinition() {
- return this.definition;
- }
-
-
- /**
- * Definition mutator.
- *
- * @param definition Definition
- */
- void setDefinition(String definition) {
- if (definition == null) {
- this.definition = new String();
- } else {
- this.definition = definition;
- }
- }
-
-
- /**
- * Definition name accessor.
- *
- * @return String definition name
*/
- public String getDefinitionName() {
- return this.definitionName;
+ public String getNamespace() {
+ return this.namespace;
}
/**
- * Definition name mutator.
+ * Namespace mutator.
*
- * @param definitionName Definition name
+ * @param definition Namepsace
*/
- void setDefinitionName(String definitionName) {
- if (definitionName == null) {
- this.definitionName = new String();
+ void setNamespace(String namespace) {
+ if (namespace == null) {
+ this.namespace = DEFAULT_NAMESPACE;
} else {
- this.definitionName = definitionName;
+ this.namespace = namespace;
}
}
1.4 +202 -20 jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java
Index: NodeRevisionDescriptor.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- NodeRevisionDescriptor.java 2000/07/27 15:15:10 1.3
+++ NodeRevisionDescriptor.java 2000/09/04 23:49:10 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java,v 1.3 2000/07/27 15:15:10 remm Exp $
- * $Revision: 1.3 $
- * $Date: 2000/07/27 15:15:10 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/content/NodeRevisionDescriptor.java,v 1.4 2000/09/04 23:49:10 remm Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/09/04 23:49:10 $
*
* ====================================================================
*
@@ -75,7 +75,7 @@
* Node Revision Descriptor class.
*
* @author <a href="mailto:remm@exoffice.com">Remy Maucherat</a>
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
*/
public final class NodeRevisionDescriptor implements Serializable, Cloneable {
@@ -90,12 +90,30 @@
/**
+ * Last modification date.
+ */
+ public static final String LAST_MODIFIED = "getlastmodified";
+
+
+ /**
* Name.
*/
public static final String NAME = "displayname";
/**
+ * Type.
+ */
+ public static final String TYPE = "resourcetype";
+
+
+ /**
+ * Source.
+ */
+ public static final String SOURCE = "source";
+
+
+ /**
* MIME type of the content.
*/
public static final String CONTENT_TYPE = "getcontenttype";
@@ -113,6 +131,18 @@
public static final String CONTENT_LENGTH = "getcontentlength";
+ /**
+ * ETag.
+ */
+ public static final String ETAG = "getetag";
+
+
+ /**
+ * Collection type.
+ */
+ public static final String COLLECTION_TYPE = "<collection/>";
+
+
// ----------------------------------------------------------- Constructors
@@ -123,6 +153,7 @@
this.properties = new Hashtable();
this.labels = new Vector();
this.branchName = NodeRevisionDescriptors.MAIN_BRANCH;
+ initDefaultProperties();
}
@@ -148,7 +179,7 @@
this.branchName = branchName;
}
this.labels = labels;
- this.properties = properties;
+ setProperties(properties);
}
@@ -266,18 +297,56 @@
* Properties mutator.
*/
void setProperties(Hashtable properties) {
+ // FIXME : Do a clean merge
this.properties = properties;
}
/**
+ * Tests if a property has been set.
+ *
+ * @param name Property name
+ * @return true if the property has been set
+ */
+ public boolean exists(String name) {
+ return exists(name, NodeProperty.DEFAULT_NAMESPACE);
+ }
+
+
+ /**
+ * Tests if a property has been set.
+ *
+ * @param name Property name
+ * @return true if the property has been set
+ */
+ public boolean exists(String name, String namespace) {
+ if (name != null)
+ return (properties.get(namespace + ":" + name) != null);
+ else
+ return (false);
+ }
+
+
+ /**
* Property accessor.
*
* @param name Property name
* @return String property value
*/
public NodeProperty getProperty(String name) {
- Object result = properties.get(name);
+ return getProperty(name, NodeProperty.DEFAULT_NAMESPACE);
+ }
+
+
+ /**
+ * Property accessor.
+ *
+ * @param name Property name
+ * @param namespace Property namespace
+ * @return String property value
+ */
+ public NodeProperty getProperty(String name, String namespace) {
+ Object result = properties.get(namespace + ":" + name);
if (result != null) {
return (NodeProperty) result;
} else {
@@ -293,7 +362,19 @@
* @param value Property value
*/
public void setProperty(String name, Object value) {
- properties.put(name, new NodeProperty(name, value));
+ setProperty(new NodeProperty(name, value));
+ }
+
+
+ /**
+ * Property mutator.
+ *
+ * @param name Property name
+ * @param value Property value
+ * @param namespace Property value
+ */
+ public void setProperty(String name, String namespace, Object value) {
+ setProperty(new NodeProperty(name, value, namespace));
}
@@ -302,10 +383,10 @@
*
* @param name Property name
* @param value Property value
- * @param standard True if one of the four standrad properties
+ * @param standard True if one of the standrad properties
*/
protected void setProperty(String name, Object value, boolean standard) {
- properties.put(name, new NodeProperty(name, value, standard));
+ setProperty(new NodeProperty(name, value, standard));
}
@@ -315,7 +396,8 @@
* @param property Property
*/
public void setProperty(NodeProperty property) {
- properties.put(property.getName(), property);
+ properties.put(property.getNamespace() + ":" + property.getName(),
+ property);
}
@@ -325,7 +407,7 @@
* @param property Property
*/
public void removeProperty(NodeProperty property) {
- properties.remove(property.getName());
+ properties.remove(property.getNamespace() + ":" + property.getName());
}
@@ -335,7 +417,7 @@
* @param property Property
*/
public void removeProperty(String property) {
- properties.remove(property);
+ properties.remove(NodeProperty.DEFAULT_NAMESPACE + ":" + property);
}
@@ -343,33 +425,65 @@
* Properties names enumerator.
*
* @return Enumeration of the properties names
+ * @deprecated Replaced by enumeratePropertiesName
*/
public Enumeration getPropertiesNames() {
- return properties.keys();
+ return enumeratePropertiesName();
}
/**
- * Properties names parser.
+ * Properties names enumerator.
*
- * @return Vector of the properties names
+ * @return Enumeration of the properties names
*/
- public Vector getPropertiesNamesParser() {
+ public Enumeration enumeratePropertiesName() {
Vector result = new Vector();
- Enumeration keys = getPropertiesNames();
- while (keys.hasMoreElements()) {
- result.addElement(keys.nextElement());
+ Enumeration propertyList = getPropertiesValues();
+ while (propertyList.hasMoreElements()) {
+ NodeProperty currentProperty =
+ (NodeProperty) propertyList.nextElement();
+ result.addElement(currentProperty.getName());
}
- return result;
+ return result.elements();
}
/**
+ * Properties names parser.
+ *
+ * @return Vector of the properties names
+ * @deprecated
+ */
+ /*
+ public Vector getPropertiesNamesParser() {
+ Vector result = new Vector();
+ Enumeration keys = getPropertiesNames();
+ while (keys.hasMoreElements()) {
+ result.addElement(keys.nextElement());
+ }
+ return result;
+ }
+ */
+
+
+ /**
* Properties values enumerator.
*
* @return Enumeration of the properties values
+ * @deprecated Replaced by enumerate properties
*/
public Enumeration getPropertiesValues() {
+ return enumerateProperties();
+ }
+
+
+ /**
+ * Properties values enumerator.
+ *
+ * @return Enumeration of the properties values
+ */
+ public Enumeration enumerateProperties() {
return properties.elements();
}
@@ -501,6 +615,57 @@
/**
+ * Last modification date accessor.
+ *
+ * @return String last modification date
+ */
+ public String getLastModified() {
+ NodeProperty lastModified = getProperty(LAST_MODIFIED);
+ if (lastModified == null) {
+ return null;
+ } else {
+ return lastModified.getValue().toString();
+ }
+ }
+
+
+ /**
+ * Creation date accessor.
+ *
+ * @return String creation date
+ */
+ public Date getLastModifiedAsDate() {
+ NodeProperty lastModified = getProperty(LAST_MODIFIED);
+ if ((lastModified == null) ||
+ (!(lastModified.getValue() instanceof Date))) {
+ return null;
+ } else {
+ return (Date) lastModified.getValue();
+ }
+ }
+
+
+ /**
+ * Last modified mutator.
+ *
+ * @param lastModified New last modified date
+ */
+ void setLastModified(Date lastModified) {
+ setProperty(LAST_MODIFIED, lastModified, true);
+ }
+
+
+ /**
+ * Last modified mutator.
+ *
+ * @param lastModified New last modified
+ */
+ void setLastModified(String lastModified) {
+ setProperty(LAST_MODIFIED, lastModified, true);
+ }
+
+
+ /**
* Creation length mutator.
*
* @param creationLength New content length
@@ -547,6 +712,22 @@
}
+ // -------------------------------------------------------- Private methods
+
+
+ private void initDefaultProperties() {
+
+ setCreationDate(new Date());
+ setName("");
+ // By default, a resource is a collection
+ setProperty(TYPE, "<collection/>", true);
+ setProperty(SOURCE, "", true);
+ setContentLength(0);
+ setLastModified(new Date());
+
+ }
+
+
// --------------------------------------------------------- Object Methods
@@ -595,5 +776,6 @@
}
return result;
}
+
}
1.5 +23 -17 jakarta-slide/src/share/org/apache/slide/store/DescriptorsStoreDatabaseImpl.java
Index: DescriptorsStoreDatabaseImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/store/DescriptorsStoreDatabaseImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DescriptorsStoreDatabaseImpl.java 2000/08/13 02:41:34 1.4
+++ DescriptorsStoreDatabaseImpl.java 2000/09/04 23:49:11 1.5
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/store/DescriptorsStoreDatabaseImpl.java,v 1.4 2000/08/13 02:41:34 remm Exp $
- * $Revision: 1.4 $
- * $Date: 2000/08/13 02:41:34 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/store/DescriptorsStoreDatabaseImpl.java,v 1.5 2000/09/04 23:49:11 remm Exp $
+ * $Revision: 1.5 $
+ * $Date: 2000/09/04 23:49:11 $
*
* ====================================================================
*
@@ -80,7 +80,7 @@
* JDBC 1.0 and 2.0 compliant DataSource implementation.
*
* @author <a href="mailto:remm@exoffice.com">Remy Maucherat</a>
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class DescriptorsStoreDatabaseImpl
extends ServiceImpl
@@ -116,6 +116,7 @@
protected static final int PERMISSIONS_SUBJECT = 2;
protected static final int PERMISSIONS_ACTION = 3;
protected static final int PERMISSIONS_INHERITABLE = 4;
+ protected static final int PERMISSIONS_NEGATIVE = 5;
// Lock descriptors
@@ -157,10 +158,9 @@
protected static final int PROPERTY_NUMBER = 2;
protected static final int PROPERTY_NAME = 3;
protected static final int PROPERTY_VALUE = 4;
- protected static final int PROPERTY_DEFINITION = 5;
- protected static final int PROPERTY_DEFINITIONNAME = 6;
- protected static final int PROPERTY_TYPE = 7;
- protected static final int PROPERTY_PROTECTED = 8;
+ protected static final int PROPERTY_NAMESPACE = 5;
+ protected static final int PROPERTY_TYPE = 6;
+ protected static final int PROPERTY_PROTECTED = 7;
// ----------------------------------------------------- Instance Variables
@@ -277,7 +277,7 @@
s = "create table permissions(object varchar(65536),"
+ " subject varchar(65536), action varchar(65536), "
- + "inheritable int)";
+ + "inheritable int, negative int)";
statement.execute(s);
s = "create table locks(id varchar(65536), object varchar(4096),"
@@ -312,8 +312,7 @@
s = "create table property(uri varchar(65536), number"
+ " varchar(20), name varchar(4096), value varchar(65536), "
- + "definition varchar(4096), definitionname varchar(20), "
- + "type varchar(100), protected int)";
+ + "namespace varchar(4096), type varchar(100), protected int)";
statement.execute(s);
} catch (SQLException e) {
@@ -732,11 +731,16 @@
inheritable = 1;
}
+ int negative = 0;
+ if (permission.isNegative()) {
+ negative = 1;
+ }
+
String s = "insert into permissions values('"
+ permission.getObjectUri() + "', '"
+ permission.getSubjectUri() + "', '"
+ permission.getActionUri()
- + "', " + inheritable + ")";
+ + "', " + inheritable + "', " + negative + ")";
statement.execute(s);
} catch (SQLException e) {
@@ -823,11 +827,15 @@
if (res.getInt(PERMISSIONS_INHERITABLE) == 1) {
inheritable = true;
}
+ boolean negative = false;
+ if (res.getInt(PERMISSIONS_NEGATIVE) == 1) {
+ negative = true;
+ }
NodePermission permission =
new NodePermission(res.getString(PERMISSIONS_OBJECT),
res.getString(PERMISSIONS_SUBJECT),
res.getString(PERMISSIONS_ACTION),
- inheritable);
+ inheritable, negative);
permissionVector.addElement(permission);
}
@@ -1272,8 +1280,7 @@
NodeProperty property =
new NodeProperty(propertyName,
res.getString(PROPERTY_VALUE),
- res.getString(PROPERTY_DEFINITIONNAME),
- res.getString(PROPERTY_DEFINITION),
+ res.getString(PROPERTY_NAMESPACE),
res.getString(PROPERTY_TYPE),
(res.getInt(PROPERTY_PROTECTED) == 1));
properties.put(propertyName, property);
@@ -1337,8 +1344,7 @@
+ revisionDescriptor.getRevisionNumber() + "', '"
+ property.getName() + "', '"
+ property.getValue() + "', '"
- + property.getDefinition() + "', '"
- + property.getDefinitionName() + "', '"
+ + property.getNamespace() + "', '"
+ property.getType() + "', " + protectedProperty + ")";
statement.execute(s);
}
1.4 +8 -9 jakarta-slide/src/share/org/apache/slide/webdav/method/CopyMethod.java
Index: CopyMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/CopyMethod.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- CopyMethod.java 2000/09/02 03:13:32 1.3
+++ CopyMethod.java 2000/09/04 23:49:12 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/CopyMethod.java,v 1.3 2000/09/02 03:13:32 remm Exp $
- * $Revision: 1.3 $
- * $Date: 2000/09/02 03:13:32 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/CopyMethod.java,v 1.4 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -159,12 +159,11 @@
}
}
- if (!isStandalone()) {
- String servletPath = req.getServletPath();
- if (destinationUri.startsWith(servletPath)) {
- destinationUri = destinationUri
- .substring(servletPath.length());
- }
+ String servletPath = req.getServletPath();
+ if ((servletPath != null)
+ && (destinationUri.startsWith(servletPath))) {
+ destinationUri = destinationUri
+ .substring(servletPath.length());
}
String overwriteHeader = req.getHeader("Overwrite");
1.7 +3 -4 jakarta-slide/src/share/org/apache/slide/webdav/method/LockMethod.java
Index: LockMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/LockMethod.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- LockMethod.java 2000/09/02 03:13:32 1.6
+++ LockMethod.java 2000/09/04 23:49:12 1.7
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/LockMethod.java,v 1.6 2000/09/02 03:13:32 remm Exp $
- * $Revision: 1.6 $
- * $Date: 2000/09/02 03:13:32 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/LockMethod.java,v 1.7 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.7 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -213,7 +213,6 @@
System.out.println(new String(requestBody));
}
- davNative = isDavNative();
msProprietarySupport = isMsProprietarySupport();
// Loads the associated object from the store.
1.4 +49 -57 jakarta-slide/src/share/org/apache/slide/webdav/method/MkcolMethod.java
Index: MkcolMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/MkcolMethod.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MkcolMethod.java 2000/09/02 03:13:32 1.3
+++ MkcolMethod.java 2000/09/04 23:49:12 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/MkcolMethod.java,v 1.3 2000/09/02 03:13:32 remm Exp $
- * $Revision: 1.3 $
- * $Date: 2000/09/02 03:13:32 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/MkcolMethod.java,v 1.4 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -145,57 +145,51 @@
NodeRevisionDescriptor revisionDescriptor =
new NodeRevisionDescriptor(0);
- if (isDavNative()) {
- NodeProperty property = null;
-
- // Resource type
- property = new NodeProperty("resourcetype", "<d:collection/>",
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Creation date
- DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
- property = new NodeProperty("creationdate",
- formatter.format(new Date()),
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Last modification date
- property = new NodeProperty("getlastmodified",
- formatter.format(new Date()),
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Display name
- property = new NodeProperty("displayname", colName, "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Display name
- property = new NodeProperty("getcontentlength", "0", "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Source
- property = new NodeProperty("source", "", "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Supported locks
- String supportedLocks = "<d:lockentry>"
- + "<d:lockscope><d:exclusive/></d:lockscope>"
- + "<d:locktype><d:write/></d:locktype>"
- + "</d:lockentry>"
- + "<d:lockentry>"
- + "<d:lockscope><d:shared/></d:lockscope>"
- + "<d:locktype><d:write/></d:locktype>"
- + "</d:lockentry>";
- property = new NodeProperty("suportedlock", supportedLocks,
- "d", "DAV");
- revisionDescriptor.setProperty(property);
- }
+ NodeProperty property = null;
+
+ // Resource type
+ property = new NodeProperty("resourcetype", "<d:collection/>", true);
+ revisionDescriptor.setProperty(property);
+
+ // Creation date
+ DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
+ property = new NodeProperty("creationdate",
+ formatter.format(new Date()), true);
+ revisionDescriptor.setProperty(property);
+
+ // Last modification date
+ property = new NodeProperty("getlastmodified",
+ formatter.format(new Date()), true);
+ revisionDescriptor.setProperty(property);
+ // Display name
+ property = new NodeProperty("displayname", colName, true);
+ revisionDescriptor.setProperty(property);
+
+ // Display name
+ property = new NodeProperty("getcontentlength", "0", true);
+ revisionDescriptor.setProperty(property);
+
+ // Source
+ property = new NodeProperty("source", "", true);
+ revisionDescriptor.setProperty(property);
+
+ // Supported locks
+ /*
+ String supportedLocks = "<d:lockentry>"
+ + "<d:lockscope><d:exclusive/></d:lockscope>"
+ + "<d:locktype><d:write/></d:locktype>"
+ + "</d:lockentry>"
+ + "<d:lockentry>"
+ + "<d:lockscope><d:shared/></d:lockscope>"
+ + "<d:locktype><d:write/></d:locktype>"
+ + "</d:lockentry>";
+ property = new NodeProperty("suportedlock", supportedLocks, true);
+ revisionDescriptor.setProperty(property);
+ */
+
if (isMsProprietarySupport()) {
- NodeProperty property = null;
-
// Name
/*
property = new NodeProperty("name", colName, "ms", "MICROSOFT");
@@ -217,22 +211,20 @@
*/
// Is hidden
- property = new NodeProperty("ishidden", "0", "ms", "MICROSOFT");
+ property = new NodeProperty("ishidden", "0", "MICROSOFT");
revisionDescriptor.setProperty(property);
// Is collection
- property = new NodeProperty("iscollection", "1", "ms",
- "MICROSOFT");
+ property = new NodeProperty("iscollection", "1", "MICROSOFT");
revisionDescriptor.setProperty(property);
// Is read only
- property = new NodeProperty("isreadonly", "0", "ms", "MICROSOFT");
+ property = new NodeProperty("isreadonly", "0", "MICROSOFT");
revisionDescriptor.setProperty(property);
// Last accessed
property = new NodeProperty("lastaccessed",
- (new Date()).toString(),
- "ms", "MICROSOFT");
+ (new Date()).toString(), "MICROSOFT");
revisionDescriptor.setProperty(property);
}
1.4 +8 -9 jakarta-slide/src/share/org/apache/slide/webdav/method/MoveMethod.java
Index: MoveMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/MoveMethod.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MoveMethod.java 2000/09/02 03:13:33 1.3
+++ MoveMethod.java 2000/09/04 23:49:12 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/MoveMethod.java,v 1.3 2000/09/02 03:13:33 remm Exp $
- * $Revision: 1.3 $
- * $Date: 2000/09/02 03:13:33 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/MoveMethod.java,v 1.4 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -155,12 +155,11 @@
}
}
- if (!isStandalone()) {
- String servletPath = req.getServletPath();
- if (destinationUri.startsWith(servletPath)) {
- destinationUri = destinationUri
- .substring(servletPath.length());
- }
+ String servletPath = req.getServletPath();
+ if ((servletPath != null)
+ && (destinationUri.startsWith(servletPath))) {
+ destinationUri = destinationUri
+ .substring(servletPath.length());
}
String overwriteHeader = req.getHeader("Overwrite");
1.5 +267 -421 jakarta-slide/src/share/org/apache/slide/webdav/method/PropFindMethod.java
Index: PropFindMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PropFindMethod.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PropFindMethod.java 2000/09/02 03:13:33 1.4
+++ PropFindMethod.java 2000/09/04 23:49:12 1.5
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PropFindMethod.java,v 1.4 2000/09/02 03:13:33 remm Exp $
- * $Revision: 1.4 $
- * $Date: 2000/09/02 03:13:33 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PropFindMethod.java,v 1.5 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.5 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -141,17 +141,23 @@
/**
- * DAV Namespace support.
+ * MS Proprietary properties support.
*/
- private boolean davNative;
+ private boolean msProprietarySupport;
/**
- * MS Proprietary properties support.
+ * Current namespace number used to generate namespace abbreviations.
*/
- private boolean msProprietarySupport;
+ private int namespaceNumber = 0;
+ /**
+ * Namespaces list. Keyed by namespace names.
+ */
+ private Hashtable namespaceAbbrevs;
+
+
// ----------------------------------------------------------- Constructors
@@ -167,6 +173,7 @@
super(servlet, token, req, resp);
readRequestContent();
+ namespaceAbbrevs = new Hashtable();
depth = INFINITY;
propFindType = FIND_ALL_PROP;
}
@@ -183,7 +190,6 @@
protected void parseRequest()
throws WebdavException {
- davNative = isDavNative();
msProprietarySupport = isMsProprietarySupport();
String depthStr = req.getHeader("Depth");
@@ -219,12 +225,15 @@
Element rootElement = document.getDocumentElement();
NodeList childList = rootElement.getChildNodes();
+ parseNodeNamespaceDeclarations(rootElement);
+
for (int i=0; i < childList.getLength(); i++) {
Node currentNode = childList.item(i);
switch (currentNode.getNodeType()) {
case Node.TEXT_NODE:
break;
case Node.ELEMENT_NODE:
+ parseNodeNamespaceDeclarations(currentNode);
if (currentNode.getNodeName().endsWith("prop")) {
propFindType = FIND_BY_PROPERTY;
propNode = currentNode;
@@ -254,16 +263,9 @@
case Node.TEXT_NODE:
break;
case Node.ELEMENT_NODE:
- String nodeName = currentNode.getNodeName();
- String propertyName = null;
- if (nodeName.indexOf(':') != -1) {
- propertyName = nodeName.substring
- (nodeName.indexOf(':') + 1);
- } else {
- propertyName = nodeName;
- }
- // href is a live property which is handled differently
- propertyVector.addElement(propertyName);
+ parseNodeNamespaceDeclarations(currentNode);
+ Property property = getProperty(currentNode);
+ propertyVector.addElement(property);
break;
}
}
@@ -283,19 +285,10 @@
protected void executeRequest()
throws WebdavException {
- System.out.println(System.currentTimeMillis() + " - PROPFIND - Begin");
-
resp.setStatus(WebdavStatus.SC_MULTI_STATUS);
// Loads the associated object from the store.
String resourceUri = requestUri;
- if (resourceUri == null) {
- resourceUri = "/";
- }
- if (resourceUri.equals("/")) {
- // The root node is never native
- davNative = false;
- }
// Get the object from Data.
ObjectNode resource = null;
@@ -328,7 +321,8 @@
WebdavXMLPrinter generatedXML = new WebdavXMLPrinter();
generatedXML.writeXMLHeader();
- generatedXML.writeElement("d", "DAV", "multistatus",
+ generatedXML.writeElement(null, "multistatus"
+ + generateNamespaceDeclarations(),
WebdavXMLPrinter.OPENING);
if (resource != null) {
@@ -374,7 +368,7 @@
}
}
- generatedXML.writeElement("d", "multistatus",
+ generatedXML.writeElement(null, "multistatus",
WebdavXMLPrinter.CLOSING);
@@ -390,8 +384,6 @@
throw new WebdavException(WebdavStatus.SC_INTERNAL_SERVER_ERROR);
}
- System.out.println(System.currentTimeMillis() + " - PROPFIND - End");
-
}
@@ -403,10 +395,10 @@
* @exception WebdavException
*/
protected void parsePropertiesOfObject(ObjectNode object,
- WebdavXMLPrinter generatedXML)
+ WebdavXMLPrinter generatedXML)
throws WebdavException {
- generatedXML.writeElement("d", "response", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "response", WebdavXMLPrinter.OPENING);
String status = new String("HTTP/1.1 " + WebdavStatus.SC_OK + " "
+ WebdavStatus.getStatusText
@@ -419,35 +411,56 @@
NodeLock objectLockToken = null;
try {
- generatedXML.writeElement("d", "href", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "href", WebdavXMLPrinter.OPENING);
revisionDescriptors = content.retrieve(credToken, object.getUri());
- // TODO : What if the object has NO revisions ?
-
try {
+
revisionDescriptor = content.retrieve(credToken,
revisionDescriptors);
isCollection = WebdavUtil.isCollection(revisionDescriptor);
- generatedXML.writeText(object.getUri());
- if ((isCollection) && (!object.getUri().equals(DIRECTORY))) {
- generatedXML.writeText(DIRECTORY);
+
+ String path = object.getUri();
+
+ String absoluteUri = req.getRequestURI();
+ String relativePath = requestUri;
+ String toAppend = "";
+ if (relativePath.length() <= path.length()) {
+ toAppend = path.substring(relativePath.length());
+ if ((!absoluteUri.endsWith("/")) &&
+ (!toAppend.startsWith("/"))) {
+ toAppend = "/" + toAppend;
+ }
}
+
+ generatedXML.writeText(absoluteUri + toAppend);
+
} catch (RevisionDescriptorNotFoundException e) {
- // The object doesn't have any revision.
- // Either :
- // - the namespace is not DAV aware
- // - we are on the root node
- // In any case, we create a dummy NodeRevisionDescriptor object
+
+ // The object doesn't have any revision, we create a dummy
+ // NodeRevisionDescriptor object
isCollection = true;
revisionDescriptor = new NodeRevisionDescriptor(0);
revisionDescriptor.setName(object.getUri());
- generatedXML.writeText(object.getUri());
- if (!object.getUri().equals(DIRECTORY)) {
- generatedXML.writeText(DIRECTORY);
+
+ String path = object.getUri();
+
+ String absoluteUri = req.getRequestURI();
+ String relativePath = requestUri;
+ String toAppend = "";
+ if (relativePath.length() <= path.length()) {
+ toAppend = path.substring(relativePath.length());
+ if ((!absoluteUri.endsWith("/"))
+ && (!toAppend.startsWith("/"))) {
+ toAppend = "/" + toAppend;
+ }
}
+
+ generatedXML.writeText(absoluteUri + toAppend);
+
}
- generatedXML.writeElement("d", "href", WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "href", WebdavXMLPrinter.CLOSING);
Enumeration lockTokens = lock.enumerateLocks(credToken,
object.getUri());
@@ -473,173 +486,62 @@
Vector propertiesParser = null;
String supportedLocks = null;
- if (!davNative) {
- propertiesParser = revisionDescriptor.getPropertiesNamesParser();
- }
-
switch (propFindType) {
case FIND_ALL_PROP :
// Show properties / values for current object.
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "prop", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "prop", WebdavXMLPrinter.OPENING);
status = new String("HTTP/1.1 " + WebdavStatus.SC_OK
+ " " + WebdavStatus.getStatusText
(WebdavStatus.SC_OK));
- // Default properties
-
- if (!davNative) {
-
- String creationDate = revisionDescriptor.getCreationDate();
- if (creationDate == null) {
- creationDate = new String();
- }
- generatedXML.writeProperty("d", "DAV", "creationdate",
- creationDate);
- propertiesParser.removeElement
- (NodeRevisionDescriptor.CREATION_DATE);
-
- generatedXML.writeProperty("d", "DAV", "displayname",
- revisionDescriptor.getName());
- propertiesParser.removeElement(NodeRevisionDescriptor.NAME);
-
- if (!isCollection) {
- generatedXML.writeProperty
- ("d", "DAV", "getcontentlanguage",
- revisionDescriptor.getContentLanguage());
- }
- propertiesParser.removeElement
- (NodeRevisionDescriptor.CONTENT_LANGUAGE);
-
- if (!isCollection) {
- generatedXML.writeProperty
- ("d", "DAV", "getcontentlength",
- (new Long(revisionDescriptor.getContentLength()))
- .toString());
- }
- propertiesParser.removeElement("getcontentlength");
-
- if (!isCollection) {
- generatedXML.writeProperty
- ("d", "DAV", "getcontenttype",
- revisionDescriptor.getContentType());
- }
- propertiesParser.removeElement
- (NodeRevisionDescriptor.CONTENT_TYPE);
-
- if (!isCollection) {
- String etag = null;
- if (revisionDescriptor != null) {
- etag = revisionDescriptors.getUri().hashCode() + "_"
- + revisionDescriptors.getLatestRevision()
- .hashCode() + "_"
- + revisionDescriptor.getContentLength();
- } else {
- etag = "";
- }
- generatedXML.writeProperty("d", "DAV", "getetag", etag);
- }
- propertiesParser.removeElement("getetag");
-
- if (!isCollection) {
- generatedXML.writeProperty
- ("d", "DAV", "getlastmodified",
- revisionDescriptor.getCreationDate());
- }
- propertiesParser.removeElement("getlastmodified");
-
- if (isCollection) {
- generatedXML.writeElement("d", "DAV", "resourcetype",
- WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "collection",
- WebdavXMLPrinter.NO_CONTENT);
- generatedXML.writeElement("d", "resourcetype",
- WebdavXMLPrinter.CLOSING);
- } else {
- NodeProperty resourceTypeProperty =
- revisionDescriptor.getProperty("resourcetype");
- if ((resourceTypeProperty == null) ||
- (resourceTypeProperty.getValue().equals(""))) {
- generatedXML.writeElement("d", "DAV", "resourcetype",
- WebdavXMLPrinter.NO_CONTENT);
- } else {
- generatedXML.writeElement("d", "DAV", "resourcetype",
- WebdavXMLPrinter.OPENING);
- generatedXML.writeText
- (resourceTypeProperty.getValue().toString());
- generatedXML.writeElement("d", "resourcetype",
- WebdavXMLPrinter.CLOSING);
- }
- }
- propertiesParser.removeElement("resourcetype");
-
- generatedXML.writeProperty("d", "DAV", "source", "");
- propertiesParser.removeElement("source");
-
- supportedLocks = "<d:lockentry>"
- + "<d:lockscope><d:exclusive/></d:lockscope>"
- + "<d:locktype><d:write/></d:locktype>"
- + "</d:lockentry>";
- generatedXML.writeProperty("d", "DAV", "supportedlock",
- supportedLocks);
- propertiesParser.removeElement("supportedlock");
- }
-
// Lock information, which is dynamically generated
if (objectLockToken != null) {
showLockDiscoveryInfo(objectLockToken, generatedXML);
}
- if (!davNative) {
- propertiesParser.removeElement("lockdiscovery");
- }
-
// Custom properties
- Enumeration customPropertiesList = null;
+ Enumeration propertyList =
+ revisionDescriptor.enumerateProperties();
- if (!davNative) {
- customPropertiesList = propertiesParser.elements();
- } else {
- customPropertiesList = revisionDescriptor.getPropertiesNames();
- }
-
- while (customPropertiesList.hasMoreElements()) {
+ while (propertyList.hasMoreElements()) {
NodeProperty currentProperty =
- revisionDescriptor.getProperty
- ((String) customPropertiesList.nextElement());
+ (NodeProperty) propertyList.nextElement();
+ //revisionDescriptor.getProperty
+ //((String) customPropertiesList.nextElement());
if (currentProperty != null) {
+ String namespace = currentProperty.getNamespace();
+ String namespaceAbbrev =
+ (String) namespaceAbbrevs.get(namespace);
Object currentPropertyValue = currentProperty.getValue();
if ((currentPropertyValue == null) ||
(currentPropertyValue.toString().equals(""))) {
generatedXML.writeElement
- (currentProperty.getDefinitionName(),
- currentProperty.getDefinition(),
+ (namespaceAbbrev, namespace,
currentProperty.getName(),
WebdavXMLPrinter.NO_CONTENT);
} else {
generatedXML.writeElement
- (currentProperty.getDefinitionName(),
- currentProperty.getDefinition(),
+ (namespaceAbbrev, namespace,
currentProperty.getName(),
WebdavXMLPrinter.OPENING);
generatedXML.writeText
(currentPropertyValue.toString());
generatedXML.writeElement
- (currentProperty.getDefinitionName(),
- currentProperty.getDefinition(),
+ (namespaceAbbrev, namespace,
currentProperty.getName(),
WebdavXMLPrinter.CLOSING);
}
}
}
- generatedXML.writeElement("d", "prop", WebdavXMLPrinter.CLOSING);
- generatedXML.writeProperty("d", "status", status);
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeElement(null, "prop", WebdavXMLPrinter.CLOSING);
+ generatedXML.writeProperty(null, "status", status);
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.CLOSING);
break;
@@ -650,115 +552,48 @@
+ " " + WebdavStatus.getStatusText
(WebdavStatus.SC_OK));
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "prop", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "prop", WebdavXMLPrinter.OPENING);
// First step : find the supported default properties
- if (!davNative) {
-
- propertiesParser.removeElement("href");
-
- generatedXML.writeElement("d", "DAV", "creationdate",
- WebdavXMLPrinter.NO_CONTENT);
- propertiesParser.removeElement
- (NodeRevisionDescriptor.CREATION_DATE);
-
- generatedXML.writeElement("d", "DAV", "displayname",
- WebdavXMLPrinter.NO_CONTENT); // Temp
- propertiesParser.removeElement(NodeRevisionDescriptor.NAME);
-
- if (!isCollection) {
- generatedXML.writeElement("d", "DAV", "getcontentlanguage",
- WebdavXMLPrinter.NO_CONTENT);
- }
- propertiesParser.removeElement
- (NodeRevisionDescriptor.CONTENT_LANGUAGE);
-
- if (!isCollection) {
- generatedXML.writeElement("d", "DAV", "getcontentlength",
- WebdavXMLPrinter.NO_CONTENT);
- }
- propertiesParser.removeElement("getcontentlength");
-
- if (!isCollection) {
- generatedXML.writeElement("d", "DAV", "getcontenttype",
- WebdavXMLPrinter.NO_CONTENT);
- }
- propertiesParser.removeElement
- (NodeRevisionDescriptor.CONTENT_TYPE);
-
- if (!isCollection) {
- generatedXML.writeElement("d", "DAV", "getetag",
- WebdavXMLPrinter.NO_CONTENT);
- }
- propertiesParser.removeElement("getetag");
-
- if (!isCollection) {
- generatedXML.writeElement("d", "DAV", "getlastmodified",
- WebdavXMLPrinter.NO_CONTENT);
- }
- propertiesParser.removeElement("getlastmodified");
-
- generatedXML.writeElement("d", "DAV", "resourcetype",
- WebdavXMLPrinter.NO_CONTENT);
- propertiesParser.removeElement("resourcetype");
-
- generatedXML.writeElement("d", "DAV", "source",
- WebdavXMLPrinter.NO_CONTENT);
- propertiesParser.removeElement("source");
-
- generatedXML.writeElement("d", "DAV", "supportedlock",
- WebdavXMLPrinter.NO_CONTENT);
- propertiesParser.removeElement("supportedlock");
-
- }
-
// Lock information
- generatedXML.writeElement("d", "DAV", "lockdiscovery",
+ generatedXML.writeElement(null, "DAV", "lockdiscovery",
WebdavXMLPrinter.NO_CONTENT);
- if (!davNative) {
- propertiesParser.removeElement("lockdiscovery");
- }
- System.out.println("Went there 2");
-
// Then, add this resource's custom properties
- if (!davNative) {
- customPropertiesList = propertiesParser.elements();
- } else {
- customPropertiesList = revisionDescriptor.getPropertiesNames();
- }
+ propertyList = revisionDescriptor.enumerateProperties();
- while (customPropertiesList.hasMoreElements()) {
+ while (propertyList.hasMoreElements()) {
NodeProperty currentProperty =
- revisionDescriptor.getProperty
- ((String) customPropertiesList.nextElement());
+ (NodeProperty) propertyList.nextElement();
if (currentProperty != null) {
+ String namespace = currentProperty.getNamespace();
+ String namespaceAbbrev =
+ (String) namespaceAbbrevs.get(namespace);
generatedXML.writeElement
- (currentProperty.getDefinitionName(),
- currentProperty.getDefinition(),
+ (namespaceAbbrev, namespace,
currentProperty.getName(),
WebdavXMLPrinter.NO_CONTENT);
}
}
- generatedXML.writeElement("d", "prop", WebdavXMLPrinter.CLOSING);
- generatedXML.writeProperty("d", "status", status);
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeElement(null, "prop", WebdavXMLPrinter.CLOSING);
+ generatedXML.writeProperty(null, "status", status);
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.CLOSING);
break;
case FIND_BY_PROPERTY :
// Show requested properties value.
- Enumeration propertyList = propertyVector.elements();
+ propertyList = propertyVector.elements();
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "prop", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "prop", WebdavXMLPrinter.OPENING);
status = new String("HTTP/1.1 " + WebdavStatus.SC_OK
+ " " + WebdavStatus.getStatusText
@@ -767,109 +602,11 @@
Vector propertiesNotFoundVector = new Vector();
while (propertyList.hasMoreElements()) {
- String propertyName = (String) propertyList.nextElement();
+ Property property = (Property) propertyList.nextElement();
+ String propertyName = property.name;
+ String propertyNamespace = property.namespace;
boolean propertyFound = false;
- if (!davNative) {
-
- if ((!propertyFound) &&
- (propertyName.equals("creationdate"))) {
- propertyFound = true;
- String creationDate =
- revisionDescriptor.getCreationDate();
- if (creationDate == null) {
- creationDate = new String();
- }
- generatedXML.writeProperty("d", "DAV", "creationdate",
- creationDate);
- }
-
- if ((!propertyFound) &&
- (propertyName.equals("displayname"))) {
- propertyFound = true;
- generatedXML.writeProperty("d", "DAV", "displayname",
- object.getUri());
- }
-
- if ((!propertyFound) && (!isCollection) &&
- (propertyName.equals("getcontentlanguage"))) {
- propertyFound = true;
- generatedXML.writeProperty
- ("d", "DAV", "getcontentlanguage",
- revisionDescriptor.getContentLanguage());
- }
-
- if ((!propertyFound) && (!isCollection) &&
- (propertyName.equals("getcontentlength"))) {
- propertyFound = true;
- // Temp content length. Retrieve latest revision ...
- generatedXML.writeProperty
- ("d", "DAV", "getcontentlength",
- (new Long(revisionDescriptor.getContentLength()))
- .toString());
- }
-
- if ((!propertyFound) && (!isCollection) &&
- (propertyName.equals("getcontenttype"))) {
- propertyFound = true;
- generatedXML.writeProperty
- ("d", "DAV", "getcontenttype",
- revisionDescriptor.getContentType());
- }
-
- if ((!propertyFound) && (!isCollection) &&
- (propertyName.equals("getetag"))) {
- propertyFound = true;
- generatedXML.writeProperty("d", "DAV", "getetag", "0");
- }
-
- if ((!propertyFound) && (!isCollection) &&
- (propertyName.equals("getlastmodified"))) {
- propertyFound = true;
- // For now, return creation date
- generatedXML.writeProperty
- ("d", "DAV", "getlastmodified",
- revisionDescriptor.getCreationDate().toString());
- }
-
- if ((!propertyFound) &&
- (propertyName.equals("resourcetype"))) {
- propertyFound = true;
- if (isCollection) {
- generatedXML.writeElement
- ("d", "DAV", "resourcetype",
- WebdavXMLPrinter.OPENING);
- generatedXML.writeElement
- ("d", "collection",
- WebdavXMLPrinter.NO_CONTENT);
- generatedXML.writeElement
- ("d", "resourcetype",
- WebdavXMLPrinter.CLOSING);
- } else {
- generatedXML.writeElement
- ("d", "DAV", "resourcetype",
- WebdavXMLPrinter.NO_CONTENT);
- }
- }
-
- if ((!propertyFound) && (propertyName.equals("source"))) {
- propertyFound = true;
- generatedXML.writeProperty("d", "DAV", "source", "");
- }
-
- if ((!propertyFound) &&
- (propertyName.equals("supportedlock"))) {
- propertyFound = true;
- supportedLocks = "<d:lockentry>"
- + "<d:lockscope><d:exclusive/></d:lockscope>"
- + "<d:locktype><d:write/></d:locktype>"
- + "</d:lockentry>";
- generatedXML.writeProperty("d", "DAV", "supportedlock",
- supportedLocks);
- }
-
- }
-
// Lock information, dynamically generated
if ((!propertyFound) &&
@@ -881,12 +618,12 @@
}
}
-
// Search in the custom properties
if (!propertyFound) {
NodeProperty currentProperty =
- revisionDescriptor.getProperty(propertyName);
+ revisionDescriptor.getProperty(propertyName,
+ propertyNamespace);
if (currentProperty != null) {
propertyFound = true;
Object currentPropertyValue =
@@ -894,21 +631,18 @@
if ((currentPropertyValue == null) ||
(currentPropertyValue.toString().equals(""))) {
generatedXML.writeElement
- (currentProperty.getDefinitionName(),
- currentProperty.getDefinition(),
+ (property.namespaceAbbrev, null,
currentProperty.getName(),
WebdavXMLPrinter.NO_CONTENT);
} else {
generatedXML.writeElement
- (currentProperty.getDefinitionName(),
- currentProperty.getDefinition(),
+ (property.namespaceAbbrev, null,
currentProperty.getName(),
WebdavXMLPrinter.OPENING);
generatedXML.writeText
(currentPropertyValue.toString());
generatedXML.writeElement
- (currentProperty.getDefinitionName(),
- currentProperty.getDefinition(),
+ (property.namespaceAbbrev, null,
currentProperty.getName(),
WebdavXMLPrinter.CLOSING);
}
@@ -921,9 +655,9 @@
}
- generatedXML.writeElement("d", "prop", WebdavXMLPrinter.CLOSING);
- generatedXML.writeProperty("d", "status", status);
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeElement(null, "prop", WebdavXMLPrinter.CLOSING);
+ generatedXML.writeProperty(null, "status", status);
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.CLOSING);
Enumeration propertiesNotFoundList =
@@ -935,9 +669,9 @@
+ " " + WebdavStatus.getStatusText
(WebdavStatus.SC_NOT_FOUND));
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "prop",
+ generatedXML.writeElement(null, "prop",
WebdavXMLPrinter.OPENING);
while (propertiesNotFoundList.hasMoreElements()) {
@@ -946,22 +680,137 @@
WebdavXMLPrinter.NO_CONTENT);
}
- generatedXML.writeElement("d", "prop",
+ generatedXML.writeElement(null, "prop",
WebdavXMLPrinter.CLOSING);
- generatedXML.writeProperty("d", "status", status);
- generatedXML.writeElement("d", "propstat",
+ generatedXML.writeProperty(null, "status", status);
+ generatedXML.writeElement(null, "propstat",
WebdavXMLPrinter.CLOSING);
}
- break;
- }
-
- generatedXML.writeElement("d", "response", WebdavXMLPrinter.CLOSING);
+ break;
+ }
+
+ generatedXML.writeElement(null, "response", WebdavXMLPrinter.CLOSING);
+
+ }
+
+
+ /**
+ * Parse a node for namespace declaration attributes.
+ *
+ * @param node DOM node
+ */
+ protected void parseNodeNamespaceDeclarations(Node node) {
+
+ NamedNodeMap nodeMap = node.getAttributes();
+ if (nodeMap != null) {
+ for (int i = 0; i < nodeMap.getLength(); i++) {
+ Node currentNode = nodeMap.item(i);
+ if (currentNode.getNodeType() != Node.ATTRIBUTE_NODE)
+ continue;
+ String attributeName = currentNode.getNodeName();
+ if (attributeName.startsWith("xmlns")) {
+ // We found a namespace declaration
+ if (attributeName.equals("xmlns")) {
+ defaultNamespace = currentNode.getNodeValue();
+ } else {
+ // Stripping out the prefix
+ if (attributeName.startsWith("xmlns:")) {
+ String namespaceAbbreviation =
+ attributeName.substring(6);
+ namespaces.put(namespaceAbbreviation,
+ currentNode.getNodeValue());
+ namespaceAbbrevs.put(currentNode.getNodeValue(),
+ namespaceAbbreviation);
+ }
+ }
+ }
+ }
+ }
}
+
/**
+ * Parse the namespace info of a node name.
+ *
+ * @param node The DOM node to parse
+ * @return The corresponding Property object
+ */
+ private Property getProperty(Node node) {
+
+ Property property = new Property();
+
+ String nodeName = node.getNodeName();
+ int colon = nodeName.indexOf(':');
+ if (colon != -1) {
+ property.name = nodeName.substring(colon + 1);
+ property.namespaceAbbrev = nodeName.substring(0, colon - 1);
+ String namespace =
+ (String) namespaces.get(property.namespaceAbbrev);
+ if ((namespace) != null) {
+ property.namespace = namespace;
+ } else {
+ property.namespace = defaultNamespace;
+ }
+ } else {
+ property.name = nodeName;
+ property.namespace = defaultNamespace;
+ }
+
+ return property;
+
+ }
+
+
+ /**
+ * Generate a namespace abbreviation for the given namespace.
+ *
+ * @param namespaceName Name of the namespace
+ */
+ private void generateNamespaceAbbreviation(String namespaceName) {
+
+ if (namespaces.get(namespaceName) != null)
+ return;
+
+ String namespaceAbbrev = "ns" + namespaceNumber++;
+ while (namespaces.get(namespaceAbbrev) != null) {
+ namespaceAbbrev = "ns" + namespaceNumber++;
+ }
+
+ namespaces.put(namespaceAbbrev, namespaceName);
+
+ }
+
+
+ /**
+ * Generate namespace declaration attributes.
+ *
+ * @return String namespace attributes
+ */
+ private String generateNamespaceDeclarations() {
+
+ StringBuffer result = new StringBuffer();
+
+ result.append(" xmlns=\"").append(defaultNamespace).append("\" ");
+
+ Enumeration abbreviationList = namespaces.keys();
+ while (abbreviationList.hasMoreElements()) {
+
+ String abbrev = (String) abbreviationList.nextElement();
+ String namespace = (String) namespaces.get(abbrev);
+ result.append("xmlns:").append(abbrev).append("=\"")
+ .append(namespace).append("\" ");
+
+ }
+
+ return result.toString();
+
+ }
+
+
+ /**
* Show lockdiscovery info.
*
* @exception WebdavException Something is wrong with the servlet container
@@ -970,78 +819,75 @@
WebdavXMLPrinter generatedXML)
throws WebdavException {
- generatedXML.writeElement("d", "DAV", "lockdiscovery",
+ generatedXML.writeElement(null, "lockdiscovery",
WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "DAV", "activelock",
+ generatedXML.writeElement(null, "activelock",
WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "DAV", "locktype",
- WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "DAV", "write",
- WebdavXMLPrinter.NO_CONTENT);
- generatedXML.writeElement("d", "DAV", "locktype",
- WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "locktype", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "write", WebdavXMLPrinter.NO_CONTENT);
+ generatedXML.writeElement(null, "locktype", WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "lockscope",
- WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "lockscope", WebdavXMLPrinter.OPENING);
if (token.isExclusive()) {
- generatedXML.writeElement("d", "DAV", "exclusive",
+ generatedXML.writeElement(null, "exclusive",
WebdavXMLPrinter.NO_CONTENT);
} else {
- generatedXML.writeElement("d", "DAV", "shared",
+ generatedXML.writeElement(null, "shared",
WebdavXMLPrinter.NO_CONTENT);
}
- generatedXML.writeElement("d", "DAV", "lockscope",
- WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "lockscope", WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "depth",
- WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "depth", WebdavXMLPrinter.OPENING);
if (token.isInheritable()) {
generatedXML.writeText("Infinity");
} else {
generatedXML.writeText("0");
}
- generatedXML.writeElement("d", "DAV", "depth",
- WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "depth", WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "owner",
- WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "DAV", "href",
- WebdavXMLPrinter.OPENING);
- // FIXME !
+ generatedXML.writeElement(null, "owner", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "href", WebdavXMLPrinter.OPENING);
generatedXML.writeText(req.getServletPath() + token.getSubjectUri());
- generatedXML.writeElement("d", "DAV", "href",
- WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "owner",
- WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "href", WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "owner", WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "timeout",
- WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "timeout", WebdavXMLPrinter.OPENING);
generatedXML.writeText("Second-"
+ (new Long((token.getExpirationDate().getTime()
- (new Date()).getTime())/1000))
.toString());
- generatedXML.writeElement("d", "DAV", "timeout",
- WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "timeout", WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "locktoken",
- WebdavXMLPrinter.OPENING);
- generatedXML.writeElement("d", "DAV", "href",
- WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "locktoken", WebdavXMLPrinter.OPENING);
+ generatedXML.writeElement(null, "href", WebdavXMLPrinter.OPENING);
// Put here the token Id
generatedXML.writeText("opaquelocktoken:" + token.getLockId());
- generatedXML.writeElement("d", "DAV", "href",
- WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "locktoken",
- WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "href", WebdavXMLPrinter.CLOSING);
+ generatedXML.writeElement(null, "locktoken", WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "activelock",
+ generatedXML.writeElement(null, "activelock",
WebdavXMLPrinter.CLOSING);
- generatedXML.writeElement("d", "DAV", "lockdiscovery",
+ generatedXML.writeElement(null, "lockdiscovery",
WebdavXMLPrinter.CLOSING);
}
+
+
+ // --------------------------------------------------- Property Inner Class
+
+
+ private class Property {
+
+ public String name;
+ public String value;
+ public String namespace;
+ public String namespaceAbbrev;
+ public int status = WebdavStatus.SC_OK;
+
+ }
+
}
1.8 +46 -27 jakarta-slide/src/share/org/apache/slide/webdav/method/PropPatchMethod.java
Index: PropPatchMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PropPatchMethod.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- PropPatchMethod.java 2000/09/02 03:13:33 1.7
+++ PropPatchMethod.java 2000/09/04 23:49:12 1.8
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PropPatchMethod.java,v 1.7 2000/09/02 03:13:33 remm Exp $
- * $Revision: 1.7 $
- * $Date: 2000/09/02 03:13:33 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PropPatchMethod.java,v 1.8 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.8 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -169,12 +169,15 @@
Element rootElement = document.getDocumentElement();
NodeList childList = rootElement.getChildNodes();
+ parseNodeNamespaceDeclarations(rootElement);
+
for (int i=0; i < childList.getLength(); i++) {
Node currentNode = childList.item(i);
switch (currentNode.getNodeType()) {
case Node.TEXT_NODE:
break;
case Node.ELEMENT_NODE:
+ parseNodeNamespaceDeclarations(currentNode);
if (currentNode.getNodeName().endsWith("set")) {
NodeList tempList = currentNode.getChildNodes();
for (int j=0; j < tempList.getLength(); j++) {
@@ -182,6 +185,8 @@
case Node.TEXT_NODE:
break;
case Node.ELEMENT_NODE:
+ parseNodeNamespaceDeclarations
+ (tempList.item(j));
if (tempList.item(j).getNodeName()
.endsWith("prop")) {
parseSetNode(tempList.item(j));
@@ -197,6 +202,8 @@
case Node.TEXT_NODE:
break;
case Node.ELEMENT_NODE:
+ parseNodeNamespaceDeclarations
+ (tempList.item(j));
if (tempList.item(j).getNodeName()
.endsWith("prop")) {
parseRemoveNode(tempList.item(j));
@@ -265,7 +272,6 @@
NodeProperty newProperty =
new NodeProperty(currentProperty.name,
currentProperty.value,
- currentProperty.namespaceAbbrev,
currentProperty.namespace);
revisionDescriptor.setProperty(newProperty);
@@ -347,18 +353,9 @@
break;
case Node.ELEMENT_NODE:
- Property propertyToSet = new Property();
+ parseNodeNamespaceDeclarations(currentNode);
- String nodeName = currentNode.getNodeName();
- int colon = nodeName.indexOf(':');
- if (colon != -1) {
- propertyToSet.name = nodeName.substring(colon);
- propertyToSet.namespaceAbbrev =
- nodeName.substring(0, colon - 1);
- // TODO : Add namespace name
- } else {
- propertyToSet.name = nodeName;
- }
+ Property propertyToSet = getProperty(currentNode);
StringWriter writer = new StringWriter();
domWriter = new DOMWriter(writer, true);
@@ -397,25 +394,47 @@
break;
case Node.ELEMENT_NODE:
- Property propertyToRemove = new Property();
+ parseNodeNamespaceDeclarations(currentNode);
- String nodeName = currentNode.getNodeName();
- int colon = nodeName.indexOf(':');
- if (colon != -1) {
- propertyToRemove.name =
- nodeName.substring(colon);
- propertyToRemove.namespaceAbbrev =
- nodeName.substring(0, colon - 1);
- // TODO : Add namespace name
- } else {
- propertyToRemove.name = nodeName;
- }
+ Property propertyToRemove = getProperty(currentNode);
propertiesToRemove.addElement(propertyToRemove);
break;
}
}
+ }
+
+
+ /**
+ * Parse the namespace info of a node name.
+ *
+ * @param node The DOM node to parse
+ * @return The corresponding Property object
+ */
+ private Property getProperty(Node node) {
+
+ Property property = new Property();
+
+ String nodeName = node.getNodeName();
+ int colon = nodeName.indexOf(':');
+ if (colon != -1) {
+ property.name = nodeName.substring(colon + 1);
+ property.namespaceAbbrev = nodeName.substring(0, colon - 1);
+ String namespace =
+ (String) namespaces.get(property.namespaceAbbrev);
+ if ((namespace) != null) {
+ property.namespace = namespace;
+ } else {
+ property.namespace = defaultNamespace;
+ }
+ } else {
+ property.name = nodeName;
+ property.namespace = defaultNamespace;
+ }
+
+ return property;
+
}
1.4 +100 -110 jakarta-slide/src/share/org/apache/slide/webdav/method/PutMethod.java
Index: PutMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PutMethod.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- PutMethod.java 2000/09/02 03:13:33 1.3
+++ PutMethod.java 2000/09/04 23:49:12 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PutMethod.java,v 1.3 2000/09/02 03:13:33 remm Exp $
- * $Revision: 1.3 $
- * $Date: 2000/09/02 03:13:33 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/PutMethod.java,v 1.4 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -157,30 +157,28 @@
//revisionContent.setContent(req.getReader());
revisionContent.setContent(req.getInputStream());
- if (isDavNative()) {
- NodeProperty property = null;
-
- // Get content length
- property = new NodeProperty
- ("getcontentlength", new Long(req.getContentLength()),
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Last modification date
- DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
- property = new NodeProperty("getlastmodified",
- formatter.format(new Date()),
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Etag generation
- String etag = resourcePath.hashCode() + "_"
- + revisionNumber.hashCode() + "_"
- + revisionDescriptor.getContentLength();
- property = new NodeProperty("getetag", etag, "d", "DAV");
- revisionDescriptor.setProperty(property);
- }
+ NodeProperty property = null;
+
+ // Get content length
+ property = new NodeProperty
+ ("getcontentlength", new Long(req.getContentLength()),
+ true);
+ revisionDescriptor.setProperty(property);
+
+ // Last modification date
+ DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
+ property = new NodeProperty("getlastmodified",
+ formatter.format(new Date()),
+ true);
+ revisionDescriptor.setProperty(property);
+ // Etag generation
+ String etag = resourcePath.hashCode() + "_"
+ + revisionNumber.hashCode() + "_"
+ + revisionDescriptor.getContentLength();
+ property = new NodeProperty("getetag", etag, true);
+ revisionDescriptor.setProperty(property);
+
content.create(credToken, resourcePath, revisionDescriptor,
revisionContent);
@@ -197,83 +195,76 @@
NodeRevisionDescriptor revisionDescriptor =
new NodeRevisionDescriptor(req.getContentLength());
- if (isDavNative()) {
- NodeProperty property = null;
-
- // Creation date
- DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
- property = new NodeProperty("creationdate",
- formatter.format(new Date()),
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Display name
- property = new NodeProperty("displayname", resourcePath,
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Resource type
- property = new NodeProperty("resourcetype", "",
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Source
- property = new NodeProperty("source", "", "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Supported locks
- String supportedLocks = "<d:lockentry>"
- + "<d:lockscope><d:exclusive/></d:lockscope>"
- + "<d:locktype><d:write/></d:locktype>"
- + "</d:lockentry>"
- + "<d:lockentry>"
- + "<d:lockscope><d:shared/></d:lockscope>"
- + "<d:locktype><d:write/></d:locktype>"
- + "</d:lockentry>";
- property = new NodeProperty("supportedlock",
- supportedLocks, "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Get content language
- property = new NodeProperty("getcontentlanguage", "en",
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Get content length
- property = new NodeProperty
- ("getcontentlength",
- new Long(req.getContentLength()), "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Get content type
- String contentType =
- servlet.getServletContext().getMimeType(resourcePath);
- if (contentType == null) {
- contentType = "TEXT/PLAIN";
- }
- property = new NodeProperty("getcontenttype", contentType,
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Last modification date
- property = new NodeProperty
- ("getlastmodified", formatter.format(new Date()),
- "d", "DAV");
- revisionDescriptor.setProperty(property);
-
- // Etag generation
- String etag = resourcePath.hashCode() + "_"
- + (new NodeRevisionNumber()).hashCode() + "_"
- + req.getContentLength();
- property = new NodeProperty("getetag", etag, "d", "DAV");
- revisionDescriptor.setProperty(property);
-
+ NodeProperty property = null;
+
+ // Creation date
+ DateFormat formatter = new SimpleDateFormat(DATE_FORMAT);
+ property = new NodeProperty("creationdate",
+ formatter.format(new Date()),
+ true);
+ revisionDescriptor.setProperty(property);
+
+ // Display name
+ property = new NodeProperty("displayname", resourcePath, true);
+ revisionDescriptor.setProperty(property);
+
+ // Resource type
+ property = new NodeProperty("resourcetype", "", true);
+ revisionDescriptor.setProperty(property);
+
+ // Source
+ property = new NodeProperty("source", "", true);
+ revisionDescriptor.setProperty(property);
+
+ // Supported locks
+ /*
+ String supportedLocks = "<d:lockentry>"
+ + "<d:lockscope><d:exclusive/></d:lockscope>"
+ + "<d:locktype><d:write/></d:locktype>"
+ + "</d:lockentry>"
+ + "<d:lockentry>"
+ + "<d:lockscope><d:shared/></d:lockscope>"
+ + "<d:locktype><d:write/></d:locktype>"
+ + "</d:lockentry>";
+ property = new NodeProperty("supportedlock",
+ supportedLocks, true);
+ revisionDescriptor.setProperty(property);
+ */
+
+ // Get content language
+ property = new NodeProperty("getcontentlanguage", "en", true);
+ revisionDescriptor.setProperty(property);
+
+ // Get content length
+ property = new NodeProperty
+ ("getcontentlength",
+ new Long(req.getContentLength()), true);
+ revisionDescriptor.setProperty(property);
+
+ // Get content type
+ String contentType =
+ servlet.getServletContext().getMimeType(resourcePath);
+ if (contentType == null) {
+ contentType = "TEXT/PLAIN";
}
+ property = new NodeProperty("getcontenttype", contentType,
+ true);
+ revisionDescriptor.setProperty(property);
+
+ // Last modification date
+ property = new NodeProperty
+ ("getlastmodified", formatter.format(new Date()), true);
+ revisionDescriptor.setProperty(property);
+
+ // Etag generation
+ String etag = resourcePath.hashCode() + "_"
+ + (new NodeRevisionNumber()).hashCode() + "_"
+ + req.getContentLength();
+ property = new NodeProperty("getetag", etag, true);
+ revisionDescriptor.setProperty(property);
if (isMsProprietarySupport()) {
- NodeProperty property = null;
-
// Name
/*
property = new NodeProperty("name", resourcePath,
@@ -297,52 +288,51 @@
*/
// Is hidden
- property = new NodeProperty("ishidden", "0", "ms",
- "MICROSOFT");
+ property = new NodeProperty("ishidden", "0", "MICROSOFT");
revisionDescriptor.setProperty(property);
// Is collection
- property = new NodeProperty("iscollection", "0", "ms",
+ property = new NodeProperty("iscollection", "0",
"MICROSOFT");
revisionDescriptor.setProperty(property);
// Is read only
- property = new NodeProperty("isreadonly", "0", "ms",
+ property = new NodeProperty("isreadonly", "0",
"MICROSOFT");
revisionDescriptor.setProperty(property);
// Content class
// TODO : Find what it is ...
/*
- property = new NodeProperty("contentclass", "", "ms",
+ property = new NodeProperty("contentclass", "",
"MICROSOFT");
revisionDescriptor.setProperty(property);
*/
// Last accessed
- property = new NodeProperty
- ("lastaccessed", (new Date()).toString(),
- "ms", "MICROSOFT");
+ property = new NodeProperty("lastaccessed",
+ (new Date()).toString(),
+ "MICROSOFT");
revisionDescriptor.setProperty(property);
// Is structured document
/*
property = new NodeProperty("isstructureddocument",
- "false", "ms", "MICROSOFT");
+ "false", "MICROSOFT");
revisionDescriptor.setProperty(property);
*/
// Default document
/*
property = new NodeProperty("defaultdocument",
- "", "ms", "MICROSOFT");
+ "", "MICROSOFT");
revisionDescriptor.setProperty(property);
*/
// Is root
/*
property = new NodeProperty("isroot", "false",
- "ms", "MICROSOFT");
+ "MICROSOFT");
revisionDescriptor.setProperty(property);
*/
1.5 +57 -28 jakarta-slide/src/share/org/apache/slide/webdav/method/WebdavMethod.java
Index: WebdavMethod.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/WebdavMethod.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- WebdavMethod.java 2000/09/02 03:13:33 1.4
+++ WebdavMethod.java 2000/09/04 23:49:12 1.5
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/WebdavMethod.java,v 1.4 2000/09/02 03:13:33 remm Exp $
- * $Revision: 1.4 $
- * $Date: 2000/09/02 03:13:33 $
+ * $Header: /home/cvs/jakarta-slide/src/share/org/apache/slide/webdav/method/WebdavMethod.java,v 1.5 2000/09/04 23:49:12 remm Exp $
+ * $Revision: 1.5 $
+ * $Date: 2000/09/04 23:49:12 $
*
* ====================================================================
*
@@ -68,6 +68,10 @@
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+import org.w3c.dom.*;
import org.apache.slide.common.*;
import org.apache.slide.authenticate.*;
import org.apache.slide.structure.*;
@@ -77,9 +81,6 @@
import org.apache.slide.security.*;
import org.apache.slide.webdav.common.*;
import org.apache.slide.webdav.*;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
/**
* WebDAV method.
@@ -185,6 +186,18 @@
protected static DocumentBuilder documentBuilder;
+ /**
+ * Namespaces list. Keyed by abbreviation.
+ */
+ protected Hashtable namespaces;
+
+
+ /**
+ * Default namespace.
+ */
+ protected String defaultNamespace = NodeProperty.DEFAULT_NAMESPACE;
+
+
// ----------------------------------------------------------- Constructors
@@ -271,8 +284,42 @@
return result;
}
-
-
+
+
+ /**
+ * Parse a node for namespace declaration attributes.
+ *
+ * @param node DOM node
+ */
+ protected void parseNodeNamespaceDeclarations(Node node) {
+
+ NamedNodeMap nodeMap = node.getAttributes();
+ if (nodeMap != null) {
+ for (int i = 0; i < nodeMap.getLength(); i++) {
+ Node currentNode = nodeMap.item(i);
+ if (currentNode.getNodeType() != Node.ATTRIBUTE_NODE)
+ continue;
+ String attributeName = currentNode.getNodeName();
+ if (attributeName.startsWith("xmlns")) {
+ // We found a namespace declaration
+ if (attributeName.equals("xmlns")) {
+ defaultNamespace = currentNode.getNodeValue();
+ } else {
+ // Stripping out the prefix
+ if (attributeName.startsWith("xmlns:")) {
+ String namespaceAbbreviation =
+ attributeName.substring(6);
+ namespaces.put(namespaceAbbreviation,
+ currentNode.getNodeValue());
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+
/**
* Read request contents.
*
@@ -281,6 +328,8 @@
*/
protected void readRequestContent() {
+ namespaces = new Hashtable();
+
// TODO : Modify this and make it chunking aware
int contentLength = req.getContentLength();
@@ -328,16 +377,6 @@
/**
- * Is namespace DAV native ? Recommended !!
- *
- * @return boolean Namespace is a DAV native namespace
- */
- protected boolean isDavNative() {
- return (token.getNamespaceConfig().getParameter("dav") != null);
- }
-
-
- /**
* Simulate MS IIS5 ?
*
* @return boolean
@@ -346,15 +385,5 @@
return (token.getNamespaceConfig().getParameter("ms") != null);
}
-
- /**
- * Standalone DAV server ? The standalone mode makes use of either Tomcat
- * or Tomcat Catalina.
- *
- * @return boolean
- */
- protected boolean isStandalone() {
- return (token.getNamespaceConfig().getParameter("standalone") != null);
- }
}