### Eclipse Workspace Patch 1.0 #P org.eclipse.gmf.map Index: src/org/eclipse/gmf/internal/map/util/MigrationDelegate.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.map/src/org/eclipse/gmf/internal/map/util/MigrationDelegate.java,v retrieving revision 1.3 diff -u -r1.3 MigrationDelegate.java --- src/org/eclipse/gmf/internal/map/util/MigrationDelegate.java 22 May 2007 17:38:29 -0000 1.3 +++ src/org/eclipse/gmf/internal/map/util/MigrationDelegate.java 23 May 2007 20:32:25 -0000 @@ -10,83 +10,114 @@ */ package org.eclipse.gmf.internal.map.util; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.gmf.internal.common.migrate.MigrationHelperDelegateImpl; import org.eclipse.gmf.mappings.FeatureLabelMapping; +import org.eclipse.gmf.mappings.GMFMapFactory; import org.eclipse.gmf.mappings.GMFMapPackage; import org.eclipse.gmf.mappings.LabelMapping; import org.eclipse.gmf.mappings.MappingEntry; class MigrationDelegate extends MigrationHelperDelegateImpl { - private Collection myFeatureLabelMappings; - private Collection myBackwardSupportedURIs; + private Map myLabelMappingMigrations; + private EAttribute myLabelMapping_ViewPattern; + private EAttribute myLabelMapping_EditPattern; + private EReference myLabelMapping_Features; MigrationDelegate() { } void init() { - registerNarrowReferenceType(GMFMapPackage.eINSTANCE.getFeatureSeqInitializer_Initializers(), GMFMapPackage.eINSTANCE.getFeatureValueSpec()); - registerNarrowReferenceType(GMFMapPackage.eINSTANCE.getMappingEntry_LabelMappings(), GMFMapPackage.eINSTANCE.getFeatureLabelMapping()); - myFeatureLabelMappings = null; + //registerNarrowReferenceType(GMFMapPackage.eINSTANCE.getFeatureSeqInitializer_Initializers(), GMFMapPackage.eINSTANCE.getFeatureValueSpec()); + // --> + registerNarrowedAbstractType("FeatureInitializer", GMFMapPackage.eINSTANCE.getFeatureValueSpec()); + + //registerNarrowReferenceType(GMFMapPackage.eINSTANCE.getMappingEntry_LabelMappings(), GMFMapPackage.eINSTANCE.getFeatureLabelMapping()); + // --> + myLabelMapping_Features = (EReference) EcoreUtil.copy(GMFMapPackage.eINSTANCE.getFeatureLabelMapping_Features()); + myLabelMapping_ViewPattern = (EAttribute) EcoreUtil.copy(GMFMapPackage.eINSTANCE.getFeatureLabelMapping_ViewPattern()); + myLabelMapping_EditPattern = (EAttribute) EcoreUtil.copy(GMFMapPackage.eINSTANCE.getFeatureLabelMapping_EditPattern()); + { + Map renamings = new HashMap(); + renamings.put(myLabelMapping_ViewPattern.getName(), myLabelMapping_ViewPattern); + renamings.put(myLabelMapping_EditPattern.getName(), myLabelMapping_EditPattern); + renamings.put(myLabelMapping_Features.getName(), myLabelMapping_Features); + registerRenamedAttributes(GMFMapPackage.eINSTANCE.getLabelMapping(), renamings); + } + + myLabelMappingMigrations = null; } @Override - public boolean isOldVersionDetected(String uriString) { - return !getMetamodelNsURI().equals(uriString) && getBackwardSupportedURIs().contains(uriString); + public boolean setValue(EObject object, EStructuralFeature feature, Object value, int position) { + if (myLabelMapping_ViewPattern.equals(feature)) { + LabelMapping mapping = (LabelMapping) object; + String viewPattern = (String) value; + FeatureLabelMapping migratedMapping = saveFeatureLabelMappingFor(mapping); + migratedMapping.setViewPattern(viewPattern); + fireMigrationApplied(true); + } else if (myLabelMapping_EditPattern.equals(feature)) { + LabelMapping mapping = (LabelMapping) object; + String editPattern = (String) value; + FeatureLabelMapping migratedMapping = saveFeatureLabelMappingFor(mapping); + migratedMapping.setViewPattern(editPattern); + fireMigrationApplied(true); + } else if (myLabelMapping_Features.equals(feature)) { + LabelMapping mapping = (LabelMapping) object; + EAttribute attribute = (EAttribute) value; + FeatureLabelMapping migratedMapping = saveFeatureLabelMappingFor(mapping); + migratedMapping.getFeatures().add(attribute); + fireMigrationApplied(true); + } else { + // other cases are would be processed as defaults + return super.setValue(object, feature, value, position); + } + return true; + } + + private FeatureLabelMapping saveFeatureLabelMappingFor(LabelMapping labelMapping) { + if (myLabelMappingMigrations == null) { + myLabelMappingMigrations = new HashMap(); + } + FeatureLabelMapping migrated = myLabelMappingMigrations.get(labelMapping); + if (migrated == null) { + migrated = GMFMapFactory.eINSTANCE.createFeatureLabelMapping(); + myLabelMappingMigrations.put(labelMapping, migrated); + } + return migrated; + } + + private Map getSavedLabelMappingMigrations() { + return myLabelMappingMigrations; } @Override public void postProcess() { - if (myFeatureLabelMappings == null) { + if (getSavedLabelMappingMigrations() == null) { return; } - for (FeatureLabelMapping mapping : getSavedFeatureLabelMappings()) { - if (mapping.getFeatures().isEmpty()) { + for (LabelMapping mapping : getSavedLabelMappingMigrations().keySet()) { + FeatureLabelMapping migrated = getSavedLabelMappingMigrations().get(mapping); + if (!migrated.getFeatures().isEmpty()) { MappingEntry entry = mapping.getMapEntry(); EList labelMappings = entry.getLabelMappings(); int originalIndex = labelMappings.indexOf(mapping); if (originalIndex != -1) { - LabelMapping newMapping = GMFMapPackage.eINSTANCE.getGMFMapFactory().createLabelMapping(); - newMapping.setDiagramLabel(mapping.getDiagramLabel()); + migrated.setDiagramLabel(mapping.getDiagramLabel()); if (mapping.isReadOnly()) { - newMapping.setReadOnly(true); + migrated.setReadOnly(true); } - labelMappings.set(originalIndex, newMapping); + labelMappings.set(originalIndex, migrated); } } } } - - @Override - public void processObject(EObject result) { - if (result instanceof FeatureLabelMapping) { - getSavedFeatureLabelMappings().add((FeatureLabelMapping) result); - } - } - - private Collection getSavedFeatureLabelMappings() { - if (myFeatureLabelMappings == null) { - myFeatureLabelMappings = new ArrayList(); - } - return myFeatureLabelMappings; - } - - protected Collection getBackwardSupportedURIs() { - if (myBackwardSupportedURIs == null) { - myBackwardSupportedURIs = Arrays.asList(new String[] { - "http://www.eclipse.org/gmf/2005/mappings", //$NON-NLS-1$ - "http://www.eclipse.org/gmf/2005/mappings/2.0" //$NON-NLS-1$ - }); - } - return myBackwardSupportedURIs; - } - - protected String getMetamodelNsURI() { - return GMFMapPackage.eNS_URI; - } } #P org.eclipse.gmf.codegen Index: src/org/eclipse/gmf/internal/codegen/util/MigrationDelegate.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.codegen/src/org/eclipse/gmf/internal/codegen/util/MigrationDelegate.java,v retrieving revision 1.5 diff -u -r1.5 MigrationDelegate.java --- src/org/eclipse/gmf/internal/codegen/util/MigrationDelegate.java 23 May 2007 10:19:25 -0000 1.5 +++ src/org/eclipse/gmf/internal/codegen/util/MigrationDelegate.java 23 May 2007 20:32:26 -0000 @@ -35,12 +35,11 @@ class MigrationDelegate extends MigrationHelperDelegateImpl { private EReference myGenAuditContainer_ChildContainers; - private EReference myGenAuditContainer_Audits; + private EReference myGenAuditRoot_Audits; private EAttribute myGenAuditRoot_Id; private EAttribute myGenAuditRoot_Name; private EAttribute myGenAuditRoot_Description; private GenAuditContainer myRootContainer; - private Collection myBackwardSupportedURIs; private Map> myRequiredPlugins; private GenExpressionProviderContainer myProvidersContainer; @@ -71,7 +70,6 @@ renamings.put("requiredPluginIDs", GMFGenPackage.eINSTANCE.getGenPlugin_RequiredPlugins()); //$NON-NLS-1$ registerRenamedAttributes(GMFGenPackage.eINSTANCE.getGenExpressionInterpreter(), renamings); } - registerNarrowReferenceType(GMFGenPackage.eINSTANCE.getGenFeatureSeqInitializer_Initializers(), GMFGenPackage.eINSTANCE.getGenFeatureValueSpec()); { Map renamings = new HashMap(); renamings.put("metaFeature", GMFGenPackage.eINSTANCE.getFeatureLabelModelFacet_MetaFeatures()); //$NON-NLS-1$ @@ -79,52 +77,58 @@ } registerRenamedType("CompositeFeatureLabelModelFacet", GMFGenPackage.eINSTANCE.getFeatureLabelModelFacet()); //$NON-NLS-1$ myGenAuditContainer_ChildContainers = createNewReference("childContainers", GMFGenPackage.eINSTANCE.getGenAuditContainer(), true); //$NON-NLS-1$ - myGenAuditContainer_Audits = createNewReference("audits", GMFGenPackage.eINSTANCE.getGenAuditRule(), true); //$NON-NLS-1$ - myGenAuditRoot_Id = (EAttribute) EcoreUtil.copy(GMFGenPackage.eINSTANCE.getGenAuditContainer_Id()); - myGenAuditRoot_Name = (EAttribute) EcoreUtil.copy(GMFGenPackage.eINSTANCE.getGenAuditContainer_Name()); - myGenAuditRoot_Description = (EAttribute) EcoreUtil.copy(GMFGenPackage.eINSTANCE.getGenAuditContainer_Description()); { Map renamings = new HashMap(); - renamings.put(myGenAuditContainer_Audits.getName(), myGenAuditContainer_Audits); renamings.put(myGenAuditContainer_ChildContainers.getName(), myGenAuditContainer_ChildContainers); registerRenamedAttributes(GMFGenPackage.eINSTANCE.getGenAuditContainer(), renamings); } + myGenAuditRoot_Id = (EAttribute) EcoreUtil.copy(GMFGenPackage.eINSTANCE.getGenAuditContainer_Id()); + myGenAuditRoot_Name = (EAttribute) EcoreUtil.copy(GMFGenPackage.eINSTANCE.getGenAuditContainer_Name()); + myGenAuditRoot_Description = (EAttribute) EcoreUtil.copy(GMFGenPackage.eINSTANCE.getGenAuditContainer_Description()); + myGenAuditRoot_Audits = createNewReference("audits", GMFGenPackage.eINSTANCE.getGenAuditRule(), true); //$NON-NLS-1$ { Map renamings = new HashMap(); - renamings.put(myGenAuditContainer_Audits.getName(), myGenAuditContainer_Audits); + renamings.put(myGenAuditRoot_Audits.getName(), myGenAuditRoot_Audits); renamings.put(myGenAuditContainer_ChildContainers.getName(), myGenAuditContainer_ChildContainers); renamings.put(myGenAuditRoot_Id.getName(), myGenAuditRoot_Id); renamings.put(myGenAuditRoot_Name.getName(), myGenAuditRoot_Name); renamings.put(myGenAuditRoot_Description.getName(), myGenAuditRoot_Description); registerRenamedAttributes(GMFGenPackage.eINSTANCE.getGenAuditRoot(), renamings); } + + //registerNarrowReferenceType(GMFGenPackage.eINSTANCE.getGenFeatureSeqInitializer_Initializers(), GMFGenPackage.eINSTANCE.getGenFeatureValueSpec()); + // ---> + registerNarrowedAbstractType("GenFeatureInitializer", GMFGenPackage.eINSTANCE.getGenFeatureValueSpec()); //$NON-NLS-1$ + myRootContainer = null; myProvidersContainer = null; myRequiredPlugins = null; } - - @Override - public boolean isOldVersionDetected(String uriString) { - return !getMetamodelNsURI().equals(uriString) && getBackwardSupportedURIs().contains(uriString); - } - + @Override public boolean setValue(EObject object, EStructuralFeature feature, Object value, int position) { - if (myGenAuditRoot_Id.equals(feature)) { + if (GMFGenPackage.eINSTANCE.getGenPlugin_RequiredPlugins().equals(feature) && object instanceof GenExpressionInterpreter) { + GenExpressionInterpreter expressionInterpreter = (GenExpressionInterpreter) object; + String requiredPlugin = (String) value; + saveRequiredPlugin(expressionInterpreter, requiredPlugin); + } else if (myGenAuditRoot_Id.equals(feature)) { GenAuditRoot root = (GenAuditRoot) object; String id = (String) value; GenAuditContainer rootContainer = getOrCreateRootContainerOnce(root); rootContainer.setId(id); + fireMigrationApplied(true); } else if (myGenAuditRoot_Name.equals(feature)) { GenAuditRoot root = (GenAuditRoot) object; String name = (String) value; GenAuditContainer rootContainer = getOrCreateRootContainerOnce(root); rootContainer.setName(name); + fireMigrationApplied(true); } else if (myGenAuditRoot_Description.equals(feature)) { GenAuditRoot root = (GenAuditRoot) object; String description = (String) value; GenAuditContainer rootContainer = getOrCreateRootContainerOnce(root); rootContainer.setDescription(description); + fireMigrationApplied(true); } else if (myGenAuditContainer_ChildContainers.equals(feature) && object instanceof GenAuditRoot) { GenAuditRoot root = (GenAuditRoot)object; GenAuditContainer container = (GenAuditContainer)value; @@ -132,11 +136,13 @@ container.getPath().add(myRootContainer); } root.getCategories().add(container); - } else if (myGenAuditContainer_Audits.equals(feature) && object instanceof GenAuditRoot) { + fireMigrationApplied(true); + } else if (myGenAuditRoot_Audits.equals(feature) && object instanceof GenAuditRoot) { GenAuditRoot root = (GenAuditRoot)object; GenAuditRule rule = (GenAuditRule)value; if (myRootContainer != null) { rule.setCategory(myRootContainer); + fireMigrationApplied(true); } root.getRules().add(rule); } else if (myGenAuditContainer_ChildContainers.equals(feature) && object instanceof GenAuditContainer) { @@ -145,15 +151,12 @@ container.getPath().addAll(parent.getPath()); container.getPath().add(parent); getOrCreateRoot(parent).getCategories().add(container); - } else if (myGenAuditContainer_Audits.equals(feature) && object instanceof GenAuditContainer) { + fireMigrationApplied(true); + } else if (GMFGenPackage.eINSTANCE.getGenAuditContainer_Audits().equals(feature) && object instanceof GenAuditContainer) { GenAuditContainer container = (GenAuditContainer)object; GenAuditRule rule = (GenAuditRule)value; rule.setCategory(container); getOrCreateRoot(container).getRules().add(rule); - } else if (GMFGenPackage.eINSTANCE.getGenPlugin_RequiredPlugins().equals(feature) && object instanceof GenExpressionInterpreter) { - GenExpressionInterpreter expressionInterpreter = (GenExpressionInterpreter) object; - String requiredPlugin = (String) value; - saveRequiredPlugin(expressionInterpreter, requiredPlugin); } else { // other cases are would be processed as defaults return super.setValue(object, feature, value, position); @@ -200,6 +203,7 @@ editor.setPlugin(plugin); } plugin.getRequiredPlugins().addAll(getSavedRequiredPlugins().get(expressionProvider)); + fireMigrationApplied(true); } getSavedRequiredPlugins().clear(); } @@ -224,22 +228,12 @@ GenAuditRoot result = auditContainer.getRoot(); if (result == null) { result = GMFGenFactory.eINSTANCE.createGenAuditRoot(); + if (auditContainer.eContainer() == null) { + auditContainer.eResource().getContents().add(result); + fireMigrationApplied(true); + } result.getCategories().add(auditContainer); } return result; } - - protected Collection getBackwardSupportedURIs() { - if (myBackwardSupportedURIs == null) { - myBackwardSupportedURIs = Arrays.asList(new String[] { - "http://www.eclipse.org/gmf/2005/GenModel", //$NON-NLS-1$ - "http://www.eclipse.org/gmf/2005/GenModel/2.0" //$NON-NLS-1$ - }); - } - return myBackwardSupportedURIs; - } - - protected String getMetamodelNsURI() { - return GMFGenPackage.eNS_URI; - } } #P org.eclipse.gmf.tests Index: src/org/eclipse/gmf/tests/migration/GenericMigrationTest.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/migration/GenericMigrationTest.java,v retrieving revision 1.9 diff -u -r1.9 GenericMigrationTest.java --- src/org/eclipse/gmf/tests/migration/GenericMigrationTest.java 22 May 2007 17:38:28 -0000 1.9 +++ src/org/eclipse/gmf/tests/migration/GenericMigrationTest.java 23 May 2007 20:32:27 -0000 @@ -299,7 +299,7 @@ //assertTrue(errorMessage.contains(myWidenedRef1.getEType().getName())); //XXX check MigrationHelperDelegate delegate = new MigrationHelperDelegateImpl() {{ - registerNarrowReferenceType(myWidenedRef1, myAttrNarrow.getEContainingClass()); + registerNarrowedAbstractType(myWidenedRef1.getEType().getName(), myAttrNarrow.getEContainingClass()); }}; // try to load mm @@ -335,7 +335,7 @@ // assertTrue(errorMessage.contains(myWidenedRef1.getEType().getName())); //XXX MigrationHelperDelegate delegate = new MigrationHelperDelegateImpl() {{ - registerNarrowReferenceType(myWidenedRef1, myAttrNarrow.getEContainingClass()); + registerNarrowedAbstractType(myWidenedRef1.getEType().getName(), myAttrNarrow.getEContainingClass()); }}; // try to load mm @@ -385,8 +385,8 @@ // assertTrue(errorMessage.contains(myAttrNarrow.getName())); //XXX MigrationHelperDelegate delegate = new MigrationHelperDelegateImpl() {{ - registerNarrowReferenceType(myWidenedRef1, myAttrNarrow.getEContainingClass()); - registerNarrowReferenceType(myWidenedRef2, myAttrNarrow.getEContainingClass()); + registerNarrowedAbstractType(myWidenedRef1.getEType().getName(), myAttrNarrow.getEContainingClass()); + registerNarrowedAbstractType(myWidenedRef2.getEType().getName(), myAttrNarrow.getEContainingClass()); }}; // try to load mm @@ -463,7 +463,7 @@ fail(); } MigrationHelperDelegate badDelegate = new MigrationHelperDelegateImpl() {{ - registerNarrowReferenceType(myWidenedRef1, myAttrNarrowChild.getEContainingClass()); + registerNarrowedAbstractType(myWidenedRef1.getEType().getName(), myAttrNarrowChild.getEContainingClass()); }}; // try to load mm @@ -474,7 +474,7 @@ MigrationHelperDelegate delegate = new MigrationHelperDelegateImpl() { { - registerNarrowReferenceType(myWidenedRef1, myAttrNarrowChild.getEContainingClass()); + registerNarrowedAbstractType(myWidenedRef1.getEType().getName(), myAttrNarrowChild.getEContainingClass()); } private Collection myToBeChecked = new ArrayList(); Index: src/org/eclipse/gmf/tests/migration/MigrationPatchesTest.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/tests/org.eclipse.gmf.tests/src/org/eclipse/gmf/tests/migration/MigrationPatchesTest.java,v retrieving revision 1.15 diff -u -r1.15 MigrationPatchesTest.java --- src/org/eclipse/gmf/tests/migration/MigrationPatchesTest.java 23 May 2007 10:14:35 -0000 1.15 +++ src/org/eclipse/gmf/tests/migration/MigrationPatchesTest.java 23 May 2007 20:32:27 -0000 @@ -26,6 +26,7 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.gmf.codegen.gmfgen.FeatureLabelModelFacet; import org.eclipse.gmf.codegen.gmfgen.GenAuditContainer; import org.eclipse.gmf.codegen.gmfgen.GenAuditRoot; @@ -59,7 +60,7 @@ URI newGenUri = temporarySaveMigratedModel(genmodelFileName, "patch_138440", "gmfgen"); changeNsUriToOldOne(newGenUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newGenUri); + assertOnLoadModelMigrationDidNothing(newGenUri); URI gmfmapmodelFileName = createURI("patch_138440.gmfmap"); //$NON-NLS-1$ Exception caughtMapException = assertOrdinaryLoadModelProblems(gmfmapmodelFileName); @@ -70,7 +71,7 @@ URI newMapUri = temporarySaveMigratedModel(gmfmapmodelFileName, "patch_138440", "gmfmap"); changeNsUriToOldOne(newMapUri, "gmfmap", "http://www.eclipse.org/gmf/2005/mappings/2.0"); - assertOnLoadModelMigrationSuccess(newMapUri); + assertOnLoadModelMigrationDidNothing(newMapUri); } /* @@ -86,7 +87,7 @@ URI newGenUri = temporarySaveMigratedModel(genmodelFileName, "patch_138440", "gmfgen"); changeNsUriToOldOne(newGenUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newGenUri); + assertOnLoadModelMigrationDidNothing(newGenUri); URI gmfmapmodelFileName = createURI("patch_161380.gmfmap"); //$NON-NLS-1$ Exception caughtMapException = assertOrdinaryLoadModelProblems(gmfmapmodelFileName); @@ -97,7 +98,7 @@ URI newUri = temporarySaveMigratedModel(gmfmapmodelFileName, "patch_161380", "gmfmap"); changeNsUriToOldOne(newUri, "gmfmap", "http://www.eclipse.org/gmf/2005/mappings/2.0"); - assertOnLoadModelMigrationSuccess(newUri); + assertOnLoadModelMigrationDidNothing(newUri); } private static URI createURI(String testModelFileName) { @@ -114,12 +115,30 @@ ModelLoadHelper loadHelper = new ModelLoadHelper(new ResourceSetImpl(), uri); EList errors = loadHelper.getLoadedResource().getErrors(); - assertTrue(errors.isEmpty()); + assertTrue("Errors found after migration: "+errors, errors.isEmpty()); //$NON-NLS-1$ assertTrue("Migration warning load status expected", loadHelper.getStatus().matches(IStatus.WARNING)); //$NON-NLS-1$ EList warnings = loadHelper.getLoadedResource().getWarnings(); assertEquals("Single Warning diagnostic expected", 1, warnings.size()); //$NON-NLS-1$ assertTrue("MigrationDiagnostic expected as warning", warnings.get(0) instanceof MigrationResource.Diagnostic); //$NON-NLS-1$ + + assertTrue(loadHelper.getLoadedResource() instanceof XMLResource); + XMLResource xmlResource = (XMLResource) loadHelper.getLoadedResource(); + assertEquals("Unknown elements were found after migration", 0, xmlResource.getEObjectToExtensionMap().size()); + } + + void assertOnLoadModelMigrationDidNothing(URI uri) throws Exception { + ModelLoadHelper loadHelper = new ModelLoadHelper(new ResourceSetImpl(), uri); + + EList errors = loadHelper.getLoadedResource().getErrors(); + assertTrue("Errors after re-run migration on new migrated model: "+errors, errors.isEmpty()); + + EList warnings = loadHelper.getLoadedResource().getWarnings(); + assertTrue("Warnings after re-run migration on new migrated model: "+warnings, warnings.isEmpty()); + + assertTrue(loadHelper.getLoadedResource() instanceof XMLResource); + XMLResource xmlResource = (XMLResource) loadHelper.getLoadedResource(); + assertEquals("Unknown elements were found after re-migration", 0, xmlResource.getEObjectToExtensionMap().size()); } Exception assertOrdinaryLoadModelProblems(URI uri) throws Exception { @@ -161,7 +180,7 @@ URI newUri = temporarySaveMigratedModel(genmodelFileName, "testGenDiagram", "gmfgen"); changeNsUriToOldOne(newUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newUri); + assertOnLoadModelMigrationDidNothing(newUri); } /* @@ -181,7 +200,7 @@ URI newUri = temporarySaveMigratedModel(genmodelFileName, "testFeatureLabelModelFacet", "gmfgen"); changeNsUriToOldOne(newUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newUri); + assertOnLoadModelMigrationDidNothing(newUri); checkFeatureLabelModelFacetsMigrated(newUri); } @@ -210,7 +229,7 @@ URI newUri = temporarySaveMigratedModel(genmodelFileName, "testGenAuditRootDefaultAndNested", "gmfgen"); changeNsUriToOldOne(newUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newUri); + assertOnLoadModelMigrationDidNothing(newUri); } public void testGenAuditRootNoDefaultButNested() throws Exception { @@ -233,7 +252,7 @@ URI newUri = temporarySaveMigratedModel(genmodelFileName, "testGenAudits", "gmfgen"); changeNsUriToOldOne(newUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newUri); + assertOnLoadModelMigrationDidNothing(newUri); } public void testGenEditorAuditRootNoDefaultButNested() throws Exception { @@ -247,7 +266,7 @@ URI newUri = temporarySaveMigratedModel(genmodelFileName, "testGenEditorAuditRootNoDefaultButNested", "gmfgen"); changeNsUriToOldOne(newUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newUri); + assertOnLoadModelMigrationDidNothing(newUri); } public void testGenAuditsCorrectCategories() throws Exception { @@ -263,7 +282,7 @@ URI newUri = temporarySaveMigratedModel(genmodelFileName, "testGenAuditsCorrectCategories", "gmfgen"); changeNsUriToOldOne(newUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); - assertOnLoadModelMigrationSuccess(newUri); + assertOnLoadModelMigrationDidNothing(newUri); checkModelAndCorrectCategories(newUri); } @@ -272,6 +291,7 @@ ModelLoadHelper loadHelper = new ModelLoadHelper(new ResourceSetImpl(), uri); Resource resource = loadHelper.getLoadedResource(); File newGenmodelFile = File.createTempFile(tempFilename, tempFileExtension.startsWith(".") ? tempFileExtension : "."+tempFileExtension); + newGenmodelFile.deleteOnExit(); URI newUri = URI.createFileURI(newGenmodelFile.getAbsolutePath()); resource.setURI(newUri); try { @@ -335,7 +355,7 @@ URI newMapUri = temporarySaveMigratedModel(gmfmapmodelFileName, "testNotChangingOrderOfLabelMappings", "gmfmap"); //$NON-NLS-1$ //$NON-NLS-2$ changeNsUriToOldOne(newMapUri, "gmfmap", "http://www.eclipse.org/gmf/2005/mappings/2.0"); //$NON-NLS-1$ //$NON-NLS-2$ - assertOnLoadModelMigrationSuccess(newMapUri); + assertOnLoadModelMigrationDidNothing(newMapUri); checkOrderOfLabelMappings(newMapUri); } @@ -350,7 +370,7 @@ URI newMapUri = temporarySaveMigratedModel(gmfmapmodelFileName, "testRequiredPluginsMoved", "gmfgen"); //$NON-NLS-1$ //$NON-NLS-2$ changeNsUriToOldOne(newMapUri, "gmfgen", "http://www.eclipse.org/gmf/2005/GenModel/2.0"); //$NON-NLS-1$ //$NON-NLS-2$ - assertOnLoadModelMigrationSuccess(newMapUri); + assertOnLoadModelMigrationDidNothing(newMapUri); checkAllRequiredPluginsAreNotLost(newMapUri); } #P org.eclipse.gmf.common Index: src/org/eclipse/gmf/internal/common/migrate/MigrationHelper.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/migrate/MigrationHelper.java,v retrieving revision 1.4 diff -u -r1.4 MigrationHelper.java --- src/org/eclipse/gmf/internal/common/migrate/MigrationHelper.java 22 May 2007 17:38:30 -0000 1.4 +++ src/org/eclipse/gmf/internal/common/migrate/MigrationHelper.java 23 May 2007 20:32:28 -0000 @@ -10,22 +10,16 @@ */ package org.eclipse.gmf.internal.common.migrate; -import java.util.HashMap; -import java.util.Map; - import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EFactory; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.ecore.xmi.impl.XMIHelperImpl; public class MigrationHelper extends XMIHelperImpl { private final MigrationHelperDelegate myDelegate; - private boolean myIsDelegateDisabled = true; - private Map myNarrowedFeatureTypes; public MigrationHelper(XMLResource resource, MigrationHelperDelegate delegate) { super(resource); @@ -33,19 +27,12 @@ myDelegate = delegate; } - void enableDelegate(boolean enabled) { - myIsDelegateDisabled = !enabled; - } - - boolean isEnabled() { - return !myIsDelegateDisabled; + boolean isMigrationApplied() { + return myDelegate.isMigrationApplied(); } @Override public EObject createObject(EFactory factory, EClassifier type) { - if (myIsDelegateDisabled) { - return super.createObject(factory, type); - } EObject result = myDelegate.createObject(factory, type); if (result == null) { result = super.createObject(factory, type); @@ -56,14 +43,6 @@ @Override public void setValue(EObject object, EStructuralFeature feature, Object value, int position) { - if (myIsDelegateDisabled) { - super.setValue(object, feature, value, position); - return; - } - EStructuralFeature originalFeature = getOriginalFeature(feature); - if (originalFeature != null) { - feature = originalFeature; - } if (!myDelegate.setValue(object, feature, value, position)) { super.setValue(object, feature, value, position); } @@ -71,27 +50,15 @@ @Override public EStructuralFeature getFeature(EClass eClass, String namespaceURI, String name, boolean isElement) { - if (myIsDelegateDisabled) { - return super.getFeature(eClass, namespaceURI, name, isElement); - } EStructuralFeature result = myDelegate.getFeature(eClass, namespaceURI, name, isElement); if (result == null) { result = super.getFeature(eClass, namespaceURI, name, isElement); } - EClass narrow = myDelegate.getStructuralFeatureType(result); - if (narrow != null) { - EStructuralFeature fake = addNarrowedFeature(result); - fake.setEType(narrow); - return fake; - } return result; } @Override public EClassifier getType(EFactory factory, String typeName) { - if (myIsDelegateDisabled) { - return super.getType(factory, typeName); - } EClassifier result = myDelegate.getType(factory, typeName); if (result == null) { result = super.getType(factory, typeName); @@ -102,30 +69,6 @@ @Override public void popContext() { super.popContext(); - if (myIsDelegateDisabled) { - return; - } myDelegate.postProcess(); } - - @Override - public void addPrefix(String prefix, String uri) { - super.addPrefix(prefix, uri); - if (myDelegate.isOldVersionDetected(uri)) { - enableDelegate(true); - } - } - - protected EStructuralFeature getOriginalFeature(EStructuralFeature feature) { - return myNarrowedFeatureTypes == null ? null : myNarrowedFeatureTypes.get(feature); - } - - protected EStructuralFeature addNarrowedFeature(EStructuralFeature originalFeature) { - if (myNarrowedFeatureTypes == null) { - myNarrowedFeatureTypes = new HashMap(); - } - EStructuralFeature result = (EStructuralFeature) EcoreUtil.copy(originalFeature); - myNarrowedFeatureTypes.put(result, originalFeature); - return result; - } } Index: src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegate.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegate.java,v retrieving revision 1.2 diff -u -r1.2 MigrationHelperDelegate.java --- src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegate.java 22 May 2007 17:38:30 -0000 1.2 +++ src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegate.java 23 May 2007 20:32:28 -0000 @@ -24,13 +24,11 @@ public EClassifier getType(EFactory factory, String typeName); - public EClass getStructuralFeatureType(EStructuralFeature feature); - public EObject createObject(EFactory factory, EClassifier type); public void postProcess(); public void processObject(EObject result); - public boolean isOldVersionDetected(String uriString); + public boolean isMigrationApplied(); } Index: src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegateImpl.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegateImpl.java,v retrieving revision 1.2 diff -u -r1.2 MigrationHelperDelegateImpl.java --- src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegateImpl.java 22 May 2007 17:38:30 -0000 1.2 +++ src/org/eclipse/gmf/internal/common/migrate/MigrationHelperDelegateImpl.java 23 May 2007 20:32:28 -0000 @@ -28,15 +28,17 @@ public class MigrationHelperDelegateImpl implements MigrationHelperDelegate { private final EStructuralFeature myDeletedAttribute = EcoreFactory.eINSTANCE.createEAttribute(); + private boolean isMigrationApplied; public MigrationHelperDelegateImpl() { super(); myDeletedAttribute.setName("attributeIsDeleted"); //$NON-NLS-1$ myDeletedAttribute.setEType(EcorePackage.eINSTANCE.getEString()); + isMigrationApplied = false; } private Map> myDeletedAttributes = new HashMap>(); - private Map myNarrowReferenceTypes = new HashMap(); + private Map myNarrowedTypes = new HashMap(); private Map> myRenamedAttributes = new HashMap>(); private Map myRenamedTypes = new HashMap(); @@ -45,14 +47,14 @@ myDeletedAttributes.put(classifier, Arrays.asList(deletedAttrNames)); } - public void registerNarrowReferenceType(EReference reference, EClass concreteType) { - myNarrowReferenceTypes.put(reference, concreteType); - } - public void registerRenamedAttributes(EClass eClass, Map renamedAttributes) { myRenamedAttributes.put(eClass, renamedAttributes); } + public void registerNarrowedAbstractType(String abstractTypeName, EClass narrowedType) { + myNarrowedTypes.put(abstractTypeName, narrowedType); + } + public void registerRenamedType(String oldTypeName, EClassifier newType) { myRenamedTypes.put(oldTypeName, newType); } @@ -76,28 +78,19 @@ return result; } - public EClass getNarrowReferenceType(EStructuralFeature feature) { - return myNarrowReferenceTypes.get(feature); + public EClass getNarrowReferenceType(String abstractTypeName) { + return myNarrowedTypes.get(abstractTypeName); } public EStructuralFeature getRenamedFeatureFor(EClass clazz, String name) { Map renamings = myRenamedAttributes.get(clazz); - EStructuralFeature result = renamings != null ? renamings.get(name) : null; - for (Iterator it=clazz.getEAllSuperTypes().iterator(); result == null && it.hasNext();) { - EClass nextParent = it.next(); - result = getRenamedFeatureFor(nextParent, name); - } - return result; + return renamings != null ? renamings.get(name) : null; } public EClassifier getRenamedType(String typeName) { return myRenamedTypes.get(typeName); } - public EClass getStructuralFeatureType(EStructuralFeature feature) { - return getNarrowReferenceType(feature); - } - public boolean setValue(EObject object, EStructuralFeature feature, Object value, int position) { return myDeletedAttribute.equals(feature); } @@ -107,19 +100,26 @@ EStructuralFeature rename = null; if ((rename = getRenamedFeatureFor(eClass, name)) != null) { result = rename; + fireMigrationApplied(true); } else if (isAttributeDeleted(eClass, name)) { result = myDeletedAttribute; + fireMigrationApplied(true); } return result; } public EClassifier getType(EFactory factory, String typeName) { - EClassifier result = null; - EClassifier type = getRenamedType(typeName); - if (type != null) { - result = type; + EClassifier renamedType = getRenamedType(typeName); + if (renamedType != null) { + fireMigrationApplied(true); + return renamedType; } - return result; + EClassifier narrowedType = getNarrowReferenceType(typeName); + if (narrowedType != null) { + fireMigrationApplied(true); + return narrowedType; + } + return null; } public EObject createObject(EFactory factory, EClassifier type) { @@ -132,8 +132,12 @@ public void processObject(EObject result) { } - public boolean isOldVersionDetected(String uriString) { - return true; + public boolean isMigrationApplied() { + return isMigrationApplied; + } + + protected void fireMigrationApplied(boolean applied) { + isMigrationApplied = applied; } protected static EReference createNewReference(String name, EClass eType, boolean isContainment) { Index: src/org/eclipse/gmf/internal/common/migrate/MigrationResource.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.common/src/org/eclipse/gmf/internal/common/migrate/MigrationResource.java,v retrieving revision 1.13 diff -u -r1.13 MigrationResource.java --- src/org/eclipse/gmf/internal/common/migrate/MigrationResource.java 22 May 2007 17:38:30 -0000 1.13 +++ src/org/eclipse/gmf/internal/common/migrate/MigrationResource.java 23 May 2007 20:32:28 -0000 @@ -43,15 +43,17 @@ } protected void handlePostLoadSuccess() { - if (myMigrationHelper != null && myMigrationHelper.isEnabled()) { + if (myMigrationHelper != null && myMigrationHelper.isMigrationApplied()) { Diagnostic diagnostic = MigrationResource.createMessageDiagnostic(this, Messages.oldModelVersionLoadedMigrationRequired); getWarnings().add(0, diagnostic); } } protected void handlePostLoadException(Exception e) { - Diagnostic diagnostic = MigrationResource.createMessageDiagnostic(this, Messages.oldModelVersionLoadErrorMigrationMayBeRequired); - getErrors().add(0, diagnostic); + if (myMigrationHelper != null && myMigrationHelper.isMigrationApplied()) { + Diagnostic diagnostic = MigrationResource.createMessageDiagnostic(this, Messages.oldModelVersionLoadErrorMigrationMayBeRequired); + getErrors().add(0, diagnostic); + } } @Override