package org.emfjson.mongo.tests; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import org.bson.Document; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EClass; 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.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.emfjson.jackson.resource.JsonResourceFactory; import org.emfjson.mongo.MongoHandler; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import static org.junit.Assert.assertEquals; public class MongoHandlerLoadTest { private ResourceSet resourceSet; private MongoClient client; private URI testURI = URI.createURI("mongodb://localhost:27017/emfjson-test/models/model1"); @Before public void setUp() throws JsonProcessingException { client = new MongoClient(); MongoHandler handler = new MongoHandler(client); resourceSet = new ResourceSetImpl(); resourceSet.getPackageRegistry().put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE); resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new JsonResourceFactory()); resourceSet.getURIConverter().getURIHandlers().add(0, handler); MongoCollection<Document> collection = handler.getCollection(testURI); ObjectMapper mapper = new ObjectMapper(); JsonNode content = mapper.createObjectNode() .put("_id", "model1") .put("_type", "resource") .set("contents", mapper.createObjectNode() .put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EPackage") .put("name", "p") .set("eClassifiers", mapper.createArrayNode() .add(mapper.createObjectNode() .put("eClass", "http://www.eclipse.org/emf/2002/Ecore#//EClass") .put("name", "A")))); collection.deleteOne(new BasicDBObject("_id", "model1")); collection.insertOne(Document.parse(mapper.writeValueAsString(content))); } @After public void tearDown() { client.getDatabase("emfjson-test").drop(); } @Test public void testLoad() throws IOException { Resource resource = resourceSet.createResource(testURI); resource.load(null); assertEquals(1, resource.getContents().size()); assertEquals(EcorePackage.Literals.EPACKAGE, resource.getContents().get(0).eClass()); EPackage p = (EPackage) resource.getContents().get(0); assertEquals("p", p.getName()); assertEquals(1, p.getEClassifiers().size()); assertEquals(EcorePackage.Literals.ECLASS, p.getEClassifiers().get(0).eClass()); EClass c = (EClass) p.getEClassifiers().get(0); assertEquals("A", c.getName()); } @Test public void testLoadWithUriMapping() throws IOException { resourceSet.getURIConverter().getURIMap().put( URI.createURI("http://resources/"), URI.createURI("mongodb://localhost:27017/emfjson-test/models/")); Resource resource = resourceSet.createResource(URI.createURI("http://resources/model1")); resource.load(null); assertEquals(1, resource.getContents().size()); assertEquals(EcorePackage.Literals.EPACKAGE, resource.getContents().get(0).eClass()); EPackage p = (EPackage) resource.getContents().get(0); assertEquals("p", p.getName()); assertEquals(1, p.getEClassifiers().size()); assertEquals(EcorePackage.Literals.ECLASS, p.getEClassifiers().get(0).eClass()); EClass c = (EClass) p.getEClassifiers().get(0); assertEquals("A", c.getName()); } }