From 465029c738c6e265524b24af945d420e9a540288 Mon Sep 17 00:00:00 2001 From: tosmers Date: Wed, 9 Mar 2016 16:50:26 +0000 Subject: [PATCH] main structure of the AbstractMarshaller is done and contains allready the case for XML. Now it just has to be tested... git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3914 8810af33-2d31-482b-a856-94f89814c4df --- ccm-core/pom.xml | 9 +- .../portation/AbstractMarshaller.java | 160 ++++++++++++------ .../org/libreccm/portation/Marshaller.java | 2 +- .../docrepo/AbstractResourceManager.java | 17 +- .../docrepo/AbstractResourceMarshaller.java | 9 + .../docrepo/AbstractResourceRepository.java | 3 +- pom.xml | 17 +- 7 files changed, 145 insertions(+), 72 deletions(-) diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml index d356b2892..b33757784 100644 --- a/ccm-core/pom.xml +++ b/ccm-core/pom.xml @@ -200,12 +200,19 @@ com.fasterxml.jackson.core jackson-databind + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + com.fasterxml.jackson.dataformat jackson-dataformat-csv - + + org.codehaus.woodstox + woodstox-core-asl + diff --git a/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java b/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java index 8f999c43d..e56f8c913 100644 --- a/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java +++ b/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java @@ -18,10 +18,18 @@ */ package org.libreccm.portation; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.apache.log4j.Logger; import org.libreccm.core.Identifiable; import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.util.ArrayList; import java.util.List; /** @@ -39,31 +47,33 @@ public abstract class AbstractMarshaller { private static final Logger log = Logger.getLogger(AbstractMarshaller.class); private Format format; + private String filename; - private File exportFile; - private List importFiles; - - // CSV specifics + // XML specifics + ObjectMapper xmlMapper; // JSON specifics - // XML specifics + // CSV specifics - /** - * - * @param format - */ - private void init(final Format format) { + + + public void init(final Format format, String baseFileName) { this.format = format; + this.filename = baseFileName; switch (this.format) { - case CSV: + case XML: + // for additional configuration + JacksonXmlModule module = new JacksonXmlModule(); + module.setDefaultUseWrapper(false); + xmlMapper = new XmlMapper(module); break; case JSON: break; - case XML: + case CSV: break; default: @@ -71,57 +81,101 @@ public abstract class AbstractMarshaller { } } - public void init(final Format format, final String filename) { - exportFile = new File(filename); - init(format); - } - public void init(final Format format, final List filenames) { - filenames.forEach(fname -> importFiles.add(new File(fname))); - init(format); - } + public void exportList(final List exportList) { + File file = new File(filename + "_" + getObjectClass().toString()); + FileWriter fileWriter = null; - - /** - * - * @param exportObjects List of {@code T}-tpyed objects being exported - */ - public void exportEntities(final List exportObjects) { - switch (format) { - case CSV: - break; - - case JSON: - break; - - case XML: - break; - - default: - break; + try { + fileWriter = new FileWriter(file); + } catch (IOException e) { + log.error(String.format("Unable open a fileWriter for the file " + + "with the name %s.", file.getName())); } + if (fileWriter != null) { + for (I object : exportList) { + String line = null; + + switch (format) { + case XML: + try { + line = xmlMapper.writeValueAsString(object); + } catch (JsonProcessingException e) { + log.error(String.format("Unable to write object %s " + + "as XML string.", object.getUuid())); + } + break; + + case JSON: + break; + + case CSV: + break; + + default: + break; + } + + if (line != null) { + try { + fileWriter.write(line); + fileWriter.write(System.getProperty("line.separator")); + } catch (IOException e) { + log.error(String.format("Unable to write to file with the" + + " name %s.", file.getName())); + } + } + } + } } - /** - * - * @return List of {@code T}-typed objects being imported - */ + protected abstract Class getObjectClass(); + protected abstract void insertObjectIntoDB(I object); + public List importEntities() { - switch (format) { - case CSV: - break; + List objects = new ArrayList<>(); - case JSON: - break; + File file = new File(filename); + List lines = null; - case XML: - break; - - default: - break; + try { + lines = Files.readAllLines(file.toPath()); + } catch (IOException e) { + log.error(String.format("Unable to read lines of the file with " + + "name %s.", file.getName())); } - return null; + + if (lines != null) { + for (String line : lines) { + I object = null; + + switch (format) { + case XML: + try { + object = xmlMapper.readValue(line, getObjectClass()); + } catch (IOException e) { + log.error(String.format("Unable to read object " + + "from XML string:\n \"%s\"", line)); + } + break; + + case JSON: + break; + + case CSV: + break; + + default: + break; + } + + objects.add(object); + insertObjectIntoDB(object); + } + } + + return objects; } } diff --git a/ccm-core/src/main/java/org/libreccm/portation/Marshaller.java b/ccm-core/src/main/java/org/libreccm/portation/Marshaller.java index 29ec9a98c..367c8c4c1 100644 --- a/ccm-core/src/main/java/org/libreccm/portation/Marshaller.java +++ b/ccm-core/src/main/java/org/libreccm/portation/Marshaller.java @@ -131,7 +131,7 @@ public class Marshaller { iterator.next(); marshaller.init(format, filename); - marshaller.exportEntities(list); + marshaller.exportList(list); } } diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceManager.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceManager.java index 38ac6950e..6bab73dc7 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceManager.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceManager.java @@ -18,8 +18,6 @@ */ package org.libreccm.docrepo; -import org.apache.oro.text.perl.Perl5Util; - import javax.activation.MimetypesFileTypeMap; import javax.inject.Inject; @@ -98,22 +96,23 @@ public abstract class AbstractResourceManager { * @return true for a system-valid resource name, otherwise false */ public boolean isValidNewResourceName(String name, T resource) { - Perl5Util perl5Util = new Perl5Util(); - final String INVALID_START_PATTERN = "/^[.]+/"; final String INVALID_NAME_PATTERN = "/[^a-zA-Z0-9\\_\\.\\-\\ ]+/"; final String EXTENSION_PATTERN = "/^([^\\.].*)(\\.\\w+)$/"; // adds an extension if non-existent - if (!perl5Util.match(EXTENSION_PATTERN, name)) { - if (perl5Util.match(EXTENSION_PATTERN, resource.getName())) { - name += perl5Util.group(2); + if (name.matches(EXTENSION_PATTERN)) { + if (resource.getName().matches(EXTENSION_PATTERN)) { + // TODO: what to do here? + //name += perl5Util.group(2); + name.isEmpty(); } } + // checks pattern of the name - boolean validName = !(perl5Util.match(INVALID_START_PATTERN, name) || - perl5Util.match(INVALID_NAME_PATTERN, name)); + boolean validName = !(name.matches(INVALID_START_PATTERN) || name + .matches(INVALID_NAME_PATTERN)); // checks duplication of the name; database access (mind performance) validName &= (fileRepository.findByName(name).isEmpty() && diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceMarshaller.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceMarshaller.java index e2ff30e35..957241734 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceMarshaller.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceMarshaller.java @@ -28,4 +28,13 @@ import org.libreccm.portation.Marshals; @Marshals(AbstractResource.class) public class AbstractResourceMarshaller extends AbstractMarshaller { + @Override + protected Class getObjectClass() { + return null; + } + + @Override + protected void insertObjectIntoDB(AbstractResource object) { + + } } diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceRepository.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceRepository.java index 839ff9588..06e060fb1 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceRepository.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/AbstractResourceRepository.java @@ -38,8 +38,7 @@ import java.util.stream.Collectors; * @version 01/10/2015 */ public abstract class AbstractResourceRepository - extends - AbstractAuditedEntityRepository { + extends AbstractAuditedEntityRepository { protected Class classOfT; diff --git a/pom.xml b/pom.xml index 9058c1bde..a45ce0c0e 100644 --- a/pom.xml +++ b/pom.xml @@ -426,12 +426,6 @@ 1.2 - - com.opencsv - opencsv - 3.6 - - com.fasterxml.jackson.core jackson-core @@ -447,11 +441,22 @@ jackson-databind 2.7.0 + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.7.0 + com.fasterxml.jackson.dataformat jackson-dataformat-csv 2.7.0 + + + org.codehaus.woodstox + woodstox-core-asl + 4.4.1 +