package ecologylab.bigsemantics.tools; import java.io.File; import java.io.FileFilter; import ecologylab.bigsemantics.actions.SemanticActionTranslationScope; import ecologylab.bigsemantics.metametadata.MetaMetadata; import ecologylab.bigsemantics.metametadata.MetaMetadataField; import ecologylab.bigsemantics.metametadata.MetaMetadataRepository; import ecologylab.bigsemantics.metametadata.MetaMetadataScalarField; import ecologylab.bigsemantics.metametadata.MetaMetadataTranslationScope; import ecologylab.serialization.SIMPLTranslationException; import ecologylab.serialization.SimplTypesScope; import ecologylab.serialization.annotations.Hint; import ecologylab.serialization.formatenums.Format; public class AddHintsToRepository { public AddHintsToRepository(File srcDir, File destDir) throws SIMPLTranslationException { File srcPowerUserDir = new File(srcDir, "powerUser"); File srcRepositorySources = new File(srcDir, "repositorySources"); File destPowerUserDir = new File(destDir, "powerUser"); File destRepositorySources = new File(destDir, "repositorySources"); // need to instantiate scope so that meta-metadata translation works properly. SemanticActionTranslationScope.get(); processDir(srcDir, destDir); processDir(srcPowerUserDir, destPowerUserDir); processDir(srcRepositorySources, destRepositorySources); } private void processDir(File srcDir, File destDir) throws SIMPLTranslationException { assert srcDir.exists() : "directory not exists: " + srcDir; File[] files = srcDir.listFiles(new FileFilter() { public boolean accept(File dir) { return dir.getName().endsWith(".xml"); } }); SimplTypesScope mmdTScope = MetaMetadataTranslationScope.get(); for (File file : files) { MetaMetadataRepository repo = (MetaMetadataRepository) mmdTScope.deserialize(file, Format.XML); if (repo.values() != null) { for (MetaMetadata mmd : repo.values()) { addHints(mmd); } } File out = new File(destDir, file.getName()); try { SimplTypesScope.serialize(repo, out, Format.XML); } catch (SIMPLTranslationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void addHints(MetaMetadataField mmf) { if (mmf.getChildrenMap() != null) { for (MetaMetadataField child : mmf.getChildrenMap()) { if (child instanceof MetaMetadataScalarField) { MetaMetadataScalarField scalar = (MetaMetadataScalarField) child; if (scalar.getScalarType() != null) scalar.setHint(Hint.XML_LEAF); } else { addHints(child); } } } } /** * @param args * @throws SIMPLTranslationException */ public static void main(String[] args) throws SIMPLTranslationException { File src = new File("../cf/config/semantics/metametadata"); File dest = new File("../cf/config/semantics/metametadata/hintsAdded"); AddHintsToRepository ahtr = new AddHintsToRepository(src, dest); } }