You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/06/22 08:17:00 UTC

[jackrabbit-filevault] 01/01: JCRVLT-246 fix Sonarcloud.io blocker issues

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch bugfix/JCRVLT-246-sonarcloud-blockers
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit 2e353ad3f9ec44c51b881d7fe99e71f4ce57de57
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Jun 22 10:16:32 2021 +0200

    JCRVLT-246 fix Sonarcloud.io blocker issues
---
 .../org/apache/jackrabbit/vault/cli/CmdDump.java   |  18 ++-
 .../jackrabbit/vault/fs/io/AbstractExporter.java   |   2 +-
 .../apache/jackrabbit/vault/fs/io/JarExporter.java |  14 +-
 .../apache/jackrabbit/vault/fs/io/JcrExporter.java |   7 +-
 .../jackrabbit/vault/fs/io/PlatformExporter.java   |  26 ++--
 .../vault/packaging/impl/JcrPackageImpl.java       | 141 +++++++++++----------
 .../packaging/impl/JcrPackageManagerImpl.java      |  14 +-
 .../registry/impl/JcrPackageRegistry.java          |  28 ++--
 8 files changed, 136 insertions(+), 114 deletions(-)

diff --git a/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdDump.java b/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdDump.java
index 0d36704..4a23d40 100644
--- a/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdDump.java
+++ b/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdDump.java
@@ -18,7 +18,9 @@
 package org.apache.jackrabbit.vault.cli;
 
 import java.io.File;
+import java.io.InputStream;
 import java.io.PrintWriter;
+import java.nio.file.Files;
 
 import org.apache.commons.cli2.Argument;
 import org.apache.commons.cli2.CommandLine;
@@ -28,8 +30,6 @@ import org.apache.commons.cli2.builder.CommandBuilder;
 import org.apache.commons.cli2.builder.DefaultOptionBuilder;
 import org.apache.commons.cli2.builder.GroupBuilder;
 import org.apache.commons.cli2.option.Command;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.api.DumpContext;
 import org.apache.jackrabbit.vault.fs.api.Dumpable;
 import org.apache.jackrabbit.vault.fs.api.VaultFileSystem;
