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;
}
}