package org.emfjson.jackson.support; import com.fasterxml.jackson.databind.ObjectMapper; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.emfjson.jackson.junit.generics.GenericsPackage; import org.emfjson.jackson.junit.model.ModelPackage; import org.emfjson.jackson.module.EMFModule; import org.emfjson.jackson.resource.JsonResourceFactory; import org.junit.rules.ExternalResource; import java.text.SimpleDateFormat; import java.util.Locale; import java.util.TimeZone; public class StandardFixture extends ExternalResource { private ObjectMapper mapper; private ResourceSetImpl resourceSet; protected URI baseTestFilesFileDirectory = URI.createFileURI("src/test/resources/tests/"); @Override protected void before() throws Throwable { URI baseURI = URI.createURI("http://eclipselabs.org/emfjson/tests/"); mapper = createMapper(); mapper.registerModule(new EMFModule()); resourceSet = new ResourceSetImpl(); resourceSet.getURIConverter() .getURIMap() .put(baseURI, baseTestFilesFileDirectory); EPackage.Registry.INSTANCE .put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE); EPackage.Registry.INSTANCE .put(ModelPackage.eNS_URI, ModelPackage.eINSTANCE); EPackage.Registry.INSTANCE .put(GenericsPackage.eNS_URI, GenericsPackage.eINSTANCE); resourceSet.getResourceFactoryRegistry() .getExtensionToFactoryMap() .put("*", new JsonResourceFactory(mapper)); resourceSet.getResourceFactoryRegistry() .getExtensionToFactoryMap() .put("xmi", new XMIResourceFactoryImpl()); } @Override protected void after() { EPackage.Registry.INSTANCE.clear(); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().clear(); } private ObjectMapper createMapper() { final ObjectMapper mapper = new ObjectMapper(); final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH); dateFormat.setTimeZone(TimeZone.getDefault()); mapper.setDateFormat(dateFormat); mapper.setTimeZone(TimeZone.getDefault()); return mapper; } public ResourceSetImpl getResourceSet() { return resourceSet; } public ObjectMapper mapper() { return mapper; } public ObjectMapper mapper(EMFModule.Feature feature, Boolean value) { final ObjectMapper mapper = createMapper(); final EMFModule module = new EMFModule(); module.configure(feature, value); mapper.registerModule(module); return mapper; } }