You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ie...@apache.org on 2010/09/24 14:26:16 UTC

svn commit: r1000833 - in /sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal: DefaultContentCreator.java Loader.java PathEntry.java

Author: ieb
Date: Fri Sep 24 12:26:16 2010
New Revision: 1000833

URL: http://svn.apache.org/viewvc?rev=1000833&view=rev
Log:
SLING-1802 Made the ContentLoader look at the lastmodified timestamp of the bundle and failing that the lastmodified timestamp within the OSGi contaier to determine if
the content should be updated.

Modified:
    sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentCreator.java
    sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java
    sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java

Modified: sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentCreator.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentCreator.java?rev=1000833&r1=1000832&r2=1000833&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentCreator.java (original)
+++ sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/DefaultContentCreator.java Fri Sep 24 12:26:16 2010
@@ -698,10 +698,19 @@ public class DefaultContentCreator imple
         // if node already exists but should be overwritten, delete it
         if (parentNode.hasNode(name)) {
             this.parentNodeStack.push(parentNode.getNode(name));
-            this.parentNodeStack.push(parentNode.getNode(name).getNode("jcr:content"));
-            if (!this.configuration.isOverwrite()) {
+            Node contentNode = parentNode.getNode(name).getNode("jcr:content");
+            this.parentNodeStack.push(contentNode);
+            long nodeLastModified = 0L;
+            if ( contentNode.hasProperty("jcr:lastModified") ) {
+                nodeLastModified = contentNode.getProperty("jcr:lastModified").getDate().getTimeInMillis();
+            }
+            if (!this.configuration.isOverwrite() && nodeLastModified >= lastModified ) {
                 return;
             }
+            log.info(
+                    "Updating {} lastModified:{} New Content LastModified:{}",
+                    new Object[] { parentNode.getNode(name).getPath(),
+                            new Date(nodeLastModified), new Date(lastModified) });
         } else {
             this.createNode(name, "nt:file", null);
             this.createNode("jcr:content", "nt:resource", null);

Modified: sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java?rev=1000833&r1=1000832&r2=1000833&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java (original)
+++ sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/Loader.java Fri Sep 24 12:26:16 2010
@@ -587,7 +587,7 @@ public class Loader extends BaseImportLo
         this.contentCreator.init(configuration, defaultImportProviders, createdNodes, null);
         this.contentCreator.prepareParsing(parent, name);
         final URLConnection conn = source.openConnection();
-        final long lastModified = conn.getLastModified();
+        final long lastModified = Math.min(conn.getLastModified(), configuration.getLastModified());
         final String type = conn.getContentType();
         final InputStream data = conn.getInputStream();
         this.contentCreator.createFileAndResourceNode(path, data, type, lastModified);

Modified: sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java?rev=1000833&r1=1000832&r2=1000833&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java (original)
+++ sling/trunk/bundles/jcr/contentloader/src/main/java/org/apache/sling/jcr/contentloader/internal/PathEntry.java Fri Sep 24 12:26:16 2010
@@ -102,14 +102,21 @@ public class PathEntry extends ImportOpt
     /** Workspace to import into. */
     private final String workspace;
 
+    private long lastModified;
+
     public static Iterator<PathEntry> getContentPaths(final Bundle bundle) {
         final List<PathEntry> entries = new ArrayList<PathEntry>();
-
+        String bundleLastModifiedStamp = (String) bundle.getHeaders().get("Bnd-LastModified");
+        long bundleLastModified = bundle.getLastModified(); // time last modified inside the container
+        if ( bundleLastModifiedStamp != null ) {
+            bundleLastModified = Math.min(bundleLastModified, Long.parseLong(bundleLastModifiedStamp));
+        }
         final String root = (String) bundle.getHeaders().get(CONTENT_HEADER);
         if (root != null) {
             final ManifestHeader header = ManifestHeader.parse(root);
             for (final ManifestHeader.Entry entry : header.getEntries()) {
-                entries.add(new PathEntry(entry));
+                
+                entries.add(new PathEntry(entry, bundleLastModified ));
             }
         }
 
@@ -119,8 +126,9 @@ public class PathEntry extends ImportOpt
         return entries.iterator();
     }
 
-    public PathEntry(ManifestHeader.Entry entry) {
+    public PathEntry(ManifestHeader.Entry entry, long bundleLastModified) {
         this.path = entry.getValue();
+        this.lastModified = bundleLastModified;
 
         // check for directives
 
@@ -182,7 +190,11 @@ public class PathEntry extends ImportOpt
             this.workspace = null;
         }
     }
-
+    
+    public long getLastModified() {
+        return lastModified;
+    }
+    
     public String getPath() {
         return this.path;
     }