package org.emfjson.cdo.sample; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.cdo.common.id.CDOIDUtil; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.session.CDOSessionConfiguration; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.util.CDOUtil; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.emfjson.jackson.JacksonOptions; import org.emfjson.jackson.databind.ser.ResourceSerializer; import org.emfjson.jackson.module.EMFModule; import org.emfjson.sample.model.ModelFactory; import org.emfjson.sample.model.ModelPackage; import org.emfjson.sample.model.User; public class Main { public static void main(String[] args) throws Exception { CDOServer server = new CDOServer("sample"); server.start(); CDOSessionConfiguration configuration = server.getSessionConfiguration(); CDOSession session = configuration.openSession(); session.getPackageRegistry().putEPackage(ModelPackage.eINSTANCE); CDOTransaction transaction = session.openTransaction(); createUsers(transaction); transaction.commit(); ObjectMapper mapper = new ObjectMapper(); JacksonOptions options = new JacksonOptions.Builder() .withID(true) .withIdSerializer(new CDOIDSerializer()) .withReferenceSerializer(new CDOReferenceSerializer()) .withReferenceDeserializer(new CDOReferenceDeserializer(transaction)) .build(); EMFModule module = new EMFModule(transaction.getResourceSet(), options); module.addSerializer(CDOResource.class, new ResourceSerializer()); mapper.registerModule(module); System.out.println(mapper.valueToTree(transaction.getResource("u1"))); System.out.println(mapper.valueToTree(transaction.getResource("u2"))); User u2 = (User) transaction.getResource("u2").getContents().get(0); JsonNode node = data(mapper, u2); System.out.println("Create resource r3 from " + node); Resource r3 = mapper.reader() .withAttribute("resource", transaction.createResource("u3")) .treeToValue(node, Resource.class); User u3 = (User) r3.getContents().get(0); System.out.println(u3.getName() + " is friend with " + u2.getName() + " > " + u3.getFriends().contains(u2)); transaction.close(); session.close(); server.stop(); } private static void createUsers(CDOTransaction transaction) { CDOResource r1 = transaction.getOrCreateResource("u1"); r1.getContents().clear(); User u1 = ModelFactory.eINSTANCE.createUser(); u1.setName("Bob"); r1.getContents().add(u1); CDOResource r2 = transaction.getOrCreateResource("u2"); r2.getContents().clear(); User u2 = ModelFactory.eINSTANCE.createUser(); u2.setName("Peter"); u2.getFriends().add(u1); r2.getContents().add(u2); } private static JsonNode data(ObjectMapper mapper, EObject o) { CDOObject oo = CDOUtil.getCDOObject(o); long i = CDOIDUtil.getLong(CDOIDUtil.getCDOID(oo)); return mapper.createObjectNode() .put("eClass", "org.emfjson.sample.model#//User") .put("name", "Frank") .set("friends", mapper.createArrayNode() .add(i)); } }