/** * Copyright (c) 2004 - 2010 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: * Eike Stepper - initial API and implementation */ package org.eclipse.emf.cdo.tests; import org.eclipse.emf.cdo.CDOObject; 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.model1.Supplier; import org.eclipse.emf.cdo.tests.model1.VAT; import org.eclipse.emf.cdo.tests.model2.Unsettable1; 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.URI; 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.EcorePackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; import java.util.Date; /** * @author Eike Stepper */ public class UnsetTest extends AbstractCDOTest { /** * needed for {@link #commitAndLoadTx(CDOObject)} */ private CDOSession commitAndLoadSession; /** * needed for {@link #commitAndLoadTx(CDOObject)} */ private CDOTransaction commitAndLoadTransaction; /** * Ensures that properly typed (i.e. usable) default values can be read from dynamic packages. *
* Works only in standalone mode.
*/
public static void main(String[] args)
{
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
URI uri = URI.createFileURI("../org.eclipse.emf.cdo.tests.model2/model/model2.ecore");
Resource resource = resourceSet.getResource(uri, true);
EPackage model2 = (EPackage)resource.getContents().get(0);
EClass unsettable2 = (EClass)model2.getEClassifier("Unsettable2WithDefault");
EAttribute unsettableInt = (EAttribute)unsettable2.getEStructuralFeature("unsettableInt");
// Check static default value
Integer defaultValue = (Integer)unsettableInt.getDefaultValue();
assertEquals(5, (int)defaultValue);
// Check dynamic default value
EObject object = EcoreUtil.create(unsettable2);
Integer value = (Integer)object.eGet(unsettableInt);
assertEquals((int)defaultValue, (int)value);
}
public void testReadDefaultValue() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
resource.getContents().add(supplier);
transaction.commit();
session.close();
session = openSession();
CDOView view = session.openView();
resource = view.getResource("/test1");
supplier = (Supplier)resource.getContents().get(0);
assertEquals(true, supplier.isPreferred());
}
public void testWriteDefaultValue() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
supplier.setPreferred(true);
resource.getContents().add(supplier);
transaction.commit();
session.close();
session = openSession();
CDOView view = session.openView();
resource = view.getResource("/test1");
supplier = (Supplier)resource.getContents().get(0);
assertEquals(true, supplier.isPreferred());
}
public void testWriteNonDefaultValue() throws Exception
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource("/test1");
Supplier supplier = getModel1Factory().createSupplier();
supplier.setName("Stepper");
supplier.setPreferred(false);
resource.getContents().add(supplier);
transaction.commit();
session.close();
session = openSession();
CDOView view = session.openView();
resource = view.getResource("/test1");
supplier = (Supplier)resource.getContents().get(0);
assertEquals(false, supplier.isPreferred());
}
public void testUnsetNonDefaultValue() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetBoolean() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableBoolean(true);
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(true, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetByte() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableByte(Byte.MAX_VALUE);
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(true, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetChar() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableChar('a');
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(true, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetDate() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableDate(new Date());
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(true, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetDouble() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableDouble(42.34d);
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(true, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetFloat() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableFloat(42.34f);
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(true, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetLong() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableLong(42L);
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(true, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetShort() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableShort(Short.MAX_VALUE);
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(true, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetString() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableString("42");
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(true, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testIsSetVAT() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableVAT(VAT.VAT15);
Unsettable1 result = commitAndLoad(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(true, result.isSetUnsettableVAT());
}
public void testIsSetMultipleTimes() throws Exception
{
Unsettable1 unsettable = getModel2Factory().createUnsettable1();
unsettable.setUnsettableInt(42);
Unsettable1 result = commitAndLoadTx(unsettable);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(true, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
result.setUnsettableByte(Byte.MAX_VALUE);
result = commitAndLoadTx(result);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(true, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(true, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
result.unsetUnsettableByte();
result.unsetUnsettableInt();
result.setUnsettableString("blah");
result = commitAndLoadTx(result);
assertEquals(false, result.isSetUnsettableBoolean());
assertEquals(false, result.isSetUnsettableByte());
assertEquals(false, result.isSetUnsettableChar());
assertEquals(false, result.isSetUnsettableDate());
assertEquals(false, result.isSetUnsettableDouble());
assertEquals(false, result.isSetUnsettableFloat());
assertEquals(false, result.isSetUnsettableInt());
assertEquals(false, result.isSetUnsettableLong());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(false, result.isSetUnsettableShort());
assertEquals(true, result.isSetUnsettableString());
assertEquals(false, result.isSetUnsettableVAT());
}
public void testUnsettableBaseTypeVsObjectType() throws Exception
{
EPackage pkg = EMFUtil.createEPackage("unsettablePackage", "unset",
"http://cdo.eclipse.org/unsettablePackage.ecore");
EClass cls = EMFUtil.createEClass(pkg, "unsettableClass", false, false);
EAttribute baseElement = EMFUtil.createEAttribute(cls, "baseElement", EcorePackage.eINSTANCE.getEInt());
baseElement.setUnsettable(true);
baseElement.setDefaultValue(23);
EAttribute objectElement = EMFUtil.createEAttribute(cls, "objectElement", EcorePackage.eINSTANCE
.getEIntegerObject());
objectElement.setUnsettable(true);
objectElement.setDefaultValue(42);
CDOUtil.prepareDynamicEPackage(pkg);
{
EObject test1 = EcoreUtil.create(cls);
test1.eSet(baseElement, 1);
test1.eSet(objectElement, 2);
EObject test2 = EcoreUtil.create(cls);
test2.eSet(baseElement, 23);
test2.eSet(objectElement, 42);
EObject test3 = EcoreUtil.create(cls);
test3.eSet(baseElement, null);
test3.eSet(objectElement, null);
EObject test4 = EcoreUtil.create(cls);
test4.eUnset(baseElement);
test4.eUnset(objectElement);
assertTrue(test1.eIsSet(baseElement));
assertTrue(test1.eIsSet(objectElement));
assertEquals(1, test1.eGet(baseElement));
assertEquals(2, test1.eGet(objectElement));
assertTrue(test2.eIsSet(baseElement));
assertTrue(test2.eIsSet(objectElement));
assertEquals(23, test2.eGet(baseElement));
assertEquals(42, test2.eGet(objectElement));
// for basetypes, setting value null seems to be equivalent
// to unset.
assertFalse(test3.eIsSet(baseElement));
assertTrue(test3.eIsSet(objectElement));
assertEquals(23, test3.eGet(baseElement));
assertNull(test3.eGet(objectElement));
assertFalse(test4.eIsSet(baseElement));
assertFalse(test4.eIsSet(objectElement));
assertEquals(23, test4.eGet(baseElement));
assertEquals(42, test4.eGet(objectElement));
CDOSession session = openSession(pkg);
CDOTransaction transaction = session.openTransaction();
CDOResource res = transaction.createResource("/test1");
res.getContents().add(test1);
res.getContents().add(test2);
res.getContents().add(test3);
res.getContents().add(test4);
transaction.commit();
transaction.close();
session.close();
}
clearCache(getRepository().getRevisionManager());
{
CDOSession session = openSession(pkg);
CDOView view = session.openTransaction();
CDOResource res = view.getResource("/test1");
assertEquals(4, res.getContents().size());
EObject test1 = res.getContents().get(0);
EObject test2 = res.getContents().get(1);
EObject test3 = res.getContents().get(2);
EObject test4 = res.getContents().get(3);
assertTrue(test1.eIsSet(baseElement));
assertTrue(test1.eIsSet(objectElement));
assertEquals(1, test1.eGet(baseElement));
assertEquals(2, test1.eGet(objectElement));
assertTrue(test2.eIsSet(baseElement));
assertTrue(test2.eIsSet(objectElement));
assertEquals(23, test2.eGet(baseElement));
assertEquals(42, test2.eGet(objectElement));
assertFalse(test3.eIsSet(baseElement));
assertTrue(test3.eIsSet(objectElement));
assertEquals(23, test3.eGet(baseElement));
assertNull(test3.eGet(objectElement));
assertFalse(test4.eIsSet(baseElement));
assertFalse(test4.eIsSet(objectElement));
assertEquals(23, test4.eGet(baseElement));
assertEquals(42, test4.eGet(objectElement));
view.close();
session.close();
}
}
private