/*
* Copyright (c) 2011-2013 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:
* Caspar De Groot - initial API and implementation
*/
package org.eclipse.emf.cdo.tests.bugzilla;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.spi.common.revision.BaseCDORevision;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.model1.Model1Factory;
import org.eclipse.emf.cdo.tests.model1.Model1Package;
import org.eclipse.emf.cdo.tests.model1.OrderDetail;
import org.eclipse.emf.cdo.tests.model1.Product1;
import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
import org.eclipse.emf.cdo.tests.model1.VAT;
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.EDataType;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
/**
* @author Caspar De Groot
*/
public class Bugzilla_335675_Test extends AbstractCDOTest
{
public void test0() throws Exception
{
EPackage pkg = null;
EAttribute attr1 = null;
EAttribute attr2 = null;
EAttribute attr3 = null;
final int TRANSIENT_VALUE = 2;
EClass classA = null;
{
pkg = createUniquePackage();
classA = EcoreFactory.eINSTANCE.createEClass();
classA.setName("A");
attr1 = createAttribute("attr1", EcorePackage.eINSTANCE.getEInt(), false);
attr2 = createAttribute("attr2", EcorePackage.eINSTANCE.getEInt(), true);
attr3 = createAttribute("attr3", EcorePackage.eINSTANCE.getEInt(), false);
classA.getEStructuralFeatures().add(attr1);
classA.getEStructuralFeatures().add(attr2);
classA.getEStructuralFeatures().add(attr3);
pkg.getEClassifiers().add(classA);
}
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("test"));
classA = (EClass)pkg.getEClassifier("A");
EObject instanceA = EcoreUtil.create(classA);
attr1 = (EAttribute)classA.getEStructuralFeature("attr1");
attr2 = (EAttribute)classA.getEStructuralFeature("attr2");
attr3 = (EAttribute)classA.getEStructuralFeature("attr3");
instanceA.eSet(attr1, 1);
instanceA.eSet(attr2, TRANSIENT_VALUE);
instanceA.eSet(attr3, 3);
resource.getContents().add(instanceA);
transaction.commit();
session.close();
}
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("test"));
CDOObject cdoObject = CDOUtil.getCDOObject(resource.getContents().get(0));
classA = cdoObject.eClass();
attr1 = (EAttribute)classA.getEStructuralFeature("attr1");
attr2 = (EAttribute)classA.getEStructuralFeature("attr2");
attr3 = (EAttribute)classA.getEStructuralFeature("attr3");
BaseCDORevision rev = (BaseCDORevision)cdoObject.cdoRevision();
// int attr1Val = (Integer)rev.getValue(attr1);
// int attr3Val = (Integer)rev.getValue(attr3);
try
{
int attr2Val = (Integer)rev.getValue(attr2);
fail("Should have thrown an exception, but fetched value " + attr2Val);
}
catch (IllegalArgumentException ex)
{
// Good
}
session.close();
}
}
public void test1() throws CommitException
{
EAttribute nameAttr = Model1Package.eINSTANCE.getProduct1_Name();
assertEquals(false, nameAttr.isTransient());
EAttribute descriptionAttr = Model1Package.eINSTANCE.getProduct1_Description();
assertEquals(true, descriptionAttr.isTransient());
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("test"));
Product1 product = Model1Factory.eINSTANCE.createProduct1();
product.setName("name");
product.setDescription("description");
product.setVat(VAT.VAT7);
resource.getContents().add(product);
PurchaseOrder order = Model1Factory.eINSTANCE.createPurchaseOrder();
OrderDetail detail = Model1Factory.eINSTANCE.createOrderDetail();
order.getOrderDetails().add(detail);
resource.getContents().add(order);
detail.setProduct(product);
transaction.commit();
session.close();
}
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("test"));
CDOObject cdoObject = CDOUtil.getCDOObject(resource.getContents().get(0));
BaseCDORevision rev = (BaseCDORevision)cdoObject.cdoRevision();
// String name = (String)rev.getValue(nameAttr);
try
{
String desc = (String)rev.getValue(descriptionAttr);
fail("Should have thrown an exception, but fetched value: " + desc);
}
catch (Exception ex)
{
// Good
}
session.close();
}
}
private EAttribute createAttribute(String name, EDataType type, boolean tranzient)
{
EAttribute attr = EcoreFactory.eINSTANCE.createEAttribute();
attr.setName(name);
attr.setEType(type);
attr.setTransient(tranzient);
return attr;
}
}