package org.gedcomx.atom; import org.gedcomx.Gedcomx; import org.gedcomx.common.URI; import org.gedcomx.links.Link; import org.gedcomx.rt.GedcomNamespaceManager; import org.gedcomx.search.ResultConfidence; import org.testng.annotations.Test; import javax.xml.bind.JAXBContext; import javax.xml.namespace.QName; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import static org.gedcomx.rt.SerializationUtil.processThroughJson; import static org.gedcomx.rt.SerializationUtil.processThroughXml; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; /** * @author Ryan Heaton */ @Test public class FeedTest { public void testFeedXml() throws Exception { Feed feed = createFeed(); feed = processThroughXml(feed, Feed.class, JAXBContext.newInstance(Feed.class, CustomEntity.class, JunkEntity.class)); assertFeed(feed); } public void testFeedJson() throws Exception { Feed feed = createFeed(); GedcomNamespaceManager.registerKnownJsonType(CustomEntity.class); GedcomNamespaceManager.registerKnownJsonType(JunkEntity.class); feed = processThroughJson(feed); assertFeed(feed); } private Feed createFeed() { Entry entry = new Entry(); entry.setAuthors(new ArrayList<Person>()); entry.getAuthors().add(new Person()); entry.getAuthors().get(0).setEmail("author2@author.com"); entry.setCategories(new ArrayList<Category>()); entry.getCategories().add(new Category()); entry.getCategories().get(0).setLabel("label"); entry.getCategories().get(0).setScheme(URI.create("urn:scheme")); entry.getCategories().get(0).setTerm("term"); entry.setContent(new Content()); entry.getContent().setType("application/x-gedcomx-v1+xml"); entry.getContent().setGedcomx(new Gedcomx()); entry.getContent().getGedcomx().setId("gxid"); entry.setContributors(new ArrayList<Person>()); entry.getContributors().add(new Person()); entry.getContributors().get(0).setEmail("contributor2@contributor.com"); entry.setId(URI.create("urn:id")); entry.setPublished(new Date(1234567L)); entry.setRights("none"); entry.setScore(0.6F); entry.setConfidence(ResultConfidence.four); entry.setTitle("entry title"); entry.setUpdated(new Date(1234568L)); assertNull(entry.getTransientProperty("junk1")); entry.setTransientProperty("junk1", "junkValue1"); entry.setTransientProperty("junk2", "junkValue2"); assertEquals("junkValue1", entry.getTransientProperty("junk1")); assertEquals("junkValue2", entry.getTransientProperty("junk2")); assertNull(entry.findExtensionOfType(String.class)); assertNotNull(entry.findExtensionsOfType(String.class)); assertEquals(0, entry.findExtensionsOfType(String.class).size()); entry.setExtensionElements(new ArrayList<Object>()); assertNull(entry.findExtensionOfType(String.class)); assertNotNull(entry.findExtensionsOfType(String.class)); assertEquals(0, entry.findExtensionsOfType(String.class).size()); entry.setExtensionElements(null); entry.addExtensionElement(new CustomEntity()); entry.findExtensionOfType(CustomEntity.class).setId("entityid"); entry.findExtensionOfType(CustomEntity.class).addExtensionElement(new CustomEntity()); entry.findExtensionOfType(CustomEntity.class).findExtensionOfType(CustomEntity.class).setId("subentityid"); entry.addExtensionElement(new JunkEntity()); entry.findExtensionOfType(JunkEntity.class).setId("entityId2"); entry.setExtensionAttributes(new HashMap<QName, String>()); assertNull(entry.getLinks()); assertNotNull(entry.getLinks("self")); assertEquals(0, entry.getLinks("self").size()); assertNull(entry.getLink("self")); entry.setLinks(new ArrayList<Link>()); assertNull(entry.getLink("self")); entry.setLinks(null); Link link = new Link(); link.setHref(URI.create("urn:href")); link.setTitle("link title"); link.setHreflang("en"); link.setRel("self"); link.setType("text/plain"); entry.addLink(link); entry.addLink("other", URI.create("urn:other")); entry.addTemplatedLink("template", "junkTemplate"); Feed feed = new Feed(); feed.setAuthors(new ArrayList<Person>()); feed.getAuthors().add(new Person()); feed.getAuthors().get(0).setEmail("author@author.com"); feed.getAuthors().get(0).setName("Author"); feed.getAuthors().get(0).setUri(URI.create("urn:author")); feed.getAuthors().get(0).setBase(URI.create("urn:base")); feed.getAuthors().get(0).setLang("en"); feed.setContributors(new ArrayList<Person>()); feed.getContributors().add(new Person()); feed.getContributors().get(0).setEmail("contributor@contributor.com"); feed.getContributors().get(0).setName("Contributor"); feed.getContributors().get(0).setUri(URI.create("urn:contributor")); feed.setEntries(new ArrayList<Entry>()); feed.getEntries().add(entry); feed.setGenerator(new Generator()); feed.getGenerator().setBase(URI.create("urn:base")); feed.getGenerator().setLang("de"); feed.getGenerator().setUri(URI.create("urn:generator")); feed.getGenerator().setValue("generator value"); feed.getGenerator().setVersion("1.2"); feed.setIcon(URI.create("urn:icon")); feed.setId(URI.create("urn:feedid")); feed.setIndex(123); feed.setLogo(URI.create("urn:logo")); feed.setRights("feed rights"); feed.setSubtitle("subtitle"); feed.setTitle("feed title"); feed.setResults(7); feed.setUpdated(new Date(54321L)); assertNull(feed.getLinks()); assertNotNull(feed.getLinks("self")); assertEquals(0, feed.getLinks("self").size()); assertNull(feed.getLink("self")); feed.setLinks(new ArrayList<Link>()); assertNull(feed.getLink("self")); feed.setLinks(null); feed.addLink("self", URI.create("urn:feed")); feed.addLink("other", URI.create("urn:other")); feed.addTemplatedLink("template", "junkTemplate"); return feed; } private void assertFeed(Feed feed) { assertEquals(1, feed.getAuthors().size()); Person author = feed.getAuthors().get(0); assertEquals("author@author.com", author.getEmail()); assertEquals("Author", author.getName()); assertEquals(URI.create("urn:author"), author.getUri()); assertEquals(URI.create("urn:base"), author.getBase()); assertEquals("en", author.getLang()); assertEquals(1, feed.getContributors().size()); Person contributor = feed.getContributors().get(0); assertEquals("contributor@contributor.com", contributor.getEmail()); assertEquals("Contributor", contributor.getName()); assertEquals(URI.create("urn:contributor"), contributor.getUri()); assertEquals(1, feed.getEntries().size()); Entry entry = feed.getEntries().get(0); assertEquals(1, entry.getAuthors().size()); Person author2 = entry.getAuthors().get(0); assertEquals("author2@author.com", author2.getEmail()); assertEquals(1, entry.getCategories().size()); Category category = entry.getCategories().get(0); assertEquals("label", category.getLabel()); assertEquals(URI.create("urn:scheme"), category.getScheme()); assertEquals("term", category.getTerm()); assertEquals("application/x-gedcomx-v1+xml", entry.getContent().getType()); assertNotNull(entry.getContent().getGedcomx()); assertEquals(entry.getContent().getGedcomx().getId(), "gxid"); assertEquals(1, entry.getContributors().size()); assertEquals("contributor2@contributor.com", entry.getContributors().get(0).getEmail()); assertEquals(URI.create("urn:id"), entry.getId()); assertNotNull(entry.getLinks()); assertEquals(3, entry.getLinks().size()); assertNotNull(entry.getLinks("self")); assertEquals(1, entry.getLinks("self").size()); Link link = entry.getLink("self"); assertEquals(URI.create("urn:href"), link.getHref()); assertEquals("link title", link.getTitle()); assertEquals("en", link.getHreflang()); assertEquals("self", link.getRel()); assertEquals("text/plain", link.getType()); assertNotNull(entry.getLinks("other")); assertEquals(1, entry.getLinks("other").size()); assertEquals("other", entry.getLinks("other").get(0).getRel()); assertEquals(URI.create("urn:other"), entry.getLink("other").getHref()); assertNotNull(entry.getLinks("template")); assertEquals(1, entry.getLinks("template").size()); assertEquals("template", entry.getLinks("template").get(0).getRel()); assertEquals("junkTemplate", entry.getLink("template").getTemplate()); assertNull(entry.getLink("template").getHref()); assertEquals(new Date(1234567L), entry.getPublished()); assertEquals("none", entry.getRights()); assertEquals(0.6F, entry.getScore()); assertEquals(ResultConfidence.four, entry.getConfidence()); assertEquals("entry title", entry.getTitle()); assertEquals(new Date(1234568L), entry.getUpdated()); assertNull(entry.getTransientProperty("junk1")); assertNull(entry.getTransientProperty("junk2")); assertNotNull(entry.getExtensionElements()); assertEquals(2, entry.getExtensionElements().size()); assertNotNull(entry.findExtensionsOfType(CustomEntity.class)); assertEquals(1, entry.findExtensionsOfType(CustomEntity.class).size()); CustomEntity customEntity = entry.findExtensionOfType(CustomEntity.class); assertEquals("entityid", customEntity.getId()); assertEquals(1, customEntity.getExtensionElements().size()); assertNotNull(customEntity.findExtensionOfType(CustomEntity.class)); assertEquals("subentityid", customEntity.findExtensionOfType(CustomEntity.class).getId()); assertNotNull(entry.findExtensionsOfType(JunkEntity.class)); assertEquals(1, entry.findExtensionsOfType(JunkEntity.class).size()); assertEquals("entityId2", entry.findExtensionOfType(JunkEntity.class).getId()); assertEquals(URI.create("urn:base"), feed.getGenerator().getBase()); assertEquals("de", feed.getGenerator().getLang()); assertEquals(URI.create("urn:generator"), feed.getGenerator().getUri()); assertEquals("generator value", feed.getGenerator().getValue()); assertEquals("1.2", feed.getGenerator().getVersion()); assertEquals(URI.create("urn:icon"), feed.getIcon()); assertEquals(URI.create("urn:feedid"), feed.getId()); assertEquals(123, feed.getIndex().intValue()); assertNotNull(feed.getLinks()); assertEquals(3, feed.getLinks().size()); assertNotNull(feed.getLinks("self")); assertEquals(1, feed.getLinks("self").size()); assertEquals("self", feed.getLinks("self").get(0).getRel()); assertEquals(URI.create("urn:feed"), feed.getLink("self").getHref()); assertNotNull(feed.getLinks("other")); assertEquals(1, feed.getLinks("other").size()); assertEquals("other", feed.getLinks("other").get(0).getRel()); assertEquals(URI.create("urn:other"), feed.getLink("other").getHref()); assertNotNull(feed.getLinks("template")); assertEquals(1, feed.getLinks("template").size()); assertEquals("template", feed.getLinks("template").get(0).getRel()); assertEquals("junkTemplate", feed.getLink("template").getTemplate()); assertNull(feed.getLink("template").getHref()); assertEquals(URI.create("urn:logo"), feed.getLogo()); assertEquals("feed rights", feed.getRights()); assertEquals("subtitle", feed.getSubtitle()); assertEquals("feed title", feed.getTitle()); assertEquals(7, feed.getResults().intValue()); assertEquals(new Date(54321L), feed.getUpdated()); } }