| /* |
| * Copyright (c) 2008-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: |
| * Simon McDuff - initial API and implementation |
| * Eike Stepper - maintenance |
| */ |
| package org.eclipse.emf.cdo.tests.bugzilla; |
| |
| import org.eclipse.emf.cdo.CDOObject; |
| 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.tests.AbstractCDOTest; |
| import org.eclipse.emf.cdo.transaction.CDOTransaction; |
| import org.eclipse.emf.cdo.util.CDOUtil; |
| |
| import org.eclipse.emf.ecore.EAttribute; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EEnum; |
| 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; |
| |
| /** |
| * ArrayIndexOutOfBoundsException when importing resources. |
| * <p> |
| * See bug 246442 |
| * |
| * @author Simon McDuff |
| */ |
| public class Bugzilla_246442_Test extends AbstractCDOTest |
| { |
| public void testBugzilla_246442() throws Exception |
| { |
| CDOID lookupObject = null; |
| |
| { |
| EPackage topPackage = createDynamicEPackage(); |
| |
| EPackage subpackage1 = topPackage.getESubpackages().get(0); |
| EClass class1Class = (EClass)subpackage1.getEClassifier("class1"); |
| |
| CDOSession session = openSession(); |
| session.getPackageRegistry().putEPackage(topPackage); |
| |
| CDOTransaction transaction = session.openTransaction(); |
| CDOObject instance = CDOUtil.getCDOObject(EcoreUtil.create(class1Class)); |
| |
| CDOResource resource = transaction.createResource(getResourcePath("/test1")); |
| resource.getContents().add(instance); |
| transaction.commit(); |
| |
| lookupObject = instance.cdoID(); |
| session.close(); |
| } |
| |
| CDOSession session = openSession(); |
| if (session instanceof org.eclipse.emf.cdo.net4j.CDONet4jSession) |
| { |
| ((org.eclipse.emf.cdo.net4j.CDONet4jSession)session).options().getNet4jProtocol().setTimeout(2000L); |
| } |
| |
| CDOTransaction transaction = session.openTransaction(); |
| transaction.getObject(lookupObject); |
| } |
| |
| // public void testBugzilla_246442_lookupEClass() throws Exception |
| // { |
| // EPackage topPackage = createDynamicEPackage(); |
| // EPackage subpackage1 = topPackage.getESubpackages().get(0); |
| // EClass class1Class = (EClass)subpackage1.getEClassifier("class1"); |
| // EClass class2Class = (EClass)subpackage1.getEClassifier("class2"); |
| // EClass class3Class = (EClass)subpackage1.getEClassifier("class3"); |
| // |
| // CDOSession session = openSession(); |
| // session.getPackageRegistry().putEPackage(topPackage); |
| // |
| // EClass eClass1 = ModelUtil.getEClass(class1Class, |
| // (_CDOSessionPackageManagerImpl)session.getPackageUnitManager()); |
| // EClass eClass2 = ModelUtil.getEClass(class2Class, |
| // (_CDOSessionPackageManagerImpl)session.getPackageUnitManager()); |
| // EClass eClass3 = ModelUtil.getEClass(class3Class, |
| // (_CDOSessionPackageManagerImpl)session.getPackageUnitManager()); |
| // |
| // assertEquals(class1Class.getName(), eClass1.getName()); |
| // assertEquals(class2Class.getName(), eClass2.getName()); |
| // assertEquals(class3Class.getName(), eClass3.getName()); |
| // } |
| |
| private EPackage createDynamicEPackage() |
| { |
| final EcoreFactory efactory = EcoreFactory.eINSTANCE; |
| final EcorePackage epackage = EcorePackage.eINSTANCE; |
| |
| // Create a new EPackage and add the new EClasses |
| EPackage topPackage = createUniquePackage("top"); |
| EPackage subPackage1 = createUniquePackage("sub1"); |
| topPackage.getESubpackages().add(subPackage1); |
| |
| { |
| EClass schoolBookEClass = efactory.createEClass(); |
| schoolBookEClass.setName("class1"); |
| // create a new attribute for this EClass |
| EAttribute level = efactory.createEAttribute(); |
| level.setName("level"); |
| level.setEType(epackage.getEInt()); |
| schoolBookEClass.getEStructuralFeatures().add(level); |
| subPackage1.getEClassifiers().add(schoolBookEClass); |
| } |
| |
| { |
| EEnum schoolBookEClass = efactory.createEEnum(); |
| schoolBookEClass.setName("enum"); |
| subPackage1.getEClassifiers().add(schoolBookEClass); |
| } |
| |
| { |
| EClass schoolBookEClass = efactory.createEClass(); |
| schoolBookEClass.setName("class2"); |
| // create a new attribute for this EClass |
| subPackage1.getEClassifiers().add(schoolBookEClass); |
| } |
| |
| { |
| EClass schoolBookEClass = efactory.createEClass(); |
| schoolBookEClass.setName("class3"); |
| // create a new attribute for this EClass |
| EAttribute level = efactory.createEAttribute(); |
| level.setName("level"); |
| level.setEType(epackage.getEInt()); |
| schoolBookEClass.getEStructuralFeatures().add(level); |
| subPackage1.getEClassifiers().add(schoolBookEClass); |
| } |
| |
| return topPackage; |
| } |
| } |