diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/FeatureMapTest.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/FeatureMapTest.java | 496 |
1 files changed, 248 insertions, 248 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/FeatureMapTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/FeatureMapTest.java index a8977baa7b..7ce06b455f 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/FeatureMapTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/FeatureMapTest.java @@ -1,248 +1,248 @@ -/*
- * 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:
- * Simon McDuff - initial API and implementation
- * Eike Stepper - maintenance
- * Stefan Winkler - enhanced test cases
- */
-package org.eclipse.emf.cdo.tests;
-
-import org.eclipse.emf.cdo.common.model.EMFUtil;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.tests.model5.Doctor;
-import org.eclipse.emf.cdo.tests.model5.TestFeatureMap;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.util.CommitException;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.util.FeatureMap;
-
-import java.util.List;
-
-/**
- * @author Simon McDuff
- */
-public class FeatureMapTest extends AbstractCDOTest
-{
- private EPackage pkg;
-
- private EClass dummy;
-
- private EAttribute name;
-
- private EClass fmapContainer;
-
- private EAttribute string1;
-
- private EAttribute integer;
-
- private EAttribute fMap;
-
- private EAttribute string2;
-
- private EAttribute longObj;
-
- private EAttribute bool;
-
- private EReference ref1;
-
- private EReference ref2;
-
- private CDOSession session;
-
- private CDOTransaction tx;
-
- private CDOResource resource;
-
- private EObject dummyObj;
-
- @Override
- protected void doSetUp() throws Exception
- {
- super.doSetUp();
-
- final EcorePackage epackage = EcorePackage.eINSTANCE;
- pkg = EMFUtil.createEPackage("fmaps", "fmaps", "http://cdo.emf.eclipse.org/fmaps");
- dummy = EMFUtil.createEClass(pkg, "Dummy", false, false);
- name = EMFUtil.createEAttribute(dummy, "name", epackage.getEString());
- fmapContainer = EMFUtil.createEClass(pkg, "FMapContainer", false, false);
-
- string1 = EMFUtil.createEAttribute(fmapContainer, "string1", epackage.getEString());
- string1.setUpperBound(-1);
-
- integer = EMFUtil.createEAttribute(fmapContainer, "integer", epackage.getEInt());
- integer.setUpperBound(-1);
-
- fMap = EMFUtil.createEAttribute(fmapContainer, "fmap", epackage.getEFeatureMapEntry());
- fMap.setUpperBound(-1);
-
- string2 = EMFUtil.createEAttribute(fmapContainer, "string2", epackage.getEString());
- string2.setUpperBound(-1);
-
- longObj = EMFUtil.createEAttribute(fmapContainer, "longObj", epackage.getELongObject());
- longObj.setUpperBound(-1);
-
- bool = EMFUtil.createEAttribute(fmapContainer, "bool", epackage.getEBoolean());
-
- ref1 = EMFUtil.createEReference(fmapContainer, "ref1", dummy, true, true);
- ref1.setUpperBound(-1);
-
- ref2 = EMFUtil.createEReference(fmapContainer, "ref2", dummy, true, false);
-
- ExtendedMetaData.INSTANCE.setFeatureKind(fMap, ExtendedMetaData.GROUP_FEATURE);
-
- ExtendedMetaData.INSTANCE.setGroup(string1, fMap);
- ExtendedMetaData.INSTANCE.setGroup(string2, fMap);
- ExtendedMetaData.INSTANCE.setGroup(integer, fMap);
- ExtendedMetaData.INSTANCE.setGroup(longObj, fMap);
- ExtendedMetaData.INSTANCE.setGroup(bool, fMap);
- ExtendedMetaData.INSTANCE.setGroup(ref1, fMap);
- ExtendedMetaData.INSTANCE.setGroup(ref2, fMap);
- if (!isConfig(LEGACY))
- {
- CDOUtil.prepareDynamicEPackage(pkg);
- }
-
- dummyObj = pkg.getEFactoryInstance().create(dummy);
- dummyObj.eSet(name, "DummyName");
-
- session = openSession();
- tx = session.openTransaction();
- resource = tx.getOrCreateResource(getResourcePath("/test/" + System.currentTimeMillis()));
- session.getPackageRegistry().putEPackage(pkg);
- resource.getContents().add(dummyObj);
- tx.commit();
- }
-
- public void _testAddDifferentTypes() throws CommitException
- {
- EObject fMapObj = EcoreUtil.create(fmapContainer);
-
- FeatureMap fm = (FeatureMap)fMapObj.eGet(fMap);
- fm.add(string1, "Hello");
- fm.add(string2, "lorem ipsum dolor sit amet");
- fm.add(string1, "World");
- fm.add(integer, 5);
- fm.add(bool, true);
- fm.add(ref1, dummyObj);
- fm.add(longObj, 12345678901234567L);
- fm.add(ref2, dummyObj);
- fm.add(bool, false); // Overwrites bool=true
- fm.add(ref2, null); // Overwrites ref2=dummyObj
-
- assertEquals(8, fm.size());
-
- resource.getContents().add(fMapObj);
- tx.commit();
-
- purgeCaches();
-
- EObject fMapObjDb = resource.getContents().get(1);
- FeatureMap fmDb = (FeatureMap)fMapObjDb.eGet(fMap);
- EObject dummyDb = resource.getContents().get(0);
-
- assertEquals(8, fmDb.size());
- assertEquals("Hello", fmDb.getValue(0));
- assertEquals(string1, fmDb.getEStructuralFeature(0));
-
- assertEquals("lorem ipsum dolor sit amet", fmDb.getValue(1));
- assertEquals(string2, fmDb.getEStructuralFeature(1));
-
- assertEquals("World", fmDb.getValue(2));
- assertEquals(string1, fmDb.getEStructuralFeature(2));
-
- assertEquals(5, fmDb.getValue(3));
- assertEquals(integer, fmDb.getEStructuralFeature(3));
-
- assertEquals(false, (boolean)(Boolean)fmDb.getValue(4));
- assertEquals(bool, fmDb.getEStructuralFeature(4));
-
- assertEquals(dummyDb, fmDb.getValue(5));
- assertEquals(ref1, fmDb.getEStructuralFeature(5));
-
- assertEquals(12345678901234567L, fmDb.getValue(6));
- assertEquals(longObj, fmDb.getEStructuralFeature(6));
-
- assertNull(fmDb.getValue(7));
- assertEquals(ref2, fmDb.getEStructuralFeature(7));
- }
-
- @Skips("Postgresql")
- public void testFeatureMaps() throws Exception
- {
- skipStoreWithoutFeatureMaps();
-
- EReference feature = getModel5Package().getTestFeatureMap_Doctors();
-
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- TestFeatureMap featureMap = getModel5Factory().createTestFeatureMap();
- FeatureMap people = featureMap.getPeople();
-
- Doctor doctor1 = getModel5Factory().createDoctor();
- Doctor doctor2 = getModel5Factory().createDoctor();
-
- resource.getContents().add(doctor1);
- resource.getContents().add(doctor2);
-
- people.add(feature, doctor1);
- people.add(feature, doctor2);
-
- int featureMapIndex = resource.getContents().size();
- resource.getContents().add(featureMap);
-
- assertEquals(doctor1, people.get(0).getValue());
- List<?> doctors = (List<?>)people.get(feature, true);
- assertEquals(doctor1, doctors.get(0));
- assertEquals(doctor2, doctors.get(1));
- transaction.commit();
-
- clearCache(getRepository().getRevisionManager());
-
- session = openSession();
- transaction = session.openTransaction();
- resource = transaction.getResource(getResourcePath("/res1"));
-
- featureMap = (TestFeatureMap)resource.getContents().get(featureMapIndex);
- doctors = (List<?>)featureMap.getPeople().get(feature, true);
- assertInstanceOf(Doctor.class, doctors.get(0));
- assertInstanceOf(Doctor.class, doctors.get(1));
- }
-
- private void purgeCaches()
- {
- // according to Eike's comment at Bug 249681, client caches are
- // ignored, if a new session is opened.
- // server caches are wiped by the clearCache call.
-
- String path = resource.getPath();
-
- tx.close();
- session.close();
-
- clearCache(getRepository().getRevisionManager());
-
- session = openSession();
- session.getPackageRegistry().putEPackage(pkg);
-
- tx = session.openTransaction();
-
- resource = tx.getResource(getResourcePath(path));
- }
-}
+/* + * 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: + * Simon McDuff - initial API and implementation + * Eike Stepper - maintenance + * Stefan Winkler - enhanced test cases + */ +package org.eclipse.emf.cdo.tests; + +import org.eclipse.emf.cdo.common.model.EMFUtil; +import org.eclipse.emf.cdo.eresource.CDOResource; +import org.eclipse.emf.cdo.session.CDOSession; +import org.eclipse.emf.cdo.tests.model5.Doctor; +import org.eclipse.emf.cdo.tests.model5.TestFeatureMap; +import org.eclipse.emf.cdo.transaction.CDOTransaction; +import org.eclipse.emf.cdo.util.CDOUtil; +import org.eclipse.emf.cdo.util.CommitException; + +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.ecore.util.ExtendedMetaData; +import org.eclipse.emf.ecore.util.FeatureMap; + +import java.util.List; + +/** + * @author Simon McDuff + */ +public class FeatureMapTest extends AbstractCDOTest +{ + private EPackage pkg; + + private EClass dummy; + + private EAttribute name; + + private EClass fmapContainer; + + private EAttribute string1; + + private EAttribute integer; + + private EAttribute fMap; + + private EAttribute string2; + + private EAttribute longObj; + + private EAttribute bool; + + private EReference ref1; + + private EReference ref2; + + private CDOSession session; + + private CDOTransaction tx; + + private CDOResource resource; + + private EObject dummyObj; + + @Override + protected void doSetUp() throws Exception + { + super.doSetUp(); + + final EcorePackage epackage = EcorePackage.eINSTANCE; + pkg = EMFUtil.createEPackage("fmaps", "fmaps", "http://cdo.emf.eclipse.org/fmaps"); + dummy = EMFUtil.createEClass(pkg, "Dummy", false, false); + name = EMFUtil.createEAttribute(dummy, "name", epackage.getEString()); + fmapContainer = EMFUtil.createEClass(pkg, "FMapContainer", false, false); + + string1 = EMFUtil.createEAttribute(fmapContainer, "string1", epackage.getEString()); + string1.setUpperBound(-1); + + integer = EMFUtil.createEAttribute(fmapContainer, "integer", epackage.getEInt()); + integer.setUpperBound(-1); + + fMap = EMFUtil.createEAttribute(fmapContainer, "fmap", epackage.getEFeatureMapEntry()); + fMap.setUpperBound(-1); + + string2 = EMFUtil.createEAttribute(fmapContainer, "string2", epackage.getEString()); + string2.setUpperBound(-1); + + longObj = EMFUtil.createEAttribute(fmapContainer, "longObj", epackage.getELongObject()); + longObj.setUpperBound(-1); + + bool = EMFUtil.createEAttribute(fmapContainer, "bool", epackage.getEBoolean()); + + ref1 = EMFUtil.createEReference(fmapContainer, "ref1", dummy, true, true); + ref1.setUpperBound(-1); + + ref2 = EMFUtil.createEReference(fmapContainer, "ref2", dummy, true, false); + + ExtendedMetaData.INSTANCE.setFeatureKind(fMap, ExtendedMetaData.GROUP_FEATURE); + + ExtendedMetaData.INSTANCE.setGroup(string1, fMap); + ExtendedMetaData.INSTANCE.setGroup(string2, fMap); + ExtendedMetaData.INSTANCE.setGroup(integer, fMap); + ExtendedMetaData.INSTANCE.setGroup(longObj, fMap); + ExtendedMetaData.INSTANCE.setGroup(bool, fMap); + ExtendedMetaData.INSTANCE.setGroup(ref1, fMap); + ExtendedMetaData.INSTANCE.setGroup(ref2, fMap); + if (!isConfig(LEGACY)) + { + CDOUtil.prepareDynamicEPackage(pkg); + } + + dummyObj = pkg.getEFactoryInstance().create(dummy); + dummyObj.eSet(name, "DummyName"); + + session = openSession(); + tx = session.openTransaction(); + resource = tx.getOrCreateResource(getResourcePath("/test/" + System.currentTimeMillis())); + session.getPackageRegistry().putEPackage(pkg); + resource.getContents().add(dummyObj); + tx.commit(); + } + + public void _testAddDifferentTypes() throws CommitException + { + EObject fMapObj = EcoreUtil.create(fmapContainer); + + FeatureMap fm = (FeatureMap)fMapObj.eGet(fMap); + fm.add(string1, "Hello"); + fm.add(string2, "lorem ipsum dolor sit amet"); + fm.add(string1, "World"); + fm.add(integer, 5); + fm.add(bool, true); + fm.add(ref1, dummyObj); + fm.add(longObj, 12345678901234567L); + fm.add(ref2, dummyObj); + fm.add(bool, false); // Overwrites bool=true + fm.add(ref2, null); // Overwrites ref2=dummyObj + + assertEquals(8, fm.size()); + + resource.getContents().add(fMapObj); + tx.commit(); + + purgeCaches(); + + EObject fMapObjDb = resource.getContents().get(1); + FeatureMap fmDb = (FeatureMap)fMapObjDb.eGet(fMap); + EObject dummyDb = resource.getContents().get(0); + + assertEquals(8, fmDb.size()); + assertEquals("Hello", fmDb.getValue(0)); + assertEquals(string1, fmDb.getEStructuralFeature(0)); + + assertEquals("lorem ipsum dolor sit amet", fmDb.getValue(1)); + assertEquals(string2, fmDb.getEStructuralFeature(1)); + + assertEquals("World", fmDb.getValue(2)); + assertEquals(string1, fmDb.getEStructuralFeature(2)); + + assertEquals(5, fmDb.getValue(3)); + assertEquals(integer, fmDb.getEStructuralFeature(3)); + + assertEquals(false, (boolean)(Boolean)fmDb.getValue(4)); + assertEquals(bool, fmDb.getEStructuralFeature(4)); + + assertEquals(dummyDb, fmDb.getValue(5)); + assertEquals(ref1, fmDb.getEStructuralFeature(5)); + + assertEquals(12345678901234567L, fmDb.getValue(6)); + assertEquals(longObj, fmDb.getEStructuralFeature(6)); + + assertNull(fmDb.getValue(7)); + assertEquals(ref2, fmDb.getEStructuralFeature(7)); + } + + @Skips("Postgresql") + public void testFeatureMaps() throws Exception + { + skipStoreWithoutFeatureMaps(); + + EReference feature = getModel5Package().getTestFeatureMap_Doctors(); + + CDOSession session = openSession(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + TestFeatureMap featureMap = getModel5Factory().createTestFeatureMap(); + FeatureMap people = featureMap.getPeople(); + + Doctor doctor1 = getModel5Factory().createDoctor(); + Doctor doctor2 = getModel5Factory().createDoctor(); + + resource.getContents().add(doctor1); + resource.getContents().add(doctor2); + + people.add(feature, doctor1); + people.add(feature, doctor2); + + int featureMapIndex = resource.getContents().size(); + resource.getContents().add(featureMap); + + assertEquals(doctor1, people.get(0).getValue()); + List<?> doctors = (List<?>)people.get(feature, true); + assertEquals(doctor1, doctors.get(0)); + assertEquals(doctor2, doctors.get(1)); + transaction.commit(); + + clearCache(getRepository().getRevisionManager()); + + session = openSession(); + transaction = session.openTransaction(); + resource = transaction.getResource(getResourcePath("/res1")); + + featureMap = (TestFeatureMap)resource.getContents().get(featureMapIndex); + doctors = (List<?>)featureMap.getPeople().get(feature, true); + assertInstanceOf(Doctor.class, doctors.get(0)); + assertInstanceOf(Doctor.class, doctors.get(1)); + } + + private void purgeCaches() + { + // according to Eike's comment at Bug 249681, client caches are + // ignored, if a new session is opened. + // server caches are wiped by the clearCache call. + + String path = resource.getPath(); + + tx.close(); + session.close(); + + clearCache(getRepository().getRevisionManager()); + + session = openSession(); + session.getPackageRegistry().putEPackage(pkg); + + tx = session.openTransaction(); + + resource = tx.getResource(getResourcePath(path)); + } +} |