[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