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 2019/07/18 02:15:43 UTC
svn commit: r1863240 - in /jackrabbit/commons/filevault/trunk/vault-core/src:
main/java/org/apache/jackrabbit/vault/packaging/impl/
main/java/org/apache/jackrabbit/vault/packaging/registry/impl/
test/java/org/apache/jackrabbit/vault/packaging/registry/...
Author: tripod
Date: Thu Jul 18 02:15:42 2019
New Revision: 1863240
URL: http://svn.apache.org/viewvc?rev=1863240&view=rev
Log:
JCRVLT-339 - Add FSPackageRegistry support for hollow packages (closes #50)
Added:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/HollowVaultPackage.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackageTest.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package-truncated.zip
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package.zip
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
Added: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/HollowVaultPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/HollowVaultPackage.java?rev=1863240&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/HollowVaultPackage.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/HollowVaultPackage.java Thu Jul 18 02:15:42 2019
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.vault.packaging.impl;
+
+import java.io.File;
+import java.util.Properties;
+
+import javax.jcr.Session;
+
+import org.apache.jackrabbit.vault.fs.config.MetaInf;
+import org.apache.jackrabbit.vault.fs.io.Archive;
+import org.apache.jackrabbit.vault.fs.io.ImportOptions;
+import org.apache.jackrabbit.vault.packaging.PackageException;
+import org.apache.jackrabbit.vault.packaging.PackageProperties;
+import org.apache.jackrabbit.vault.packaging.VaultPackage;
+
+/**
+ * Implements a vault package that is a hollow representation of a file vault
+ * export i.e. when original zipped representation has been truncated.
+ */
+public class HollowVaultPackage extends PackagePropertiesImpl implements VaultPackage {
+
+ private Properties properties;
+
+ public HollowVaultPackage(Properties properties) {
+ this.properties = properties;
+ }
+
+ @Override
+ public boolean isValid() {
+ return false;
+ }
+
+ @Override
+ public boolean isClosed() {
+ return true;
+ }
+
+ @Override
+ public MetaInf getMetaInf() {
+ return null;
+ }
+
+ @Override
+ public long getSize() {
+ return -1;
+ }
+
+ @Override
+ public void extract(Session session, ImportOptions opts) throws PackageException {
+ throw new PackageException("extract operation not supported by hollow package");
+ }
+
+ @Override
+ public File getFile() {
+ return null;
+ }
+
+ @Override
+ public void close() {
+ }
+
+ @Override
+ public Archive getArchive() {
+ return null;
+ }
+
+ @Override
+ public PackageProperties getProperties() {
+ return this;
+ }
+
+ @Override
+ protected Properties getPropertiesMap() {
+ return properties;
+ }
+}
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=1863240&r1=1863239&r2=1863240&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 Thu Jul 18 02:15:42 2019
@@ -57,6 +57,7 @@ import org.apache.jackrabbit.vault.packa
import org.apache.jackrabbit.vault.packaging.events.PackageEvent;
import org.apache.jackrabbit.vault.packaging.events.PackageEvent.Type;
import org.apache.jackrabbit.vault.packaging.events.impl.PackageEventDispatcher;
+import org.apache.jackrabbit.vault.packaging.impl.HollowVaultPackage;
import org.apache.jackrabbit.vault.packaging.impl.PackagePropertiesImpl;
import org.apache.jackrabbit.vault.packaging.impl.ZipVaultPackage;
import org.apache.jackrabbit.vault.packaging.registry.DependencyReport;
@@ -260,20 +261,28 @@ public class FSPackageRegistry extends A
}
/**
- * Opens the package of the given file.
- * @param pkg Package file.
+ * Opens the package of a file with the given Id.
+ * @param id The Id of package file.
* @return the package
* @throws IOException if an I/O error occurrs.
*/
@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);
- throw e;
+ protected VaultPackage openPackageFile(@Nonnull PackageId id) throws IOException {
+ File pkg = getPackageFile(id);
+ if (pkg == null) {
+ throw new IOException("Could not find package file for id " + id);
}
+ if (pkg.exists() && pkg.length() > 0) {
+ try {
+ return new ZipVaultPackage(pkg, false, true);
+ } catch (IOException e) {
+ log.error("Cloud not open file {} as ZipVaultPackage.", pkg.getPath(), e);
+ throw e;
+ }
+ } else {
+ return new HollowVaultPackage(getInstallState(id).getProperties());
+ }
}
/**
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=1863240&r1=1863239&r2=1863240&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 Thu Jul 18 02:15:42 2019
@@ -17,7 +17,6 @@
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;
@@ -47,7 +46,6 @@ public class FSRegisteredPackage impleme
private VaultPackage vltPkg = null;
private PackageId id;
- private Path filepath;
private PackageProperties packageProperties;
private Dependency[] dependencies;
private WorkspaceFilter filter;
@@ -55,7 +53,6 @@ public class FSRegisteredPackage impleme
public FSRegisteredPackage(FSPackageRegistry registry, FSInstallState installState) throws IOException {
this.id = installState.getPackageId();
- this.filepath = installState.getFilePath();
this.dependencies = installState.getDependencies().toArray(new Dependency[installState.getDependencies().size()]);
this.filter = installState.getFilter();
this.packageProperties = new FsPackageProperties(installState);
@@ -73,7 +70,7 @@ public class FSRegisteredPackage impleme
@Override
public VaultPackage getPackage() throws IOException {
if (this.vltPkg == null) {
- this.vltPkg = registry.open(filepath.toFile());
+ this.vltPkg = registry.openPackageFile(getId());
}
return this.vltPkg;
}
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackageTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackageTest.java?rev=1863240&view=auto
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackageTest.java (added)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackageTest.java Thu Jul 18 02:15:42 2019
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.vault.packaging.registry.impl;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.vault.packaging.PackageId;
+import org.apache.jackrabbit.vault.packaging.VaultPackage;
+import org.apache.jackrabbit.vault.packaging.impl.HollowVaultPackage;
+import org.apache.jackrabbit.vault.packaging.impl.ZipVaultPackage;
+import org.apache.jackrabbit.vault.packaging.registry.RegisteredPackage;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class FSRegisteredPackageTest {
+
+ private static final PackageId DUMMY_ID = new PackageId("someGroup", "someName", "someVersion");
+
+ private File getTempFile(String name) throws IOException {
+ InputStream in = getClass().getResourceAsStream(name);
+ File tmpFile = File.createTempFile("vaultpack", ".zip");
+ FileOutputStream out = FileUtils.openOutputStream(tmpFile);
+ IOUtils.copy(in, out);
+ in.close();
+ out.close();
+ return tmpFile;
+ }
+
+ private VaultPackage safeLoadVaultPackage(File packageFile) throws IOException {
+ if (packageFile.exists() && packageFile.length() > 0) {
+ return new ZipVaultPackage(packageFile, false, true);
+ } else {
+ return new HollowVaultPackage(new Properties());
+ }
+ }
+
+ private FSPackageRegistry newRegistry(File packageFile) throws IOException {
+ FSPackageRegistry registry = Mockito.mock(FSPackageRegistry.class);
+ Mockito.when(registry.openPackageFile(DUMMY_ID)).thenReturn(safeLoadVaultPackage(packageFile));
+ return registry;
+ }
+
+ private FSInstallState newInstallState(File packageFile) throws IOException {
+ FSInstallState installState = Mockito.mock(FSInstallState.class);
+ Mockito.when(installState.getFilePath()).thenReturn(packageFile.toPath());
+ Mockito.when(installState.getPackageId()).thenReturn(DUMMY_ID);
+ return installState;
+ }
+
+ @Test
+ public void testGetPackageFromNonTruncatedFile() throws IOException {
+ File packageFile = getTempFile("test-package.zip");
+ RegisteredPackage regPack = new FSRegisteredPackage(newRegistry(packageFile), newInstallState(packageFile));
+ try {
+ VaultPackage vltPack = regPack.getPackage();
+ assertNotNull(vltPack);
+ assertNotNull(vltPack.getArchive());
+ } catch (IOException e) {
+ fail("should not throw any exception, but thrown: " + e.getMessage());
+ } finally {
+ regPack.close();
+ }
+ }
+
+ @Test
+ public void testGetPackageFromTruncatedFile() throws IOException {
+ File packageFile = getTempFile("test-package-truncated.zip");
+ RegisteredPackage regPack = new FSRegisteredPackage(newRegistry(packageFile), newInstallState(packageFile));
+ try {
+ VaultPackage vltPack = regPack.getPackage();
+ assertNotNull(vltPack);
+ assertNull(vltPack.getArchive());
+ } catch (IOException e) {
+ fail("should not throw any exception, but thrown: " + e.getMessage());
+ } finally {
+ regPack.close();
+ }
+ }
+
+}
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package-truncated.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package-truncated.zip?rev=1863240&view=auto
==============================================================================
(empty)
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package.zip?rev=1863240&view=auto
==============================================================================
Binary files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package.zip (added) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/registry/impl/test-package.zip Thu Jul 18 02:15:42 2019 differ