/** * <copyright> * * Copyright (c) 2014 Springsite BV (The Netherlands) and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Martin Taal - Initial API and implementation * * </copyright> * * $Id: TestModelAccess.java,v 1.7 2011/08/25 12:42:19 mtaal Exp $ */ package org.eclipse.emf.texo.test; import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.texo.converter.EMFModelConverter; import org.eclipse.emf.texo.converter.ModelEMFConverter; import org.eclipse.emf.texo.json.JSONModelConverter; import org.eclipse.emf.texo.json.ModelJSONConverter; import org.eclipse.emf.texo.test.model.issues.bz461726.A461726; import org.eclipse.emf.texo.test.model.issues.bz461726.B461726; import org.eclipse.emf.texo.test.model.issues.bz461726.PK461726ModelFactory; import org.eclipse.emf.texo.test.model.issues.bz461726.PK461726ModelPackage; import org.eclipse.emf.texo.xml.ModelXMLLoader; import org.eclipse.emf.texo.xml.ModelXMLSaver; import org.json.JSONArray; import org.junit.Test; /** * https://bugs.eclipse.org/bugs/show_bug.cgi?id=461726 * * @author <a href="mailto:mtaal@elver.org">Martin Taal</a> * @version $Revision: 1.7 $ */ public class TestBz461726 extends TestCase { private static final int LIST_SIZE = 3; @Test public void test() { final PK461726ModelFactory factory = PK461726ModelPackage.MODELFACTORY; final List<A461726> as = new ArrayList<A461726>(); final List<B461726> bs = new ArrayList<B461726>(); for (int i = 0; i < LIST_SIZE; i++) { A461726 a = factory.createA461726(); a.setName(i + ""); //$NON-NLS-1$ a.setDb_Id(new Long(i)); a.setDb_version(i); as.add(a); B461726 b = factory.createB461726(); b.setName(i + ""); //$NON-NLS-1$ b.setDb_Id(new Long(i)); b.setDb_version(i); bs.add(b); } // get inverted bs List<B461726> invertedBs = new ArrayList<B461726>(); for (int i = 0; i < LIST_SIZE; i++) { invertedBs.add(bs.get(2 - i)); } for (int i = 0; i < 3; i++) { if (i % 2 == 0) { as.get(i).setBs(invertedBs); } else { as.get(i).setBs(bs); } } testEMFConversion(as, bs); testXMLConversion(as, bs, invertedBs); testJSONConversion(as, bs, invertedBs); } private void testEMFConversion(List<A461726> as, List<B461726> bs) { final EMFModelConverter emfModelConverter = new EMFModelConverter(); final ModelEMFConverter modelEMFConverter = new ModelEMFConverter(); modelEMFConverter.setConvertNonContainedReferencedObjects(true); List<EObject> eos = modelEMFConverter.convert(new ArrayList<Object>(as)); List<Object> os = emfModelConverter.convert(eos); assertEquals(LIST_SIZE, os.size()); for (int i = 0; i < LIST_SIZE; i++) { compareA(as.get(i), (A461726) os.get(i)); } } private void testXMLConversion(List<A461726> as, List<B461726> bs, List<B461726> invertedBs) { List<Object> newObjects; String xml1 = ""; //$NON-NLS-1$ String xml2 = ""; //$NON-NLS-1$ { ModelXMLSaver xmlSaver = new ModelXMLSaver(); xmlSaver.setSaveAsXMI(true); xmlSaver.setObjects(new ArrayList<Object>()); xmlSaver.getObjects().addAll(invertedBs); xmlSaver.getObjects().addAll(as); StringWriter strWriter = new StringWriter(); xmlSaver.setWriter(strWriter); xmlSaver.write(); xml1 = strWriter.toString(); ModelXMLLoader xmlLoader = new ModelXMLLoader(); xmlLoader.setLoadAsXMI(true); StringReader strReader = new StringReader(xml1); xmlLoader.setReader(strReader); newObjects = xmlLoader.read(); int i = 0; for (Object o : newObjects) { if (o instanceof A461726) { compareA(as.get(i), (A461726) o); i++; } } } { ModelXMLSaver xmlSaver = new ModelXMLSaver(); xmlSaver.setSaveAsXMI(true); xmlSaver.setObjects(newObjects); StringWriter strWriter = new StringWriter(); xmlSaver.setWriter(strWriter); xmlSaver.write(); xml2 = strWriter.toString(); } assertEquals(xml1, xml2); } private void testJSONConversion(List<A461726> as, List<B461726> bs, List<B461726> invertedBs) { List<Object> objects; Object json1; Object json2; { ModelJSONConverter modelJSONConverter = new ModelJSONConverter(); modelJSONConverter.setConvertNonContainedReferencedObjects(true); JSONModelConverter jsonModelConverter = new JSONModelConverter(); final List<Object> in = new ArrayList<Object>(); in.addAll(invertedBs); in.addAll(as); json1 = modelJSONConverter.convert(in); objects = jsonModelConverter.convert((JSONArray) json1); int i = 0; for (Object o : objects) { if (o instanceof A461726) { compareA(as.get(i), (A461726) o); i++; } } } { ModelJSONConverter modelJSONConverter = new ModelJSONConverter(); modelJSONConverter.setConvertNonContainedReferencedObjects(true); JSONModelConverter jsonModelConverter = new JSONModelConverter(); json2 = modelJSONConverter.convert(objects); objects = jsonModelConverter.convert((JSONArray) json2); int i = 0; for (Object o : objects) { if (o instanceof A461726) { compareA(as.get(i), (A461726) o); i++; } } } assertEquals(json1.toString(), json2.toString()); } private void compareA(A461726 aOriginal, A461726 aNew) { assertEquals(aOriginal.getName(), aNew.getName()); assertEquals(LIST_SIZE, aNew.getBs().size()); for (int i = 0; i < LIST_SIZE; i++) { compareB(aOriginal.getBs().get(i), aNew.getBs().get(i)); } } private void compareB(B461726 bOriginal, B461726 bNew) { assertEquals(bOriginal.getName(), bNew.getName()); assertEquals(LIST_SIZE, bNew.getAs().size()); for (int i = 0; i < LIST_SIZE; i++) { assertEquals(bOriginal.getAs().get(i).getName(), bNew.getAs().get(i).getName()); } } }