Repository: incubator-streams Updated Branches: refs/heads/master eec3aa997 -> 42d0ab33f
STREAMS-202 | Built a GooglePlusTypeConverter, the corresponding deserializer and all necessary tests Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/eba9aefd Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/eba9aefd Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/eba9aefd Branch: refs/heads/master Commit: eba9aefd77273c8290324ac33370aa250da34c10 Parents: eec3aa9 Author: Robert Douglas <[email protected]> Authored: Tue Oct 28 12:02:51 2014 -0500 Committer: Robert Douglas <[email protected]> Committed: Tue Oct 28 12:02:51 2014 -0500 ---------------------------------------------------------------------- .../processor/GooglePlusTypeConverter.java | 7 + .../util/GPlusPersonDeserializer.java | 7 + .../serializer/util/GooglePlusActivityUtil.java | 7 + .../google/gplus/GooglePlusPersonSerDeTest.java | 139 +++++++++++++++++++ .../processor/GooglePlusTypeConverterTest.java | 7 + .../test/resources/google_plus_person_jsons.txt | 0 6 files changed, 167 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/eba9aefd/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java ---------------------------------------------------------------------- diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java new file mode 100644 index 0000000..f23ca17 --- /dev/null +++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java @@ -0,0 +1,7 @@ +package com.google.gplus.processor; + +/** + * Created by rdouglas on 10/27/14. + */ +public class GooglePlusTypeConverter { +} http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/eba9aefd/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GPlusPersonDeserializer.java ---------------------------------------------------------------------- diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GPlusPersonDeserializer.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GPlusPersonDeserializer.java new file mode 100644 index 0000000..48fed99 --- /dev/null +++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GPlusPersonDeserializer.java @@ -0,0 +1,7 @@ +package com.google.gplus.serializer.util; + +/** + * Created by rdouglas on 10/28/14. + */ +public class GPlusPersonDeserializer { +} http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/eba9aefd/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java ---------------------------------------------------------------------- diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java new file mode 100644 index 0000000..a3150c8 --- /dev/null +++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java @@ -0,0 +1,7 @@ +package com.google.gplus.serializer.util; + +/** + * Created by rdouglas on 10/27/14. + */ +public class GooglePlusActivityUtil { +} http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/eba9aefd/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/GooglePlusPersonSerDeTest.java ---------------------------------------------------------------------- diff --git a/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/GooglePlusPersonSerDeTest.java b/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/GooglePlusPersonSerDeTest.java new file mode 100644 index 0000000..22cc340 --- /dev/null +++ b/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/GooglePlusPersonSerDeTest.java @@ -0,0 +1,139 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package com.google.gplus; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.node.IntNode; +import com.google.api.client.util.Lists; +import com.google.api.services.plus.model.Person; +import com.google.gplus.serializer.util.GooglePlusActivityUtil; +import org.apache.commons.lang.StringUtils; +import org.apache.streams.jackson.StreamsJacksonMapper; +import org.apache.streams.pojo.json.Activity; +import org.apache.streams.pojo.json.Actor; +import org.apache.streams.pojo.json.Provider; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class GooglePlusPersonSerDeTest { + private final static Logger LOGGER = LoggerFactory.getLogger(GooglePlusPersonSerDeTest.class); + + @Test + public void TestPersonObjects() { + ObjectMapper objectMapper = new StreamsJacksonMapper(); + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addDeserializer(Person.class, new GPlusPersonDeserializer()); + objectMapper.registerModule(simpleModule); + + InputStream is = GooglePlusPersonSerDeTest.class.getResourceAsStream("/google_plus_person_jsons.txt"); + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + + GooglePlusActivityUtil googlePlusActivityUtil = new GooglePlusActivityUtil(); + + try { + while (br.ready()) { + String line = br.readLine(); + if (!StringUtils.isEmpty(line)) { + LOGGER.info("raw: {}", line); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + Activity activity = new Activity(); + + Person person = objectMapper.readValue(line, Person.class); + + googlePlusActivityUtil.updateActivity(person, activity); + LOGGER.info("activity: {}", activity); + + assertNotNull(activity); + assert(activity.getId().contains("id:googleplus:update")); + assertEquals(activity.getVerb(), "update"); + + Provider provider = activity.getProvider(); + assertEquals(provider.getId(), "id:providers:googleplus"); + assertEquals(provider.getDisplayName(), "GooglePlus"); + + Actor actor = activity.getActor(); + assertNotNull(actor.getImage()); + assert(actor.getId().contains("id:googleplus:")); + assertNotNull(actor.getUrl()); + + } + } + } catch (Exception e) { + LOGGER.error("Exception while testing serializability: {}", e); + } + } +} + +class GPlusPersonDeserializer extends JsonDeserializer<Person> { + @Override + public Person deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + ObjectMapper m = new StreamsJacksonMapper(); + + JsonNode node = jsonParser.getCodec().readTree(jsonParser); + Person person = new Person(); + + person.setCircledByCount((Integer)((IntNode)node.get("circledByCount")).numberValue()); + person.setDisplayName(node.get("displayName").asText()); + person.setEtag(node.get("etag").asText()); + person.setGender(node.get("gender").asText()); + person.setId(node.get("id").asText()); + + Person.Image image = new Person.Image(); + JsonNode imageNode = node.get("image"); + image.setIsDefault(imageNode.get("isDefault").asBoolean()); + image.setUrl(imageNode.get("url").asText()); + person.setImage(image); + + person.setIsPlusUser(node.get("isPlusUser").asBoolean()); + person.setKind(node.get("kind").asText()); + + JsonNode nameNode = node.get("name"); + Person.Name name = m.readValue(m.writeValueAsString(nameNode), Person.Name.class); + person.setName(name); + + person.setObjectType(node.get("objectType").asText()); + + List<Person.Organizations> organizations = Lists.newArrayList(); + for(JsonNode orgNode : node.get("organizations")) { + Person.Organizations org = m.readValue(m.writeValueAsString(orgNode), Person.Organizations.class); + organizations.add(org); + } + person.setOrganizations(organizations); + + person.setUrl(node.get("url").asText()); + person.setVerified(node.get("verified").asBoolean()); + + return person; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/eba9aefd/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/processor/GooglePlusTypeConverterTest.java ---------------------------------------------------------------------- diff --git a/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/processor/GooglePlusTypeConverterTest.java b/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/processor/GooglePlusTypeConverterTest.java new file mode 100644 index 0000000..e4923ae --- /dev/null +++ b/streams-contrib/streams-provider-google/google-gplus/src/test/java/com/google/gplus/processor/GooglePlusTypeConverterTest.java @@ -0,0 +1,7 @@ +package com.google.gplus.processor; + +/** + * Created by rdouglas on 10/28/14. + */ +public class GooglePlusTypeConverterTest { +} http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/eba9aefd/streams-contrib/streams-provider-google/google-gplus/src/test/resources/google_plus_person_jsons.txt ---------------------------------------------------------------------- diff --git a/streams-contrib/streams-provider-google/google-gplus/src/test/resources/google_plus_person_jsons.txt b/streams-contrib/streams-provider-google/google-gplus/src/test/resources/google_plus_person_jsons.txt new file mode 100644 index 0000000..e69de29
