package org.emfjson.mongo.tests; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; 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.EcoreFactory; 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.eclipse.emf.ecore.util.EcoreUtil; import org.emfjson.EMFJs; import org.emfjson.jackson.resource.JsonResource; 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 java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.*; public class UseIdTest { private ResourceSet resourceSet; private MongoHandler handler; private MongoClient client; @Before public void setUp() { client = new MongoClient(); handler = new MongoHandler(client); resourceSet = new ResourceSetImpl(); resourceSet.getPackageRegistry().put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE); resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new JsonResourceFactory() { @Override public Resource createResource(URI uri) { return new JsonResource(uri) { @Override protected boolean useUUIDs() { return true; } }; } }); resourceSet.getURIConverter().getURIHandlers().add(0, handler); } @After public void tearDown() { client.getDatabase("emfjson-test").drop(); } private Map<?, ?> getOptions() { Map<String, Object> options = new HashMap<>(); options.put(EMFJs.OPTION_USE_ID, true); return options; } @Test public void testSave() throws IOException { Resource resource = resourceSet.createResource( URI.createURI("mongodb://localhost:27017/emfjson-test/models/model-test-uuid-1")); EPackage p = EcoreFactory.eINSTANCE.createEPackage(); p.setName("p"); EClass c = EcoreFactory.eINSTANCE.createEClass(); c.setName("A"); p.getEClassifiers().add(c); resource.getContents().add(p); String pId = EcoreUtil.getURI(p).fragment(); String cId = EcoreUtil.getURI(c).fragment(); resource.save(getOptions()); MongoCollection<Document> collection = handler.getCollection(resource.getURI()); FindIterable<Document> objects = collection.find(new Document("_id", "model-test-uuid-1")); assertNotNull(objects); Document document = objects.iterator().next(); Document contents = (Document) document.get("contents"); assertNotNull(contents); assertTrue(contents.containsKey("_id")); assertEquals(pId, contents.get("_id")); List eClassifiers = (List) contents.get("eClassifiers"); assertEquals(1, eClassifiers.size()); Document cObject = (Document) eClassifiers.get(0); assertTrue(cObject.containsKey("_id")); assertEquals(cId, cObject.get("_id")); } }