PeopleConverter#unmarshal()
Change-Id: I6914c0e7e15433b700b88f7a61bfed60c8ab896a
Signed-off-by: Michael Ochmann <michael.ochmann@sap.com>
diff --git a/org.eclipse.skalli.core.test/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverterTest.java b/org.eclipse.skalli.core.test/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverterTest.java
index 3541127..654c978 100644
--- a/org.eclipse.skalli.core.test/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverterTest.java
+++ b/org.eclipse.skalli.core.test/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverterTest.java
@@ -10,21 +10,41 @@
*******************************************************************************/
package org.eclipse.skalli.core.extension.people;
+import static org.junit.Assert.assertTrue;
+
import org.eclipse.skalli.model.Member;
import org.eclipse.skalli.model.ext.commons.PeopleExtension;
+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 PeopleConverterTest extends RestWriterTestBase {
+ private static final String INITIAL_PEOPLE_EXTENSION_XML = "<people><leads/><members/></people>";
+ private static final String PEOPLE_EXTENSION_XML = "<people>"
+ + "<leads>"
+ + "<lead><userId>a</userId><link rel=\"user\" href=\"http://example.org:8080/api/users/a\"/></lead>"
+ + "<lead><userId>b</userId><link rel=\"user\" href=\"http://example.org:8080/api/users/b\"/></lead>"
+ + "</leads>"
+ + "<members>"
+ + "<member><userId>c</userId><link rel=\"user\" href=\"http://example.org:8080/api/users/c\"/></member>"
+ + "</members></people>";
+ private static final String INITIAL_PEOPLE_EXTENSION_JSON = "{\"leads\":[],\"members\":[]}";
+ private static final String PEOPLE_EXTENSION_JSON = "{\"leads\":["
+ + "{\"userId\":\"a\",\"link\":{\"rel\":\"user\",\"href\":\"http://example.org:8080/api/users/a\"}},"
+ + "{\"userId\":\"b\",\"link\":{\"rel\":\"user\",\"href\":\"http://example.org:8080/api/users/b\"}}],"
+ + "\"members\":["
+ + "{\"userId\":\"c\",\"link\":{\"rel\":\"user\",\"href\":\"http://example.org:8080/api/users/c\"}}]}";
+
@Test
public void testMarshalBlankExtensionXML() throws Exception {
PeopleExtension people = new PeopleExtension();
RestWriter restWriter = getRestWriterXML();
marshalPeopleExtension(people, restWriter);
- assertEqualsXML("<people><leads/><members/></people>");
+ assertEqualsXML(INITIAL_PEOPLE_EXTENSION_XML);
}
@Test
@@ -32,14 +52,7 @@
PeopleExtension people = newPeopleExtension();
RestWriter restWriter = getRestWriterXML();
marshalPeopleExtension(people, restWriter);
- assertEqualsXML("<people>"
- + "<leads>"
- + "<lead><userId>a</userId><link rel=\"user\" href=\"http://example.org:8080/api/users/a\"/></lead>"
- + "<lead><userId>b</userId><link rel=\"user\" href=\"http://example.org:8080/api/users/b\"/></lead>"
- + "</leads>"
- + "<members>"
- + "<member><userId>c</userId><link rel=\"user\" href=\"http://example.org:8080/api/users/c\"/></member>"
- + "</members></people>");
+ assertEqualsXML(PEOPLE_EXTENSION_XML);
}
@Test
@@ -47,7 +60,7 @@
PeopleExtension people = new PeopleExtension();
RestWriter restWriter = getRestWriterJSON();
marshalPeopleExtension(people, restWriter);
- assertEqualsJSON("{\"leads\":[],\"members\":[]}");
+ assertEqualsJSON(INITIAL_PEOPLE_EXTENSION_JSON);
}
@Test
@@ -55,11 +68,23 @@
PeopleExtension people = newPeopleExtension();
RestWriter restWriter = getRestWriterJSON();
marshalPeopleExtension(people, restWriter);
- assertEqualsJSON("{\"leads\":["
- + "{\"userId\":\"a\",\"link\":{\"rel\":\"user\",\"href\":\"http://example.org:8080/api/users/a\"}},"
- + "{\"userId\":\"b\",\"link\":{\"rel\":\"user\",\"href\":\"http://example.org:8080/api/users/b\"}}],"
- + "\"members\":["
- + "{\"userId\":\"c\",\"link\":{\"rel\":\"user\",\"href\":\"http://example.org:8080/api/users/c\"}}]}");
+ assertEqualsJSON(PEOPLE_EXTENSION_JSON);
+ }
+
+ @Test
+ public void testUnmarshallInitialJSON() throws Exception {
+ RestReader restReader = getRestReaderJSON(INITIAL_PEOPLE_EXTENSION_JSON);
+ PeopleExtension people = unmarshalPeopleExtension(restReader);
+ assertTrue(people.getLeads().isEmpty());
+ assertTrue(people.getMembers().isEmpty());
+ }
+
+ @Test
+ public void testUnmarshallJSON() throws Exception {
+ RestReader restReader = getRestReaderJSON(PEOPLE_EXTENSION_JSON);
+ PeopleExtension people = unmarshalPeopleExtension(restReader);
+ AssertUtils.assertEquals("getLeads", people.getLeads(), new Member("a"), new Member("b"));
+ AssertUtils.assertEquals("getMembers", people.getMembers(), new Member("c"));
}
private PeopleExtension newPeopleExtension() {
@@ -77,4 +102,12 @@
restWriter.end();
restWriter.flush();
}
+
+ private PeopleExtension unmarshalPeopleExtension(RestReader restReader) throws Exception {
+ PeopleConverter converter = new PeopleConverter();
+ restReader.object();
+ PeopleExtension people = converter.unmarshal(restReader);
+ restReader.end();
+ return people;
+ }
}
diff --git a/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverter.java b/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverter.java
index 55d910e..17313ef 100644
--- a/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverter.java
+++ b/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/extension/people/PeopleConverter.java
@@ -11,10 +11,13 @@
package org.eclipse.skalli.core.extension.people;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import org.eclipse.skalli.model.Member;
import org.eclipse.skalli.model.ext.commons.PeopleExtension;
import org.eclipse.skalli.services.extension.rest.RestConverterBase;
+import org.eclipse.skalli.services.extension.rest.RestException;
import org.eclipse.skalli.services.extension.rest.RestUtils;
import com.thoughtworks.xstream.converters.MarshallingContext;
@@ -56,6 +59,50 @@
writer.end();
}
+ @Override
+ protected PeopleExtension unmarshal() throws RestException, IOException {
+ return unmarshal(new PeopleExtension());
+ }
+
+ @SuppressWarnings("nls")
+ private PeopleExtension unmarshal(PeopleExtension ext) throws RestException, IOException {
+ while (reader.hasMore()) {
+ if (reader.isKey("leads")) {
+ ext.getLeads().addAll(readMembers("lead"));
+ } else if (reader.isKey("members")) {
+ ext.getMembers().addAll(readMembers("member"));
+ }
+ }
+ return ext;
+ }
+
+ private List<Member> readMembers(String itemKey) throws RestException, IOException {
+ List<Member> members = new ArrayList<Member>();
+ reader.array(itemKey);
+ while (reader.hasMore()) {
+ Member member = readMember();
+ if (member != null) {
+ members.add(member);
+ }
+ }
+ reader.end();
+ return members;
+ }
+
+ private Member readMember() throws RestException, IOException {
+ Member member = null;
+ reader.object();
+ while (reader.hasMore()) {
+ if (reader.isKey("userId")) { //$NON-NLS-1$
+ member = new Member(reader.valueString());
+ } else {
+ reader.skip();
+ }
+ }
+ reader.end();
+ return member;
+ }
+
@Deprecated
public PeopleConverter(String host) {
super(PeopleExtension.class, "people", host); //$NON-NLS-1$