blob: 6eec7cfe829cad72adecad836f5d8851c2209742 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2008-2019 See4sys, itemis 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:
* See4sys - Initial API and implementation
* itemis - [423676] AbstractIntegrationTestCase unable to remove project references that are no longer needed
* itemis - [409510] Enable resource scope-sensitive proxy resolutions without forcing metamodel impelmentations to subclass EObjectImpl
*
* </copyright>
*/
package org.eclipse.sphinx.tests.emf.workspace.integration.syncing;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.sphinx.emf.metamodel.AbstractMetaModelDescriptor;
import org.eclipse.sphinx.emf.model.IModelDescriptor;
import org.eclipse.sphinx.emf.model.ModelDescriptorRegistry;
import org.eclipse.sphinx.emf.util.EcorePlatformUtil;
import org.eclipse.sphinx.emf.workspace.loading.ModelLoadManager;
import org.eclipse.sphinx.examples.hummingbird.ide.natures.HummingbirdNature;
import org.eclipse.sphinx.examples.hummingbird10.Hummingbird10MMDescriptor;
import org.eclipse.sphinx.examples.hummingbird20.Hummingbird20MMDescriptor;
import org.eclipse.sphinx.examples.hummingbird20.instancemodel.Application;
import org.eclipse.sphinx.examples.uml2.ide.metamodel.UML2MMDescriptor;
import org.eclipse.sphinx.platform.util.ExtendedPlatform;
import org.eclipse.sphinx.testutils.integration.referenceworkspace.DefaultIntegrationTestCase;
import org.eclipse.sphinx.testutils.integration.referenceworkspace.DefaultTestReferenceWorkspace;
import org.eclipse.uml2.uml.Component;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Interface;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Operation;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.PackageableElement;
import org.eclipse.uml2.uml.Port;
@SuppressWarnings("nls")
public class ModelSyncingTest extends DefaultIntegrationTestCase {
public ModelSyncingTest() {
// Start tests with projects in reference workspace being closed
setProjectsClosedOnStartup(true);
}
// + testProjectOpened
// o right click on project + Open Project
// -> all model resources in project must be loaded
// -> corresponding model descriptor must be added
// -> all proxies in project (and referencing projects) must be resolved or
// blacklisted
public void testProjectOpened() throws Exception {
int resourcesInEditingDomain20 = 0;
int resourcesInEditingDomain10 = 0;
int resourcesInEditingDomainUml2 = 0;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
// ########### HUMMINGBIRD 10 project #######################
// open project hbProject10_A
assertFalse(refWks.hbProject10_A.isOpen());
synchronizedOpenProject(refWks.hbProject10_A);
assertTrue(refWks.hbProject10_A.isOpen());
resourcesInEditingDomain10 += refWks.getReferenceFileNames(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A).size();
// check if resources have been created in editing domain
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
Resource project10_A_Resource10_1 = getProjectResource(refWks.hbProject10_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10A_1);
assertNotNull(project10_A_Resource10_1);
Resource project10_A_Resource10_2 = getProjectResource(refWks.hbProject10_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10A_2);
assertNotNull(project10_A_Resource10_2);
Resource project10_A_Resource10_3 = getProjectResource(refWks.hbProject10_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10A_3);
assertNotNull(project10_A_Resource10_3);
// check if modelDescriptors have been put in place correctly
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
for (IModelDescriptor modelDescriptor : ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject10_A)) {
assertSame(refWks.editingDomain10, modelDescriptor.getEditingDomain());
assertSame(refWks.hbProject10_A, modelDescriptor.getRoot());
}
// check if all proxies have been resolved
assertProxiesResolved(project10_A_Resource10_1);
assertProxiesResolved(project10_A_Resource10_2);
assertProxiesResolved(project10_A_Resource10_3);
// open project hbProject10_B
assertFalse(refWks.hbProject10_B.isOpen());
synchronizedOpenProject(refWks.hbProject10_B);
assertTrue(refWks.hbProject10_B.isOpen());
assertTrue(refWks.hbProject10_A.isOpen());
resourcesInEditingDomain10 += refWks.getReferenceFileNames(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_B).size();
// check if resources have been created in editing domain
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
Resource project10_B_Resource10_1 = getProjectResource(refWks.hbProject10_B, DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10B_1);
assertNotNull(project10_B_Resource10_1);
Resource project10_B_Resource10_2 = getProjectResource(refWks.hbProject10_B, DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10B_2);
assertNotNull(project10_B_Resource10_2);
Resource project10_B_Resource10_3 = getProjectResource(refWks.hbProject10_B, DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10B_3);
assertNotNull(project10_B_Resource10_3);
// check if modelDescriptors have been put in place correctly
assertProjectModelsSizeEquals(refWks.hbProject10_B, 1);
for (IModelDescriptor modelDescriptor : ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject10_B)) {
assertSame(refWks.editingDomain10, modelDescriptor.getEditingDomain());
assertSame(refWks.hbProject10_B, modelDescriptor.getRoot());
}
// check if all proxies have been resolved
assertProxiesResolved(project10_B_Resource10_1);
assertProxiesResolved(project10_B_Resource10_2);
assertProxiesResolved(project10_B_Resource10_3);
// ########### HB 20 projects #######################
assertFalse(refWks.hbProject20_A.isOpen());
synchronizedOpenProject(refWks.hbProject20_A);
assertTrue(refWks.hbProject20_A.isOpen());
resourcesInEditingDomain20 += refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, Hummingbird20MMDescriptor.INSTANCE)
.size();
resourcesInEditingDomainUml2 = resourcesInEditingDomainUml2
+ refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, UML2MMDescriptor.INSTANCE).size();
// check if resources have been created in editing domain
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
Resource project20_A_Resource20_1 = getProjectResource(refWks.hbProject20_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_1);
assertNotNull(project20_A_Resource20_1);
Resource project20_A_Resource20_2 = getProjectResource(refWks.hbProject20_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_2);
assertNotNull(project20_A_Resource20_2);
Resource project20_A_Resource20_3 = getProjectResource(refWks.hbProject20_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_3);
assertNotNull(project20_A_Resource20_3);
// check if modelDescriptors have been put in place correctly
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
for (IModelDescriptor modelDescriptor : ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_A)) {
assertSame(refWks.editingDomain20, modelDescriptor.getEditingDomain());
assertSame(refWks.hbProject20_A, modelDescriptor.getRoot());
}
// check if all proxies have been resolved
assertProxiesResolved(project20_A_Resource20_1);
assertProxiesResolved(project20_A_Resource20_2);
assertProxiesResolved(project20_A_Resource20_3);
assertFalse(refWks.hbProject20_D.isOpen());
assertFalse(refWks.hbProject20_E.isOpen());
synchronizedOpenProject(refWks.hbProject20_E);
synchronizedOpenProject(refWks.hbProject20_D);
assertTrue(refWks.hbProject20_D.isOpen());
assertTrue(refWks.hbProject20_E.isOpen());
resourcesInEditingDomain20 = resourcesInEditingDomain20
+ refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D, Hummingbird20MMDescriptor.INSTANCE).size()
+ refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E, Hummingbird20MMDescriptor.INSTANCE).size();
resourcesInEditingDomainUml2 = resourcesInEditingDomainUml2
+ refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D, UML2MMDescriptor.INSTANCE).size()
+ refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E, UML2MMDescriptor.INSTANCE).size();
// check if resources have been created in editing domain
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
Resource project20_D_Resource20_1 = getProjectResource(refWks.hbProject20_D, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_1);
assertNotNull(project20_D_Resource20_1);
Resource project20_D_Resource20_2 = getProjectResource(refWks.hbProject20_D, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_2);
assertNotNull(project20_D_Resource20_2);
Resource project20_D_Resource20_3 = getProjectResource(refWks.hbProject20_D, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_3);
assertNotNull(project20_D_Resource20_3);
Resource project20_E_Resource20_1 = getProjectResource(refWks.hbProject20_E, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_1);
assertNotNull(project20_E_Resource20_1);
Resource project20_E_Resource20_2 = getProjectResource(refWks.hbProject20_E, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_2);
assertNotNull(project20_E_Resource20_2);
Resource project20_E_Resource20_3 = getProjectResource(refWks.hbProject20_E, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_3);
assertNotNull(project20_E_Resource20_3);
assertProjectModelsSizeEquals(refWks.hbProject20_D, 2);
int checkCount = 0;
for (IModelDescriptor modelDescriptor : ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_D)) {
assertSame(refWks.hbProject20_D, modelDescriptor.getRoot());
if (modelDescriptor.getEditingDomain().equals(refWks.editingDomain20)) {
checkCount++;
} else if (modelDescriptor.getEditingDomain().equals(refWks.editingDomainUml2)) {
checkCount++;
} else if (modelDescriptor.getEditingDomain().equals(refWks.editingDomain10)) {
checkCount++;
}
}
assertEquals(2, checkCount);
checkCount = 0;
for (IModelDescriptor modelDescriptor : ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_E)) {
assertSame(refWks.hbProject20_E, modelDescriptor.getRoot());
if (modelDescriptor.getEditingDomain().equals(refWks.editingDomain20)) {
checkCount++;
} else if (modelDescriptor.getEditingDomain().equals(refWks.editingDomainUml2)) {
checkCount++;
} else if (modelDescriptor.getEditingDomain().equals(refWks.editingDomain10)) {
checkCount++;
}
}
assertEquals(2, checkCount);
// check if all proxies have been resolved
assertProxiesResolved(project20_D_Resource20_1);
assertProxiesResolved(project20_D_Resource20_2);
assertProxiesResolved(project20_D_Resource20_3);
assertProxiesResolved(project20_E_Resource20_1);
assertProxiesResolved(project20_E_Resource20_2);
assertProxiesResolved(project20_E_Resource20_3);
}
// + testProjectRenamed
// o right click on project + Rename
// -> the project's name must change
// -> all model resources in project must be remain loaded
// -> corresponding model descriptor must stay in place
// -> all proxies in project (and referencing projects) must remain resolved
// or blacklisted
public void testProjectRenamed() throws Exception {
// test rename HB 20 project
synchronizedOpenProject(refWks.hbProject20_D);
int modelCount = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_D).size();
// check initial project name
assertEquals(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D, refWks.hbProject20_D.getName());
// Check if resources under the project are correctly loaded.
Set<IFile> hbProject20_DFiles = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D,
Hummingbird20MMDescriptor.INSTANCE);
Set<IFile> uml2Project20_DFiles = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D, UML2MMDescriptor.INSTANCE);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, hbProject20_DFiles.size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, uml2Project20_DFiles.size());
String projectName = DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D + "_NewName"; //$NON-NLS-1$
synchronizedRenameProject(refWks.hbProject20_D, projectName);
// Check if project name has been correctly changed
IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
assertTrue(newProject.exists());
// Check if resources under the project are still loaded.
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, hbProject20_DFiles.size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, uml2Project20_DFiles.size());
// check if resources are correctly loaded
Resource project20_D_Resource20_1 = getProjectResource(newProject, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_1);
assertNotNull(project20_D_Resource20_1);
Resource project20_D_Resource20_2 = getProjectResource(newProject, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_2);
assertNotNull(project20_D_Resource20_2);
Resource project20_D_Resource20_3 = getProjectResource(newProject, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_3);
assertNotNull(project20_D_Resource20_3);
// check if proxies remain resolved
assertProxiesResolved(project20_D_Resource20_1);
assertProxiesResolved(project20_D_Resource20_2);
assertProxiesResolved(project20_D_Resource20_3);
// check if model descriptors are still in place
assertProjectModelsSizeEquals(newProject, modelCount);
}
// + testProjectDescriptionChanged (nature)
// o remove HB nature from HB .project file and save it with
// Eclipse text editor
// -> all model resources in project must be unloaded
// -> corresponding model descriptor must be removed
// o add HB nature to non HB .project file and save it with
// Eclipse text editor
// -> all model resources in project must be loaded
// -> corresponding model descriptor must be added
// -> all proxies in project (and referencing projects) must be resolved or
// blacklisted
public void testProjectDescriptionChangedNature() throws Exception {
// Open hbProject20_A
synchronizedOpenProject(refWks.hbProject20_A);
assertTrue(refWks.hbProject20_A.hasNature(HummingbirdNature.ID));
int hbProject20_A_Files20Count = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, Hummingbird20MMDescriptor.INSTANCE).size();
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, hbProject20_A_Files20Count);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectHasNoModels(refWks.hbProject20_A, Hummingbird10MMDescriptor.INSTANCE);
assertProjectHasModels(refWks.hbProject20_A, Hummingbird20MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject20_A, UML2MMDescriptor.INSTANCE);
// Remove HB nature from hbProject20_A
HummingbirdNature.removeFrom(refWks.hbProject20_A, null);
waitForModelLoading();
assertFalse(refWks.hbProject20_A.hasNature(HummingbirdNature.ID));
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectHasNoModels(refWks.hbProject20_A, Hummingbird10MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject20_A, Hummingbird20MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject20_A, UML2MMDescriptor.INSTANCE);
assertProjectModelsSizeEquals(refWks.hbProject20_A, 0);
// Add HB nature to hbProject20_A
HummingbirdNature.addTo(refWks.hbProject20_A, null);
waitForModelLoading();
assertTrue(refWks.hbProject20_A.hasNature(HummingbirdNature.ID));
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, hbProject20_A_Files20Count);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectHasNoModels(refWks.hbProject20_A, Hummingbird10MMDescriptor.INSTANCE);
assertProjectHasModels(refWks.hbProject20_A, Hummingbird20MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject20_A, UML2MMDescriptor.INSTANCE);
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
Resource hbProject20_A_Resource20_1 = getProjectResource(refWks.hbProject20_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_1);
assertNotNull(hbProject20_A_Resource20_1);
Resource hbProject20_A_Resource20_2 = getProjectResource(refWks.hbProject20_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_2);
assertNotNull(hbProject20_A_Resource20_2);
Resource hbProject20_A_Resource20_3 = getProjectResource(refWks.hbProject20_A, DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_3);
assertNotNull(hbProject20_A_Resource20_3);
assertProxiesResolved(hbProject20_A_Resource20_1);
assertProxiesResolved(hbProject20_A_Resource20_2);
assertProxiesResolved(hbProject20_A_Resource20_3);
// Open hbProject10_A
synchronizedOpenProject(refWks.hbProject10_A);
assertTrue(refWks.hbProject10_A.hasNature(HummingbirdNature.ID));
int hbProject10_A_Files10Count = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE).size();
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, hbProject10_A_Files10Count);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, hbProject20_A_Files20Count);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectHasModels(refWks.hbProject10_A, Hummingbird10MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject10_A, Hummingbird20MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject10_A, UML2MMDescriptor.INSTANCE);
// Remove HB nature from hbProject10_A
HummingbirdNature.removeFrom(refWks.hbProject10_A, null);
waitForModelLoading();
assertFalse(refWks.hbProject10_A.hasNature(HummingbirdNature.ID));
// assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, hbProject20_A_Files20Count);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectHasNoModels(refWks.hbProject10_A, Hummingbird10MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject10_A, Hummingbird20MMDescriptor.INSTANCE);
assertProjectHasNoModels(refWks.hbProject10_A, UML2MMDescriptor.INSTANCE);
}
// + testProjectDescriptionChanged (project references)
// -> check for useles loading events.
// -> resolve proxies in given projects and all referencing projects.
public void testProjectDescriptionChangedNatureProjectReference() throws Exception {
// open projects
synchronizedOpenProject(refWks.hbProject20_A);
synchronizedOpenProject(refWks.hbProject20_B);
synchronizedOpenProject(refWks.hbProject20_C);
synchronizedOpenProject(refWks.hbProject20_D);
synchronizedOpenProject(refWks.hbProject20_E);
synchronizedOpenProject(refWks.hbProject10_E);
IProjectDescription hbProject3X_D_Desc = refWks.hbProject20_D.getDescription();
assertNotNull(hbProject3X_D_Desc);
IProjectDescription hbProject3X_E_Desc = refWks.hbProject20_E.getDescription();
assertNotNull(hbProject3X_E_Desc);
IProject[] referencedProjectsProject3X_E = hbProject3X_E_Desc.getReferencedProjects();
assertNotNull(referencedProjectsProject3X_E);
assertEquals(1, referencedProjectsProject3X_E.length);
IProject[] referencedProjectsProject3X_D = hbProject3X_D_Desc.getReferencedProjects();
assertNotNull(referencedProjectsProject3X_D);
assertEquals(1, referencedProjectsProject3X_E.length);
assertEquals(1, referencedProjectsProject3X_D.length);
// check if project references are correctly set
// references before removal.
// ( <-- dependency ):
// refWks.hbProject10_E <-- refWks.hbProject20_D <--
// refWks.hbProject20_E
assertTrue(referencedProjectsProject3X_E[0].equals(refWks.hbProject20_D));
assertTrue(referencedProjectsProject3X_D[0].equals(refWks.hbProject10_E));
// check if modelDescriptors have been put in place correctly
assertProjectModelsSizeEquals(refWks.hbProject20_E, 3);
assertProjectModelsSizeEquals(refWks.hbProject20_D, 3);
// change references on project 3X E
hbProject3X_E_Desc.setReferencedProjects(new IProject[] {});
refWks.hbProject20_E.setDescription(hbProject3X_E_Desc, new NullProgressMonitor());
waitForModelLoading();
referencedProjectsProject3X_E = hbProject3X_E_Desc.getReferencedProjects();
assertNotNull(referencedProjectsProject3X_E);
assertEquals(0, referencedProjectsProject3X_E.length);
referencedProjectsProject3X_D = hbProject3X_D_Desc.getReferencedProjects();
assertNotNull(referencedProjectsProject3X_D);
assertEquals(1, referencedProjectsProject3X_D.length);
// references after removal.
// ( X-- dependency removed)
// ( <-- dependency )
// refWks.hbProject10_E X- refWks.hbProject20_D X- refWks.hbProject20_E
assertNotNull(referencedProjectsProject3X_E);
assertEquals(0, referencedProjectsProject3X_E.length);
assertProjectModelsSizeEquals(refWks.hbProject20_E, 2);
assertProjectModelsSizeEquals(refWks.hbProject20_D, 3);
// change references on project 3X D
hbProject3X_D_Desc.setReferencedProjects(new IProject[] {});
refWks.hbProject20_D.setDescription(hbProject3X_D_Desc, new NullProgressMonitor());
waitForModelLoading();
assertProjectModelsSizeEquals(refWks.hbProject20_D, 2);
}
// + testProjectClosed
// o right click on project + Close Project
// -> unsaved changes must be saved
// -> all model resources in project must be unloaded
// -> corresponding model descriptor must be removed
public void testProjectClosed() throws Exception {
// test project closed on HB 20 project
synchronizedOpenProject(refWks.hbProject20_A);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20,
refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, Hummingbird20MMDescriptor.INSTANCE).size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
// close HB 20 project A
synchronizedCloseProject(refWks.hbProject20_A);
// check that resources have been unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
// check that model descriptors are removed
assertProjectModelsSizeEquals(refWks.hbProject20_A, 0);
// test project closed on HUMMINGBIRD 10 project
synchronizedOpenProject(refWks.hbProject10_A);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10,
refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE).size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
synchronizedCloseProject(refWks.hbProject10_A);
// check that resources have been unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
// check that model descriptors are removed
assertProjectModelsSizeEquals(refWks.hbProject10_A, 0);
}
// + testProjectDeleted
// o right click on project + Delete
// -> all model resources in project must be unloaded
// -> corresponding model descriptor must be removed
public void testProjectDeleted() throws Exception {
int expectedHb20ResourcesForArProject20A = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, Hummingbird20MMDescriptor.INSTANCE).size();
int expectedHb20ResourcesForArProject20B = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, Hummingbird20MMDescriptor.INSTANCE).size();
int expectedResourcesInEditingDomain20 = expectedHb20ResourcesForArProject20A + expectedHb20ResourcesForArProject20B;
int expectedUml2ResourcesForArProject20B = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, UML2MMDescriptor.INSTANCE).size();
int expectedUml2ResourcesForArProject20A = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, UML2MMDescriptor.INSTANCE).size();
int expectedResourcesInEditingDomain3Uml2 = expectedUml2ResourcesForArProject20A + expectedUml2ResourcesForArProject20B;
int expectedModelNumberForArProject20A = refWks.getReferenceProjectDescriptor(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A)
.getReferenceModelDescriptors().size();
int expectedModelNumberForArProject20B = refWks.getReferenceProjectDescriptor(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B)
.getReferenceModelDescriptors().size();
synchronizedOpenProject(refWks.hbProject20_A);
synchronizedOpenProject(refWks.hbProject20_B);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, expectedResourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, expectedResourcesInEditingDomain3Uml2);
assertProjectModelsSizeEquals(refWks.hbProject20_A, expectedModelNumberForArProject20A);
assertProjectModelsSizeEquals(refWks.hbProject20_B, expectedModelNumberForArProject20B);
synchronizedDeleteProject(refWks.hbProject20_A);
expectedResourcesInEditingDomain20 = expectedResourcesInEditingDomain20 - expectedHb20ResourcesForArProject20A;
expectedResourcesInEditingDomain3Uml2 = expectedResourcesInEditingDomain3Uml2 - expectedUml2ResourcesForArProject20A;
// check that resources have been unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, expectedResourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, expectedResourcesInEditingDomain3Uml2);
// check that model descriptors are removed
assertProjectModelsSizeEquals(refWks.hbProject20_A, 0);
assertProjectModelsSizeEquals(refWks.hbProject20_B, expectedModelNumberForArProject20B);
synchronizedDeleteProject(refWks.hbProject20_B);
expectedResourcesInEditingDomain20 = expectedResourcesInEditingDomain20 - expectedHb20ResourcesForArProject20B;
expectedResourcesInEditingDomain3Uml2 = expectedResourcesInEditingDomain3Uml2 - expectedUml2ResourcesForArProject20B;
// check that resources have been unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, expectedResourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, expectedResourcesInEditingDomain3Uml2);
// check that model descriptors are removed
assertProjectModelsSizeEquals(refWks.hbProject20_A, 0);
assertProjectModelsSizeEquals(refWks.hbProject20_B, 0);
synchronizedOpenProject(refWks.hbProject10_A);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10,
refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE).size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
synchronizedDeleteProject(refWks.hbProject10_A);
// check that resources have been unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
// check that model descriptors are removed
assertProjectModelsSizeEquals(refWks.hbProject10_A, 0);
}
// + testNewFileAdded
// o right click on project + Import... > General/Existing Projects into
// Workspace
// o drag & drop file to project in workspace
// -> model resource(s) must be loaded
// -> corresponding model descriptor(s) must be added or stay in place
// -> all proxies in enclosing project (and referencing projects) must be
// resolved or blacklisted
public void testNewFileAdded() throws Exception {
int resourcesInEditingDomain20 = 0;
int resourcesInEditingDomain10 = 0;
int resourcesInEditingDomainUml2 = 0;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
synchronizedOpenProject(refWks.hbProject20_A);
synchronizedOpenProject(refWks.hbProject20_B);
synchronizedOpenProject(refWks.hbProject10_A);
// test add a new file in an HB 20 project
// check if model descriptor in project hbProject20_A has been put in place
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
resourcesInEditingDomain10 += refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE)
.size();
resourcesInEditingDomain20 += refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, Hummingbird20MMDescriptor.INSTANCE)
.size() + refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, Hummingbird20MMDescriptor.INSTANCE).size();
resourcesInEditingDomainUml2 += refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, UML2MMDescriptor.INSTANCE)
.size();
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
// creation of a new file by copying UML2_FILE_10C_1 into hbProject20_A
String newFileName = "Copy_Of_" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20B_1; //$NON-NLS-1$
IFile uml2FileProject20B_1 = refWks.hbProject20_B.getFile(DefaultTestReferenceWorkspace.UML2_FILE_NAME_20B_1);
uml2FileProject20B_1.copy(refWks.hbProject20_A.getFullPath().append(newFileName), true, null);
waitForModelLoading();
// check if Uml2 model descriptor has been correctly added
assertProjectModelsSizeEquals(refWks.hbProject20_A, 2);
// check if resources in project hbProject20_A has been reloaded
// A new Uml2 resource must be loaded
resourcesInEditingDomainUml2++;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
// -------------------
// test add a new file HUMMINGBIRD 10
// check if model descriptor in project hbProject20_A has been put in place
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
// creation of a new file by copying HB20 file into hbProject10_A
String newFileName2 = "Copy_Of_" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_1;
IFile hbFileProject10A_1 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_1);
hbFileProject10A_1.copy(refWks.hbProject10_A.getFullPath().append(newFileName2), true, null);
waitForModelLoading();
// check if Uml2 model descriptor has been correctly added
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
// New file was not loaded in target project
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
}
// + testNotYetLoadedFileChanged
// o change invalid to valid model resource namespace and save it with
// Eclipse text editor
// -> model resource must be loaded
// -> corresponding model descriptor must be added or stay in place
// -> all proxies in enclosing project (and referencing projects) must be
// resolved or blacklisted
public void testNotYetLoadedFileChanged() throws Exception {
int resourcesInEditingDomain20 = 0;
int resourcesInEditingDomain10 = 0;
int resourcesInEditingDomainUml2 = 0;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
synchronizedOpenProject(refWks.hbProject20_B);
synchronizedOpenProject(refWks.hbProject10_A);
// test add a new file in an HB 20 project
// check if model descriptor in project hbProject20_B has been put in
// place
assertProjectModelsSizeEquals(refWks.hbProject20_B, 2);
// check if resources in project hbProject20_A has been loaded
resourcesInEditingDomain20 += refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, Hummingbird20MMDescriptor.INSTANCE)
.size();
resourcesInEditingDomain10 += refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE)
.size();
resourcesInEditingDomainUml2 += refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, UML2MMDescriptor.INSTANCE)
.size();
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
// creation of a new empty Uml2 file
String newFileName = "newFile.uml"; //$NON-NLS-1$
IFile uml2FileProject20B_1 = refWks.hbProject20_B.getFile(DefaultTestReferenceWorkspace.UML2_FILE_NAME_20B_1);
IFile newFile = refWks.hbProject10_A.getFile(newFileName);
// fill in the file with empty content
newFile.create(new ByteArrayInputStream("".getBytes()), true, null); //$NON-NLS-1$
waitForModelLoading();
// Verify that ModelDescriptor for UML was created
if (hasContentTypeOf(newFile, UML2MMDescriptor.INSTANCE)) {
assertProjectModelsSizeEquals(refWks.hbProject10_A, 2);
} else {
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
}
// Verify that newly created file was not loaded because its contents is empty
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
assertEditingDomainDoesNotContainResource(refWks.editingDomainUml2, newFileName);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
// add Uml2 resource content to the new created file
synchronizedSetFileContents(newFile, uml2FileProject20B_1.getContents());
// check if new model descriptor have been put in place
assertProjectModelsSizeEquals(refWks.hbProject10_A, 2);
// check if resources in project hbProject20_A has been reloaded
// A new Uml2 resource must be loaded
resourcesInEditingDomainUml2++;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
}
// + testAlreadyLoadedFileChanged
// o modify model resource content such that it remains valid and save it
// with Eclipse text editor
// -> model resource must be loaded
// -> corresponding model descriptor must stay in place
// -> all proxies in enclosing project (and referencing projects) must be
// resolved or blacklisted
// o modify model resource content such that it becomes invalid and save it
// with Eclipse text editor
// -> model resource must be unloaded
// -> corresponding model descriptor must stay in place unless changed file
// was the last model resource
public void testAlreadyLoadedFileChanged() throws Exception {
synchronizedOpenProject(refWks.hbProject20_B);
synchronizedOpenProject(refWks.hbProject10_A);
int resourcesInEditingDomain20 = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, Hummingbird20MMDescriptor.INSTANCE).size();
int resourceUml2InArProject20_B = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, UML2MMDescriptor.INSTANCE)
.size();
int resourcesInEditingDomain10 = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE).size();
int resourceUml2InArProject10_A = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, UML2MMDescriptor.INSTANCE)
.size();
int resourceUml2InEditingDomain = resourceUml2InArProject20_B + resourceUml2InArProject10_A;
// test add a new file and changes its content in an HB 20 project
// check if model descriptor in project hbProject20_B has been put in place
assertProjectModelsSizeEquals(refWks.hbProject20_B, 2);
// check if resources in project hbProject20_A has been loaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceUml2InEditingDomain);
// creation of a new file by copying UML2_FILE_NAME_20B_1 into hbProject10_A
String newFileName = "Copy_Of_" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20B_1;
IFile uml2FileProject10A_1 = refWks.hbProject20_B.getFile(DefaultTestReferenceWorkspace.UML2_FILE_NAME_20B_1);
// create an new file copy of Uml2 file from project 20 B
uml2FileProject10A_1.copy(refWks.hbProject10_A.getFullPath().append(newFileName), true, null);
waitForModelLoading();
assertProjectModelsSizeEquals(refWks.hbProject10_A, 2);
resourceUml2InEditingDomain++;
// check if resources in project hbProject20_A has been reloaded
// A new Uml2 resource must be loaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceUml2InEditingDomain);
// =======================================================
// set empty content to the new created file
IFile newFile = refWks.hbProject10_A.getFile(newFileName);
synchronizedSetFileContents(newFile, new ByteArrayInputStream("".getBytes())); //$NON-NLS-1$
// check if Uml2 model descriptor still put in place.
if (hasContentTypeOf(newFile, UML2MMDescriptor.INSTANCE)) {
assertProjectModelsSizeEquals(refWks.hbProject10_A, 2);
} else {
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
}
// Verify that the changed resource will be unloaded from editingDomain because its empty content
resourceUml2InEditingDomain--;
// check if resources in project hbProject20_A has been reloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceUml2InEditingDomain);
final IFile hbFileProject20B_1 = refWks.hbProject20_B.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20B_1);
assertNotNull(hbFileProject20B_1);
final IFile hbFileProject20B_2 = refWks.hbProject20_B.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20B_2);
assertNotNull(hbFileProject20B_2);
final IFile hbFileProject20B_3 = refWks.hbProject20_B.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20B_3);
assertNotNull(hbFileProject20B_3);
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
@Override
public void run(IProgressMonitor monitor) throws CoreException {
try {
// set empty content to hbFileProject20B_1 HB20 file
hbFileProject20B_1.setContents(new ByteArrayInputStream("".getBytes()), true, false, null); //$NON-NLS-1$
// set empty content to hbFileProject20B_2 HB20 file
hbFileProject20B_2.setContents(new ByteArrayInputStream("".getBytes()), true, false, null); //$NON-NLS-1$
// set empty content to hbFileProject20B_3 HB20 file
hbFileProject20B_3.setContents(new ByteArrayInputStream("".getBytes()), true, false, null); //$NON-NLS-1$
} catch (CoreException ex) {
}
}
};
ResourcesPlugin.getWorkspace().run(runnable, ResourcesPlugin.getWorkspace().getRoot(), IWorkspace.AVOID_UPDATE, new NullProgressMonitor());
waitForModelLoading();
// check if resources in project hbProject20_B has been unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceUml2InEditingDomain);
// check if HB model descriptor has been removed if cannot retrieve contentypId of HB files
if (hasContentTypeOf(hbFileProject20B_1, Hummingbird20MMDescriptor.INSTANCE)
|| hasContentTypeOf(hbFileProject20B_2, Hummingbird20MMDescriptor.INSTANCE)
|| hasContentTypeOf(hbFileProject20B_3, Hummingbird20MMDescriptor.INSTANCE)) {
assertProjectHasModels(refWks.hbProject20_B, Hummingbird20MMDescriptor.INSTANCE);
} else {
assertProjectHasNoModels(refWks.hbProject20_B, Hummingbird20MMDescriptor.INSTANCE);
}
}
// + testFileMoved
// o drag HB20 file from an HB20 project and drop it into an HB 10 project
// -> the HB20 file must be present in the HB 10 project
// -> the corresponding model resource must be unloaded
// -> corresponding model descriptor must be removed if the moved HB20 file was the last one in the original
// HB20project
public void testFileMoved() throws Exception {
// File removed in HB 20 project
synchronizedOpenProject(refWks.hbProject20_A);
synchronizedOpenProject(refWks.hbProject20_D);
synchronizedOpenProject(refWks.hbProject10_A);
int resourceAr20InProject_20_A = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, Hummingbird20MMDescriptor.INSTANCE).size();
int resourceAr20InProject_20_D = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D, Hummingbird20MMDescriptor.INSTANCE).size();
int resourceAr10InProject_10_A = refWks
.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE).size();
int resourceUml2InProject_20_D = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_D, UML2MMDescriptor.INSTANCE)
.size();
int resourceInEditingDomain10 = resourceAr10InProject_10_A;
int resourceInEditingDomain20 = resourceAr20InProject_20_A + resourceAr20InProject_20_D;
int resourceInEditingDomainUml2 = resourceUml2InProject_20_D;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
Collection<IModelDescriptor> models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_A, Hummingbird20MMDescriptor.INSTANCE);
assertEquals(1, models.size());
IModelDescriptor hbmodelDescriptor_20_A = models.iterator().next();
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_D, Hummingbird20MMDescriptor.INSTANCE);
assertEquals(1, models.size());
IModelDescriptor hbmodelDescriptor_20_D = models.iterator().next();
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject10_A, Hummingbird10MMDescriptor.INSTANCE);
assertEquals(1, models.size());
IModelDescriptor hbmodelDescriptor_10_A = models.iterator().next();
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_D, UML2MMDescriptor.INSTANCE);
assertEquals(1, models.size());
IModelDescriptor uml2modelDescriptor_20_D = models.iterator().next();
assertNotNull(hbmodelDescriptor_20_A);
assertNotNull(hbmodelDescriptor_20_D);
assertNotNull(hbmodelDescriptor_10_A);
assertNotNull(uml2modelDescriptor_20_D);
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_A, hbmodelDescriptor_20_A.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// ==================================================================
// Move file hbFile20_20A_1 to hbProject10_A
IFile file20_20A_1 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_1);
assertNotNull(file20_20A_1);
assertTrue(file20_20A_1.isAccessible());
IPath targetOfFile20_20A_1 = refWks.hbProject10_A.getFullPath().append(file20_20A_1.getName());
synchronizedMoveFile(file20_20A_1, targetOfFile20_20A_1);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, --resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFile20_20A_1 = refWks.hbProject10_A.getFile(file20_20A_1.getName());
assertNotNull(movedFile20_20A_1);
assertTrue(movedFile20_20A_1.isAccessible());
assertFalse(EcorePlatformUtil.isFileLoaded(movedFile20_20A_1));
// Verify that move filed is removed from the oldModelDescriptor
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(--resourceAr20InProject_20_A, hbmodelDescriptor_20_A.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// ---------------
// Move file hbFile20_20A_2 to hbProject10_A
IFile file20_20A_2 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_2);
assertNotNull(file20_20A_2);
assertTrue(file20_20A_2.isAccessible());
IPath targetOfFile20_20A_2 = refWks.hbProject10_A.getFullPath().append(file20_20A_2.getName());
synchronizedMoveFile(file20_20A_2, targetOfFile20_20A_2);
// Verify that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, --resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFile20_20A_2 = refWks.hbProject10_A.getFile(file20_20A_2.getName());
assertNotNull(movedFile20_20A_2);
assertTrue(movedFile20_20A_2.isAccessible());
assertFalse(EcorePlatformUtil.isFileLoaded(movedFile20_20A_2));
// Verify that move filed is removed from the oldModelDescriptor
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(--resourceAr20InProject_20_A, hbmodelDescriptor_20_A.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// ---------------
// Move file hbFile20_20A_3 to hbProject10_A
IFile file20_20A_3 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_3);
assertNotNull(file20_20A_3);
assertTrue(file20_20A_3.isAccessible());
IPath targetOfFile20_20A_3 = refWks.hbProject10_A.getFullPath().append(file20_20A_3.getName());
synchronizedMoveFile(file20_20A_3, targetOfFile20_20A_3);
// Veriy that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, --resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFile20_20A_3 = refWks.hbProject10_A.getFile(file20_20A_3.getName());
assertNotNull(movedFile20_20A_3);
assertTrue(movedFile20_20A_3.isAccessible());
assertFalse(EcorePlatformUtil.isFileLoaded(movedFile20_20A_3));
// Verify that move filed is removed from the oldModelDescriptor
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(--resourceAr20InProject_20_A, hbmodelDescriptor_20_A.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// ---------------
// Move file hbFile20_20A_4 to hbProject10_A
IFile file20_20A_4 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_4);
assertNotNull(file20_20A_4);
assertTrue(file20_20A_4.isAccessible());
IPath targetOfFile20_20A_4 = refWks.hbProject10_A.getFullPath().append(file20_20A_4.getName());
synchronizedMoveFile(file20_20A_4, targetOfFile20_20A_4);
// Verify that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, --resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFile20_20A_4 = refWks.hbProject10_A.getFile(file20_20A_4.getName());
assertNotNull(movedFile20_20A_4);
assertTrue(movedFile20_20A_4.isAccessible());
assertFalse(EcorePlatformUtil.isFileLoaded(movedFile20_20A_4));
// Verify that move filed is removed from the oldModelDescriptor
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(--resourceAr20InProject_20_A, hbmodelDescriptor_20_A.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// ---------------
// Move file hbFile20_20A_5 to hbProject10_A
IFile file20_20A_5 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_5);
assertNotNull(file20_20A_5);
assertTrue(file20_20A_5.isAccessible());
IPath targetOfFile20_20A_5 = refWks.hbProject10_A.getFullPath().append(file20_20A_5.getName());
synchronizedMoveFile(file20_20A_5, targetOfFile20_20A_5);
// Verify that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, --resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFile20_20A_5 = refWks.hbProject10_A.getFile(file20_20A_5.getName());
assertNotNull(movedFile20_20A_5);
assertTrue(movedFile20_20A_5.isAccessible());
assertFalse(EcorePlatformUtil.isFileLoaded(movedFile20_20A_5));
// Verify that move filed is removed from the oldModelDescriptor
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(--resourceAr20InProject_20_A, hbmodelDescriptor_20_A.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// -----------------------
// Move file hbFile21_20A_4 to hbProject20_D
IFile file21_20A_4 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_21_20A_4);
assertNotNull(file21_20A_4);
assertTrue(file21_20A_4.isAccessible());
IPath targetOfFile21_20A_4 = refWks.hbProject20_D.getFullPath().append(file21_20A_4.getName());
synchronizedMoveFile(file21_20A_4, targetOfFile21_20A_4);
// Verify that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
// Verify that the ModelDescriptor of hbProject20_A was deleted when the moved File is the last one of this
// project
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_A, Hummingbird20MMDescriptor.INSTANCE);
assertTrue(models.isEmpty());
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(++resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// Reload project 20_D
ModelLoadManager.INSTANCE.reloadProject(refWks.hbProject20_D, false, false, new NullProgressMonitor());
waitForModelLoading();
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
// ==================================================================
// Move file hbFilet20_20D_1 to hbProject20_A
IFile file20_20D_1 = refWks.hbProject20_D.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20D_1);
assertNotNull(file20_20D_1);
assertTrue(file20_20D_1.isAccessible());
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_A, Hummingbird20MMDescriptor.INSTANCE);
assertTrue(models.isEmpty());
IPath targetOfFile20_20D_1 = refWks.hbProject20_A.getFullPath().append(file20_20D_1.getName());
synchronizedMoveFile(file20_20D_1, targetOfFile20_20D_1);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFile20_20D_1 = refWks.hbProject20_A.getFile(file20_20D_1.getName());
assertNotNull(movedFile20_20D_1);
assertTrue(movedFile20_20D_1.isAccessible());
assertTrue(EcorePlatformUtil.isFileLoaded(movedFile20_20D_1));
// Reload project
ModelLoadManager.INSTANCE.reloadProject(refWks.hbProject20_A, false, false, new NullProgressMonitor());
waitForModelLoading();
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
// Verify that the ModelDescriptor of hbProject20_A was created to load moved File
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_A, Hummingbird20MMDescriptor.INSTANCE);
assertEquals(1, models.size());
hbmodelDescriptor_20_A = models.iterator().next();
assertNotNull(hbmodelDescriptor_20_A);
assertEquals(1, hbmodelDescriptor_20_A.getLoadedResources(true).size());
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(--resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(resourceInEditingDomainUml2, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// ==================================================================
// resources
// Move file uml2File20_D_1 to hbProject20_A
IFile fileUml2_20D_1 = refWks.hbProject20_D.getFile(DefaultTestReferenceWorkspace.UML2_FILE_NAME_20D_1);
assertNotNull(fileUml2_20D_1);
assertTrue(fileUml2_20D_1.isAccessible());
IPath targetOfFileUml2_20D_1 = refWks.hbProject20_A.getFullPath().append(fileUml2_20D_1.getName());
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_A, UML2MMDescriptor.INSTANCE);
assertTrue(models.isEmpty());
synchronizedMoveFile(fileUml2_20D_1, targetOfFileUml2_20D_1);
// Verify that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFileUml2_20D_1 = refWks.hbProject20_A.getFile(fileUml2_20D_1.getName());
assertNotNull(movedFileUml2_20D_1);
assertTrue(movedFileUml2_20D_1.isAccessible());
assertTrue(EcorePlatformUtil.isFileLoaded(movedFileUml2_20D_1));
// Verify that move filed is removed from the oldModelDescriptor
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(--resourceUml2InProject_20_D, uml2modelDescriptor_20_D.getLoadedResources(true).size());
// Verify a new uml model in hbProject20_A was automatically generated
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_A, UML2MMDescriptor.INSTANCE);
assertEquals(1, models.size());
IModelDescriptor uml2ModelDescriptor_20_A = models.iterator().next();
assertNotNull(uml2ModelDescriptor_20_A);
assertEquals(1, uml2ModelDescriptor_20_A.getLoadedResources(true).size());
// ------------------
// // Move file uml2File20_D_2 to hbProject20_A
IFile fileUml2_20D_2 = refWks.hbProject20_D.getFile(DefaultTestReferenceWorkspace.UML2_FILE_NAME_20D_2);
assertNotNull(fileUml2_20D_2);
assertTrue(fileUml2_20D_2.isAccessible());
IPath targetOfFileUml2_20D_2 = refWks.hbProject20_A.getFullPath().append(fileUml2_20D_2.getName());
synchronizedMoveFile(fileUml2_20D_2, targetOfFileUml2_20D_2);
// Verify that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFileUml2_20D_2 = refWks.hbProject20_A.getFile(fileUml2_20D_2.getName());
assertNotNull(movedFileUml2_20D_2);
assertTrue(movedFileUml2_20D_2.isAccessible());
assertTrue(EcorePlatformUtil.isFileLoaded(movedFileUml2_20D_2));
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(--resourceUml2InProject_20_D, uml2modelDescriptor_20_D.getLoadedResources(true).size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
assertEquals(2, uml2ModelDescriptor_20_A.getLoadedResources(true).size());
// ------------------
// Move file uml2File20_D_2 to hbProject20_A
IFile fileUml2_20D_3 = refWks.hbProject20_D.getFile(DefaultTestReferenceWorkspace.UML2_FILE_NAME_20D_3);
assertNotNull(fileUml2_20D_3);
assertTrue(fileUml2_20D_3.isAccessible());
IPath targetOfFileUml2_20D_3 = refWks.hbProject20_A.getFullPath().append(fileUml2_20D_3.getName());
synchronizedMoveFile(fileUml2_20D_3, targetOfFileUml2_20D_3);
// Verify that moved File is Unloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourceInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourceInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
IFile movedFileUml2_20D_3 = refWks.hbProject20_A.getFile(fileUml2_20D_3.getName());
assertNotNull(movedFileUml2_20D_3);
assertTrue(movedFileUml2_20D_3.isAccessible());
assertTrue(EcorePlatformUtil.isFileLoaded(movedFileUml2_20D_3));
// Verify that move filed is removed from the oldModelDescriptor
assertEquals(resourceAr10InProject_10_A, hbmodelDescriptor_10_A.getLoadedResources(true).size());
assertEquals(resourceAr20InProject_20_D, hbmodelDescriptor_20_D.getLoadedResources(true).size());
assertEquals(3, uml2ModelDescriptor_20_A.getLoadedResources(true).size());
models = ModelDescriptorRegistry.INSTANCE.getModels(refWks.hbProject20_D, UML2MMDescriptor.INSTANCE);
assertTrue(models.isEmpty());
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourceInEditingDomainUml2);
assertEquals(3, uml2ModelDescriptor_20_A.getLoadedResources(true).size());
}
// +testFileRenamed]
// o rename a file in an HB project
// -> The renamed file is loaded in editingDomain and put it the ModelDescriptor in correct place
public void testFileRenamed() throws Exception {
int resourcesInEditingDomain20 = 0;
int resourcesInEditingDomain10 = 0;
int resourcesInEditingDomainUml2 = 0;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
synchronizedOpenProject(refWks.hbProject20_B);
synchronizedOpenProject(refWks.hbProject10_C);
int resource20InProject20_B = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, Hummingbird20MMDescriptor.INSTANCE)
.size();
int resourceUml2InProject20_B = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B, UML2MMDescriptor.INSTANCE)
.size();
int resource10InProject10_C = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C, Hummingbird10MMDescriptor.INSTANCE)
.size();
int resourceUml2InProject10_C = refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C, UML2MMDescriptor.INSTANCE)
.size();
resourcesInEditingDomain20 += resource20InProject20_B;
resourcesInEditingDomain10 += resource10InProject10_C;
resourcesInEditingDomainUml2 += resourceUml2InProject10_C + resourceUml2InProject20_B;
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
// ============================================================
// test rename a file in an HB 20 project
IFile hbFile20B_1 = refWks.hbProject20_B.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20B_1);
// check if model descriptor in project hbProject20_B has been put in
// place
assertProjectModelsSizeEquals(refWks.hbProject20_B, 2);
IModelDescriptor modelDescriptor20_B = ModelDescriptorRegistry.INSTANCE.getModel(hbFile20B_1);
assertEquals(resource20InProject20_B, modelDescriptor20_B.getLoadedResources(false).size());
// Rename an HbFile in hbProject20A
String newName20 = "hbFile20.typemodel";
synchronizedRenameFile(hbFile20B_1, newName20);
waitForModelLoading();
// check if Hb model descriptor has been updated
assertProjectModelsSizeEquals(refWks.hbProject20_B, 2);
assertEquals(resource20InProject20_B, modelDescriptor20_B.getLoadedResources(false).size());
// check if resources in project hbProject20_B has been reloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
assertNull(refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI(
"/" + DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20B_1, true),
false));
assertNotNull(refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI("/" + DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_B + "/" + newName20, true), false));
IFile newFile20 = refWks.hbProject20_B.getFile(newName20);
assertNotNull(newFile20);
assertTrue(newFile20.exists());
assertTrue(EcorePlatformUtil.isFileLoaded(newFile20));
// ============================================================
// test rename a file in an HUMMINGBIRD 10 project
IFile hbFile10C_1 = refWks.hbProject10_C.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10C_1);
// check if model descriptor in project hbProject20_A has been put in
// place
assertProjectModelsSizeEquals(refWks.hbProject10_C, 2);
IModelDescriptor modelDescriptor10_C = ModelDescriptorRegistry.INSTANCE.getModel(hbFile10C_1);
assertEquals(resourceUml2InProject10_C, modelDescriptor10_C.getLoadedResources(false).size());
// Rename an HbFile in hbProject10C
String newName10 = "HbFile10.hummingbird";
synchronizedRenameFile(hbFile10C_1, newName10);
waitForModelLoading();
// check if Hb model descriptor has been updated
assertProjectModelsSizeEquals(refWks.hbProject10_C, 2);
assertEquals(resourceUml2InProject10_C, modelDescriptor10_C.getLoadedResources(false).size());
// check if resources in project hbProject20_A has been reloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
assertNull(refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI(
"/" + DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10C_1, true),
false));
assertNotNull(refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI("/" + DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + newName10, true), false));
IFile newFile10 = refWks.hbProject10_C.getFile(newName10);
assertNotNull(newFile10);
assertTrue(newFile10.exists());
assertTrue(EcorePlatformUtil.isFileLoaded(newFile10));
// ============================================================
// test rename an UML2 file in a project
IFile uml2File10C_1 = refWks.hbProject10_C.getFile(DefaultTestReferenceWorkspace.UML2_FILE_NAME_10C_1);
// check if model descriptor in project hbProject20_A has been put in
// place
assertProjectModelsSizeEquals(refWks.hbProject10_C, 2);
IModelDescriptor uml2ModelDescriptor10_C = ModelDescriptorRegistry.INSTANCE.getModel(uml2File10C_1);
assertEquals(resourceUml2InProject10_C, uml2ModelDescriptor10_C.getLoadedResources(false).size());
// check if resources in project hbProject20_A has been loaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
// Rename an HbFile in hbProject10C
String newNameUml2 = "uml2File.uml";
synchronizedRenameFile(uml2File10C_1, newNameUml2);
waitForModelLoading();
// check if Hb model descriptor has been updated
assertProjectModelsSizeEquals(refWks.hbProject10_C, 2);
assertEquals(resourceUml2InProject10_C, uml2ModelDescriptor10_C.getLoadedResources(false).size());
// check if resources in project hbProject20_A has been reloaded
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, resourcesInEditingDomain10);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, resourcesInEditingDomain20);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, resourcesInEditingDomainUml2);
assertNull(refWks.editingDomainUml2.getResourceSet()
.getResource(URI.createPlatformResourceURI(
"/" + DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_10C_1, true),
false));
assertNotNull(refWks.editingDomainUml2.getResourceSet().getResource(
URI.createPlatformResourceURI("/" + DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + newNameUml2, true), false));
IFile newFileUml2 = refWks.hbProject10_C.getFile(newNameUml2);
assertNotNull(newFileUml2);
assertTrue(newFileUml2.exists());
assertTrue(EcorePlatformUtil.isFileLoaded(newFileUml2));
}
// + testFileRemoved
// o right click on file + Delete
// o right click on folder + Delete
// -> model resource(s) must be unloaded
// -> corresponding model descriptor(s) must stay in place unless removed
// file(s) was(were) the last model resource(s)
public void testFileRemoved() throws Exception {
// File removed in HB 20 project
synchronizedOpenProject(refWks.hbProject20_A);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20,
refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_A, Hummingbird20MMDescriptor.INSTANCE).size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
IFile file1 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_1);
synchronizedDeleteFile(file1);
assertFalse(EcorePlatformUtil.isFileLoaded(file1));
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
IFile file2 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_2);
synchronizedDeleteFile(file2);
assertFalse(EcorePlatformUtil.isFileLoaded(file2));
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
IFile file3 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_3);
synchronizedDeleteFile(file3);
assertFalse(EcorePlatformUtil.isFileLoaded(file3));
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
IFile file4 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_4);
synchronizedDeleteFile(file4);
assertFalse(EcorePlatformUtil.isFileLoaded(file4));
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
IFile file5 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_21_20A_4);
synchronizedDeleteFile(file5);
assertProjectModelsSizeEquals(refWks.hbProject20_A, 1);
IFile file6 = refWks.hbProject20_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20A_5);
synchronizedDeleteFile(file6);
assertProjectModelsSizeEquals(refWks.hbProject20_A, 0);
// File removed in HUMMINGBIRD 10 project
synchronizedOpenProject(refWks.hbProject10_A);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10,
refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE).size());
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
file4 = refWks.hbProject10_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10A_1);
synchronizedDeleteFile(file4);
assertFalse(EcorePlatformUtil.isFileLoaded(file4));
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
file6 = refWks.hbProject10_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10A_2);
synchronizedDeleteFile(file6);
assertFalse(EcorePlatformUtil.isFileLoaded(file6));
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
IFile file7 = refWks.hbProject10_A.getFile(DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10A_3);
synchronizedDeleteFile(file7);
assertFalse(EcorePlatformUtil.isFileLoaded(file7));
assertProjectModelsSizeEquals(refWks.hbProject10_A, 1);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain10,
refWks.getReferenceFiles(DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_A, Hummingbird10MMDescriptor.INSTANCE).size() - 3);
assertEditingDomainResourcesSizeEquals(refWks.editingDomain20, 0);
assertEditingDomainResourcesSizeEquals(refWks.editingDomainUml2, 0);
}
// test Proxy Resolution is redone after adding references btw projects
// A refers to B and so all references in objects from A pointing to reachable
// elements of B are resolved
public void testProxyResolution_AddReferencedProject() throws Exception {
synchronizedOpenProject(refWks.hbProject20_A);
synchronizedOpenProject(refWks.hbProject20_C);
List<org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component> objects20 = new ArrayList<org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component>();
Resource resource20_C_1 = refWks.editingDomain20.getResourceSet().getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_C + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20C_1, true), false);
assertNotNull(resource20_C_1);
assertFalse(resource20_C_1.getContents().isEmpty());
Application application20 = (Application) resource20_C_1.getContents().get(0);
assertNotNull(application20);
assertFalse(application20.getComponents().isEmpty());
objects20 = application20.getComponents();
// Test DataElementPrototype have unresolved reference
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : objects20) {
assertNotNull(component.getType());
assertTrue(component.getType().eIsProxy());
}
// Add reference from hbProject20_C to hbProject20_A
IProjectDescription hbProject20_C_prjDesc = refWks.hbProject20_C.getDescription();
hbProject20_C_prjDesc.setReferencedProjects(new IProject[] { refWks.hbProject20_A });
refWks.hbProject20_C.setDescription(hbProject20_C_prjDesc, new NullProgressMonitor());
waitForModelLoading();
// Verify the references are resolved
List<org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component> testObjects20 = new ArrayList<org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component>();
Resource testResource20_C_1 = refWks.editingDomain20.getResourceSet().getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_C + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20C_1, true), false);
assertNotNull(testResource20_C_1);
assertFalse(testResource20_C_1.getContents().isEmpty());
Application testApplication20 = (Application) resource20_C_1.getContents().get(0);
assertNotNull(testApplication20);
assertFalse(testApplication20.getComponents().isEmpty());
testObjects20 = testApplication20.getComponents();
// Test ComponentType have unresolved reference
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : testObjects20) {
assertNotNull(component.getType());
assertFalse(component.getType().eIsProxy());
IFile referenceFile = EcorePlatformUtil.getFile(component.getType());
assertNotNull(referenceFile);
assertEquals(refWks.hbProject20_A, referenceFile.getProject());
}
}
// Open referring project hbProject10_C, verify that references are proxies.
// Test proxy is unresolved when open referred project hbProject20_B, since no dependencies between the projects.
// Add reference from hbProject10_C to hbProject20_B, verify again that proxy resolution is done.
public void testProxyResolution_UMLReference1() throws Exception {
synchronizedOpenProject(refWks.hbProject10_C);
// verify that no project references exist in hbProject10_C
assertEquals(0, refWks.hbProject10_C.getDescription().getReferencedProjects().length);
Resource resourceUml2_C_1 = refWks.editingDomainUml2.getResourceSet().getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_10C_1, true), false);
assertNotNull(resourceUml2_C_1);
assertFalse(resourceUml2_C_1.getContents().isEmpty());
Model model = (Model) resourceUml2_C_1.getContents().get(0);
assertNotNull(model);
assertEquals(2, model.getPackagedElements().size());
org.eclipse.uml2.uml.PackageableElement uml2Package = model.getPackagedElements().get(1);
List<Port> objectUml2 = new ArrayList<Port>();
for (Element element : uml2Package.getOwnedElements()) {
if (element instanceof Component) {
Component comp = (Component) element;
assertFalse(comp.getOwnedPorts().isEmpty());
Port port = comp.getOwnedPorts().get(0);
objectUml2.add(port);
}
}
assertFalse(objectUml2.isEmpty());
// Verify that port of component have unresolved reference.
// The referred resources in hbProject20_B are not existing, so the references will be resolved as proxies
for (Port port : objectUml2) {
EObject refObject = port.getType();
assertNotNull(refObject);
assertTrue(refObject.eIsProxy());
}
// ---------------------------------------------
/*
* Open referred project hbProject20_B, references are asked to resolved. Now referred resources is existing,
* however there is no project reference dependency from hbProject10_C to hbProject20_B, the proxies are still
* unresolved.
*/
synchronizedOpenProject(refWks.hbProject20_B);
// Verify the references are unresolved
List<Port> testObjectUml2 = new ArrayList<Port>();
Resource testresourceUml2_C_1 = refWks.editingDomainUml2.getResourceSet().getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_10C_1, true), false);
assertNotNull(testresourceUml2_C_1);
assertTrue(testresourceUml2_C_1.getContents().size() > 0);
Model testModel = (Model) testresourceUml2_C_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
org.eclipse.uml2.uml.PackageableElement testUml2Package = testModel.getPackagedElements().get(1);
for (Element element : testUml2Package.getOwnedElements()) {
if (element instanceof Component) {
Component comp = (Component) element;
assertTrue(comp.getOwnedPorts().size() > 0);
Port port = comp.getOwnedPorts().get(0);
testObjectUml2.add(port);
}
}
assertFalse(testObjectUml2.isEmpty());
// Verify that port of component have unresolved reference
// The referred resources in hbProject20_B are not in the project scope, so the references will be resolved as
// proxies
for (Port port : testObjectUml2) {
EObject refObject = port.getType();
assertNotNull(refObject);
assertTrue(refObject.eIsProxy());
}
// ---------------------------------------------
/*
* Add reference from hbProject10_C to hbProject20_B. Now the referred resource is in the same project scope,
* the proxy resolution is done.
*/
// add reference from hbProject10_C to hbProject20_B
IProjectDescription hbProject10_C_prjDesc = refWks.hbProject10_C.getDescription();
hbProject10_C_prjDesc.setReferencedProjects(new IProject[] { refWks.hbProject20_B });
refWks.hbProject10_C.setDescription(hbProject10_C_prjDesc, new NullProgressMonitor());
waitForModelLoading();
// Verify the references are resolved
List<Port> testObjectUml2B = new ArrayList<Port>();
Resource testresourceUml2_C_1B = refWks.editingDomainUml2.getResourceSet().getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_10C_1, true), false);
assertNotNull(testresourceUml2_C_1B);
assertTrue(testresourceUml2_C_1B.getContents().size() > 0);
Model testModelB = (Model) testresourceUml2_C_1B.getContents().get(0);
assertNotNull(testModelB);
assertEquals(2, testModelB.getPackagedElements().size());
org.eclipse.uml2.uml.PackageableElement testUml2PackageB = testModel.getPackagedElements().get(1);
for (Element element : testUml2PackageB.getOwnedElements()) {
if (element instanceof Component) {
Component comp = (Component) element;
assertTrue(comp.getOwnedPorts().size() > 0);
Port port = comp.getOwnedPorts().get(0);
testObjectUml2B.add(port);
}
}
assertFalse(testObjectUml2B.isEmpty());
// Verify that port of component have resolved reference
for (Port port : testObjectUml2B) {
EObject refObject = port.getType();
assertNotNull(refObject);
assertFalse(refObject.eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(refObject);
assertEquals(refWks.hbProject20_B, refFile.getProject());
}
}
// Open referred project hbProject20_B, then open referring project hbProject10_C.
// Test that proxy resolution is done only when the project reference (from hbProject10_C to hbProject20_B) is
// added.
public void testProxyResolution_UMLReference2() throws Exception {
// Open referred project hbProject20_B
synchronizedOpenProject(refWks.hbProject20_B);
// Open referring project hbProject10_C
synchronizedOpenProject(refWks.hbProject10_C);
// Verify that there is no link btw 2 projects
assertEquals(0, refWks.hbProject10_C.getDescription().getReferencedProjects().length);
// ------------------------------------------------
// Verify the references are unresolved
List<Port> testObjectUml2 = new ArrayList<Port>();
Resource testresourceUml2_C_1 = refWks.editingDomainUml2.getResourceSet().getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_10C_1, true), false);
assertNotNull(testresourceUml2_C_1);
assertTrue(testresourceUml2_C_1.getContents().size() > 0);
Model testModel = (Model) testresourceUml2_C_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
org.eclipse.uml2.uml.PackageableElement testUml2Package = testModel.getPackagedElements().get(1);
for (Element element : testUml2Package.getOwnedElements()) {
if (element instanceof Component) {
Component comp = (Component) element;
assertTrue(comp.getOwnedPorts().size() > 0);
Port port = comp.getOwnedPorts().get(0);
testObjectUml2.add(port);
}
}
assertFalse(testObjectUml2.isEmpty());
// Verify that port of component have unresolved reference.
// The referred resources in hbProject20_B are not in the project scope, so the references will be resolved as
// proxies
for (Port port : testObjectUml2) {
EObject refObject = port.getType();
assertNotNull(refObject);
assertTrue(refObject.eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(refObject);
assertNull(refFile);
}
// ------------------------------------------------
/*
* Add reference from hbProject10_C to hbProject20_B. Now the referred resource is in the same project scope,
* the proxy resolution is done.
*/
// add reference from hbProject10_C to hbProject20_B
IProjectDescription hbProject10_C_prjDesc = refWks.hbProject10_C.getDescription();
hbProject10_C_prjDesc.setReferencedProjects(new IProject[] { refWks.hbProject20_B });
refWks.hbProject10_C.setDescription(hbProject10_C_prjDesc, new NullProgressMonitor());
waitForModelLoading();
assertEquals(1, refWks.hbProject10_C.getDescription().getReferencedProjects().length);
// Verify the references are resolved
List<Port> objectUml2 = new ArrayList<Port>();
testresourceUml2_C_1 = refWks.editingDomainUml2.getResourceSet().getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_C + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_10C_1, true), false);
assertNotNull(testresourceUml2_C_1);
assertTrue(testresourceUml2_C_1.getContents().size() > 0);
testModel = (Model) testresourceUml2_C_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
testUml2Package = testModel.getPackagedElements().get(1);
for (Element element : testUml2Package.getOwnedElements()) {
if (element instanceof Component) {
Component comp = (Component) element;
assertTrue(comp.getOwnedPorts().size() > 0);
Port port = comp.getOwnedPorts().get(0);
objectUml2.add(port);
}
}
assertFalse(objectUml2.isEmpty());
// Verify that port of component have resolved reference
for (Port port : objectUml2) {
EObject refObject = port.getType();
assertNotNull(refObject);
assertFalse(refObject.eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(refObject);
assertEquals(refWks.hbProject20_B, refFile.getProject());
}
}
// A refers to B and so all references in objects from A pointing to elements of B are resolved
// removed the dependency btw projects => references are unresolved
public void testProxyResolution_RemoveReferencedProject() throws Exception {
// ---------------------------------------------------------------------------------------------------
// Context: HB10 objects
{
synchronizedOpenProject(refWks.hbProject10_D);
synchronizedOpenProject(refWks.hbProject10_E);
Resource resource10_E_1 = refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1, true),
false);
assertNotNull(resource10_E_1);
assertFalse(resource10_E_1.getContents().isEmpty());
org.eclipse.sphinx.examples.hummingbird10.Application application10 = (org.eclipse.sphinx.examples.hummingbird10.Application) resource10_E_1
.getContents().get(0);
assertNotNull(application10);
assertTrue(application10.getComponents().size() > 0);
for (org.eclipse.sphinx.examples.hummingbird10.Component component : application10.getComponents()) {
assertNotNull(component.getProvidedInterfaces());
for (org.eclipse.sphinx.examples.hummingbird10.Interface proInterface : component.getProvidedInterfaces()) {
assertFalse(proInterface.eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(proInterface);
assertNotNull(refFile);
assertEquals(refWks.hbProject10_D, refFile.getProject());
}
}
//
// *** Remove reference from hbProject10_E to hbProject10_D
IProjectDescription hbProject10_E_prjDesc = refWks.hbProject10_E.getDescription();
hbProject10_E_prjDesc.setReferencedProjects(new IProject[] {});
refWks.hbProject10_E.setDescription(hbProject10_E_prjDesc, new NullProgressMonitor());
waitForModelLoading();
//
// Verify the references are unresolved
Resource testResource10E_1 = refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1, true),
false);
assertNotNull(testResource10E_1);
assertFalse(testResource10E_1.getContents().isEmpty());
org.eclipse.sphinx.examples.hummingbird10.Application testApplication10 = (org.eclipse.sphinx.examples.hummingbird10.Application) testResource10E_1
.getContents().get(0);
assertNotNull(testApplication10);
assertTrue(testApplication10.getComponents().size() > 0);
for (org.eclipse.sphinx.examples.hummingbird10.Component component : testApplication10.getComponents()) {
assertNotNull(component.getProvidedInterfaces());
for (org.eclipse.sphinx.examples.hummingbird10.Interface proInterface : component.getProvidedInterfaces()) {
assertTrue(proInterface.eIsProxy());
}
}
}
// ---------------------------------------------------------------------------------------------------
// Context: HB 20 Objects and Uml Objecst
{
synchronizedOpenProject(refWks.hbProject20_D);
synchronizedOpenProject(refWks.hbProject20_E);
// ************************************
// HB20 Objects
Resource resource20_E_1 = refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_1, true),
false);
assertNotNull(resource20_E_1);
assertFalse(resource20_E_1.getContents().isEmpty());
Application application20 = (Application) resource20_E_1.getContents().get(0);
assertNotNull(application20);
assertFalse(application20.getComponents().isEmpty());
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : application20.getComponents()) {
assertNotNull(component.getType());
assertFalse(component.getType().eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(component.getType());
assertNotNull(refFile);
assertEquals(refWks.hbProject20_D, refFile.getProject());
}
// *********************************
// Uml2 Objects
List<Operation> testObjectUml2 = new ArrayList<Operation>();
Resource resourceUml2_E_1 = refWks.editingDomainUml2.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1, true),
false);
assertNotNull(resourceUml2_E_1);
assertFalse(resourceUml2_E_1.getContents().isEmpty());
Model model = (Model) resourceUml2_E_1.getContents().get(0);
assertNotNull(model);
assertEquals(2, model.getPackagedElements().size());
PackageableElement uml2Package = model.getPackagedElements().get(1);
assertFalse(uml2Package.getOwnedElements().isEmpty());
Interface uml2Interface = (Interface) uml2Package.getOwnedElements().get(0);
assertNotNull(uml2Interface);
testObjectUml2.addAll(uml2Interface.getOperations());
// Test references
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertFalse(operation.getMethods().get(0).eIsProxy());
IFile referencedFile = EcorePlatformUtil.getFile(operation.getMethods().get(0));
assertNotNull(referencedFile);
assertEquals(refWks.hbProject20_D, referencedFile.getProject());
}
//
//
// *****Remove reference from hbProject20_D to hbProject20_E
IProjectDescription hbProject20_E_prjDesc = refWks.hbProject20_E.getDescription();
hbProject20_E_prjDesc.setReferencedProjects(new IProject[] {});
refWks.hbProject20_E.setDescription(hbProject20_E_prjDesc, new NullProgressMonitor());
waitForModelLoading();
//
//
// ********************************
// Verify the reference of HB20 objects are unresolved
Resource testResource20_E_1 = refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_1, true),
false);
assertNotNull(testResource20_E_1);
assertFalse(testResource20_E_1.getContents().isEmpty());
Application testApplication20 = (Application) resource20_E_1.getContents().get(0);
assertNotNull(testApplication20);
assertFalse(testApplication20.getComponents().isEmpty());
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : testApplication20.getComponents()) {
assertNotNull(component.getType());
assertTrue(component.getType().eIsProxy());
}
//
// *************************************
// Verify the references of Uml2 Objects are unresolved
testObjectUml2.clear();
Resource testresourceUml2_E_1 = refWks.editingDomainUml2.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1, true),
false);
assertNotNull(testresourceUml2_E_1);
assertTrue(testresourceUml2_E_1.getContents().size() > 0);
Model testModel = (Model) testresourceUml2_E_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
org.eclipse.uml2.uml.Package testUml2Package = (Package) testModel.getPackagedElements().get(1);
assertNotNull(testUml2Package);
assertFalse(testUml2Package.getOwnedElements().isEmpty());
Interface testInterface = (Interface) testUml2Package.getOwnedElements().get(0);
assertNotNull(testInterface);
assertFalse(testInterface.getOperations().isEmpty());
testObjectUml2.addAll(testInterface.getOperations());
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertNotNull(operation.getMethods().get(0));
// assertTrue(operation.getMethods().get(0).eIsProxy());
}
}
}
// Close referenced project and verify that all references to objects in closed project are unresolved
public void testProxyResolution_CloseReferencedProject() throws Exception {
// Context: HB10 objects
{
synchronizedOpenProject(refWks.hbProject10_D);
synchronizedOpenProject(refWks.hbProject10_E);
Resource resource10_E_1 = refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1, true),
false);
assertNotNull(resource10_E_1);
assertFalse(resource10_E_1.getContents().isEmpty());
org.eclipse.sphinx.examples.hummingbird10.Application application10 = (org.eclipse.sphinx.examples.hummingbird10.Application) resource10_E_1
.getContents().get(0);
assertNotNull(application10);
assertTrue(application10.getComponents().size() > 0);
for (org.eclipse.sphinx.examples.hummingbird10.Component component : application10.getComponents()) {
assertNotNull(component.getProvidedInterfaces());
for (org.eclipse.sphinx.examples.hummingbird10.Interface proInterface : component.getProvidedInterfaces()) {
assertFalse(proInterface.eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(proInterface);
assertNotNull(refFile);
assertEquals(refWks.hbProject10_D, refFile.getProject());
}
}
//
// ****Close referenced project
synchronizedCloseProject(refWks.hbProject10_D);
//
//
// Verify the references are unresolved
Resource testResource10E_1 = refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1, true),
false);
assertNotNull(testResource10E_1);
assertFalse(testResource10E_1.getContents().isEmpty());
org.eclipse.sphinx.examples.hummingbird10.Application testApplication10 = (org.eclipse.sphinx.examples.hummingbird10.Application) testResource10E_1
.getContents().get(0);
assertNotNull(testApplication10);
assertTrue(testApplication10.getComponents().size() > 0);
for (org.eclipse.sphinx.examples.hummingbird10.Component component : testApplication10.getComponents()) {
assertNotNull(component.getProvidedInterfaces());
for (org.eclipse.sphinx.examples.hummingbird10.Interface proInterface : component.getProvidedInterfaces()) {
assertTrue(proInterface.eIsProxy());
}
}
}
// ---------------------------------------------------------------------------------------------------
// Context: HB20 Objects and Non UML Object
{
synchronizedOpenProject(refWks.hbProject20_D);
synchronizedOpenProject(refWks.hbProject20_E);
List<Operation> testObjectUml2 = new ArrayList<Operation>();
Resource resource20_E_1 = refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_1, true),
false);
// ************************************
// HB20 Objects
assertNotNull(resource20_E_1);
assertFalse(resource20_E_1.getContents().isEmpty());
Application application20 = (Application) resource20_E_1.getContents().get(0);
assertNotNull(application20);
assertFalse(application20.getComponents().isEmpty());
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : application20.getComponents()) {
assertNotNull(component.getType());
assertFalse(component.getType().eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(component.getType());
assertNotNull(refFile);
assertEquals(refWks.hbProject20_D, refFile.getProject());
}
// *********************************
// Uml2 Objects
Resource resourceUml2_E_1 = refWks.editingDomainUml2.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1, true),
false);
assertNotNull(resourceUml2_E_1);
assertFalse(resourceUml2_E_1.getContents().isEmpty());
Model model = (Model) resourceUml2_E_1.getContents().get(0);
assertNotNull(model);
assertEquals(2, model.getPackagedElements().size());
PackageableElement uml2Package = model.getPackagedElements().get(1);
assertFalse(uml2Package.getOwnedElements().isEmpty());
Interface uml2Interface = (Interface) uml2Package.getOwnedElements().get(0);
assertNotNull(uml2Interface);
testObjectUml2.addAll(uml2Interface.getOperations());
// Test references
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertFalse(operation.getMethods().get(0).eIsProxy());
IFile referencedFile = EcorePlatformUtil.getFile(operation.getMethods().get(0));
assertNotNull(referencedFile);
assertEquals(refWks.hbProject20_D, referencedFile.getProject());
}
//
//
// *****Close referenced project hbProject20_D
synchronizedCloseProject(refWks.hbProject20_D);
// Verify the references of Hummingbird objects are unresolved
Resource testResource20_E_1 = refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_1, true),
false);
assertNotNull(testResource20_E_1);
assertFalse(testResource20_E_1.getContents().isEmpty());
Application testApplication20 = (Application) testResource20_E_1.getContents().get(0);
assertNotNull(testApplication20);
assertFalse(testApplication20.getComponents().isEmpty());
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : testApplication20.getComponents()) {
assertNotNull(component.getType());
assertTrue(component.getType().eIsProxy());
}
// Verify the references of Uml2 Objects are unresolved
testObjectUml2.clear();
Resource testresourceUml2_E_1 = refWks.editingDomainUml2.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1, true),
false);
assertNotNull(testresourceUml2_E_1);
assertFalse(testresourceUml2_E_1.getContents().isEmpty());
Model testModel = (Model) testresourceUml2_E_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
org.eclipse.uml2.uml.Package testUml2Package = (Package) testModel.getPackagedElements().get(1);
assertNotNull(testUml2Package);
assertFalse(testUml2Package.getOwnedElements().isEmpty());
Interface testInterface = (Interface) testUml2Package.getOwnedElements().get(0);
assertNotNull(testInterface);
assertFalse(testInterface.getOperations().isEmpty());
testObjectUml2.addAll(testInterface.getOperations());
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertNotNull(operation.getMethods().get(0));
assertTrue(operation.getMethods().get(0).eIsProxy());
}
}
}
// Delete referenced project then verify that all references to objects in deleted objects are unresolved
public void testProxyResolution_DeleteReferencedProject() throws Exception {
// Context: HB10 objects
{
synchronizedOpenProject(refWks.hbProject10_D);
synchronizedOpenProject(refWks.hbProject10_E);
Resource resource10_E_1 = refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1, true),
false);
assertNotNull(resource10_E_1);
assertFalse(resource10_E_1.getContents().isEmpty());
org.eclipse.sphinx.examples.hummingbird10.Application application10 = (org.eclipse.sphinx.examples.hummingbird10.Application) resource10_E_1
.getContents().get(0);
assertNotNull(application10);
assertTrue(application10.getComponents().size() > 0);
for (org.eclipse.sphinx.examples.hummingbird10.Component component : application10.getComponents()) {
assertNotNull(component.getProvidedInterfaces());
for (org.eclipse.sphinx.examples.hummingbird10.Interface proInterface : component.getProvidedInterfaces()) {
assertFalse(proInterface.eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(proInterface);
assertNotNull(refFile);
assertEquals(refWks.hbProject10_D, refFile.getProject());
}
}
// /
// Close referenced project
synchronizedDeleteProject(refWks.hbProject10_D);
// /
// Verify the references are unresolved
Resource testResource10E_1 = refWks.editingDomain10.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_10_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_10_10E_1, true),
false);
assertNotNull(testResource10E_1);
assertFalse(testResource10E_1.getContents().isEmpty());
org.eclipse.sphinx.examples.hummingbird10.Application testApplication10 = (org.eclipse.sphinx.examples.hummingbird10.Application) testResource10E_1
.getContents().get(0);
assertNotNull(testApplication10);
assertTrue(testApplication10.getComponents().size() > 0);
for (org.eclipse.sphinx.examples.hummingbird10.Component component : testApplication10.getComponents()) {
assertNotNull(component.getProvidedInterfaces());
for (org.eclipse.sphinx.examples.hummingbird10.Interface proInterface : component.getProvidedInterfaces()) {
assertTrue(proInterface.eIsProxy());
}
}
}
// ---------------------------------------------------------------------------------------------------
// Context: HB 20 Objects and UML Objecst
{
synchronizedOpenProject(refWks.hbProject20_D);
synchronizedOpenProject(refWks.hbProject20_E);
// HB20 Objects
Resource resource20_E_1 = refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_1, true),
false);
assertNotNull(resource20_E_1);
assertFalse(resource20_E_1.getContents().isEmpty());
Application application20 = (Application) resource20_E_1.getContents().get(0);
assertNotNull(application20);
assertFalse(application20.getComponents().isEmpty());
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : application20.getComponents()) {
assertNotNull(component.getType());
assertFalse(component.getType().eIsProxy());
IFile refFile = EcorePlatformUtil.getFile(component.getType());
assertNotNull(refFile);
assertEquals(refWks.hbProject20_D, refFile.getProject());
}
// *********************************
// Uml2 Objects
List<Operation> testObjectUml2 = new ArrayList<Operation>();
Resource resourceUml2_E_1 = refWks.editingDomainUml2.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1, true),
false);
assertNotNull(resourceUml2_E_1);
assertFalse(resourceUml2_E_1.getContents().isEmpty());
Model model = (Model) resourceUml2_E_1.getContents().get(0);
assertNotNull(model);
assertEquals(2, model.getPackagedElements().size());
PackageableElement uml2Package = model.getPackagedElements().get(1);
assertFalse(uml2Package.getOwnedElements().isEmpty());
Interface uml2Interface = (Interface) uml2Package.getOwnedElements().get(0);
assertNotNull(uml2Interface);
testObjectUml2.addAll(uml2Interface.getOperations());
// Test references
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertFalse(operation.getMethods().get(0).eIsProxy());
IFile referencedFile = EcorePlatformUtil.getFile(operation.getMethods().get(0));
assertNotNull(referencedFile);
assertEquals(refWks.hbProject20_D, referencedFile.getProject());
}
//
//
// *****Delete referenced project hbProject20_D
synchronizedDeleteProject(refWks.hbProject20_D);
//
// Verify the references of Hummingbird objects are unresolved
Resource testResource20_E_1 = refWks.editingDomain20.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.HB_FILE_NAME_20_20E_1, true),
false);
assertNotNull(testResource20_E_1);
assertFalse(testResource20_E_1.getContents().isEmpty());
Application testApplication20 = (Application) testResource20_E_1.getContents().get(0);
assertNotNull(testApplication20);
assertFalse(testApplication20.getComponents().isEmpty());
for (org.eclipse.sphinx.examples.hummingbird20.instancemodel.Component component : testApplication20.getComponents()) {
assertNotNull(component.getType());
assertTrue(component.getType().eIsProxy());
}
// Verify the references of Uml2 Objects are unresolved
testObjectUml2.clear();
Resource testresourceUml2_E_1 = refWks.editingDomainUml2.getResourceSet()
.getResource(URI.createPlatformResourceURI(
DefaultTestReferenceWorkspace.HB_PROJECT_NAME_20_E + "/" + DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1, true),
false);
assertNotNull(testresourceUml2_E_1);
assertTrue(testresourceUml2_E_1.getContents().size() > 0);
Model testModel = (Model) testresourceUml2_E_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
org.eclipse.uml2.uml.Package testUml2Package = (Package) testModel.getPackagedElements().get(1);
assertNotNull(testUml2Package);
assertFalse(testUml2Package.getOwnedElements().isEmpty());
Interface testInterface = (Interface) testUml2Package.getOwnedElements().get(0);
assertNotNull(testInterface);
assertFalse(testInterface.getOperations().isEmpty());
testObjectUml2.addAll(testInterface.getOperations());
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertNotNull(operation.getMethods().get(0));
assertTrue(operation.getMethods().get(0).eIsProxy());
}
}
}
// Add reference from hbProject10_A to hbProject10_B verify that all proxies are resolved
// Then remove the reference and verify that all reference from A to B are unresolved
// Re- add reference and verify again that references from A to B are re- resolved
public void testProxyResolution_IntegrateAddingRemovingReferencedProject() throws Exception {
// Context: UML Objects
{
synchronizedOpenProject(refWks.hbProject20_D);
synchronizedOpenProject(refWks.hbProject20_E);
List<Operation> testObjectUml2 = new ArrayList<Operation>();
Resource resourceUml2_E_1 = null;
for (Resource res : refWks.editingDomainUml2.getResourceSet().getResources()) {
if (DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1.equals(res.getURI().lastSegment())) {
resourceUml2_E_1 = res;
break;
}
}
assertNotNull(resourceUml2_E_1);
assertTrue(resourceUml2_E_1.getContents().size() > 0);
Model model = (Model) resourceUml2_E_1.getContents().get(0);
assertNotNull(model);
assertEquals(2, model.getPackagedElements().size());
PackageableElement uml2Package = model.getPackagedElements().get(1);
assertFalse(uml2Package.getOwnedElements().isEmpty());
Interface uml2Interface = (Interface) uml2Package.getOwnedElements().get(0);
assertNotNull(uml2Interface);
testObjectUml2.addAll(uml2Interface.getOperations());
// Test GatewayInstance have resolved references
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertFalse(operation.getMethods().get(0).eIsProxy());
IFile referencedFile = EcorePlatformUtil.getFile(operation.getMethods().get(0));
assertNotNull(referencedFile);
assertEquals(refWks.hbProject20_D, referencedFile.getProject());
}
//
// ****Remove reference from hbProject20_E to hbProject20_D
IProjectDescription hbProject20_E_prjDesc = refWks.hbProject20_E.getDescription();
hbProject20_E_prjDesc.setReferencedProjects(new IProject[] {});
refWks.hbProject20_E.setDescription(hbProject20_E_prjDesc, new NullProgressMonitor());
waitForModelLoading();
//
// Verify the references are unresolved
testObjectUml2.clear();
Resource testresourceUml2_E_1 = null;
for (Resource res : refWks.editingDomainUml2.getResourceSet().getResources()) {
if (DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1.equals(res.getURI().lastSegment())) {
testresourceUml2_E_1 = res;
break;
}
}
assertNotNull(testresourceUml2_E_1);
assertTrue(testresourceUml2_E_1.getContents().size() > 0);
Model testModel = (Model) testresourceUml2_E_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
org.eclipse.uml2.uml.Package testUml2Package = (Package) testModel.getPackagedElements().get(1);
assertNotNull(testUml2Package);
assertFalse(testUml2Package.getOwnedElements().isEmpty());
Interface testInterface = (Interface) testUml2Package.getOwnedElements().get(0);
assertNotNull(testInterface);
assertFalse(testInterface.getOperations().isEmpty());
testObjectUml2.addAll(testInterface.getOperations());
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertNotNull(operation.getMethods().get(0));
assertTrue(operation.getMethods().get(0).eIsProxy());
IFile referencedFile = EcorePlatformUtil.getFile(operation.getMethods().get(0));
assertNull(referencedFile);
}
// Re- add reference from hbProject20_D to hbProject20_E
hbProject20_E_prjDesc.setReferencedProjects(new IProject[] { refWks.hbProject20_D });
refWks.hbProject20_E.setDescription(hbProject20_E_prjDesc, new NullProgressMonitor());
waitForModelLoading();
// Verify the references are resolved
testObjectUml2.clear();
testresourceUml2_E_1 = null;
for (Resource res : refWks.editingDomainUml2.getResourceSet().getResources()) {
if (DefaultTestReferenceWorkspace.UML2_FILE_NAME_20E_1.equals(res.getURI().lastSegment())) {
testresourceUml2_E_1 = res;
break;
}
}
assertNotNull(testresourceUml2_E_1);
assertTrue(testresourceUml2_E_1.getContents().size() > 0);
testModel = (Model) testresourceUml2_E_1.getContents().get(0);
assertNotNull(testModel);
assertEquals(2, testModel.getPackagedElements().size());
testUml2Package = (Package) testModel.getPackagedElements().get(1);
assertNotNull(testUml2Package);
assertFalse(testUml2Package.getOwnedElements().isEmpty());
testInterface = (Interface) testUml2Package.getOwnedElements().get(0);
assertNotNull(testInterface);
assertFalse(testInterface.getOperations().isEmpty());
testObjectUml2.addAll(testInterface.getOperations());
for (Operation operation : testObjectUml2) {
assertFalse(operation.getMethods().isEmpty());
assertFalse(operation.getMethods().get(0).eIsProxy());
IFile referencedFile = EcorePlatformUtil.getFile(operation.getMethods().get(0));
assertNotNull(referencedFile);
assertEquals(refWks.hbProject20_D, referencedFile.getProject());
}
}
}
private boolean hasContentTypeOf(IFile file, AbstractMetaModelDescriptor modelDescriptor) throws CoreException {
String contentTypeId = ExtendedPlatform.getContentTypeId(file);
if (contentTypeId == null) {
return false;
}
if (modelDescriptor.getContentTypeIds().contains(contentTypeId)) {
return true;
}
if (modelDescriptor.getCompatibleContentTypeIds().contains(contentTypeId)) {
return true;
}
return false;
}
}