Completed implementation of MavenReactorConverter
Implemented the missing unmarshal method; added a test case
Change-Id: I01877db40194431fca99391147a86a2761e38280
Signed-off-by: Michael Ochmann <michael.ochmann@sap.com>
diff --git a/org.eclipse.skalli.maven.test/src/main/java/org/eclipse/skalli/model/ext/maven/internal/MavenReactorConverterTest.java b/org.eclipse.skalli.maven.test/src/main/java/org/eclipse/skalli/model/ext/maven/internal/MavenReactorConverterTest.java
new file mode 100644
index 0000000..681a1fd
--- /dev/null
+++ b/org.eclipse.skalli.maven.test/src/main/java/org/eclipse/skalli/model/ext/maven/internal/MavenReactorConverterTest.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2010-2016 SAP AG and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * SAP AG - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.skalli.model.ext.maven.internal;
+
+import static org.junit.Assert.*;
+
+import java.util.Iterator;
+
+import org.eclipse.skalli.model.ext.maven.MavenModule;
+import org.eclipse.skalli.model.ext.maven.MavenReactor;
+import org.eclipse.skalli.model.ext.maven.MavenReactorProjectExt;
+import org.eclipse.skalli.services.rest.RestReader;
+import org.eclipse.skalli.services.rest.RestWriter;
+import org.eclipse.skalli.testutil.AssertUtils;
+import org.eclipse.skalli.testutil.RestWriterTestBase;
+import org.junit.Test;
+
+@SuppressWarnings("nls")
+public class MavenReactorConverterTest extends RestWriterTestBase {
+
+ private static final String INITIAL_MAVEN_REACTOR_EXTENSION_XML = "<mavenReactor/>";
+ private static final String MAVEN_REACTOR_EXTENSION_XML = "<mavenReactor>"
+ + "<coordinate>"
+ + "<groupId>org.eclipse.skalli</groupId>"
+ + "<artifactId>org.eclipse.skalli</artifactId>"
+ + "<versions><version>2.0</version><version>1.0</version></versions>"
+ + "<packaging>pom</packaging>"
+ + "</coordinate><modules>"
+ + "<module>"
+ + "<groupId>org.eclipse.skalli</groupId>"
+ + "<artifactId>org.eclipse.skalli.module1</artifactId>"
+ + "<versions><version>1.0</version></versions>"
+ + "<packaging>jar</packaging>"
+ + "</module>"
+ + "<module>"
+ + "<groupId>org.eclipse.skalli</groupId>"
+ + "<artifactId>org.eclipse.skalli.module2</artifactId>"
+ + "<versions/>"
+ + "<packaging>jar</packaging>"
+ + "</module>"
+ + "</modules></mavenReactor>";
+ private static final String INITIAL_MAVEN_REACTOR_EXTENSION_JSON = "{}";
+ private static final String MAVEN_REACTOR_EXTENSION_JSON =
+ "{\"coordinate\":{"
+ + "\"groupId\":\"org.eclipse.skalli\","
+ + "\"artifactId\":\"org.eclipse.skalli\","
+ + "\"versions\":[\"2.0\",\"1.0\"],"
+ + "\"packaging\":\"pom\"},"
+ + "\"modules\":[{"
+ + "\"groupId\":\"org.eclipse.skalli\","
+ + "\"artifactId\":\"org.eclipse.skalli.module1\","
+ + "\"versions\":[\"1.0\"],"
+ + "\"packaging\":\"jar\"},{"
+ + "\"groupId\":\"org.eclipse.skalli\","
+ + "\"artifactId\":\"org.eclipse.skalli.module2\","
+ + "\"versions\":[],"
+ + "\"packaging\":\"jar\"}"
+ + "]}";
+
+ @Test
+ public void testMarshalBlankExtensionXML() throws Exception {
+ MavenReactorProjectExt ext = new MavenReactorProjectExt();
+ RestWriter restWriter = getRestWriterXML();
+ marshalMavenReactorExtension(ext, restWriter);
+ assertEqualsXML(INITIAL_MAVEN_REACTOR_EXTENSION_XML);
+ }
+
+ @Test
+ public void testMarshalExtensionXML() throws Exception {
+ MavenReactorProjectExt ext = newMavenReatorExt();
+ RestWriter restWriter = getRestWriterXML();
+ marshalMavenReactorExtension(ext, restWriter);
+ assertEqualsXML(MAVEN_REACTOR_EXTENSION_XML);
+ }
+
+ @Test
+ public void testMarshalBlankExtensionJSON() throws Exception {
+ MavenReactorProjectExt ext = new MavenReactorProjectExt();
+ RestWriter restWriter = getRestWriterJSON();
+ marshalMavenReactorExtension(ext, restWriter);
+ assertEqualsJSON(INITIAL_MAVEN_REACTOR_EXTENSION_JSON);
+ }
+
+ @Test
+ public void testMarshalExtensionJSON() throws Exception {
+ MavenReactorProjectExt ext = newMavenReatorExt();
+ RestWriter restWriter = getRestWriterJSON();
+ marshalMavenReactorExtension(ext, restWriter);
+ assertEqualsJSON(MAVEN_REACTOR_EXTENSION_JSON);
+ }
+
+ @Test
+ public void testUnmarshallInitialJSON() throws Exception {
+ RestReader restReader = getRestReaderJSON(INITIAL_MAVEN_REACTOR_EXTENSION_JSON);
+ MavenReactorProjectExt ext = unmarshalMavenReactorExtension(restReader);
+ MavenReactor mavenReactor = ext.getMavenReactor();
+ assertNull(mavenReactor.getCoordinate());
+ assertTrue(mavenReactor.getModules().isEmpty());
+ }
+
+ @Test
+ public void testUnmarshallJSON() throws Exception {
+ RestReader restReader = getRestReaderJSON(MAVEN_REACTOR_EXTENSION_JSON);
+ MavenReactorProjectExt ext = unmarshalMavenReactorExtension(restReader);
+ MavenReactor mavenReactor = ext.getMavenReactor();
+ MavenModule coordinate = mavenReactor.getCoordinate();
+ assertEquals("org.eclipse.skalli", coordinate.getGroupId());
+ assertEquals("org.eclipse.skalli", coordinate.getArtefactId());
+ assertEquals("pom", coordinate.getPackaging());
+ AssertUtils.assertEquals("getVersions()", coordinate.getVersions(), "1.0", "2.0");
+ Iterator<MavenModule> modules = mavenReactor.getModules().iterator();
+ MavenModule module1 = modules.next();
+ assertEquals("org.eclipse.skalli", module1.getGroupId());
+ assertEquals("org.eclipse.skalli.module1", module1.getArtefactId());
+ assertEquals("jar", module1.getPackaging());
+ AssertUtils.assertEquals("getVersions()", module1.getVersions(), "1.0");
+ MavenModule module2 = modules.next();
+ assertEquals("org.eclipse.skalli", module2.getGroupId());
+ assertEquals("org.eclipse.skalli.module2", module2.getArtefactId());
+ assertEquals("jar", module2.getPackaging());
+ assertTrue(module2.getVersions().isEmpty());
+ assertFalse(modules.hasNext());
+ }
+
+ private MavenReactorProjectExt newMavenReatorExt() {
+ MavenReactorProjectExt ext = new MavenReactorProjectExt();
+ MavenReactor mavenReactor = new MavenReactor();
+ mavenReactor.setCoordinate(newMavenModule("org.eclipse.skalli", "org.eclipse.skalli", "pom", "1.0", "2.0"));
+ mavenReactor.addModule(newMavenModule("org.eclipse.skalli", "org.eclipse.skalli.module1", "jar", "1.0"));
+ mavenReactor.addModule(newMavenModule("org.eclipse.skalli", "org.eclipse.skalli.module2", null, new String[0]));
+ ext.setMavenReactor(mavenReactor);
+ return ext;
+ }
+
+ private MavenModule newMavenModule(String groupId, String artifactId, String packaging, String...versions) {
+ MavenModule module = new MavenModule(groupId, artifactId, packaging);
+ for (String version : versions) {
+ module.addVersion(version);
+ }
+ return module;
+ }
+
+ private void marshalMavenReactorExtension(MavenReactorProjectExt ext, RestWriter restWriter) throws Exception {
+ MavenReactorConverter converter = new MavenReactorConverter();
+ restWriter.object("mavenReactor");
+ converter.marshal(ext, restWriter);
+ restWriter.end();
+ restWriter.flush();
+ }
+
+ private MavenReactorProjectExt unmarshalMavenReactorExtension(RestReader restReader) throws Exception {
+ MavenReactorConverter converter = new MavenReactorConverter();
+ restReader.object();
+ MavenReactorProjectExt ext = converter.unmarshal(restReader);
+ restReader.end();
+ return ext;
+ }
+}
diff --git a/org.eclipse.skalli.maven/src/main/java/org/eclipse/skalli/model/ext/maven/internal/MavenReactorConverter.java b/org.eclipse.skalli.maven/src/main/java/org/eclipse/skalli/model/ext/maven/internal/MavenReactorConverter.java
index fdc897e..978db15 100644
--- a/org.eclipse.skalli.maven/src/main/java/org/eclipse/skalli/model/ext/maven/internal/MavenReactorConverter.java
+++ b/org.eclipse.skalli.maven/src/main/java/org/eclipse/skalli/model/ext/maven/internal/MavenReactorConverter.java
@@ -18,6 +18,7 @@
import org.eclipse.skalli.model.ext.maven.MavenReactor;
import org.eclipse.skalli.model.ext.maven.MavenReactorProjectExt;
import org.eclipse.skalli.services.extension.rest.RestConverterBase;
+import org.eclipse.skalli.services.extension.rest.RestException;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
@@ -37,6 +38,9 @@
private static final String TAG_VERSIONS = "versions"; //$NON-NLS-1$
private static final String TAG_VERSION = "version"; //$NON-NLS-1$
private static final String TAG_COORDINATE = "coordinate"; //$NON-NLS-1$
+ private static final String TAG_NAME= "name"; //$NON-NLS-1$
+ private static final String TAG_DESCRIPTION = "description"; //$NON-NLS-1$
+ private static final String TAG_CLASSIFIER = "classifier"; //$NON-NLS-1$
public MavenReactorConverter() {
super(MavenReactorProjectExt.class);
@@ -66,12 +70,63 @@
}
private void writeCoordinate(MavenModule reactorCoordinate) throws IOException {
+ writer.pair(TAG_NAME, reactorCoordinate.getName());
+ writer.pair(TAG_DESCRIPTION, reactorCoordinate.getDescription());
writer.pair(TAG_GROUPID, reactorCoordinate.getGroupId());
writer.pair(TAG_ARTIFACTID, reactorCoordinate.getArtefactId());
writer.collection(TAG_VERSIONS, TAG_VERSION, reactorCoordinate.getSortedVersions());
- if (StringUtils.isNotBlank(reactorCoordinate.getPackaging())) {
- writer.pair(TAG_PACKAGING, reactorCoordinate.getPackaging());
+ writer.pair(TAG_PACKAGING, reactorCoordinate.getPackaging());
+ writer.pair(TAG_CLASSIFIER, reactorCoordinate.getClassifier());
+ }
+
+ @Override
+ protected MavenReactorProjectExt unmarshal() throws RestException, IOException {
+ return unmarshal(new MavenReactorProjectExt());
+ }
+
+ private MavenReactorProjectExt unmarshal(MavenReactorProjectExt ext) throws RestException, IOException {
+ MavenReactor mavenReactor = new MavenReactor();
+ ext.setMavenReactor(mavenReactor);
+ while (reader.hasMore()) {
+ if (reader.isKey(TAG_COORDINATE)) {
+ mavenReactor.setCoordinate(unmarshalMavenModule());
+ } else if (reader.isKey(TAG_MODULES)) {
+ reader.array(TAG_MODULE);
+ while (reader.hasMore()) {
+ mavenReactor.addModule(unmarshalMavenModule());
+ }
+ reader.end();
+ } else {
+ reader.skip();
+ }
}
+ return ext;
+ }
+
+ private MavenModule unmarshalMavenModule() throws RestException, IOException {
+ MavenModule module = new MavenModule();
+ reader.object();
+ while (reader.hasMore()) {
+ if (reader.isKey(TAG_NAME)) {
+ module.setName(reader.valueString());
+ } else if (reader.isKey(TAG_DESCRIPTION)) {
+ module.setDescription(reader.valueString());
+ } else if (reader.isKey(TAG_GROUPID)) {
+ module.setGroupId(reader.valueString());
+ } else if (reader.isKey(TAG_ARTIFACTID)) {
+ module.setArtefactId(reader.valueString());
+ } else if (reader.isKey(TAG_VERSIONS)) {
+ module.getVersions().addAll(reader.collection(TAG_VERSION));
+ } else if (reader.isKey(TAG_PACKAGING)) {
+ module.setPackaging(reader.valueString());
+ } else if (reader.isKey(TAG_CLASSIFIER)) {
+ module.setClassifier(reader.valueString());
+ } else {
+ reader.skip();
+ }
+ }
+ reader.end();
+ return module;
}
@Deprecated