fix/MNT-18001_ignore_version_label_in_metadata (#28)

MNT-18001: Presence of versionLabel in metadata file throws error in bulk importer
   - remove versionLabel property from the list of properties loaded from metadata files
   - add tests for bulkimport file with versionLabel present in metadata files
This commit is contained in:
CodrinChirica
2017-10-06 13:18:10 +03:00
committed by GitHub
parent 1d56cf1b7c
commit 85e712368e
9 changed files with 144 additions and 16 deletions

View File

@@ -33,8 +33,11 @@ import java.io.Serializable;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.alfresco.repo.bulkimport.MetadataLoader;
import org.alfresco.repo.bulkimport.impl.FileUtils;
@@ -97,6 +100,15 @@ public final class XmlPropertiesFileMetadataLoader extends AbstractMapBasedMetad
{
private final static Log log = LogFactory.getLog(XmlPropertiesFileMetadataLoader.class);
private final static String METADATA_FILE_EXTENSION = "properties.xml";
// MNT-18001
// list of properties to be ignored from the metadata files
private final Set<String> protectedProperties = new HashSet<>();
public void setProtectedProperties(List<String> protectedProperties)
{
this.protectedProperties.clear();
this.protectedProperties.addAll(protectedProperties);
}
public XmlPropertiesFileMetadataLoader(final ServiceRegistry serviceRegistry)
{
@@ -121,6 +133,9 @@ public final class XmlPropertiesFileMetadataLoader extends AbstractMapBasedMetad
Properties props = new Properties();
props.loadFromXML(new BufferedInputStream(Files.newInputStream(metadataFile)));
result = new HashMap<String,Serializable>((Map)props);
// MNT-18001
removeProtectedProperties(result);
}
catch (final IOException ioe)
{
@@ -130,4 +145,13 @@ public final class XmlPropertiesFileMetadataLoader extends AbstractMapBasedMetad
return(result);
}
/**
* Removes protected properties from the map supplied
*
* @param props Map with the properties from metadata file
*/
private void removeProtectedProperties(Map<String,Serializable> props)
{
props.keySet().removeAll(protectedProperties);
}
}

View File

@@ -28,6 +28,11 @@
class="org.alfresco.repo.bulkimport.metadataloaders.XmlPropertiesFileMetadataLoader"
lazy-init="true">
<constructor-arg index="0" ref="ServiceRegistry" />
<property name="protectedProperties">
<list>
<value>cm:versionLabel</value>
</list>
</property>
</bean>
<bean id="bfsiContentDataFactory" class="org.alfresco.repo.bulkimport.impl.FilesystemContentDataFactory">

View File

@@ -699,6 +699,39 @@ public class BulkImportTest extends AbstractBulkImportTests
Files.deleteIfExists(dest);
}
/**
* MNT-18001: Presence of versionLabel in metadata file throws error in bulk importer
*/
@Test
public void testImportFilesWithVersionLabel() throws Throwable
{
txn = transactionService.getUserTransaction();
txn.begin();
// Get metadata file with versionLabel property
NodeRef folderNode = topLevelFolder.getNodeRef();
NodeImporter nodeImporter = streamingNodeImporterFactory.getNodeImporter(ResourceUtils.getFile("classpath:bulkimport6"));
// Set parameters for bulk import: Target space, Disable rule processing, Replace existing files, Batch size:1, Number of threads:1
BulkImportParameters bulkImportParameters = new BulkImportParameters();
bulkImportParameters.setTarget(folderNode);
bulkImportParameters.setDisableRulesService(true);
bulkImportParameters.setExistingFileMode(BulkImportParameters.ExistingFileMode.REPLACE);
bulkImportParameters.setBatchSize(1);
bulkImportParameters.setNumThreads(1);
bulkImporter.bulkImport(bulkImportParameters, nodeImporter);
List<FileInfo> files = getFiles(folderNode, null);
assertNotNull(files);
FileInfo file = files.get(0);
assertNotNull(file);
VersionHistory history = versionService.getVersionHistory(file.getNodeRef());
assertEquals(1, bulkImporter.getStatus().getNumberOfContentNodesCreated());
assertEquals("Imported file should have 3 versions:", 3, history.getAllVersions().size());
}
/**
* Simplifies calling {@ResourceUtils.getFile} so that a {@link RuntimeException}
* is thrown rather than a checked {@link FileNotFoundException} exception.

Binary file not shown.

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="type">cm:content</entry>
<entry key="aspects">cm:versionable,cm:titled,cm:auditable,sys:referenceable,sys:localized,cm:author</entry>
<entry key="cm:creator">admin</entry>
<entry key="cm:autoVersion">true</entry>
<entry key="cm:title"></entry>
<entry key="cm:modifier">admin</entry>
<entry key="cm:versionType">MAJOR</entry>
<entry key="cm:created">2017-02-24T01:17:47.670-05:00</entry>
<entry key="cm:versionLabel">23.0</entry>
<entry key="cm:autoVersionOnUpdateProps">false</entry>
<entry key="sys:store-protocol">workspace</entry>
<entry key="sys:store-identifier">SpacesStore</entry>
<entry key="cm:description"></entry>
<entry key="cm:name">doc.xlsx</entry>
<entry key="cm:author">admin</entry>
<entry key="cm:initialVersion">true</entry>
<entry key="sys:locale">en_GB</entry>
<entry key="cm:modified">2017-02-24T01:25:19.626-05:00</entry>
</properties>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="type">cm:content</entry>
<entry key="aspects">cm:versionable,cm:titled,cm:auditable,sys:referenceable,sys:localized,cm:author</entry>
<entry key="cm:creator">admin</entry>
<entry key="cm:autoVersion">true</entry>
<entry key="cm:title"></entry>
<entry key="cm:modifier">admin</entry>
<entry key="cm:versionType">MAJOR</entry>
<entry key="cm:created">2017-02-24T01:17:47.670-05:00</entry>
<entry key="cm:versionLabel">23.1</entry>
<entry key="cm:autoVersionOnUpdateProps">false</entry>
<entry key="sys:store-protocol">workspace</entry>
<entry key="sys:store-identifier">SpacesStore</entry>
<entry key="cm:description"></entry>
<entry key="cm:name">doc.xlsx</entry>
<entry key="cm:author">admin</entry>
<entry key="cm:initialVersion">true</entry>
<entry key="sys:locale">en_GB</entry>
<entry key="cm:modified">2017-02-24T01:17:48.858-05:00</entry>
</properties>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="type">cm:content</entry>
<entry key="aspects">cm:versionable,cm:titled,cm:auditable,sys:referenceable,sys:localized,cm:author</entry>
<entry key="cm:creator">admin</entry>
<entry key="cm:autoVersion">true</entry>
<entry key="cm:title"></entry>
<entry key="cm:modifier">admin</entry>
<entry key="cm:versionType">MAJOR</entry>
<entry key="cm:created">2017-02-24T01:17:47.670-05:00</entry>
<entry key="cm:versionLabel">23.2</entry>
<entry key="cm:autoVersionOnUpdateProps">false</entry>
<entry key="sys:store-protocol">workspace</entry>
<entry key="sys:store-identifier">SpacesStore</entry>
<entry key="cm:description"></entry>
<entry key="cm:name">doc.xlsx</entry>
<entry key="cm:author">admin</entry>
<entry key="cm:initialVersion">true</entry>
<entry key="sys:locale">en_GB</entry>
<entry key="cm:modified">2017-02-24T01:22:37.661-05:00</entry>
</properties>

Binary file not shown.

Binary file not shown.