You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2018/08/06 11:53:08 UTC

svn commit: r1837508 - in /jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl: FSPackageRegistry.java FSRegisteredPackage.java

Author: tripod
Date: Mon Aug  6 11:53:08 2018
New Revision: 1837508

URL: http://svn.apache.org/viewvc?rev=1837508&view=rev
Log:
JCRVLT-313 Avoid opening VaultPackage to get RegisteredPackage in FSRegistry

Modified:
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackage.java

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java?rev=1837508&r1=1837507&r2=1837508&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSPackageRegistry.java Mon Aug  6 11:53:08 2018
@@ -183,12 +183,8 @@ public class FSPackageRegistry extends A
     @Nullable
     @Override
     public RegisteredPackage open(@Nonnull PackageId id) throws IOException {
-        try {
-            File pkg = getPackageFile(id);
-            return pkg != null && pkg.exists() ? new FSRegisteredPackage(this, open(pkg)) : null;
-        } catch (RepositoryException e) {
-            throw new IOException(e);
-        }
+        FSInstallState state = getInstallState(id);
+        return FSPackageStatus.NOTREGISTERED != state.getStatus() ? new FSRegisteredPackage(this, state) : null;
     }
 
     @Override
@@ -229,14 +225,18 @@ public class FSPackageRegistry extends A
     }
 
     /**
-     * {@inheritDoc}
+     * Opens the package of the given file.
+     * @param pkg Package file.
+     * @return the package
+     * @throws IOException if an I/O error occurrs.
      */
-    public VaultPackage open(File pkg) throws RepositoryException {
+    @Nonnull
+    protected VaultPackage open(File pkg) throws IOException {
         try {
             return new ZipVaultPackage(pkg, false, true);
         } catch (IOException e) {
             log.error("Cloud not open file {} as ZipVaultPackage.", pkg.getPath(), e);
-            return null;
+            throw e;
         }
 
     }
@@ -331,8 +331,12 @@ public class FSPackageRegistry extends A
         if (autoDependency != null) {
             dependencies.add(autoDependency);
         }
-        setInstallState(pkg.getId(), FSPackageStatus.REGISTERED, pkgFile.toPath(), false, dependencies, subpackages,
-                null);
+        FSInstallState state = new FSInstallState(pkg.getId(), FSPackageStatus.REGISTERED)
+                .withFilePath(pkgFile.toPath())
+                .withDependencies(dependencies)
+                .withSubPackages(subpackages)
+                .withExternal(false);
+        setInstallState(state);
         return pkg.getId();
     }
 
@@ -491,8 +495,13 @@ public class FSPackageRegistry extends A
             }
             Map<PackageId, SubPackageHandling.Option> subpackages = registerSubPackages(pack, replace);
             FileUtils.copyFile(file, pkgFile);
-            Collection<Dependency> dependencies = Arrays.asList(pack.getDependencies());
-            setInstallState(pack.getId(), FSPackageStatus.REGISTERED, pkgFile.toPath(), false, new HashSet<>(dependencies), subpackages, null);
+            Set<Dependency> dependencies = new HashSet<>(Arrays.asList(pack.getDependencies()));
+            FSInstallState state = new FSInstallState(pack.getId(), FSPackageStatus.REGISTERED)
+                    .withFilePath(pkgFile.toPath())
+                    .withDependencies(dependencies)
+                    .withSubPackages(subpackages)
+                    .withExternal(false);
+            setInstallState(state);
             return pack.getId();
         } finally {
             if (!pack.isClosed()) {
@@ -523,8 +532,13 @@ public class FSPackageRegistry extends A
                 }
             }
             Map<PackageId, SubPackageHandling.Option> subpackages = registerSubPackages(pack, replace);
