package ecologylab.bigsemantics.metametadata; import java.io.File; import java.io.FileFilter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import ecologylab.bigsemantics.collecting.MetaMetadataRepositoryInit; import ecologylab.bigsemantics.generated.library.RepositoryMetadataTypesScope; import ecologylab.bigsemantics.metadata.scalar.types.SemanticsTypes; import ecologylab.bigsemantics.tools.MmTest; import ecologylab.serialization.SIMPLTranslationException; import ecologylab.serialization.SimplTypesScope; import ecologylab.serialization.SimplTypesScope.GRAPH_SWITCH; import ecologylab.serialization.formatenums.Format; import ecologylab.serialization.formatenums.StringFormat; /** * test repository in JSON format with NewMmTest-like tasks. * * @author quyin * */ public class TestRepositoryInJSON { private static final int BUFFER_SIZE = 4096; private static SimplTypesScope mmdTScope = null; private void translateRepositoryIntoJSON(File srcDir, File destDir) { translateRepositoryDirIntoJSON(srcDir, destDir); translateRepositoryDirIntoJSON(new File(srcDir, "repositorySources"), new File(destDir, "repositorySources")); translateRepositoryDirIntoJSON(new File(srcDir, "powerUser"), new File(destDir, "powerUser")); } private void translateRepositoryDirIntoJSON(File srcDir, File destDir) { if (!destDir.exists()) destDir.mkdir(); FileFilter filter = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith("xml"); } }; for (File f : srcDir.listFiles(filter)) { try { MetaMetadataRepository repo = (MetaMetadataRepository) mmdTScope.deserialize(f, Format.XML); String json = SimplTypesScope.serialize(repo, StringFormat.JSON).toString(); if (json != null && json.length() > 0) { File jsonRepoFile = new File(destDir, f.getName().replace((CharSequence) ".xml", (CharSequence) ".json")); FileWriter writer = new FileWriter(jsonRepoFile); writer.write(json); writer.close(); } } catch (SIMPLTranslationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * @param args */ public static void main(String[] args) { SimplTypesScope.graphSwitch = GRAPH_SWITCH.ON; MetaMetadataRepository.initializeTypes(); new SemanticsTypes(); // ********* each time, run one of the following methods: ********* // testLoadingAndSavingXmlRepository(); // testSavedAgainXmlRepository(); // testConvertingRepositoryFromXmlToJson(); testJsonRepository(destJsonRepoDir); // testLoadAndSaveJsonRepository(destJsonRepoDir, dest2JsonRepoDir); // testJsonRepository(dest2JsonRepoDir); } private static File srcXmlRepoDir = new File("../ecologylabSemantics/repository/"); private static File destXmlRepoDir = new File("/tmp/repository/"); private static File destJsonRepoDir = new File("../ecologylabSemantics/repositoryInJSON"); private static File dest2JsonRepoDir = new File("/tmp/jsonAgain"); private static void testLoadingAndSavingXmlRepository() { // replace MetaMetadataCollectionField with MetaMetadataCollectionFieldChildComposite SimplTypesScope.get(NestedMetaMetadataFieldTypesScope.NAME, new Class[] { MetaMetadataField.class, MetaMetadataScalarField.class, MetaMetadataCompositeField.class, MetaMetadataCollectionFieldWithoutChildComposite.class, }); mmdTScope = MetaMetadataTranslationScope.get(); // load and save the repository again testLoadAndSaveXmlRepositoryDir(srcXmlRepoDir, destXmlRepoDir); testLoadAndSaveXmlRepositoryDir(new File(srcXmlRepoDir, "repositorySources"), new File( destXmlRepoDir, "repositorySources")); testLoadAndSaveXmlRepositoryDir(new File(srcXmlRepoDir, "powerUser"), new File(destXmlRepoDir, "powerUser")); } private static void testLoadAndSaveXmlRepositoryDir(File srcDir, File destDir) { FileFilter filter = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".xml"); } }; for (File xmlFile : srcDir.listFiles(filter)) { try { MetaMetadataRepository repo = (MetaMetadataRepository) mmdTScope.deserialize(xmlFile, Format.XML); SimplTypesScope.serialize(repo, new File(destDir, xmlFile.getName()), Format.XML); } catch (SIMPLTranslationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } private static void testLoadAndSaveJsonRepository(File srcDir, File destDir) { // replace MetaMetadataCollectionField with MetaMetadataCollectionFieldChildComposite SimplTypesScope.get(NestedMetaMetadataFieldTypesScope.NAME, new Class[] { MetaMetadataField.class, MetaMetadataScalarField.class, MetaMetadataCompositeField.class, MetaMetadataCollectionFieldWithoutChildComposite.class, }); mmdTScope = MetaMetadataTranslationScope.get(); // load and save the repository again testLoadAndSaveJsonRepositoryDir(destJsonRepoDir, dest2JsonRepoDir); testLoadAndSaveJsonRepositoryDir(new File(destJsonRepoDir, "repositorySources"), new File( dest2JsonRepoDir, "repositorySources")); testLoadAndSaveJsonRepositoryDir(new File(destJsonRepoDir, "powerUser"), new File( dest2JsonRepoDir, "powerUser")); } private static void testLoadAndSaveJsonRepositoryDir(File srcDir, File destDir) { FileFilter filter = new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".json"); } }; for (File jsonFile : srcDir.listFiles(filter)) { try { StringBuilder json = new StringBuilder(); char[] buffer = new char[BUFFER_SIZE]; FileReader reader = new FileReader(jsonFile); while (true) { int n = reader.read(buffer, 0, BUFFER_SIZE); if (n < 0) break; json.append(buffer, 0, n); } reader.close(); MetaMetadataRepository repo = (MetaMetadataRepository) mmdTScope.deserialize(json, StringFormat.JSON); File newJsonFile = new File(destDir, jsonFile.getName()); if (!newJsonFile.exists()) { newJsonFile.getParentFile().mkdirs(); newJsonFile.createNewFile(); } SimplTypesScope.serialize(repo, newJsonFile, Format.JSON); } catch (SIMPLTranslationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private static void testSavedAgainXmlRepository() { // use json repository for NewMmTest MetaMetadataRepositoryInit.DEFAULT_REPOSITORY_FORMAT = Format.XML; tryNewMmTest(destXmlRepoDir); } private static void testConvertingRepositoryFromXmlToJson() { // replace MetaMetadataCollectionField with MetaMetadataCollectionFieldChildComposite SimplTypesScope.get(NestedMetaMetadataFieldTypesScope.NAME, new Class[] { MetaMetadataField.class, MetaMetadataScalarField.class, MetaMetadataCompositeField.class, MetaMetadataCollectionFieldWithoutChildComposite.class, }); mmdTScope = MetaMetadataTranslationScope.get(); // convert repository to json TestRepositoryInJSON trij = new TestRepositoryInJSON(); trij.translateRepositoryIntoJSON(srcXmlRepoDir, destJsonRepoDir); } private static void testJsonRepository(File jsonRepoDir) { mmdTScope = MetaMetadataTranslationScope.get(); // use json repository for NewMmTest MetaMetadataRepositoryInit.DEFAULT_REPOSITORY_FORMAT = Format.JSON; tryNewMmTest(jsonRepoDir); } private static void tryNewMmTest(File repositoryLocation) { // use a set of URLs to test extraction String[] testUrls = new String[] { "http://www.dlese.org/dds/services/ddsws1-1?verb=UserSearch&q=water+on+mars&s=0&n=10&client=ddsws10examples", "http://www.dlese.org/dds/services/ddsws1-0?verb=GetRecord&id=DLESE-000-000-000-001", "http://where.yahooapis.com/geocode?gflags=R&q=-96.28616666666667,30.604833333333332", "http://news.blogs.cnn.com/2011/04/14/predator-dinosaurs-may-have-been-night-hunters/?hpt=C2", "http://remodelista.com/products/victoria-and-albert-wessex-bath", "http://portal.acm.org/citation.cfm?id=1416955", "http://buzzlog.yahoo.com/feeds/buzzsportm.xml", "http://www.informaworld.com/smpp/content~db=all?content=10.1080/10447310802142243", "http://rss.cnn.com/rss/cnn_topstories.rss", "//", }; MmTest mmTest; try { mmTest = new MmTest("NewMmTest", System.out, RepositoryMetadataTypesScope.get(), repositoryLocation, MetaMetadataRepositoryInit.DEFAULT_REPOSITORY_FORMAT); mmTest.collect(testUrls); } catch (SIMPLTranslationException e) { e.printStackTrace(); } } }