blob: e0967c130d27a0c3518f21b2e5ea3f8c9492d413 [file] [log] [blame]
/*
* Copyright (c) 2008-2013, 2016, 2019 Eike Stepper (Loehne, 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:
* Eike Stepper - initial API and implementation
* Simon McDuff - maintenance
* Christian W. Damus (CEA) - 378620 support unsettable features of custom data type
*/
package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.common.revision.CDORevisionData;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.model1.Product1;
import org.eclipse.emf.cdo.tests.model1.Supplier;
import org.eclipse.emf.cdo.tests.model1.VAT;
import org.eclipse.emf.cdo.tests.model3.ClassWithJavaClassAttribute;
import org.eclipse.emf.cdo.tests.model3.ClassWithJavaObjectAttribute;
import org.eclipse.emf.cdo.tests.model3.Point;
import org.eclipse.emf.cdo.tests.model3.Polygon;
import org.eclipse.emf.cdo.tests.model3.PolygonWithDuplicates;
import org.eclipse.emf.cdo.tests.model6.HasNillableAttribute;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.common.util.EList;
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.EStructuralFeature;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* @author Eike Stepper
*/
public class AttributeTest extends AbstractCDOTest
{
public void testPrimitiveDefaults() throws Exception
{
{
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Preferred Supplier");
assertEquals(true, supplier.isPreferred());
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(supplier);
assertEquals(true, supplier.isPreferred());
transaction.commit();
assertEquals(true, supplier.isPreferred());
session.close();
}
{
CDOSession session = openSession();
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/my/resource"));
Supplier supplier = (Supplier)resource.getContents().get(0);
assertEquals(true, supplier.isPreferred());
view.close();
session.close();
}
}
public void testEnumDefaults() throws Exception
{
{
Product1 product = getModel1Factory().createProduct1();
product.setName("Test Product");
assertEquals(VAT.VAT15, product.getVat());
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(product);
assertEquals(VAT.VAT15, product.getVat());
transaction.commit();
assertEquals(VAT.VAT15, product.getVat());
session.close();
}
{
CDOSession session = openSession();
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/my/resource"));
Product1 product = (Product1)resource.getContents().get(0);
assertEquals(VAT.VAT15, product.getVat());
view.close();
session.close();
}
}
public void testByteArray() throws Exception
{
byte saveByteArray[] = new byte[] { 0, 1, 2, 3, 0, 1, 0, 100 };
{
EPackage packageWithBytes = createDynamicEPackageWithByte();
CDOSession session = openSession();
session.getPackageRegistry().putEPackage(packageWithBytes);
CDOTransaction transaction = session.openTransaction();
EClass eClass = (EClass)packageWithBytes.getEClassifier("GenOfByteArray");
EObject genOfByteArray = packageWithBytes.getEFactoryInstance().create(eClass);
genOfByteArray.eSet(genOfByteArray.eClass().getEStructuralFeature("bytes"), saveByteArray);
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(genOfByteArray);
transaction.commit();
session.close();
}
clearCache(getRepository().getRevisionManager());
{
CDOSession session = openSession();
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/my/resource"));
EObject genOfByteArray = resource.getContents().get(0);
byte storeByteArray[] = (byte[])genOfByteArray.eGet(genOfByteArray.eClass().getEStructuralFeature("bytes"));
assertEquals(storeByteArray.length, saveByteArray.length);
for (int i = 0; i < storeByteArray.length; i++)
{
assertEquals(storeByteArray[i], saveByteArray[i]);
}
view.close();
session.close();
}
}
public void testByteArrayEmpty() throws Exception
{
byte saveByteArray[] = new byte[0];
{
EPackage packageWithBytes = createDynamicEPackageWithByte();
CDOSession session = openSession();
session.getPackageRegistry().putEPackage(packageWithBytes);
CDOTransaction transaction = session.openTransaction();
EClass eClass = (EClass)packageWithBytes.getEClassifier("GenOfByteArray");
EObject genOfByteArray = packageWithBytes.getEFactoryInstance().create(eClass);
genOfByteArray.eSet(genOfByteArray.eClass().getEStructuralFeature("bytes"), saveByteArray);
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(genOfByteArray);
transaction.commit();
session.close();
}
clearCache(getRepository().getRevisionManager());
{
CDOSession session = openSession();
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/my/resource"));
EObject genOfByteArray = resource.getContents().get(0);
byte storeByteArray[] = (byte[])genOfByteArray.eGet(genOfByteArray.eClass().getEStructuralFeature("bytes"));
assertEquals(0, storeByteArray.length);
view.close();
session.close();
}
}
public void testByteArrayNull() throws Exception
{
byte saveByteArray[] = null;
{
EPackage packageWithBytes = createDynamicEPackageWithByte();
CDOSession session = openSession();
session.getPackageRegistry().putEPackage(packageWithBytes);
CDOTransaction transaction = session.openTransaction();
EClass eClass = (EClass)packageWithBytes.getEClassifier("GenOfByteArray");
EObject genOfByteArray = packageWithBytes.getEFactoryInstance().create(eClass);
genOfByteArray.eSet(genOfByteArray.eClass().getEStructuralFeature("bytes"), saveByteArray);
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(genOfByteArray);
transaction.commit();
session.close();
}
clearCache(getRepository().getRevisionManager());
{
CDOSession session = openSession();
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/my/resource"));
EObject genOfByteArray = resource.getContents().get(0);
byte storeByteArray[] = (byte[])genOfByteArray.eGet(genOfByteArray.eClass().getEStructuralFeature("bytes"));
assertEquals(true, storeByteArray == null || storeByteArray.length == 0);
view.close();
session.close();
}
}
public void testBigDecimalAndBigInteger() throws Exception
{
BigDecimal bigDecimal = new BigDecimal(10);
BigInteger bigInteger = BigInteger.valueOf(10);
{
EPackage ePackage = createDynamicEPackageBigIntegerAndBigDecimal();
CDOSession session = openSession();
session.getPackageRegistry().putEPackage(ePackage);
CDOTransaction transaction = session.openTransaction();
EClass eClass = (EClass)ePackage.getEClassifier("Gen");
EStructuralFeature bigDecimalFeature = eClass.getEStructuralFeature("bigDecimal");
EStructuralFeature bigIntegerFeature = eClass.getEStructuralFeature("bigInteger");
EObject gen = ePackage.getEFactoryInstance().create(eClass);
gen.eSet(bigDecimalFeature, bigDecimal);
gen.eSet(bigIntegerFeature, bigInteger);
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(gen);
CDORevisionData data = CDOUtil.getCDOObject(gen).cdoRevision().data();
assertEquals(BigDecimal.class, data.get(bigDecimalFeature, -1).getClass());
assertEquals(BigInteger.class, data.get(bigIntegerFeature, -1).getClass());
transaction.commit();
session.close();
}
clearCache(getRepository().getRevisionManager());
{
CDOSession session = openSession();
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/my/resource"));
EObject gen = resource.getContents().get(0);
BigDecimal bigDecimalStore = (BigDecimal)gen.eGet(gen.eClass().getEStructuralFeature("bigDecimal"));
BigInteger bigIntegerStore = (BigInteger)gen.eGet(gen.eClass().getEStructuralFeature("bigInteger"));
assertEquals(bigDecimal, bigDecimalStore);
assertEquals(bigInteger, bigIntegerStore);
view.close();
session.close();
}
}
public void testBigDecimalAndBigIntegerNull() throws Exception
{
BigDecimal bigDecimal = null;
BigInteger bigInteger = null;
{
EPackage ePackage = createDynamicEPackageBigIntegerAndBigDecimal();
CDOSession session = openSession();
session.getPackageRegistry().putEPackage(ePackage);
CDOTransaction transaction = session.openTransaction();
EClass eClass = (EClass)ePackage.getEClassifier("Gen");
EStructuralFeature bigDecimalFeature = eClass.getEStructuralFeature("bigDecimal");
EStructuralFeature bigIntegerFeature = eClass.getEStructuralFeature("bigInteger");
EObject gen = ePackage.getEFactoryInstance().create(eClass);
gen.eSet(bigDecimalFeature, bigDecimal);
gen.eSet(bigIntegerFeature, bigInteger);
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(gen);
transaction.commit();
session.close();
}
clearCache(getRepository().getRevisionManager());
{
CDOSession session = openSession();
CDOView view = session.openView();
CDOResource resource = view.getResource(getResourcePath("/my/resource"));
EObject gen = resource.getContents().get(0);
BigDecimal bigDecimalStore = (BigDecimal)gen.eGet(gen.eClass().getEStructuralFeature("bigDecimal"));
BigInteger bigIntegerStore = (BigInteger)gen.eGet(gen.eClass().getEStructuralFeature("bigInteger"));
assertNull(bigDecimalStore);
assertNull(bigIntegerStore);
view.close();
session.close();
}
}
private EPackage createDynamicEPackageWithByte()
{
final EcoreFactory efactory = EcoreFactory.eINSTANCE;
final EcorePackage epackage = EcorePackage.eINSTANCE;
EClass schoolBookEClass = efactory.createEClass();
schoolBookEClass.setName("GenOfByteArray");
// create a new attribute for this EClass
EAttribute level = efactory.createEAttribute();
level.setName("bytes");
level.setEType(epackage.getEByteArray());
schoolBookEClass.getEStructuralFeatures().add(level);
// Create a new EPackage and add the new EClasses
EPackage schoolPackage = createUniquePackage();
schoolPackage.getEClassifiers().add(schoolBookEClass);
return schoolPackage;
}
private EPackage createDynamicEPackageBigIntegerAndBigDecimal()
{
final EcoreFactory efactory = EcoreFactory.eINSTANCE;
final EcorePackage epackage = EcorePackage.eINSTANCE;
EClass schoolBookEClass = efactory.createEClass();
schoolBookEClass.setName("Gen");
// create a new attribute for this EClass
EAttribute attrBigDecimal = efactory.createEAttribute();
attrBigDecimal.setName("bigDecimal");
attrBigDecimal.setEType(epackage.getEBigDecimal());
schoolBookEClass.getEStructuralFeatures().add(attrBigDecimal);
EAttribute attrBigInteger = efactory.createEAttribute();
attrBigInteger.setName("bigInteger");
attrBigInteger.setEType(epackage.getEBigInteger());
schoolBookEClass.getEStructuralFeatures().add(attrBigInteger);
// Create a new EPackage and add the new EClasses
EPackage schoolPackage = createUniquePackage();
schoolPackage.getEClassifiers().add(schoolBookEClass);
return schoolPackage;
}
public void testManyValuedCustomDataType_Get() throws Exception
{
Polygon polygon = getModel3Factory().createPolygon();
EList<Point> points = polygon.getPoints();
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
points = polygon.getPoints();
assertEquals(3, points.size());
assertInstanceOf(Point.class, points.get(0));
assertInstanceOf(Point.class, points.get(1));
assertInstanceOf(Point.class, points.get(2));
Object[] array1 = points.toArray();
assertEquals(points.size(), array1.length);
assertInstanceOf(Point.class, array1[0]);
assertInstanceOf(Point.class, array1[1]);
assertInstanceOf(Point.class, array1[2]);
Point[] array2 = points.toArray(new Point[3]);
assertEquals(points.size(), array2.length);
assertInstanceOf(Point.class, array2[0]);
assertInstanceOf(Point.class, array2[1]);
assertInstanceOf(Point.class, array2[2]);
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(polygon);
points = polygon.getPoints();
assertEquals(3, points.size());
assertInstanceOf(Point.class, points.get(0));
assertInstanceOf(Point.class, points.get(1));
assertInstanceOf(Point.class, points.get(2));
array1 = points.toArray();
assertEquals(points.size(), array1.length);
assertInstanceOf(Point.class, array1[0]);
assertInstanceOf(Point.class, array1[1]);
assertInstanceOf(Point.class, array1[2]);
array2 = points.toArray(new Point[3]);
assertEquals(points.size(), array2.length);
assertInstanceOf(Point.class, array2[0]);
assertInstanceOf(Point.class, array2[1]);
assertInstanceOf(Point.class, array2[2]);
transaction.commit();
points = polygon.getPoints();
assertEquals(3, points.size());
assertInstanceOf(Point.class, points.get(0));
assertInstanceOf(Point.class, points.get(1));
assertInstanceOf(Point.class, points.get(2));
array1 = points.toArray();
assertEquals(points.size(), array1.length);
assertInstanceOf(Point.class, array1[0]);
assertInstanceOf(Point.class, array1[1]);
assertInstanceOf(Point.class, array1[2]);
array2 = points.toArray(new Point[3]);
assertEquals(points.size(), array2.length);
assertInstanceOf(Point.class, array2[0]);
assertInstanceOf(Point.class, array2[1]);
assertInstanceOf(Point.class, array2[2]);
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
polygon = (Polygon)resource.getContents().get(0);
points = polygon.getPoints();
assertEquals(3, points.size());
assertInstanceOf(Point.class, points.get(0));
assertInstanceOf(Point.class, points.get(1));
assertInstanceOf(Point.class, points.get(2));
array1 = points.toArray();
assertEquals(points.size(), array1.length);
assertInstanceOf(Point.class, array1[0]);
assertInstanceOf(Point.class, array1[1]);
assertInstanceOf(Point.class, array1[2]);
array2 = points.toArray(new Point[3]);
assertEquals(points.size(), array2.length);
assertInstanceOf(Point.class, array2[0]);
assertInstanceOf(Point.class, array2[1]);
assertInstanceOf(Point.class, array2[2]);
}
public void testManyValuedCustomDataType_Contains() throws Exception
{
Polygon polygon = getModel3Factory().createPolygon();
EList<Point> points = polygon.getPoints();
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
points.add(new Point(7, 8));
points.add(new Point(9, 0));
assertEquals(true, points.contains(new Point(1, 2)));
assertEquals(true, points.contains(new Point(3, 4)));
assertEquals(true, points.contains(new Point(5, 6)));
assertEquals(true, points.contains(new Point(7, 8)));
assertEquals(true, points.contains(new Point(9, 0)));
assertEquals(false, points.contains(new Point(0, 2)));
assertEquals(false, points.contains(new Point(0, 4)));
assertEquals(false, points.contains(new Point(0, 6)));
assertEquals(false, points.contains(new Point(0, 8)));
assertEquals(false, points.contains(new Point(0, 0)));
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(polygon);
points = polygon.getPoints();
assertEquals(true, points.contains(new Point(1, 2)));
assertEquals(true, points.contains(new Point(3, 4)));
assertEquals(true, points.contains(new Point(5, 6)));
assertEquals(true, points.contains(new Point(7, 8)));
assertEquals(true, points.contains(new Point(9, 0)));
assertEquals(false, points.contains(new Point(0, 2)));
assertEquals(false, points.contains(new Point(0, 4)));
assertEquals(false, points.contains(new Point(0, 6)));
assertEquals(false, points.contains(new Point(0, 8)));
assertEquals(false, points.contains(new Point(0, 0)));
transaction.commit();
points = polygon.getPoints();
assertEquals(true, points.contains(new Point(1, 2)));
assertEquals(true, points.contains(new Point(3, 4)));
assertEquals(true, points.contains(new Point(5, 6)));
assertEquals(true, points.contains(new Point(7, 8)));
assertEquals(true, points.contains(new Point(9, 0)));
assertEquals(false, points.contains(new Point(0, 2)));
assertEquals(false, points.contains(new Point(0, 4)));
assertEquals(false, points.contains(new Point(0, 6)));
assertEquals(false, points.contains(new Point(0, 8)));
assertEquals(false, points.contains(new Point(0, 0)));
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
polygon = (Polygon)resource.getContents().get(0);
points = polygon.getPoints();
assertEquals(true, points.contains(new Point(1, 2)));
assertEquals(true, points.contains(new Point(3, 4)));
assertEquals(true, points.contains(new Point(5, 6)));
assertEquals(true, points.contains(new Point(7, 8)));
assertEquals(true, points.contains(new Point(9, 0)));
assertEquals(false, points.contains(new Point(0, 2)));
assertEquals(false, points.contains(new Point(0, 4)));
assertEquals(false, points.contains(new Point(0, 6)));
assertEquals(false, points.contains(new Point(0, 8)));
assertEquals(false, points.contains(new Point(0, 0)));
}
public void testManyValuedCustomDataType_ContainsAll() throws Exception
{
Polygon polygon = getModel3Factory().createPolygon();
EList<Point> points = polygon.getPoints();
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
points.add(new Point(7, 8));
points.add(new Point(9, 0));
assertEquals(true, points.containsAll(points));
assertEquals(true, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(9, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(0, 0))));
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(polygon);
points = polygon.getPoints();
assertEquals(true, points.containsAll(points));
assertEquals(true, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(9, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(0, 0))));
transaction.commit();
points = polygon.getPoints();
assertEquals(true, points.containsAll(points));
assertEquals(true, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(9, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(0, 0))));
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
polygon = (Polygon)resource.getContents().get(0);
points = polygon.getPoints();
assertEquals(true, points.containsAll(points));
assertEquals(true, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(7, 8), new Point(9, 0))));
assertEquals(true, points.containsAll(Arrays.asList(new Point(9, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(5, 6), new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(7, 8), new Point(0, 0))));
assertEquals(false, points.containsAll(Arrays.asList(new Point(0, 0))));
}
public void testManyValuedCustomDataType_IndexOf() throws Exception
{
PolygonWithDuplicates polygon = getModel3Factory().createPolygonWithDuplicates();
EList<Point> points = polygon.getPoints();
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
points.add(new Point(7, 8));
points.add(new Point(9, 0));
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
points.add(new Point(7, 8));
points.add(new Point(9, 0));
assertEquals(0, points.indexOf(new Point(1, 2)));
assertEquals(1, points.indexOf(new Point(3, 4)));
assertEquals(2, points.indexOf(new Point(5, 6)));
assertEquals(3, points.indexOf(new Point(7, 8)));
assertEquals(4, points.indexOf(new Point(9, 0)));
assertEquals(-1, points.indexOf(new Point(0, 2)));
assertEquals(-1, points.indexOf(new Point(0, 4)));
assertEquals(-1, points.indexOf(new Point(0, 6)));
assertEquals(-1, points.indexOf(new Point(0, 8)));
assertEquals(-1, points.indexOf(new Point(0, 0)));
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(polygon);
points = polygon.getPoints();
assertEquals(0, points.indexOf(new Point(1, 2)));
assertEquals(1, points.indexOf(new Point(3, 4)));
assertEquals(2, points.indexOf(new Point(5, 6)));
assertEquals(3, points.indexOf(new Point(7, 8)));
assertEquals(4, points.indexOf(new Point(9, 0)));
assertEquals(-1, points.indexOf(new Point(0, 2)));
assertEquals(-1, points.indexOf(new Point(0, 4)));
assertEquals(-1, points.indexOf(new Point(0, 6)));
assertEquals(-1, points.indexOf(new Point(0, 8)));
assertEquals(-1, points.indexOf(new Point(0, 0)));
transaction.commit();
points = polygon.getPoints();
assertEquals(0, points.indexOf(new Point(1, 2)));
assertEquals(1, points.indexOf(new Point(3, 4)));
assertEquals(2, points.indexOf(new Point(5, 6)));
assertEquals(3, points.indexOf(new Point(7, 8)));
assertEquals(4, points.indexOf(new Point(9, 0)));
assertEquals(-1, points.indexOf(new Point(0, 2)));
assertEquals(-1, points.indexOf(new Point(0, 4)));
assertEquals(-1, points.indexOf(new Point(0, 6)));
assertEquals(-1, points.indexOf(new Point(0, 8)));
assertEquals(-1, points.indexOf(new Point(0, 0)));
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
polygon = (PolygonWithDuplicates)resource.getContents().get(0);
points = polygon.getPoints();
assertEquals(0, points.indexOf(new Point(1, 2)));
assertEquals(1, points.indexOf(new Point(3, 4)));
assertEquals(2, points.indexOf(new Point(5, 6)));
assertEquals(3, points.indexOf(new Point(7, 8)));
assertEquals(4, points.indexOf(new Point(9, 0)));
assertEquals(-1, points.indexOf(new Point(0, 2)));
assertEquals(-1, points.indexOf(new Point(0, 4)));
assertEquals(-1, points.indexOf(new Point(0, 6)));
assertEquals(-1, points.indexOf(new Point(0, 8)));
assertEquals(-1, points.indexOf(new Point(0, 0)));
}
public void testManyValuedCustomDataType_LastIndexOf() throws Exception
{
PolygonWithDuplicates polygon = getModel3Factory().createPolygonWithDuplicates();
EList<Point> points = polygon.getPoints();
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
points.add(new Point(7, 8));
points.add(new Point(9, 0));
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
points.add(new Point(7, 8));
points.add(new Point(9, 0));
assertEquals(5, points.lastIndexOf(new Point(1, 2)));
assertEquals(6, points.lastIndexOf(new Point(3, 4)));
assertEquals(7, points.lastIndexOf(new Point(5, 6)));
assertEquals(8, points.lastIndexOf(new Point(7, 8)));
assertEquals(9, points.lastIndexOf(new Point(9, 0)));
assertEquals(-1, points.lastIndexOf(new Point(0, 2)));
assertEquals(-1, points.lastIndexOf(new Point(0, 4)));
assertEquals(-1, points.lastIndexOf(new Point(0, 6)));
assertEquals(-1, points.lastIndexOf(new Point(0, 8)));
assertEquals(-1, points.lastIndexOf(new Point(0, 0)));
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(polygon);
points = polygon.getPoints();
assertEquals(5, points.lastIndexOf(new Point(1, 2)));
assertEquals(6, points.lastIndexOf(new Point(3, 4)));
assertEquals(7, points.lastIndexOf(new Point(5, 6)));
assertEquals(8, points.lastIndexOf(new Point(7, 8)));
assertEquals(9, points.lastIndexOf(new Point(9, 0)));
assertEquals(-1, points.lastIndexOf(new Point(0, 2)));
assertEquals(-1, points.lastIndexOf(new Point(0, 4)));
assertEquals(-1, points.lastIndexOf(new Point(0, 6)));
assertEquals(-1, points.lastIndexOf(new Point(0, 8)));
assertEquals(-1, points.lastIndexOf(new Point(0, 0)));
transaction.commit();
points = polygon.getPoints();
assertEquals(5, points.lastIndexOf(new Point(1, 2)));
assertEquals(6, points.lastIndexOf(new Point(3, 4)));
assertEquals(7, points.lastIndexOf(new Point(5, 6)));
assertEquals(8, points.lastIndexOf(new Point(7, 8)));
assertEquals(9, points.lastIndexOf(new Point(9, 0)));
assertEquals(-1, points.lastIndexOf(new Point(0, 2)));
assertEquals(-1, points.lastIndexOf(new Point(0, 4)));
assertEquals(-1, points.lastIndexOf(new Point(0, 6)));
assertEquals(-1, points.lastIndexOf(new Point(0, 8)));
assertEquals(-1, points.lastIndexOf(new Point(0, 0)));
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
polygon = (PolygonWithDuplicates)resource.getContents().get(0);
points = polygon.getPoints();
assertEquals(5, points.lastIndexOf(new Point(1, 2)));
assertEquals(6, points.lastIndexOf(new Point(3, 4)));
assertEquals(7, points.lastIndexOf(new Point(5, 6)));
assertEquals(8, points.lastIndexOf(new Point(7, 8)));
assertEquals(9, points.lastIndexOf(new Point(9, 0)));
assertEquals(-1, points.lastIndexOf(new Point(0, 2)));
assertEquals(-1, points.lastIndexOf(new Point(0, 4)));
assertEquals(-1, points.lastIndexOf(new Point(0, 6)));
assertEquals(-1, points.lastIndexOf(new Point(0, 8)));
assertEquals(-1, points.lastIndexOf(new Point(0, 0)));
}
public void testManyValuedCustomDataType_Bugzilla_319950() throws Exception
{
Polygon polygon = getModel3Factory().createPolygon();
EList<Point> points = polygon.getPoints();
points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(5, 6));
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(polygon);
transaction.commit();
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
EList<EObject> contents = resource.getContents();
// java.lang.ClassCastException: org.eclipse.emf.internal.cdo.revision.CDOListWithElementProxiesImpl
EcoreUtil.copyAll(contents);
}
/**
* Bug 355787.
*/
public void testJavaClass() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(createClassWithJavaClassAttribute(CDOTransaction.class));
resource.getContents().add(createClassWithJavaClassAttribute(boolean.class));
resource.getContents().add(createClassWithJavaClassAttribute(byte.class));
resource.getContents().add(createClassWithJavaClassAttribute(char.class));
resource.getContents().add(createClassWithJavaClassAttribute(double.class));
resource.getContents().add(createClassWithJavaClassAttribute(float.class));
resource.getContents().add(createClassWithJavaClassAttribute(int.class));
resource.getContents().add(createClassWithJavaClassAttribute(long.class));
resource.getContents().add(createClassWithJavaClassAttribute(short.class));
transaction.commit();
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
EList<EObject> contents = resource.getContents();
assertEquals(CDOTransaction.class, ((ClassWithJavaClassAttribute)contents.get(0)).getJavaClass());
assertEquals(boolean.class, ((ClassWithJavaClassAttribute)contents.get(1)).getJavaClass());
assertEquals(byte.class, ((ClassWithJavaClassAttribute)contents.get(2)).getJavaClass());
assertEquals(char.class, ((ClassWithJavaClassAttribute)contents.get(3)).getJavaClass());
assertEquals(double.class, ((ClassWithJavaClassAttribute)contents.get(4)).getJavaClass());
assertEquals(float.class, ((ClassWithJavaClassAttribute)contents.get(5)).getJavaClass());
assertEquals(int.class, ((ClassWithJavaClassAttribute)contents.get(6)).getJavaClass());
assertEquals(long.class, ((ClassWithJavaClassAttribute)contents.get(7)).getJavaClass());
assertEquals(short.class, ((ClassWithJavaClassAttribute)contents.get(8)).getJavaClass());
}
private ClassWithJavaClassAttribute createClassWithJavaClassAttribute(Class<?> javaClass)
{
ClassWithJavaClassAttribute object = getModel3Factory().createClassWithJavaClassAttribute();
object.setJavaClass(javaClass);
return object;
}
/**
* Bug 355787.
*/
public void testJavaObject() throws Exception
{
Map<String, Number> salaries = new HashMap<>();
salaries.put("Eike", 5000);
salaries.put("Martin", 6000.99);
salaries.put("Ed", 7000f);
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
resource.getContents().add(createClassWithJavaObjectAttribute(salaries));
transaction.commit();
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/resource"));
EList<EObject> contents = resource.getContents();
assertEquals(salaries, ((ClassWithJavaObjectAttribute)contents.get(0)).getJavaObject());
}
private ClassWithJavaObjectAttribute createClassWithJavaObjectAttribute(Object javaObject)
{
ClassWithJavaObjectAttribute object = getModel3Factory().createClassWithJavaObjectAttribute();
object.setJavaObject(javaObject);
return object;
}
/**
* Bug 378620.
*/
public void testNillableAttributeOfCustomType() throws Exception
{
HasNillableAttribute hasNonNull = getModel6Factory().createHasNillableAttribute();
hasNonNull.setNillable("not nil");
HasNillableAttribute hasImplicitNull = getModel6Factory().createHasNillableAttribute();
hasImplicitNull.unsetNillable(); // implicit null
HasNillableAttribute hasExplicitNull = getModel6Factory().createHasNillableAttribute();
hasExplicitNull.setNillable(null); // explicit null
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/my/nillable"));
resource.getContents().add(hasNonNull);
resource.getContents().add(hasImplicitNull);
resource.getContents().add(hasExplicitNull);
transaction.commit();
session.close();
session = openSession();
transaction = session.openTransaction();
resource = transaction.getResource(getResourcePath("/my/nillable"));
EList<EObject> contents = resource.getContents();
assertEquals(3, contents.size());
HasNillableAttribute hasNillable = (HasNillableAttribute)contents.get(0);
assertEquals("not nil", hasNillable.getNillable());
assertEquals(true, hasNillable.isSetNillable());
hasNillable = (HasNillableAttribute)contents.get(1);
assertNull(hasNillable.getNillable());
assertEquals(false, hasNillable.isSetNillable());
hasNillable = (HasNillableAttribute)contents.get(2);
assertNull(hasNillable.getNillable());
assertEquals(true, hasNillable.isSetNillable());
}
}