[exo-jcr-commits] exo-jcr SVN: r1933 - in jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav: command and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Mon Feb 22 05:12:55 EST 2010
Author: pnedonosko
Date: 2010-02-22 05:12:55 -0500 (Mon, 22 Feb 2010)
New Revision: 1933
Modified:
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/GetCommand.java
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/FileResource.java
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedCollectionResource.java
jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedFileResource.java
Log:
EXOJCR-533 WebDAV GET and FileResource improvements (less JCR consumption)
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java 2010-02-19 21:30:05 UTC (rev 1932)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/WebDavServiceImpl.java 2010-02-22 10:12:55 UTC (rev 1933)
@@ -100,7 +100,7 @@
* Created by The eXo Platform SARL .<br/>
*
* @author Gennady Azarenkov
- * @version $Id: $
+ * @version $Id$
*/
@Path("/jcr")
@@ -490,6 +490,9 @@
@HeaderParam(ExtHttpHeaders.IF_MODIFIED_SINCE) String ifModifiedSince, @QueryParam("version") String version,
@Context UriInfo uriInfo)
{
+ // TODO EXOJCR-533
+ // long startGet = System.currentTimeMillis();
+ // try {
if (log.isDebugEnabled())
{
@@ -506,7 +509,6 @@
if (rangeHeader != null)
{
-
if (log.isDebugEnabled())
{
log.debug(rangeHeader);
@@ -560,6 +562,11 @@
log.error(exc.getMessage(), exc);
return Response.serverError().entity(exc.getMessage()).build();
}
+
+ // TODO EXOJCR-533
+ // } finally {
+ // System.out.println(System.currentTimeMillis() + ":Get:" + repoPath + ":" + (System.currentTimeMillis() - startGet));
+ // }
}
/**
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/GetCommand.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/GetCommand.java 2010-02-19 21:30:05 UTC (rev 1932)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/command/GetCommand.java 2010-02-22 10:12:55 UTC (rev 1933)
@@ -58,7 +58,7 @@
* Created by The eXo Platform SAS Author : <a
* href="gavrikvetal at gmail.com">Vitaly Guly</a>.
*
- * @version $Id: $
+ * @version $Id$
*/
public class GetCommand
@@ -81,8 +81,12 @@
* @param ranges ranges
* @return the instance of javax.ws.rs.core.Response
*/
- public Response get(Session session, String path, String version, String baseURI, List<Range> ranges, String ifModifiedSince, HashMap<MediaType, String> cahceControls)
+ public Response get(Session session, String path, String version, String baseURI, List<Range> ranges,
+ String ifModifiedSince, HashMap<MediaType, String> cahceControls)
{
+ // TODO EXOJCR-533
+ // long startGet = System.currentTimeMillis();
+ // try {
if (version == null)
{
@@ -95,7 +99,6 @@
try
{
-
Node node = (Node)session.getItem(path);
WebDavNamespaceContext nsContext = new WebDavNamespaceContext(session);
@@ -119,36 +122,36 @@
istream = ((FileResource)resource).getContentAsStream();
}
- HierarchicalProperty contentLengthProperty = resource.getProperty(FileResource.GETCONTENTLENGTH);
- long contentLength = new Long(contentLengthProperty.getValue());
+ // TODO EXOJCR-533 why we need fileResource if we have resource?
+ // FileResource fileResource = new FileResource(uri, node, nsContext);
+ // HierarchicalProperty lastModifiedProperty = fileResource.getProperty(FileResource.GETLASTMODIFIED);
+ HierarchicalProperty lastModifiedProperty = resource.getProperty(FileResource.GETLASTMODIFIED);
- HierarchicalProperty mimeTypeProperty = resource.getProperty(FileResource.GETCONTENTTYPE);
- String contentType = mimeTypeProperty.getValue();
-
- FileResource fileResource = new FileResource(uri, node, nsContext);
- HierarchicalProperty lastModifiedProperty = fileResource.getProperty(FileResource.GETLASTMODIFIED);
-
- if((ifModifiedSince != null) && (ifModifiedSince.equals(lastModifiedProperty.getValue()))){
+ // check before any other reads
+ if ((ifModifiedSince != null) && (ifModifiedSince.equals(lastModifiedProperty.getValue())))
+ {
return Response.notModified().entity("Not Modified").build();
}
+ HierarchicalProperty contentLengthProperty = resource.getProperty(FileResource.GETCONTENTLENGTH);
+ long contentLength = new Long(contentLengthProperty.getValue());
+
// content length is not present
if (contentLength == 0)
{
return Response.ok().header(ExtHttpHeaders.ACCEPT_RANGES, "bytes").entity(istream).build();
}
+ HierarchicalProperty mimeTypeProperty = resource.getProperty(FileResource.GETCONTENTTYPE);
+ String contentType = mimeTypeProperty.getValue();
+
// no ranges request
-
if (ranges.size() == 0)
{
-
-
return Response.ok().header(HttpHeaders.CONTENT_LENGTH, Long.toString(contentLength)).header(
ExtHttpHeaders.ACCEPT_RANGES, "bytes").header(ExtHttpHeaders.LAST_MODIFIED,
lastModifiedProperty.getValue()).header(ExtHttpHeaders.CACHE_CONTROL,
generateCacheControl(cahceControls, contentType)).entity(istream).type(contentType).build();
-
}
// one range
@@ -213,6 +216,11 @@
log.error(exc.getMessage(), exc);
return Response.serverError().entity(exc.getMessage()).build();
}
+
+ // TODO EXOJCR-533
+ // } finally {
+ // System.out.println(System.currentTimeMillis() + ":GetCommand:" + path + ":" + (System.currentTimeMillis() - startGet));
+ // }
}
/**
@@ -270,26 +278,30 @@
*/
private String generateCacheControl(HashMap<MediaType, String> cacheControlMap, String contentType)
{
-
+
ArrayList<MediaType> mediaTypesList = new ArrayList<MediaType>(cacheControlMap.keySet());
Collections.sort(mediaTypesList, MediaTypeHelper.MEDIA_TYPE_COMPARATOR);
String cacheControlValue = "no-cache";
-
- if(contentType == null || contentType.equals("")){
+
+ if (contentType == null || contentType.equals(""))
+ {
return cacheControlValue;
}
-
+
for (MediaType mediaType : mediaTypesList)
{
- if(contentType.equals(MediaType.WILDCARD)){
+ if (contentType.equals(MediaType.WILDCARD))
+ {
cacheControlValue = cacheControlMap.get(MediaType.WILDCARD_TYPE);
break;
- } else if (mediaType.isCompatible(new MediaType(contentType.split("/")[0], contentType.split("/")[1]) )) {
+ }
+ else if (mediaType.isCompatible(new MediaType(contentType.split("/")[0], contentType.split("/")[1])))
+ {
cacheControlValue = cacheControlMap.get(mediaType);
break;
}
}
- return cacheControlValue;
+ return cacheControlValue;
}
}
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java 2010-02-19 21:30:05 UTC (rev 1932)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/CollectionResource.java 2010-02-22 10:12:55 UTC (rev 1933)
@@ -153,8 +153,9 @@
final WebDavNamespaceContext namespaceContext) throws IllegalResourceTypeException, RepositoryException
{
super(type, identifier, new WebDavNamespaceContext(node.getSession()));
- if (ResourceUtil.isFile(node))
- throw new IllegalResourceTypeException("Node type is not applicable for COLLECTION resource " + node.getPath());
+ // TODO EXOJCR-533
+ //if (ResourceUtil.isFile(node))
+ // throw new IllegalResourceTypeException("Node type is not applicable for COLLECTION resource " + node.getPath());
this.node = node;
}
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/FileResource.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/FileResource.java 2010-02-19 21:30:05 UTC (rev 1932)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/FileResource.java 2010-02-22 10:12:55 UTC (rev 1933)
@@ -45,9 +45,8 @@
* nt:file's URI jcr:content's jcr:data property contains file's payload
*
* @author Gennady Azarenkov
- * @version $Id: $
+ * @version $Id$
*/
-
public class FileResource extends GenericResource
{
@@ -88,6 +87,16 @@
protected final Node node;
/**
+ * Content Node (jcr:content).
+ */
+ private Node contentNode;
+
+ /**
+ * Data Property (jcr:data).
+ */
+ private Property contentData;
+
+ /**
* @param identifier resource identifier
* @param node node
* @param namespaceContext namespace context
@@ -113,8 +122,9 @@
throws IllegalResourceTypeException, RepositoryException
{
super(type, identifier, namespaceContext);
- if (!ResourceUtil.isFile(node))
- throw new IllegalResourceTypeException("Node type is not applicable for FILE resource " + node.getPath());
+ // TODO EXOJCR-533
+ //if (!ResourceUtil.isFile(node))
+ // throw new IllegalResourceTypeException("Node type is not applicable for FILE resource " + node.getPath());
this.node = node;
}
@@ -125,7 +135,6 @@
public Set<HierarchicalProperty> getProperties(boolean namesOnly) throws PathNotFoundException,
AccessDeniedException, RepositoryException
{
-
Set<HierarchicalProperty> props = super.getProperties(namesOnly);
props.add(namesOnly ? new HierarchicalProperty(GETLASTMODIFIED) : getProperty(GETLASTMODIFIED));
@@ -193,7 +202,6 @@
if (name.equals(DISPLAYNAME))
{
return new HierarchicalProperty(name, node.getName());
-
}
else if (name.equals(CREATIONDATE))
{
@@ -202,22 +210,18 @@
HierarchicalProperty creationDate = new HierarchicalProperty(name, created, CREATION_PATTERN);
creationDate.setAttribute("b:dt", "dateTime.tz");
return creationDate;
-
}
else if (name.equals(CHILDCOUNT))
{
return new HierarchicalProperty(name, "0");
-
}
else if (name.equals(GETCONTENTLENGTH))
{
- return new HierarchicalProperty(name, "" + node.getNode("jcr:content").getProperty("jcr:data").getLength());
-
+ return new HierarchicalProperty(name, String.valueOf(dataProperty().getLength()));
}
else if (name.equals(GETCONTENTTYPE))
{
- return new HierarchicalProperty(name, node.getNode("jcr:content").getProperty("jcr:mimeType").getString());
-
+ return new HierarchicalProperty(name, contentNode().getProperty("jcr:mimeType").getString());
}
else if (name.equals(GETLASTMODIFIED))
{
@@ -225,37 +229,30 @@
HierarchicalProperty lastModified = new HierarchicalProperty(name, modified, MODIFICATION_PATTERN);
lastModified.setAttribute("b:dt", "dateTime.rfc1123");
return lastModified;
-
}
else if (name.equals(HASCHILDREN))
{
return new HierarchicalProperty(name, "0");
-
}
else if (name.equals(ISCOLLECTION))
{
return new HierarchicalProperty(name, "0");
-
}
else if (name.equals(ISFOLDER))
{
return new HierarchicalProperty(name, "0");
-
}
else if (name.equals(ISROOT))
{
return new HierarchicalProperty(name, "0");
-
}
else if (name.equals(PARENTNAME))
{
return new HierarchicalProperty(name, node.getParent().getName());
-
}
else if (name.equals(RESOURCETYPE))
{
return new HierarchicalProperty(name);
-
}
else if (name.equals(SUPPORTEDLOCK))
{
@@ -279,12 +276,10 @@
else if (name.equals(ISVERSIONED))
{
return new HierarchicalProperty(name, "0");
-
}
else if (name.equals(SUPPORTEDMETHODSET))
{
return supportedMethodSet();
-
}
else
{
@@ -294,7 +289,6 @@
String propertyValue;
if (property.getDefinition().isMultiple())
{
-
if (property.getValues().length == 0)
{
throw new PathNotFoundException();
@@ -342,7 +336,7 @@
*/
public String getContentAsText() throws RepositoryException
{
- return contentNode().getProperty("jcr:data").getString();
+ return dataProperty().getString();
}
/**
@@ -353,7 +347,7 @@
*/
public InputStream getContentAsStream() throws RepositoryException
{
- return contentNode().getProperty("jcr:data").getStream();
+ return dataProperty().getStream();
}
/**
@@ -365,7 +359,7 @@
{
try
{
- return contentNode().getProperty("jcr:data").getType() != PropertyType.BINARY;
+ return dataProperty().getType() != PropertyType.BINARY;
}
catch (RepositoryException exc)
{
@@ -377,12 +371,37 @@
/**
* Returns the content node.
*
- * @return the content node
+ * @return Node, the content node
* @throws RepositoryException {@link RepositoryException}
*/
- public Node contentNode() throws RepositoryException
+ protected Node contentNode() throws RepositoryException
{
- return node.getNode("jcr:content");
+ if (contentNode == null)
+ {
+ return contentNode = node.getNode("jcr:content");
+ }
+ else
+ {
+ return contentNode;
+ }
}
+ /**
+ * Returns the data property.
+ *
+ * @return Property, the content data property
+ * @throws RepositoryException {@link RepositoryException}
+ */
+ protected Property dataProperty() throws RepositoryException
+ {
+ if (contentData == null)
+ {
+ return contentData = contentNode().getProperty("jcr:data");
+ }
+ else
+ {
+ return contentData;
+ }
+ }
+
}
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedCollectionResource.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedCollectionResource.java 2010-02-19 21:30:05 UTC (rev 1932)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedCollectionResource.java 2010-02-22 10:12:55 UTC (rev 1933)
@@ -51,9 +51,10 @@
throws IllegalResourceTypeException, RepositoryException
{
super(VERSIONED_COLLECTION, identifier, node, namespaceContext);
- if (!node.isNodeType("mix:versionable"))
- throw new IllegalResourceTypeException("Node type is not applicable for Versioned FILE resource "
- + node.getPath());
+ // TODO EXOJCR-533
+ // if (!node.isNodeType("mix:versionable"))
+ // throw new IllegalResourceTypeException("Node type is not applicable for Versioned FILE resource "
+ // + node.getPath());
}
/**
Modified: jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedFileResource.java
===================================================================
--- jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedFileResource.java 2010-02-19 21:30:05 UTC (rev 1932)
+++ jcr/trunk/exo.jcr.component.webdav/src/main/java/org/exoplatform/services/jcr/webdav/resource/VersionedFileResource.java 2010-02-22 10:12:55 UTC (rev 1933)
@@ -60,9 +60,10 @@
throws IllegalResourceTypeException, RepositoryException
{
super(VERSIONED_FILE, identifier, node, namespaceContext);
- if (!node.isNodeType("mix:versionable"))
- throw new IllegalResourceTypeException("Node type is not applicable for Versioned FILE resource "
- + node.getPath());
+ // TODO EXOJCR-533
+ // if (!node.isNodeType("mix:versionable"))
+ // throw new IllegalResourceTypeException("Node type is not applicable for Versioned FILE resource "
+ // + node.getPath());
}
/**
More information about the exo-jcr-commits
mailing list