package ecologylab.bigsemantics.metadata; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import java.io.File; import java.io.IOException; import org.junit.Test; import ecologylab.appframework.PropertiesAndDirectories; import ecologylab.bigsemantics.collecting.SemanticsSessionScope; import ecologylab.bigsemantics.cyberneko.CybernekoWrapper; import ecologylab.bigsemantics.generated.library.RepositoryMetadataTypesScope; import ecologylab.bigsemantics.metadata.MetadataDeserializationHookStrategy; import ecologylab.bigsemantics.metadata.builtins.Document; import ecologylab.bigsemantics.metadata.builtins.DocumentClosure; import ecologylab.net.ParsedURL; import ecologylab.serialization.DeserializationHookStrategy; import ecologylab.serialization.SIMPLTranslationException; import ecologylab.serialization.SimplTypesScope; import ecologylab.serialization.formatenums.Format; import ecologylab.serialization.formatenums.StringFormat; /** * Testing serializing and deserializing metadata. * * @author * @author quyin */ public class MetadataRoundTripTest { static SimplTypesScope metadataScope; static SemanticsSessionScope semanticsScope; static { metadataScope = RepositoryMetadataTypesScope.get(); semanticsScope = new SemanticsSessionScope(RepositoryMetadataTypesScope.get(), CybernekoWrapper.class); } public String serializationHelper(Object obj) throws SIMPLTranslationException { String xml = SimplTypesScope.serialize(obj, StringFormat.XML).toString(); File tempDir = PropertiesAndDirectories.tempDir(); File tempFile = new File(tempDir, "metadata-roundtrip.xml"); SimplTypesScope.serialize(obj, tempFile, Format.XML); System.out.println("metadata serialized to " + tempFile); return xml; } public Document deserializationHelper(String xml) throws SIMPLTranslationException { DeserializationHookStrategy deserializationHookStrategy = new MetadataDeserializationHookStrategy(semanticsScope); Document doc = (Document) metadataScope.deserialize(xml, deserializationHookStrategy, StringFormat.XML); assertNotNull(doc); assertNotNull("deserialized metadata doesn't have a meta-metadata associated!", doc.getMetaMetadata()); return doc; } @Test public void testYelpBusiness() throws SIMPLTranslationException, IOException { ParsedURL purl = ParsedURL.getAbsolute("http://dl.acm.org/citation.cfm?id=1979124"); Document doc = semanticsScope.getOrConstructDocument(purl); DocumentClosure closure = doc.getOrConstructClosure(); closure.performDownloadSynchronously(false, false); doc = closure.getDocument(); assertNotNull(doc); String xml = serializationHelper(doc); Document doc2 = (Document) deserializationHelper(xml); assertNotNull(doc2); assertSame(doc.getClass(), doc2.getClass()); // TODO compare the two metadata objects field wise. } }