package ecologylab.bigsemantics; import java.io.File; import java.io.InputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ecologylab.bigsemantics.collecting.SemanticsSessionScope; import ecologylab.bigsemantics.cyberneko.CybernekoWrapper; import ecologylab.bigsemantics.generated.library.RepositoryMetadataTypesScope; import ecologylab.bigsemantics.metadata.MetadataFieldDescriptor; import ecologylab.bigsemantics.metadata.scalar.types.MetadataScalarType; import ecologylab.bigsemantics.metametadata.MetaMetadata; import ecologylab.bigsemantics.metametadata.MetaMetadataField; import ecologylab.bigsemantics.metametadata.MetaMetadataRepository; import ecologylab.bigsemantics.metametadata.MetaMetadataTranslationScope; import ecologylab.serialization.SIMPLTranslationException; import ecologylab.serialization.SimplTypesScope; import ecologylab.serialization.SimplTypesScope.GRAPH_SWITCH; import ecologylab.serialization.formatenums.Format; /** * Basic initialization and utilities for testing meta-metadata. * * All tests in this package should extend this class. * * @author quyin */ public class BaseMmdTest { static Logger logger = LoggerFactory.getLogger(BaseMmdTest.class); static SimplTypesScope mmdScope; static SemanticsSessionScope semanticsScope; static MetaMetadataRepository realRepository; static { SimplTypesScope.graphSwitch = GRAPH_SWITCH.ON; MetadataScalarType.init(); mmdScope = MetaMetadataTranslationScope.get(); } public MetaMetadataRepository loadRepository(String resourceName) throws SIMPLTranslationException { InputStream istream = this.getClass().getResourceAsStream(resourceName); MetaMetadataRepository repository = (MetaMetadataRepository) mmdScope.deserialize(istream, Format.XML); assert repository != null : "Failed to load testing repository!"; return repository; } public MetaMetadataRepository loadRealRepository() { if (realRepository == null) { SemanticsSessionScope semanticsScope = null; if (semanticsScope == null) { semanticsScope = new SemanticsSessionScope(RepositoryMetadataTypesScope.get(), CybernekoWrapper.class); } realRepository = semanticsScope.getMetaMetadataRepository(); } return realRepository; } public MetaMetadataField getNestedField(MetaMetadata mmd, String... fieldNames) { if (mmd == null || fieldNames == null) { return null; } MetaMetadataField result = mmd; for (String fieldName : fieldNames) { result = result.getChildrenMap().get(fieldName); if (result == null) { return null; } } return result; } public MetaMetadataField getNestedField(MetaMetadataRepository repository, String mmdName, String... fieldNames) { MetaMetadata mmd = repository.getMMByName(mmdName); return getNestedField(mmd, fieldNames); } public void serializeToTempFile(Object obj, String suffix) { try { File tempFile = File.createTempFile("mmd-test-inheritance", ".xml"); File file = new File(tempFile.getParentFile(), "mmd-test-inheritance-" + suffix + ".xml"); tempFile.renameTo(file); SimplTypesScope.serialize(obj, file, Format.XML); logger.info("Serialized to: " + file.getAbsolutePath()); } catch (Exception e) { logger.error("Could not serialize to temporary file.", e); } } public static void setMetadataFieldDescriptor(MetaMetadataField field, MetadataFieldDescriptor descriptor) { field.setMetadataFieldDescriptor(descriptor); } }