@@ -59,16 +59,14 @@ public class CmdDump extends AbstractJcrFsCommand {
                     file = ctx.getVaultFsApp().getPlatformFile(path, false);
                 }
                 if (cl.hasOption(optConfig)) {
-                    IOUtils.copy(
-                        fs.getConfig().getSource(),
-                        FileUtils.openOutputStream(file)
-                    );
+                    try (InputStream input = fs.getConfig().getSource()) {
+                        Files.copy(input, file.toPath());
+                    }
                     VaultFsApp.log.info("VaultFs config written to {}", file.getPath());
                 } else {
-                    IOUtils.copy(
-                        fs.getWorkspaceFilter().getSource(),
-                        FileUtils.openOutputStream(file)
-                    );
+                    try (InputStream input = fs.getWorkspaceFilter().getSource()) {
+                        Files.copy(input, file.toPath());
+                    }
                     VaultFsApp.log.info("VaultFs workspace filter written to {}", file.getPath());
                 }
             } else {
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
index 6bd4d86..48f89d4 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
@@ -419,7 +419,7 @@ public abstract class AbstractExporter implements AutoCloseable {
             throws RepositoryException, IOException;
 
     /**
-     * <p>The specified stream remains open after this method returns.
+     * <p>The specified stream is automatically closed after this method returns or throws an exception.
      * @param in
      * @param relPath
      * @throws IOException
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java
index b898372..857d136 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java
@@ -202,11 +202,15 @@ public class JarExporter extends AbstractExporter {
 
     public void writeFile(InputStream in, String relPath) throws IOException {
         // The file input stream to be written is assumed to be compressible
-        ZipEntry e = new ZipEntry(relPath);
-        exportInfo.update(ExportInfo.Type.ADD, e.getName());
-        jOut.putNextEntry(e);
-        IOUtils.copy(in, jOut);
-        jOut.closeEntry();
+        try {
+            ZipEntry e = new ZipEntry(relPath);
+            exportInfo.update(ExportInfo.Type.ADD, e.getName());
+            jOut.putNextEntry(e);
+            IOUtils.copy(in, jOut);
+            jOut.closeEntry();
+        } finally {
+            in.close();
+        }
     }
 
     public void write(ZipFile zip, ZipEntry entry) throws IOException {
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java
index 8e32b88..766de2d 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java
@@ -168,11 +168,10 @@ public class JcrExporter extends AbstractExporter {
                 content.setProperty(JcrConstants.JCR_MIMETYPE, "application/octet-stream");
             }
             b.dispose();
-            in.close();
         } catch (RepositoryException e) {
-            IOException io = new IOException("Error while writing file " + relPath);
-            io.initCause(e);
-            throw io;
+            throw new IOException("Error while writing file " + relPath, e);
+        } finally {
+            in.close();
         }
     }
 
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java
index 02f74e9..aedca94 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java
@@ -22,6 +22,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.file.Files;
 
 import javax.jcr.RepositoryException;
 
@@ -159,19 +160,20 @@ public class PlatformExporter extends AbstractExporter {
     }
 
     public void writeFile(InputStream in, String relPath) throws IOException {
-        File local = new File(localParent, relPath);
-        if (!local.getParentFile().exists()) {
-            mkdirs(local.getParentFile());
-        }
-        if (local.exists()) {
-            exportInfo.update(ExportInfo.Type.UPDATE, local.getPath());
-        } else {
-            exportInfo.update(ExportInfo.Type.ADD, local.getPath());
+        try {
+            File local = new File(localParent, relPath);
+            if (!local.getParentFile().exists()) {
+                mkdirs(local.getParentFile());
+            }
+            if (local.exists()) {
+                exportInfo.update(ExportInfo.Type.UPDATE, local.getPath());
+            } else {
+                exportInfo.update(ExportInfo.Type.ADD, local.getPath());
+            }
+            Files.copy(in, local.toPath());
+        } finally {
+            in.close();
         }
-        OutputStream out = new FileOutputStream(local);
-        IOUtils.copy(in, out);
-        in.close();
-        out.close();
     }
 
     private void mkdirs(File dir) throws IOException {
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
index c8fdf66..3dd99dc 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
@@ -307,19 +307,19 @@ public class JcrPackageImpl implements JcrPackage {
                 MemoryArchive archive = new MemoryArchive(false);
                 try (InputStream in = getData().getBinary().getStream()) {
                     archive.run(in);
+                    // workaround for shallow packages that don't have a meta-inf anymore (JCRVLT-188)
+                    Properties props = archive.getMetaInf().getProperties();
+                    if (props == null || props.isEmpty()) {
+                        JcrPackageDefinition def = getDefinition();
+                        if (def != null) {
+                            ((DefaultMetaInf) archive.getMetaInf()).setProperties(def.getMetaInf().getProperties());
+                        }
+                    }
+                    pack = new ZipVaultPackage(archive, true);
                 } catch (Exception e) {
                     archive.close();
                     throw new IOException("Error while reading stream", e);
                 }
-                // workaround for shallow packages that don't have a meta-inf anymore (JCRVLT-188)
-                Properties props = archive.getMetaInf().getProperties();
-                if (props == null || props.isEmpty()) {
-                    JcrPackageDefinition def = getDefinition();
-                    if (def != null) {
-                        ((DefaultMetaInf) archive.getMetaInf()).setProperties(def.getMetaInf().getProperties());
-                    }
-                }
-                pack = new ZipVaultPackage(archive, true);
             } else {
                 File tmpFile = File.createTempFile("vaultpack", ".zip");
                 Binary bin = getData().getBinary();
@@ -752,53 +752,59 @@ public class JcrPackageImpl implements JcrPackage {
         if (def == null) {
             return;
         }
-        List<Dependency> unresolved = new LinkedList<Dependency>();
-        List<RegisteredPackage> uninstalled = new LinkedList<RegisteredPackage>();
-        for (Dependency dep: def.getDependencies()) {
-            // resolve to installed and uninstalled packages
-            PackageId id = mgr.resolve(dep, false);
-            if (id == null) {
-                unresolved.add(dep);
-            } else {
-                RegisteredPackage pack = (RegisteredPackage) mgr.open(id);
-                if (pack != null && !pack.isInstalled()) {
+        List<Dependency> unresolved = new LinkedList<>();
+        List<RegisteredPackage> uninstalled = new LinkedList<>();
+        try {
+            for (Dependency dep: def.getDependencies()) {
+                // resolve to installed and uninstalled packages
+                PackageId id = mgr.resolve(dep, false);
+                if (id == null) {
                     unresolved.add(dep);
-                    uninstalled.add(pack);
+                } else {
+                    RegisteredPackage pack = mgr.open(id);
+                    if (pack != null && !pack.isInstalled()) {
+                        unresolved.add(dep);
+                        uninstalled.add(pack);
+                    }
                 }
             }
-        }
-        // if non unresolved, then we're good
-        if (unresolved.size() == 0) {
-            return;
-        }
-        // if the package is not installed at all, abort for required and strict handling
-        if ((opts.getDependencyHandling() == DependencyHandling.STRICT && unresolved.size() > 0)
-                || (opts.getDependencyHandling() == DependencyHandling.REQUIRED && unresolved.size() > uninstalled.size())) {
-            String msg = String.format("Refusing to install package %s. required dependencies missing: %s", def.getId(), unresolved);
-            log.error(msg);
-            throw new DependencyException(msg);
-        }
-
-        for (RegisteredPackage pack: uninstalled) {
-            if (pack.isInstalled()) {
-                continue;
+            // if non unresolved, then we're good
+            if (unresolved.isEmpty()) {
+                return;
+            }
+            // if the package is not installed at all, abort for required and strict handling
+            if ((opts.getDependencyHandling() == DependencyHandling.STRICT && unresolved.size() > 0)
+                    || (opts.getDependencyHandling() == DependencyHandling.REQUIRED && unresolved.size() > uninstalled.size())) {
+                String msg = String.format("Refusing to install package %s. required dependencies missing: %s", def.getId(), unresolved);
+                log.error(msg);
+                throw new DependencyException(msg);
             }
-            PackageId packageId = pack.getId();
-            if (processed.contains(packageId)) {
-                if (opts.getDependencyHandling() == DependencyHandling.BEST_EFFORT) {
+    
+            for (RegisteredPackage pack: uninstalled) {
+                if (pack.isInstalled()) {
                     continue;
                 }
-                String msg = String.format("Unable to install package %s. dependency has as cycling reference to %s", def.getId(), packageId);
-                log.error(msg);
-                throw new CyclicDependencyException(msg);
+                PackageId packageId = pack.getId();
+                if (processed.contains(packageId)) {
+                    if (opts.getDependencyHandling() == DependencyHandling.BEST_EFFORT) {
+                        continue;
+                    }
+                    String msg = String.format("Unable to install package %s. dependency has as cycling reference to %s", def.getId(), packageId);
+                    log.error(msg);
+                    throw new CyclicDependencyException(msg);
+                }
+                if (pack instanceof JcrRegisteredPackage) {
+                    JcrPackage jcrPackage = ((JcrRegisteredPackage)pack).getJcrPackage();
+                    ((JcrPackageImpl)jcrPackage).extract(processed, opts, createSnapshot, replaceSnapshot);
+                } else {
+                    String msg = String.format("Unable to install package %s. dependency not found in JcrPackageRegistry %s", def.getId(), packageId);
+                    log.error(msg);
+                    throw new DependencyException(msg);
+                }
             }
-            if (pack instanceof JcrRegisteredPackage) {
-                JcrPackage jcrPackage = ((JcrRegisteredPackage)pack).getJcrPackage();
-                ((JcrPackageImpl)jcrPackage).extract(processed, opts, createSnapshot, replaceSnapshot);
-            } else {
-                String msg = String.format("Unable to install package %s. dependency not found in JcrPackageRegistry %s", def.getId(), packageId);
-                log.error(msg);
-                throw new DependencyException(msg);
+        } finally {
+            for (RegisteredPackage pack: uninstalled) {
+                pack.close();
             }
         }
     }
@@ -890,22 +896,27 @@ public class JcrPackageImpl implements JcrPackage {
         String parentPath = Text.getRelativeParent(path, 1);
         Node folder = packMgr.mkdir(parentPath, true);
         JcrPackage snap = mgr.createNew(folder, id, null, true);
-        JcrPackageDefinitionImpl snapDef = (JcrPackageDefinitionImpl) snap.getDefinition();
-        snapDef.setId(id, false);
-        snapDef.setFilter(filter, false);
-        snapDef.set(JcrPackageDefinition.PN_DESCRIPTION, "Snapshot of package " + myDef.getId().toString(), false);
-        if (acHandling == null) {
-            snapDef.set(JcrPackageDefinition.PN_AC_HANDLING, myDef.get(JcrPackageDefinition.PN_AC_HANDLING), false);
-        } else {
-            snapDef.set(JcrPackageDefinition.PN_AC_HANDLING, acHandling.name(), false);
-        }
-        if (opts.getListener() != null) {
-            opts.getListener().onMessage(ProgressTrackerListener.Mode.TEXT, "Creating snapshot for package " + myDef.getId(), "");
+        try {
+            JcrPackageDefinitionImpl snapDef = (JcrPackageDefinitionImpl) snap.getDefinition();
+            snapDef.setId(id, false);
+            snapDef.setFilter(filter, false);
+            snapDef.set(JcrPackageDefinition.PN_DESCRIPTION, "Snapshot of package " + myDef.getId().toString(), false);
+            if (acHandling == null) {
+                snapDef.set(JcrPackageDefinition.PN_AC_HANDLING, myDef.get(JcrPackageDefinition.PN_AC_HANDLING), false);
+            } else {
+                snapDef.set(JcrPackageDefinition.PN_AC_HANDLING, acHandling.name(), false);
+            }
+            if (opts.getListener() != null) {
+                opts.getListener().onMessage(ProgressTrackerListener.Mode.TEXT, "Creating snapshot for package " + myDef.getId(), "");
+            }
+            packMgr.assemble(snap.getNode(), snapDef, opts.getListener());
+            log.debug("Creating snapshot for {} completed.", id);
+            mgr.dispatch(PackageEvent.Type.SNAPSHOT, id, null);
+            return snap;
+        } catch (RepositoryException|PackageException|IOException e) {
+            snap.close();
+            throw e;
         }
-        packMgr.assemble(snap.getNode(), snapDef, opts.getListener());
-        log.debug("Creating snapshot for {} completed.", id);
-        mgr.dispatch(PackageEvent.Type.SNAPSHOT, id, null);
-        return snap;
     }
 
     /**
@@ -936,6 +947,8 @@ public class JcrPackageImpl implements JcrPackage {
             JcrPackageImpl snap = new JcrPackageImpl(mgr, packNode);
             if (snap.isValid()) {
                 return snap;
+            } else {
+                snap.close();
             }
         }
         return null;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
index b7bef1d..0096d2b 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
@@ -62,7 +62,6 @@ import org.apache.jackrabbit.vault.packaging.registry.PackageRegistry;
 
 import org.apache.jackrabbit.vault.packaging.registry.impl.AbstractPackageRegistry;
 import org.apache.jackrabbit.vault.packaging.registry.impl.JcrPackageRegistry;
-import org.apache.jackrabbit.vault.packaging.registry.impl.JcrRegisteredPackage;
 import org.apache.jackrabbit.vault.util.JcrConstants;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -124,13 +123,7 @@ public class JcrPackageManagerImpl extends PackageManagerImpl implements JcrPack
      */
     @Override
     public JcrPackage open(PackageId id) throws RepositoryException {
-        try {
-            //noinspection resource
-            JcrRegisteredPackage pkg = (JcrRegisteredPackage) registry.open(id);
-            return pkg == null ? null : pkg.getJcrPackage();
-        } catch (IOException e) {
-            throw unwrapRepositoryException(e);
-        }
+        return registry.openJcrPackage(id);
     }
 
     /**
@@ -590,10 +583,11 @@ public class JcrPackageManagerImpl extends PackageManagerImpl implements JcrPack
                             }
                         }
                         pack.close();
-                    } else if (child.hasNodes() && !shallow){
-                        listPackages(child, packages, filter, built, false);
                     } else {
                         pack.close();
+                        if (child.hasNodes() && !shallow) {
+                            listPackages(child, packages, filter, built, false);
+                        }
                     }
                 } catch (RepositoryException e) {
                     pack.close();
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java
index 0c5ac0f..43b3bf5 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/registry/impl/JcrPackageRegistry.java
@@ -255,6 +255,13 @@ public class JcrPackageRegistry extends AbstractPackageRegistry {
         }
     }
 
+    @Nullable
+    public JcrPackage openJcrPackage(@NotNull PackageId id) throws RepositoryException {
+        Node node = getPackageNode(id);
+        return node == null ? null : open(node, false);
+        
+    }
+
     @Override
     public boolean contains(@NotNull PackageId id) throws IOException {
         try {
@@ -288,15 +295,20 @@ public class JcrPackageRegistry extends AbstractPackageRegistry {
      */
     public JcrPackage open(Node node, boolean allowInvalid) throws RepositoryException {
         JcrPackage pack = new JcrPackageImpl(this, node);
-        if (pack.isValid()) {
-            return pack;
-        } else if (allowInvalid
-                && node.isNodeType(JcrConstants.NT_HIERARCHYNODE)
-                && node.hasProperty(JcrConstants.JCR_CONTENT + "/" + JcrConstants.JCR_DATA)) {
-            return pack;
-        } else {
+        try {
+            if (pack.isValid()) {
+                return pack;
+            } else if (allowInvalid
+                    && node.isNodeType(JcrConstants.NT_HIERARCHYNODE)
+                    && node.hasProperty(JcrConstants.JCR_CONTENT + "/" + JcrConstants.JCR_DATA)) {
+                return pack;
+            } else {
+                pack.close();
+                return null;
+            }
+        } catch (RepositoryException e) {
             pack.close();
-            return null;
+            throw e;
         }
     }