package ecologylab.bigsemantics.compiler;
import java.io.File;
import java.io.FileFilter;
import java.io.FileWriter;
import java.io.IOException;
import ecologylab.bigsemantics.metadata.scalar.types.SemanticsTypes;
import ecologylab.bigsemantics.metametadata.MetaMetadataCollectionFieldWithoutChildComposite;
import ecologylab.bigsemantics.metametadata.MetaMetadataCompositeField;
import ecologylab.bigsemantics.metametadata.MetaMetadataField;
import ecologylab.bigsemantics.metametadata.MetaMetadataRepository;
import ecologylab.bigsemantics.metametadata.MetaMetadataScalarField;
import ecologylab.bigsemantics.metametadata.MetaMetadataTranslationScope;
import ecologylab.bigsemantics.metametadata.NestedMetaMetadataFieldTypesScope;
import ecologylab.serialization.SIMPLTranslationException;
import ecologylab.serialization.SimplTypesScope;
import ecologylab.serialization.SimplTypesScope.GRAPH_SWITCH;
import ecologylab.serialization.formatenums.Format;
import ecologylab.serialization.formatenums.StringFormat;
/**
* A (preliminary) class for converting repository format. Currently, from XML to JSON.
*
* @author quyin
*
*/
public class RepositoryConverter
{
private static File srcXmlRepoDir = new File("../ecologylabSemantics/repository/");
private static File destJsonRepoDir = new File("../ecologylabSemantics/repositoryInJSON");
private SimplTypesScope mmdTScope = null;
public void convertingRepositoryFromXmlToJson()
{
// 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
translateRepositoryIntoJSON(srcXmlRepoDir, destJsonRepoDir);
}
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();
}
}
}
public static void main(String[] args)
{
SimplTypesScope.graphSwitch = GRAPH_SWITCH.ON;
MetaMetadataRepository.initializeTypes();
new SemanticsTypes();
RepositoryConverter rc = new RepositoryConverter();
rc.convertingRepositoryFromXmlToJson();
}
}