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
+