diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/MapDynamicTest.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/MapDynamicTest.java | 1220 |
1 files changed, 610 insertions, 610 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/MapDynamicTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/MapDynamicTest.java index 0178366c3f..3299f5c47c 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/MapDynamicTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/MapDynamicTest.java @@ -1,610 +1,610 @@ -/* - * Copyright (c) 2004 - 2011 Eike Stepper (Berlin, Germany) 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 Fluegge - initial API and implementation - */ -package org.eclipse.emf.cdo.tests; - -import org.eclipse.emf.cdo.common.id.CDOID; -import org.eclipse.emf.cdo.eresource.CDOResource; -import org.eclipse.emf.cdo.session.CDOSession; -import org.eclipse.emf.cdo.transaction.CDOTransaction; -import org.eclipse.emf.cdo.util.CDOUtil; - -import org.eclipse.emf.common.util.EMap; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EDataType; -import org.eclipse.emf.ecore.EFactory; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.impl.EReferenceImpl; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * Note! This class should never be attached to our the suites until this notification is removed. Otherwise the test - * run will fail because this test cases is not yet integrated into our test framework! Only run this test as local - * JUnit test case. - * - * @author Martin Fluegge - */ -@SuppressWarnings({ "unchecked", "rawtypes" }) -public class MapDynamicTest extends MapTest -{ - private EPackage dynamicPackage; - - private Map objects; - - private EStructuralFeature feature; - - private final EObject container; - - public MapDynamicTest(EObject mapContainer, EReference mapFeature, Map objects2, EPackage dynamicMapEPackge) - { - container = mapContainer; - feature = mapFeature; - objects = objects2; - dynamicPackage = dynamicMapEPackge; - super.setName(feature.getName() + "Test"); - } - - @Override - protected void runTest() throws Throwable - { - testMap(container, (EReference)feature, objects, dynamicPackage); - } - - public static Test suite() throws Exception - { - TestSuite suite = new TestSuite(MapDynamicTest.class.getName()); - - EPackage dynamicMapEPackge = createPackage(); - EFactory dynamicMapEFactoryInstance = dynamicMapEPackge.getEFactoryInstance(); - - for (EStructuralFeature mapFeature : mapContainerEClass.getEAllStructuralFeatures()) - { - EObject mapContainer = dynamicMapEFactoryInstance.create(mapContainerEClass); - System.out.println(mapFeature); - if (mapFeature.getName().endsWith("Map")) - { - - Map objects = new HashMap(); - List key = dummyData.get(getEDataType(mapFeature, "key")); - List value = dummyData.get(getEDataType(mapFeature, "value")); - System.out.println("Testing " + mapFeature.getName() + "key: " + key + " / value: " + value); - for (int i = 0; i < 3; i++) - { - objects.put(key.get(i), value.get(i)); - } - - // do the actual test - suite.addTest(new MapDynamicTest(mapContainer, (EReference)mapFeature, objects, dynamicMapEPackge)); - } - } - - return suite; - } - - private static EDataType getEDataType(EStructuralFeature feature, String type) throws Exception - { - EClass eType = (EClass)feature.getEType(); - for (EStructuralFeature f : eType.getEAllStructuralFeatures()) - { - if (f.getName().equals(type)) - { - return (EDataType)f.getEType(); - } - } - - throw new Exception("Could not find " + type + " for " + feature); - } - - private void testMap(EObject container, EReference feature, Map objects, EPackage epackage) throws Exception - { - boolean keyIsReference = false; - boolean valueIsReference = false; - boolean keyNotContained = false; - boolean valueNotContained = false; - - String resourceName = "/test1" + count++; - - EClass eType = (EClass)feature.getEType(); - for (EStructuralFeature f : eType.getEAllStructuralFeatures()) - { - if (f.getName().equals("key")) - { - if (f instanceof EReference) - { - keyIsReference = true; - if (!((EReferenceImpl)f).isContainment()) - { - keyNotContained = true; - } - } - } - else if (f.getName().equals("value")) - { - if (f instanceof EReference) - { - valueIsReference = true; - if (!((EReferenceImpl)f).isContainment()) - { - valueNotContained = true; - } - } - } - } - - { - CDOSession session = openSession(); - if (epackage != null) - { - session.getPackageRegistry().putEPackage(epackage); - } - - CDOTransaction transaction = session.openTransaction(); - CDOResource resource = transaction.createResource(resourceName); - - EMap map = (EMap)container.eGet(feature); - - for (Object key : objects.keySet()) - { - map.put(key, objects.get(key)); - } - - compareSimple(objects, map); - - resource.getContents().add(container); - if (keyNotContained && keyIsReference) // avoid dangling references if needed - { - for (Object key : map.keySet()) - { - if (key instanceof EObject) - { - resource.getContents().add((EObject)key); - } - } - } - - if (valueNotContained && valueIsReference) // avoid dangling references if needed - { - for (Object value : map.values()) - { - if (value instanceof EObject) - { - resource.getContents().add((EObject)value); - } - } - } - - compareSimple(objects, map); - - transaction.commit(); - session.close(); - } - - { - CDOSession session = openSession(); - if (epackage != null) - { - session.getPackageRegistry().putEPackage(epackage); - } - - CDOTransaction transaction = session.openTransaction(); - CDOResource resource = transaction.getResource(getResourcePath(resourceName)); - - EObject mapHolder = resource.getContents().get(0); - - for (EStructuralFeature e : mapHolder.eClass().getEAllStructuralFeatures()) - { - System.out.println(e); - } - - EMap map = (EMap)mapHolder.eGet(feature); - - compare(objects, keyIsReference, valueIsReference, map); - - assertEquals(map.size(), objects.size()); - - map.remove(0); - - assertEquals(map.size(), objects.size() - 1); - - transaction.commit(); - session.close(); - } - - { - CDOSession session = openSession(); - CDOTransaction transaction = session.openTransaction(); - if (epackage != null) - { - session.getPackageRegistry().putEPackage(epackage); - } - - CDOResource resource = transaction.getResource(getResourcePath(resourceName)); - - EObject mapHolder = resource.getContents().get(0); - - EMap map = (EMap)mapHolder.eGet(feature); - - compare(objects, keyIsReference, valueIsReference, map); - - assertEquals(map.size(), objects.size() - 1); - - map.clear(); - - transaction.commit(); - session.close(); - } - - { - CDOSession session = openSession(); - if (epackage != null) - { - session.getPackageRegistry().putEPackage(epackage); - } - - CDOTransaction transaction = session.openTransaction(); - CDOResource resource = transaction.getResource(getResourcePath(resourceName)); - - EObject mapHolder = resource.getContents().get(0); - - EMap map = (EMap)mapHolder.eGet(feature); - assertEquals(map.size(), 0); - - transaction.close(); - session.close(); - } - } - - private void compareSimple(Map objects, EMap map) - { - for (Object key : objects.keySet()) - { - assertEquals(true, map.keySet().contains(key)); - assertEquals(true, map.values().contains(objects.get(key))); - } - } - - /** - * This one looks a bit complicated but we must make sure the reference objects a compared by CDO IDs. Because the - * test case is designed to be as generic as possible to allow easy enhancement. - */ - private void compare(Map objects, boolean keyIsReference, boolean valueIsReference, EMap map) - { - for (Object key : map.keySet()) - { - if (!keyIsReference) - { - assertEquals(true, objects.keySet().contains(key)); - } - else - { - boolean foundObjectWithSameID = false; - for (Object keyMap : objects.keySet()) - { - CDOID valueID = CDOUtil.getCDOObject((EObject)key).cdoID(); - CDOID valueMapID = CDOUtil.getCDOObject((EObject)keyMap).cdoID(); - - if (valueID.equals(valueMapID)) - { - foundObjectWithSameID = true; - } - } - - if (!foundObjectWithSameID) - { - fail("key reference with CDOID could not be found"); - } - } - - if (!valueIsReference) - { - assertEquals(true, objects.keySet().contains(key)); - } - else - { - boolean foundObjectWithSameID = false; - for (Object valueMap : objects.values()) - { - CDOID valueID = CDOUtil.getCDOObject((EObject)map.get(key)).cdoID(); - CDOID valueMapID = CDOUtil.getCDOObject((EObject)valueMap).cdoID(); - - if (valueID.equals(valueMapID)) - { - foundObjectWithSameID = true; - } - } - if (!foundObjectWithSameID) - { - fail("value reference with CDOID could not be found"); - } - } - } - } - - // private static EPackage createPackage() - // { - // - // EcoreFactory theCoreFactory = EcoreFactory.eINSTANCE; - // EcorePackage theCorePackage = EcorePackage.eINSTANCE; - // - // mapContainerEClass = theCoreFactory.createEClass(); - // mapContainerEClass.setName("MapContainer"); - // - // EPackage dynamicMapEPackage = theCoreFactory.createEPackage(); - // dynamicMapEPackage.setName("DynamicMapPackage"); - // dynamicMapEPackage.setNsPrefix("dynamicmap"); - // dynamicMapEPackage.setNsURI("http:///org.mftech.examples.emf.dynamic.map"); - // - // dynamicMapEPackage.getEClassifiers().add(mapContainerEClass); - // - // // ++++++++++++++ create dynamic - // // TODO provide Reference mapping - // Map<EDataType, Boolean> dataTypes = new HashMap<EDataType, Boolean>(); - // dataTypes.put(theCorePackage.getEBigDecimal(), true); - // dataTypes.put(theCorePackage.getEBigInteger(), true); - // dataTypes.put(theCorePackage.getEBoolean(), true); - // dataTypes.put(theCorePackage.getEBooleanObject(), true); - // dataTypes.put(theCorePackage.getEByte(), true); - // // //dataTypes.put(theCorePackage.getEByteArray(), true); - // dataTypes.put(theCorePackage.getEByteObject(), true); - // dataTypes.put(theCorePackage.getEChar(), true); - // // dataTypes.put(theCorePackage.getECharacterObject(), false); - // dataTypes.put(theCorePackage.getEDate(), true); - // // // dataTypes.put(theCorePackage.getEDiagnosticChain(), true); - // dataTypes.put(theCorePackage.getEDouble(), true); - // // dataTypes.put(theCorePackage.getEDoubleObject(), false); - // dataTypes.put(theCorePackage.getEFloat(), true); - // // dataTypes.put(theCorePackage.getEFloatObject(), false); - // dataTypes.put(theCorePackage.getEInt(), true); - // // dataTypes.put(theCorePackage.getEIntegerObject(), false); - // dataTypes.put(theCorePackage.getEJavaObject(), true); - // dataTypes.put(theCorePackage.getEJavaClass(), true); - // dataTypes.put(theCorePackage.getELong(), true); - // // dataTypes.put(theCorePackage.getELongObject(), false); - // // dataTypes.put(theCorePackage.getEMap(), false); - // dataTypes.put(theCorePackage.getEShort(), true); - // dataTypes.put(theCorePackage.getEShortObject(), true); - // dataTypes.put(theCorePackage.getEString(), true); - // - // System.out.println("Start"); - // - // int i = 0; - // for (EDataType keyDataType : dataTypes.keySet()) - // { - // String keyName = keyDataType.getName(); - // for (EDataType valueDataType : dataTypes.keySet()) - // { - // - // String valueName = valueDataType.getName(); - // String mapName = keyName + "To" + valueName + "Map"; - // - // EClass mapEClass = theCoreFactory.createEClass(); - // mapEClass.setName(mapName); - // mapEClass.setInstanceTypeName("java.util.Map$Entry"); - // - // EStructuralFeature key; - // if (dataTypes.get(keyDataType)) - // { - // key = theCoreFactory.createEAttribute(); - // } - // else - // { - // key = theCoreFactory.createEReference(); - // } - // - // key.setName("key"); - // key.setEType(keyDataType); - // - // // EStructuralFeature value = theCoreFactory.createEAttribute(); - // EStructuralFeature value; - // if (dataTypes.get(valueDataType)) - // { - // value = theCoreFactory.createEAttribute(); - // } - // else - // { - // value = theCoreFactory.createEReference(); - // } - // value.setName("value"); - // value.setEType(valueDataType); - // - // mapEClass.getEStructuralFeatures().add(key); - // mapEClass.getEStructuralFeatures().add(value); - // - // EReference containerMapFeature = theCoreFactory.createEReference(); - // - // containerMapFeature.setName(mapName); - // containerMapFeature.setEType(mapEClass); - // containerMapFeature.setResolveProxies(false); - // containerMapFeature.setUpperBound(EStructuralFeature.UNBOUNDED_MULTIPLICITY); - // containerMapFeature.setContainment(true); - // - // dynamicMapEPackage.getEClassifiers().add(mapEClass); - // mapContainerEClass.getEStructuralFeatures().add(containerMapFeature); - // - // System.out.println("Created " + mapName); - // i++; - // } - // } - // - // System.out.println("Created " + i + " maps."); - // - // initDummyData(theCorePackage); - // CDOUtil.prepareDynamicEPackage(dynamicMapEPackage); - // return dynamicMapEPackage; - // - // } - - // private static void initDummyData(EcorePackage theCorePackage) - // { - // List data = new ArrayList(); - // data.add("A"); - // data.add("B"); - // data.add("C"); - // dummyData.put(theCorePackage.getEString(), data); - // - // data = new ArrayList(); - // data.add(new BigInteger("11111111111111")); - // data.add(new BigInteger("22222222222222")); - // data.add(new BigInteger("333333333333333")); - // dummyData.put(theCorePackage.getEBigInteger(), data); - // - // data = new ArrayList(); - // data.add(new BigDecimal("44444444444444")); - // data.add(new BigDecimal("55555555555555")); - // data.add(new BigDecimal("66666666666666")); - // dummyData.put(theCorePackage.getEBigDecimal(), data); - // - // data = new ArrayList(); - // data.add(true); - // data.add(false); - // data.add(true); - // dummyData.put(theCorePackage.getEBoolean(), data); - // - // data = new ArrayList(); - // data.add(new Boolean(true)); - // data.add(new Boolean("false")); - // data.add(new Boolean(true)); - // dummyData.put(theCorePackage.getEBooleanObject(), data); - // - // data = new ArrayList(); - // data.add((byte)1); - // data.add((byte)2); - // data.add((byte)3); - // dummyData.put(theCorePackage.getEByte(), data); - // - // // TODO create additional dummy Data - // // dummyData.put(theCorePackage.getEByteArray(), data); - // - // data = new ArrayList(); - // data.add(new Byte((byte)1)); - // data.add(new Byte("2")); - // data.add(new Byte((byte)3)); - // dummyData.put(theCorePackage.getEByteObject(), data); - // - // data = new ArrayList(); - // data.add('a'); - // data.add((char)99); - // data.add('c'); - // dummyData.put(theCorePackage.getEChar(), data); - // - // data = new ArrayList(); - // data.add(new Character('a')); - // data.add(new Character((char)99)); - // data.add(new Character('c')); - // dummyData.put(theCorePackage.getECharacterObject(), data); - // - // data = new ArrayList(); - // data.add(new Date()); - // data.add(new Date()); - // data.add(new Date()); - // dummyData.put(theCorePackage.getEDate(), data); - // - // // TODO create additional dummy Data - // // dummyData.put(theCorePackage.getEDiagnosticChain(), data); - // - // data = new ArrayList(); - // data.add(111.111D); - // data.add(222.222D); - // data.add(333.333D); - // dummyData.put(theCorePackage.getEDouble(), data); - // - // data = new ArrayList(); - // data.add(new Double(444.444)); - // data.add(new Double("555.555")); - // data.add(new Double(666.666)); - // dummyData.put(theCorePackage.getEDoubleObject(), data); - // - // data = new ArrayList(); - // data.add(111.0001f); - // data.add(222.0002f); - // data.add(333.0003f); - // dummyData.put(theCorePackage.getEFloat(), data); - // - // data = new ArrayList(); - // data.add(new Float(444.0004f)); - // data.add(new Float(555.0005d)); - // data.add(new Float("666.0006")); - // dummyData.put(theCorePackage.getEFloatObject(), data); - // - // data = new ArrayList(); - // data.add(11); - // data.add(22); - // data.add(33); - // dummyData.put(theCorePackage.getEInt(), data); - // - // data = new ArrayList(); - // data.add(new Integer(44)); - // data.add(new Integer("55")); - // data.add(new Integer(66)); - // dummyData.put(theCorePackage.getEIntegerObject(), data); - // - // data = new ArrayList(); - // data.add(new Long(1)); - // data.add(new Date()); - // data.add(new Integer(2)); - // dummyData.put(theCorePackage.getEJavaObject(), data); - // - // data = new ArrayList(); - // data.add(Object.class); - // data.add(Date.class); - // data.add(Long.class); - // dummyData.put(theCorePackage.getEJavaClass(), data); - // - // data = new ArrayList(); - // data.add(10101010101L); - // data.add(20202020202L); - // data.add(30303030303L); - // dummyData.put(theCorePackage.getELong(), data); - // - // data = new ArrayList(); - // data.add(new Long(40404040404L)); - // data.add(new Long("5050505050505")); - // data.add(new Long(6060606060606L)); - // dummyData.put(theCorePackage.getELongObject(), data); - // - // data = new ArrayList(); - // - // Map map = new HashMap(); - // map.put(1, 2); - // map.put(3, 4); - // data.add(map); - // map = new HashMap(); - // map.put("A", "B"); - // map.put("C", "D"); - // data.add(map); - // map = new HashMap(); - // map.put('a', 'b'); - // map.put('c', 'd'); - // data.add(map); - // dummyData.put(theCorePackage.getEMap(), data); - // - // data = new ArrayList(); - // data.add((short)111); - // data.add((short)222); - // data.add((short)333); - // dummyData.put(theCorePackage.getEShort(), data); - // - // data = new ArrayList(); - // data.add(new Short((short)111)); - // data.add(new Short((short)222)); - // data.add(new Short((short)333)); - // dummyData.put(theCorePackage.getEShortObject(), data); - // - // } -} +/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) 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 Fluegge - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests;
+
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOUtil;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EFactory;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.impl.EReferenceImpl;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * Note! This class should never be attached to our the suites until this notification is removed. Otherwise the test
+ * run will fail because this test cases is not yet integrated into our test framework! Only run this test as local
+ * JUnit test case.
+ *
+ * @author Martin Fluegge
+ */
+@SuppressWarnings({ "unchecked", "rawtypes" })
+public class MapDynamicTest extends MapTest
+{
+ private EPackage dynamicPackage;
+
+ private Map objects;
+
+ private EStructuralFeature feature;
+
+ private final EObject container;
+
+ public MapDynamicTest(EObject mapContainer, EReference mapFeature, Map objects2, EPackage dynamicMapEPackge)
+ {
+ container = mapContainer;
+ feature = mapFeature;
+ objects = objects2;
+ dynamicPackage = dynamicMapEPackge;
+ super.setName(feature.getName() + "Test");
+ }
+
+ @Override
+ protected void runTest() throws Throwable
+ {
+ testMap(container, (EReference)feature, objects, dynamicPackage);
+ }
+
+ public static Test suite() throws Exception
+ {
+ TestSuite suite = new TestSuite(MapDynamicTest.class.getName());
+
+ EPackage dynamicMapEPackge = createPackage();
+ EFactory dynamicMapEFactoryInstance = dynamicMapEPackge.getEFactoryInstance();
+
+ for (EStructuralFeature mapFeature : mapContainerEClass.getEAllStructuralFeatures())
+ {
+ EObject mapContainer = dynamicMapEFactoryInstance.create(mapContainerEClass);
+ System.out.println(mapFeature);
+ if (mapFeature.getName().endsWith("Map"))
+ {
+
+ Map objects = new HashMap();
+ List key = dummyData.get(getEDataType(mapFeature, "key"));
+ List value = dummyData.get(getEDataType(mapFeature, "value"));
+ System.out.println("Testing " + mapFeature.getName() + "key: " + key + " / value: " + value);
+ for (int i = 0; i < 3; i++)
+ {
+ objects.put(key.get(i), value.get(i));
+ }
+
+ // do the actual test
+ suite.addTest(new MapDynamicTest(mapContainer, (EReference)mapFeature, objects, dynamicMapEPackge));
+ }
+ }
+
+ return suite;
+ }
+
+ private static EDataType getEDataType(EStructuralFeature feature, String type) throws Exception
+ {
+ EClass eType = (EClass)feature.getEType();
+ for (EStructuralFeature f : eType.getEAllStructuralFeatures())
+ {
+ if (f.getName().equals(type))
+ {
+ return (EDataType)f.getEType();
+ }
+ }
+
+ throw new Exception("Could not find " + type + " for " + feature);
+ }
+
+ private void testMap(EObject container, EReference feature, Map objects, EPackage epackage) throws Exception
+ {
+ boolean keyIsReference = false;
+ boolean valueIsReference = false;
+ boolean keyNotContained = false;
+ boolean valueNotContained = false;
+
+ String resourceName = "/test1" + count++;
+
+ EClass eType = (EClass)feature.getEType();
+ for (EStructuralFeature f : eType.getEAllStructuralFeatures())
+ {
+ if (f.getName().equals("key"))
+ {
+ if (f instanceof EReference)
+ {
+ keyIsReference = true;
+ if (!((EReferenceImpl)f).isContainment())
+ {
+ keyNotContained = true;
+ }
+ }
+ }
+ else if (f.getName().equals("value"))
+ {
+ if (f instanceof EReference)
+ {
+ valueIsReference = true;
+ if (!((EReferenceImpl)f).isContainment())
+ {
+ valueNotContained = true;
+ }
+ }
+ }
+ }
+
+ {
+ CDOSession session = openSession();
+ if (epackage != null)
+ {
+ session.getPackageRegistry().putEPackage(epackage);
+ }
+
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(resourceName);
+
+ EMap map = (EMap)container.eGet(feature);
+
+ for (Object key : objects.keySet())
+ {
+ map.put(key, objects.get(key));
+ }
+
+ compareSimple(objects, map);
+
+ resource.getContents().add(container);
+ if (keyNotContained && keyIsReference) // avoid dangling references if needed
+ {
+ for (Object key : map.keySet())
+ {
+ if (key instanceof EObject)
+ {
+ resource.getContents().add((EObject)key);
+ }
+ }
+ }
+
+ if (valueNotContained && valueIsReference) // avoid dangling references if needed
+ {
+ for (Object value : map.values())
+ {
+ if (value instanceof EObject)
+ {
+ resource.getContents().add((EObject)value);
+ }
+ }
+ }
+
+ compareSimple(objects, map);
+
+ transaction.commit();
+ session.close();
+ }
+
+ {
+ CDOSession session = openSession();
+ if (epackage != null)
+ {
+ session.getPackageRegistry().putEPackage(epackage);
+ }
+
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(resourceName));
+
+ EObject mapHolder = resource.getContents().get(0);
+
+ for (EStructuralFeature e : mapHolder.eClass().getEAllStructuralFeatures())
+ {
+ System.out.println(e);
+ }
+
+ EMap map = (EMap)mapHolder.eGet(feature);
+
+ compare(objects, keyIsReference, valueIsReference, map);
+
+ assertEquals(map.size(), objects.size());
+
+ map.remove(0);
+
+ assertEquals(map.size(), objects.size() - 1);
+
+ transaction.commit();
+ session.close();
+ }
+
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ if (epackage != null)
+ {
+ session.getPackageRegistry().putEPackage(epackage);
+ }
+
+ CDOResource resource = transaction.getResource(getResourcePath(resourceName));
+
+ EObject mapHolder = resource.getContents().get(0);
+
+ EMap map = (EMap)mapHolder.eGet(feature);
+
+ compare(objects, keyIsReference, valueIsReference, map);
+
+ assertEquals(map.size(), objects.size() - 1);
+
+ map.clear();
+
+ transaction.commit();
+ session.close();
+ }
+
+ {
+ CDOSession session = openSession();
+ if (epackage != null)
+ {
+ session.getPackageRegistry().putEPackage(epackage);
+ }
+
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.getResource(getResourcePath(resourceName));
+
+ EObject mapHolder = resource.getContents().get(0);
+
+ EMap map = (EMap)mapHolder.eGet(feature);
+ assertEquals(map.size(), 0);
+
+ transaction.close();
+ session.close();
+ }
+ }
+
+ private void compareSimple(Map objects, EMap map)
+ {
+ for (Object key : objects.keySet())
+ {
+ assertEquals(true, map.keySet().contains(key));
+ assertEquals(true, map.values().contains(objects.get(key)));
+ }
+ }
+
+ /**
+ * This one looks a bit complicated but we must make sure the reference objects a compared by CDO IDs. Because the
+ * test case is designed to be as generic as possible to allow easy enhancement.
+ */
+ private void compare(Map objects, boolean keyIsReference, boolean valueIsReference, EMap map)
+ {
+ for (Object key : map.keySet())
+ {
+ if (!keyIsReference)
+ {
+ assertEquals(true, objects.keySet().contains(key));
+ }
+ else
+ {
+ boolean foundObjectWithSameID = false;
+ for (Object keyMap : objects.keySet())
+ {
+ CDOID valueID = CDOUtil.getCDOObject((EObject)key).cdoID();
+ CDOID valueMapID = CDOUtil.getCDOObject((EObject)keyMap).cdoID();
+
+ if (valueID.equals(valueMapID))
+ {
+ foundObjectWithSameID = true;
+ }
+ }
+
+ if (!foundObjectWithSameID)
+ {
+ fail("key reference with CDOID could not be found");
+ }
+ }
+
+ if (!valueIsReference)
+ {
+ assertEquals(true, objects.keySet().contains(key));
+ }
+ else
+ {
+ boolean foundObjectWithSameID = false;
+ for (Object valueMap : objects.values())
+ {
+ CDOID valueID = CDOUtil.getCDOObject((EObject)map.get(key)).cdoID();
+ CDOID valueMapID = CDOUtil.getCDOObject((EObject)valueMap).cdoID();
+
+ if (valueID.equals(valueMapID))
+ {
+ foundObjectWithSameID = true;
+ }
+ }
+ if (!foundObjectWithSameID)
+ {
+ fail("value reference with CDOID could not be found");
+ }
+ }
+ }
+ }
+
+ // private static EPackage createPackage()
+ // {
+ //
+ // EcoreFactory theCoreFactory = EcoreFactory.eINSTANCE;
+ // EcorePackage theCorePackage = EcorePackage.eINSTANCE;
+ //
+ // mapContainerEClass = theCoreFactory.createEClass();
+ // mapContainerEClass.setName("MapContainer");
+ //
+ // EPackage dynamicMapEPackage = theCoreFactory.createEPackage();
+ // dynamicMapEPackage.setName("DynamicMapPackage");
+ // dynamicMapEPackage.setNsPrefix("dynamicmap");
+ // dynamicMapEPackage.setNsURI("http:///org.mftech.examples.emf.dynamic.map");
+ //
+ // dynamicMapEPackage.getEClassifiers().add(mapContainerEClass);
+ //
+ // // ++++++++++++++ create dynamic
+ // // TODO provide Reference mapping
+ // Map<EDataType, Boolean> dataTypes = new HashMap<EDataType, Boolean>();
+ // dataTypes.put(theCorePackage.getEBigDecimal(), true);
+ // dataTypes.put(theCorePackage.getEBigInteger(), true);
+ // dataTypes.put(theCorePackage.getEBoolean(), true);
+ // dataTypes.put(theCorePackage.getEBooleanObject(), true);
+ // dataTypes.put(theCorePackage.getEByte(), true);
+ // // //dataTypes.put(theCorePackage.getEByteArray(), true);
+ // dataTypes.put(theCorePackage.getEByteObject(), true);
+ // dataTypes.put(theCorePackage.getEChar(), true);
+ // // dataTypes.put(theCorePackage.getECharacterObject(), false);
+ // dataTypes.put(theCorePackage.getEDate(), true);
+ // // // dataTypes.put(theCorePackage.getEDiagnosticChain(), true);
+ // dataTypes.put(theCorePackage.getEDouble(), true);
+ // // dataTypes.put(theCorePackage.getEDoubleObject(), false);
+ // dataTypes.put(theCorePackage.getEFloat(), true);
+ // // dataTypes.put(theCorePackage.getEFloatObject(), false);
+ // dataTypes.put(theCorePackage.getEInt(), true);
+ // // dataTypes.put(theCorePackage.getEIntegerObject(), false);
+ // dataTypes.put(theCorePackage.getEJavaObject(), true);
+ // dataTypes.put(theCorePackage.getEJavaClass(), true);
+ // dataTypes.put(theCorePackage.getELong(), true);
+ // // dataTypes.put(theCorePackage.getELongObject(), false);
+ // // dataTypes.put(theCorePackage.getEMap(), false);
+ // dataTypes.put(theCorePackage.getEShort(), true);
+ // dataTypes.put(theCorePackage.getEShortObject(), true);
+ // dataTypes.put(theCorePackage.getEString(), true);
+ //
+ // System.out.println("Start");
+ //
+ // int i = 0;
+ // for (EDataType keyDataType : dataTypes.keySet())
+ // {
+ // String keyName = keyDataType.getName();
+ // for (EDataType valueDataType : dataTypes.keySet())
+ // {
+ //
+ // String valueName = valueDataType.getName();
+ // String mapName = keyName + "To" + valueName + "Map";
+ //
+ // EClass mapEClass = theCoreFactory.createEClass();
+ // mapEClass.setName(mapName);
+ // mapEClass.setInstanceTypeName("java.util.Map$Entry");
+ //
+ // EStructuralFeature key;
+ // if (dataTypes.get(keyDataType))
+ // {
+ // key = theCoreFactory.createEAttribute();
+ // }
+ // else
+ // {
+ // key = theCoreFactory.createEReference();
+ // }
+ //
+ // key.setName("key");
+ // key.setEType(keyDataType);
+ //
+ // // EStructuralFeature value = theCoreFactory.createEAttribute();
+ // EStructuralFeature value;
+ // if (dataTypes.get(valueDataType))
+ // {
+ // value = theCoreFactory.createEAttribute();
+ // }
+ // else
+ // {
+ // value = theCoreFactory.createEReference();
+ // }
+ // value.setName("value");
+ // value.setEType(valueDataType);
+ //
+ // mapEClass.getEStructuralFeatures().add(key);
+ // mapEClass.getEStructuralFeatures().add(value);
+ //
+ // EReference containerMapFeature = theCoreFactory.createEReference();
+ //
+ // containerMapFeature.setName(mapName);
+ // containerMapFeature.setEType(mapEClass);
+ // containerMapFeature.setResolveProxies(false);
+ // containerMapFeature.setUpperBound(EStructuralFeature.UNBOUNDED_MULTIPLICITY);
+ // containerMapFeature.setContainment(true);
+ //
+ // dynamicMapEPackage.getEClassifiers().add(mapEClass);
+ // mapContainerEClass.getEStructuralFeatures().add(containerMapFeature);
+ //
+ // System.out.println("Created " + mapName);
+ // i++;
+ // }
+ // }
+ //
+ // System.out.println("Created " + i + " maps.");
+ //
+ // initDummyData(theCorePackage);
+ // CDOUtil.prepareDynamicEPackage(dynamicMapEPackage);
+ // return dynamicMapEPackage;
+ //
+ // }
+
+ // private static void initDummyData(EcorePackage theCorePackage)
+ // {
+ // List data = new ArrayList();
+ // data.add("A");
+ // data.add("B");
+ // data.add("C");
+ // dummyData.put(theCorePackage.getEString(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new BigInteger("11111111111111"));
+ // data.add(new BigInteger("22222222222222"));
+ // data.add(new BigInteger("333333333333333"));
+ // dummyData.put(theCorePackage.getEBigInteger(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new BigDecimal("44444444444444"));
+ // data.add(new BigDecimal("55555555555555"));
+ // data.add(new BigDecimal("66666666666666"));
+ // dummyData.put(theCorePackage.getEBigDecimal(), data);
+ //
+ // data = new ArrayList();
+ // data.add(true);
+ // data.add(false);
+ // data.add(true);
+ // dummyData.put(theCorePackage.getEBoolean(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Boolean(true));
+ // data.add(new Boolean("false"));
+ // data.add(new Boolean(true));
+ // dummyData.put(theCorePackage.getEBooleanObject(), data);
+ //
+ // data = new ArrayList();
+ // data.add((byte)1);
+ // data.add((byte)2);
+ // data.add((byte)3);
+ // dummyData.put(theCorePackage.getEByte(), data);
+ //
+ // // TODO create additional dummy Data
+ // // dummyData.put(theCorePackage.getEByteArray(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Byte((byte)1));
+ // data.add(new Byte("2"));
+ // data.add(new Byte((byte)3));
+ // dummyData.put(theCorePackage.getEByteObject(), data);
+ //
+ // data = new ArrayList();
+ // data.add('a');
+ // data.add((char)99);
+ // data.add('c');
+ // dummyData.put(theCorePackage.getEChar(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Character('a'));
+ // data.add(new Character((char)99));
+ // data.add(new Character('c'));
+ // dummyData.put(theCorePackage.getECharacterObject(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Date());
+ // data.add(new Date());
+ // data.add(new Date());
+ // dummyData.put(theCorePackage.getEDate(), data);
+ //
+ // // TODO create additional dummy Data
+ // // dummyData.put(theCorePackage.getEDiagnosticChain(), data);
+ //
+ // data = new ArrayList();
+ // data.add(111.111D);
+ // data.add(222.222D);
+ // data.add(333.333D);
+ // dummyData.put(theCorePackage.getEDouble(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Double(444.444));
+ // data.add(new Double("555.555"));
+ // data.add(new Double(666.666));
+ // dummyData.put(theCorePackage.getEDoubleObject(), data);
+ //
+ // data = new ArrayList();
+ // data.add(111.0001f);
+ // data.add(222.0002f);
+ // data.add(333.0003f);
+ // dummyData.put(theCorePackage.getEFloat(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Float(444.0004f));
+ // data.add(new Float(555.0005d));
+ // data.add(new Float("666.0006"));
+ // dummyData.put(theCorePackage.getEFloatObject(), data);
+ //
+ // data = new ArrayList();
+ // data.add(11);
+ // data.add(22);
+ // data.add(33);
+ // dummyData.put(theCorePackage.getEInt(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Integer(44));
+ // data.add(new Integer("55"));
+ // data.add(new Integer(66));
+ // dummyData.put(theCorePackage.getEIntegerObject(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Long(1));
+ // data.add(new Date());
+ // data.add(new Integer(2));
+ // dummyData.put(theCorePackage.getEJavaObject(), data);
+ //
+ // data = new ArrayList();
+ // data.add(Object.class);
+ // data.add(Date.class);
+ // data.add(Long.class);
+ // dummyData.put(theCorePackage.getEJavaClass(), data);
+ //
+ // data = new ArrayList();
+ // data.add(10101010101L);
+ // data.add(20202020202L);
+ // data.add(30303030303L);
+ // dummyData.put(theCorePackage.getELong(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Long(40404040404L));
+ // data.add(new Long("5050505050505"));
+ // data.add(new Long(6060606060606L));
+ // dummyData.put(theCorePackage.getELongObject(), data);
+ //
+ // data = new ArrayList();
+ //
+ // Map map = new HashMap();
+ // map.put(1, 2);
+ // map.put(3, 4);
+ // data.add(map);
+ // map = new HashMap();
+ // map.put("A", "B");
+ // map.put("C", "D");
+ // data.add(map);
+ // map = new HashMap();
+ // map.put('a', 'b');
+ // map.put('c', 'd');
+ // data.add(map);
+ // dummyData.put(theCorePackage.getEMap(), data);
+ //
+ // data = new ArrayList();
+ // data.add((short)111);
+ // data.add((short)222);
+ // data.add((short)333);
+ // dummyData.put(theCorePackage.getEShort(), data);
+ //
+ // data = new ArrayList();
+ // data.add(new Short((short)111));
+ // data.add(new Short((short)222));
+ // data.add(new Short((short)333));
+ // dummyData.put(theCorePackage.getEShortObject(), data);
+ //
+ // }
+}
|