-            Collection<Dependency> dependencies = Arrays.asList(pack.getDependencies());
-            setInstallState(pack.getId(), FSPackageStatus.REGISTERED, file.toPath(), true, new HashSet<>(dependencies), subpackages, null);
+            Set<Dependency> dependencies = new HashSet<>(Arrays.asList(pack.getDependencies()));
+            FSInstallState targetState = new FSInstallState(pack.getId(), FSPackageStatus.REGISTERED)
+                    .withFilePath(file.toPath())
+                    .withDependencies(dependencies)
+                    .withSubPackages(subpackages)
+                    .withExternal(true);
+            setInstallState(targetState);
             return pack.getId();
         } finally {
             if (!pack.isClosed()) {
@@ -649,35 +663,29 @@ public class FSPackageRegistry extends A
         if (FSPackageStatus.EXTRACTED == targetStatus) {
             installTime = Calendar.getInstance().getTimeInMillis();
         }
-        setInstallState(pid, targetStatus, state.getFilePath(), state.isExternal(), state.getDependencies(), state.getSubPackages(), installTime);
+        FSInstallState targetState = new FSInstallState(pid, targetStatus)
+              .withFilePath(state.getFilePath())
+              .withDependencies(state.getDependencies())
+              .withSubPackages(state.getSubPackages())
+              .withInstallTime(installTime)
+              .withExternal(state.isExternal());
+        setInstallState(targetState);
     }
 
     /**
      * Persists the installState to a metadatafile and adds current state to cache
-     *
-     * @param pid
-     * @param targetStatus
-     * @param filePath
-     * @param external
-     * @param dependencies
-     * @param subPackages
-     * @param installTimeStamp
+     * @param state
      * @throws IOException
      */
-    private void setInstallState(@Nonnull PackageId pid, @Nonnull FSPackageStatus targetStatus, @Nonnull Path filePath, @Nonnull boolean external, @Nullable Set<Dependency> dependencies, @Nullable Map<PackageId, SubPackageHandling.Option> subPackages, @Nullable Long installTimeStamp) throws IOException {
+    private void setInstallState(@Nonnull FSInstallState state) throws IOException {
+        PackageId pid = state.getPackageId();
         File metaData = getPackageMetaDataFile(pid);
 
-        if (targetStatus == FSPackageStatus.NOTREGISTERED) {
+        if (state.getStatus() == FSPackageStatus.NOTREGISTERED) {
             pathIdMapping.remove(stateCache.get(pid).getFilePath());
             metaData.delete();
             stateCache.remove(pid);
         } else {
-            FSInstallState state = new FSInstallState(pid, targetStatus)
-                    .withFilePath(filePath)
-                    .withDependencies(dependencies)
-                    .withSubPackages(subPackages)
-                    .withInstallTime(installTimeStamp)
-                    .withExternal(external);
             state.save(metaData);
             stateCache.put(pid, state);
             pathIdMapping.put(state.getFilePath(), pid);

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackage.java?rev=1837508&r1=1837507&r2=1837508&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackage.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackage.java Mon Aug  6 11:53:08 2018
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.vault.packaging.registry.impl;
 
 import java.io.IOException;
+import java.nio.file.Path;
 import java.util.Calendar;
 
 import javax.annotation.CheckForNull;
@@ -30,7 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * {@code JcrRegisteredPackage}...
+ * Registry package based on the {@link FSPackageRegistry}.
  */
 public class FSRegisteredPackage implements RegisteredPackage {
 
@@ -39,24 +40,33 @@ public class FSRegisteredPackage impleme
      */
     private static final Logger log = LoggerFactory.getLogger(FSPackageRegistry.class);
 
+    private final FSPackageRegistry registry;
+
+    private final PackageId id;
+
+    private final Path filepath;
+
     private VaultPackage vltPkg;
-    private FSPackageRegistry registry;
 
-    public FSRegisteredPackage(FSPackageRegistry registry, VaultPackage vltPkg) throws IOException, RepositoryException {
-        this.vltPkg = vltPkg;
+    public FSRegisteredPackage(FSPackageRegistry registry, FSInstallState installState) throws IOException {
+        this.id = installState.getPackageId();
+        this.filepath = installState.getFilePath();
         this.registry = registry;
     }
 
     @Nonnull
     @Override
     public PackageId getId() {
-        return vltPkg.getId();
+        return this.id;
     }
 
     @Nonnull
     @Override
     public VaultPackage getPackage() throws IOException {
-        return vltPkg;
+        if (this.vltPkg == null) {
+            this.vltPkg = registry.open(filepath.toFile());
+        }
+        return this.vltPkg;
     }
 
     @Override
@@ -95,8 +105,10 @@ public class FSRegisteredPackage impleme
 
     @Override
     public void close() {
-        vltPkg.close();
-        vltPkg = null;
+        if (vltPkg != null) {
+            vltPkg.close();
+            vltPkg = null;
+        }
     }
 
     @Override