View | Details | Raw Unified | Return to bug 227506
Collapse All | Expand All

(-)src/org/eclipse/gmf/tests/migration/MigrationPatchesTest.java (+144 lines)
Lines 26-37 Link Here
26
import org.eclipse.emf.common.util.URI;
26
import org.eclipse.emf.common.util.URI;
27
import org.eclipse.emf.ecore.EClass;
27
import org.eclipse.emf.ecore.EClass;
28
import org.eclipse.emf.ecore.EObject;
28
import org.eclipse.emf.ecore.EObject;
29
import org.eclipse.emf.ecore.EcorePackage;
29
import org.eclipse.emf.ecore.resource.Resource;
30
import org.eclipse.emf.ecore.resource.Resource;
30
import org.eclipse.emf.ecore.resource.ResourceSet;
31
import org.eclipse.emf.ecore.resource.ResourceSet;
31
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
32
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
33
import org.eclipse.emf.ecore.util.EcoreUtil;
32
import org.eclipse.emf.ecore.xmi.XMLResource;
34
import org.eclipse.emf.ecore.xmi.XMLResource;
33
import org.eclipse.gmf.codegen.gmfgen.FeatureLabelModelFacet;
35
import org.eclipse.gmf.codegen.gmfgen.FeatureLabelModelFacet;
34
import org.eclipse.gmf.codegen.gmfgen.GenAuditContainer;
36
import org.eclipse.gmf.codegen.gmfgen.GenAuditContainer;
37
import org.eclipse.gmf.codegen.gmfgen.GenAuditContext;
35
import org.eclipse.gmf.codegen.gmfgen.GenAuditRoot;
38
import org.eclipse.gmf.codegen.gmfgen.GenAuditRoot;
36
import org.eclipse.gmf.codegen.gmfgen.GenAuditRule;
39
import org.eclipse.gmf.codegen.gmfgen.GenAuditRule;
37
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
40
import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator;
Lines 57-65 Link Here
57
import org.eclipse.gmf.internal.common.ToolingResourceFactory;
60
import org.eclipse.gmf.internal.common.ToolingResourceFactory;
58
import org.eclipse.gmf.internal.common.migrate.MigrationResource;
61
import org.eclipse.gmf.internal.common.migrate.MigrationResource;
59
import org.eclipse.gmf.internal.common.migrate.ModelLoadHelper;
62
import org.eclipse.gmf.internal.common.migrate.ModelLoadHelper;
63
import org.eclipse.gmf.mappings.CanvasMapping;
64
import org.eclipse.gmf.mappings.ElementInitializer;
65
import org.eclipse.gmf.mappings.FeatureInitializer;
60
import org.eclipse.gmf.mappings.FeatureLabelMapping;
66
import org.eclipse.gmf.mappings.FeatureLabelMapping;
67
import org.eclipse.gmf.mappings.FeatureSeqInitializer;
68
import org.eclipse.gmf.mappings.FeatureValueSpec;
61
import org.eclipse.gmf.mappings.LabelMapping;
69
import org.eclipse.gmf.mappings.LabelMapping;
70
import org.eclipse.gmf.mappings.Language;
71
import org.eclipse.gmf.mappings.Mapping;
62
import org.eclipse.gmf.mappings.MappingEntry;
72
import org.eclipse.gmf.mappings.MappingEntry;
73
import org.eclipse.gmf.mappings.NodeMapping;
74
import org.eclipse.gmf.mappings.ReferenceNewElementSpec;
75
import org.eclipse.gmf.mappings.TopNodeReference;
76
import org.eclipse.gmf.mappings.ValueExpression;
63
import org.eclipse.gmf.tests.Plugin;
77
import org.eclipse.gmf.tests.Plugin;
64
78
65
public class MigrationPatchesTest extends TestCase {
79
public class MigrationPatchesTest extends TestCase {
Lines 856-859 Link Here
856
		assertNotNull(canvas.getLabels().get(0).getFigure());
870
		assertNotNull(canvas.getLabels().get(0).getFigure());
857
		
871
		
858
	}
872
	}
873
874
	public void testAuditContexts() throws Exception {
875
		URI gmfgenFileName = createURI("test226149.gmfgen"); //$NON-NLS-1$
876
		
877
		Exception caughtGenException = assertOrdinaryLoadModelProblems(gmfgenFileName);
878
		assertTrue("expected diagnostic exception", caughtGenException != null); //$NON-NLS-1$				
879
880
		assertOnLoadModelMigrationSuccess(gmfgenFileName);
881
		checkAuditContexts(gmfgenFileName);
882
883
		URI newUri = temporarySaveMigratedModel(gmfgenFileName, "test226149", "gmfgen");
884
		
885
		assertOnLoadModelMigrationDidNothing(newUri);
886
		checkAuditContexts(newUri);
887
	}
888
889
	private void checkAuditContexts(URI modelUri) {
890
		ModelLoadHelper loadHelper = new ModelLoadHelper(new ResourceSetImpl(), modelUri);
891
		Resource resource = loadHelper.getLoadedResource();
892
		
893
		assertEquals(1, resource.getContents().size());
894
		Object first = resource.getContents().get(0);
895
		assertTrue(first instanceof GenEditorGenerator);
896
		GenEditorGenerator editor = (GenEditorGenerator) first;
897
		assertEquals(1, editor.eContents().size());
898
		first = editor.eContents().get(0);
899
		assertTrue(first instanceof GenAuditRoot);
900
		GenAuditRoot root = (GenAuditRoot) first;
901
		assertEquals(6, root.eContents().size());
902
		
903
		assertNotNull(root.getClientContexts());
904
		assertFalse(root.getClientContexts().isEmpty());
905
		assertEquals(2, root.getClientContexts().size());
906
		
907
		GenAuditContext saveMe1 = root.getClientContexts().get(0);
908
		assertEquals("SaveMe1", saveMe1.getId());
909
		assertFalse(saveMe1.getRuleTargets().isEmpty());
910
		assertEquals(2, saveMe1.getRuleTargets().size());
911
912
		GenAuditContext saveMe2 = root.getClientContexts().get(1);
913
		assertEquals("SaveMe2", saveMe2.getId());
914
		assertFalse(saveMe2.getRuleTargets().isEmpty());
915
		assertEquals(1, saveMe2.getRuleTargets().size());
916
	}
917
918
	public void testFeatureValueSpecRefactor227505() throws Exception {
919
		URI gmfmapFileName = createURI("test227505.gmfmap"); //$NON-NLS-1$
920
		
921
		Exception caughtGenException = assertOrdinaryLoadModelProblems(gmfmapFileName);
922
		assertTrue("expected diagnostic exception", caughtGenException != null); //$NON-NLS-1$				
923
924
		assertOnLoadModelMigrationSuccess(gmfmapFileName);
925
		checkValueExpressions(gmfmapFileName);
926
927
		URI newUri = temporarySaveMigratedModel(gmfmapFileName, "test227505", "gmfmap");
928
		
929
		assertOnLoadModelMigrationDidNothing(newUri);
930
		checkValueExpressions(newUri);
931
	}
932
933
	private void checkValueExpressions(URI modelUri) {
934
		ModelLoadHelper loadHelper = new ModelLoadHelper(new ResourceSetImpl(), modelUri);
935
		Resource resource = loadHelper.getLoadedResource();
936
		//EcoreUtil.resolveAll(resource);
937
		
938
		assertEquals(1, resource.getContents().size());
939
		Object first = resource.getContents().get(0);
940
		assertTrue(first instanceof Mapping);
941
		Mapping mapping = (Mapping) first;
942
		assertEquals(2, mapping.eContents().size());
943
		first = mapping.eContents().get(0);
944
		assertTrue(first instanceof TopNodeReference);
945
		Object second = mapping.eContents().get(1);
946
		assertTrue(second instanceof CanvasMapping);
947
		TopNodeReference topNode = (TopNodeReference) first;
948
		assertEquals(1, topNode.eContents().size());
949
		first = topNode.eContents().get(0);
950
		assertTrue(first instanceof NodeMapping);
951
		NodeMapping node = (NodeMapping) first;
952
		
953
		ElementInitializer initer = node.getDomainInitializer();
954
		assertNotNull(initer);
955
		assertTrue(initer instanceof FeatureSeqInitializer);
956
		FeatureSeqInitializer featureRef = (FeatureSeqInitializer) initer;
957
		assertNotNull(featureRef.getInitializers());
958
		assertFalse(featureRef.getInitializers().isEmpty());
959
		assertEquals(3, featureRef.getInitializers().size());
960
		
961
		FeatureInitializer init1 = featureRef.getInitializers().get(0);
962
		assertTrue(init1 instanceof FeatureValueSpec);
963
		FeatureValueSpec feature1 = (FeatureValueSpec) init1;
964
		assertEquals(EcoreUtil.getURI(EcorePackage.eINSTANCE.getEModelElement_EAnnotations()).fragment(), EcoreUtil.getURI(feature1.getFeature()).fragment());
965
		ValueExpression value1 = feature1.getValue();
966
		assertNotNull(value1);
967
		assertEquals(Language.JAVA_LITERAL, value1.getLanguage());
968
		assertEquals("some.Checker", value1.getBody());
969
970
		FeatureInitializer init2 = featureRef.getInitializers().get(1);
971
		assertTrue(init2 instanceof FeatureValueSpec);
972
		FeatureValueSpec feature2 = (FeatureValueSpec) init2;
973
		assertEquals(EcoreUtil.getURI(EcorePackage.eINSTANCE.getENamedElement_Name()).fragment(), EcoreUtil.getURI(feature2.getFeature()).fragment());
974
		ValueExpression value2 = feature2.getValue();
975
		assertNotNull(value2);
976
		assertEquals(Language.OCL_LITERAL, value2.getLanguage());
977
		assertEquals("self.name", value2.getBody());
978
979
		FeatureInitializer init3 = featureRef.getInitializers().get(2);
980
		assertTrue(init3 instanceof ReferenceNewElementSpec);
981
		ReferenceNewElementSpec ref3 = (ReferenceNewElementSpec) init3;
982
		assertEquals(EcoreUtil.getURI(EcorePackage.eINSTANCE.getETypeParameter_EBounds()).fragment(), EcoreUtil.getURI(ref3.getFeature()).fragment());
983
		assertNotNull(ref3.getNewElementInitializers());
984
		assertFalse(ref3.getNewElementInitializers().isEmpty());
985
		assertEquals(1, ref3.getNewElementInitializers().size());
986
		
987
		FeatureSeqInitializer featureRef3 = ref3.getNewElementInitializers().get(0);
988
		assertNotNull(featureRef3);
989
		assertNotNull(featureRef3.getInitializers());
990
		assertFalse(featureRef3.getInitializers().isEmpty());
991
		assertEquals(1, featureRef3.getInitializers().size());
992
		
993
		FeatureInitializer init31 = featureRef3.getInitializers().get(0);
994
		assertTrue(init31 instanceof FeatureValueSpec);
995
		FeatureValueSpec feature31 = (FeatureValueSpec) init31;
996
		assertEquals(EcoreUtil.getURI(EcorePackage.eINSTANCE.getEGenericType_ELowerBound()).fragment(), EcoreUtil.getURI(feature31.getFeature()).fragment());
997
		ValueExpression value31 = feature31.getValue();
998
		assertNotNull(value31);
999
		assertEquals(Language.JAVA_LITERAL, value31.getLanguage());
1000
		assertEquals("some.Checker2", value31.getBody());
1001
	}
1002
859
}
1003
}
(-)models/migration/test227505.gmfmap (+59 lines)
Added Link Here
1
<?xml version="1.0" encoding="UTF-8"?>
2
<gmfmap:Mapping xmi:version="2.0"
3
    xmlns:xmi="http://www.omg.org/XMI"
4
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
6
    xmlns:gmfmap="http://www.eclipse.org/gmf/2006/mappings">
7
  <nodes>
8
    <containmentFeature
9
        href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EClassifier/eTypeParameters"/>
10
    <ownedChild>
11
      <domainMetaElement
12
          href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ETypeParameter"/>
13
      <domainInitializer
14
          xsi:type="gmfmap:FeatureSeqInitializer">
15
        <initializers
16
            xsi:type="gmfmap:FeatureValueSpec"
17
            body="some.Checker"
18
            language="java">
19
          <feature
20
              xsi:type="ecore:EReference"
21
              href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EModelElement/eAnnotations"/>
22
        </initializers>
23
        <initializers
24
            xsi:type="gmfmap:FeatureValueSpec"
25
            body="self.name">
26
          <feature
27
              xsi:type="ecore:EAttribute"
28
              href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ENamedElement/name"/>
29
        </initializers>
30
        <initializers
31
            xsi:type="gmfmap:ReferenceNewElementSpec">
32
          <feature
33
              xsi:type="ecore:EReference"
34
              href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//ETypeParameter/eBounds"/>
35
          <newElementInitializers>
36
            <initializers
37
                xsi:type="gmfmap:FeatureValueSpec"
38
                body="some.Checker2"
39
                language="java">
40
              <feature
41
                  xsi:type="ecore:EReference"
42
                  href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EGenericType/eLowerBound"/>
43
            </initializers>
44
          </newElementInitializers>
45
        </initializers>
46
      </domainInitializer>
47
      <diagramNode
48
          href="../../../plugin/org.eclipse.gmf.graphdef/models/basic.gmfgraph#NamedNode"/>
49
    </ownedChild>
50
  </nodes>
51
  <diagram>
52
    <diagramCanvas
53
        href="../../../plugin/org.eclipse.gmf.graphdef/models/basic.gmfgraph#Surface"/>
54
    <domainModel
55
        href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#/"/>
56
    <domainMetaElement
57
        href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EClass"/>
58
  </diagram>
59
</gmfmap:Mapping>
(-)models/migration/test226149.gmfgen (+58 lines)
Added Link Here
1
<?xml version="1.0" encoding="UTF-8"?>
2
<gmfgen:GenEditorGenerator xmi:version="2.0"
3
    xmlns:xmi="http://www.omg.org/XMI"
4
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
    xmlns:gmfgen="http://www.eclipse.org/gmf/2006/GenModel">
6
  <audits>
7
    <categories
8
        id="container1"
9
        name="Container 1"
10
        path="//@audits/@categories.0"
11
        audits="//@audits/@rules.0 //@audits/@rules.1 //@audits/@rules.2"/>
12
    <rules
13
        name="Rule 1"
14
        description=""
15
        contextSelectorLocalClassName="SaveMe1"
16
        id="rule1"
17
        category="//@audits/@categories.0">
18
      <rule
19
          body="a.*"
20
          language="regexp"/>
21
      <target
22
          xsi:type="gmfgen:GenDomainAttributeTarget">
23
        <attribute
24
            href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore/ENamedElement/name"/>
25
      </target>
26
    </rules>
27
    <rules
28
        name="Rule 2"
29
        contextSelectorLocalClassName="SaveMe2"
30
        id="rule2"
31
        category="//@audits/@categories.0">
32
      <rule
33
          body="b.*"
34
          language="regexp"/>
35
      <target
36
          xsi:type="gmfgen:GenDomainAttributeTarget">
37
        <attribute
38
            href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore/ENamedElement/name"/>
39
      </target>
40
    </rules>
41
    <rules
42
        name="Rule 3"
43
        contextSelectorLocalClassName="SaveMe1"
44
        id="rule3"
45
        category="//@audits/@categories.0">
46
      <rule
47
          body="c.*"
48
          language="regexp"/>
49
      <target
50
          xsi:type="gmfgen:GenDomainAttributeTarget">
51
        <attribute
52
            href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore/ENamedElement/name"/>
53
      </target>
54
    </rules>
55
  </audits>
56
  <domainGenModel
57
      href="../../../plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#/"/>
58
</gmfgen:GenEditorGenerator>
(-)src/org/eclipse/gmf/internal/map/util/MigrationDelegate.java (+35 lines)
Lines 21-36 Link Here
21
import org.eclipse.emf.ecore.util.EcoreUtil;
21
import org.eclipse.emf.ecore.util.EcoreUtil;
22
import org.eclipse.gmf.internal.common.migrate.MigrationDelegateImpl;
22
import org.eclipse.gmf.internal.common.migrate.MigrationDelegateImpl;
23
import org.eclipse.gmf.mappings.FeatureLabelMapping;
23
import org.eclipse.gmf.mappings.FeatureLabelMapping;
24
import org.eclipse.gmf.mappings.FeatureValueSpec;
24
import org.eclipse.gmf.mappings.GMFMapFactory;
25
import org.eclipse.gmf.mappings.GMFMapFactory;
25
import org.eclipse.gmf.mappings.GMFMapPackage;
26
import org.eclipse.gmf.mappings.GMFMapPackage;
26
import org.eclipse.gmf.mappings.LabelMapping;
27
import org.eclipse.gmf.mappings.LabelMapping;
28
import org.eclipse.gmf.mappings.Language;
27
import org.eclipse.gmf.mappings.MappingEntry;
29
import org.eclipse.gmf.mappings.MappingEntry;
30
import org.eclipse.gmf.mappings.ValueExpression;
28
31
29
class MigrationDelegate extends MigrationDelegateImpl {
32
class MigrationDelegate extends MigrationDelegateImpl {
30
	private Map<LabelMapping, FeatureLabelMapping> myLabelMappingMigrations;
33
	private Map<LabelMapping, FeatureLabelMapping> myLabelMappingMigrations;
31
	private EAttribute myLabelMapping_ViewPattern;
34
	private EAttribute myLabelMapping_ViewPattern;
32
	private EAttribute myLabelMapping_EditPattern;
35
	private EAttribute myLabelMapping_EditPattern;
33
	private EReference myLabelMapping_Features;
36
	private EReference myLabelMapping_Features;
37
	private EAttribute myFeatureValueSpec_Body;
38
	private EAttribute myFeatureValueSpec_Language;
34
	
39
	
35
	MigrationDelegate() {
40
	MigrationDelegate() {
36
	}
41
	}
Lines 53-58 Link Here
53
			registerRenamedAttributes(GMFMapPackage.eINSTANCE.getLabelMapping(), renamings);
58
			registerRenamedAttributes(GMFMapPackage.eINSTANCE.getLabelMapping(), renamings);
54
		}
59
		}
55
		
60
		
61
		myFeatureValueSpec_Body = (EAttribute) EcoreUtil.copy(GMFMapPackage.eINSTANCE.getValueExpression_Body());
62
		myFeatureValueSpec_Language = (EAttribute) EcoreUtil.copy(GMFMapPackage.eINSTANCE.getValueExpression_Language());
63
		{
64
			Map<String, EStructuralFeature> renamings = new HashMap<String, EStructuralFeature>();
65
			renamings.put(myFeatureValueSpec_Body.getName(), myFeatureValueSpec_Body);
66
			renamings.put(myFeatureValueSpec_Language.getName(), myFeatureValueSpec_Language);
67
			registerRenamedAttributes(GMFMapPackage.eINSTANCE.getFeatureValueSpec(), renamings);
68
		}
69
		
56
		myLabelMappingMigrations = null;
70
		myLabelMappingMigrations = null;
57
	}
71
	}
58
72
Lines 76-81 Link Here
76
			FeatureLabelMapping migratedMapping = saveFeatureLabelMappingFor(mapping);
90
			FeatureLabelMapping migratedMapping = saveFeatureLabelMappingFor(mapping);
77
			migratedMapping.getFeatures().add(attribute);
91
			migratedMapping.getFeatures().add(attribute);
78
			fireMigrationApplied(true);
92
			fireMigrationApplied(true);
93
		} else if (myFeatureValueSpec_Body.equals(feature)) {
94
			FeatureValueSpec featureRef = (FeatureValueSpec) object;
95
			String body = (String) value;
96
			ValueExpression constraint = getOrCreateValueExpression(featureRef);
97
			constraint.setBody(body);
98
			fireMigrationApplied(true);
99
		} else if (myFeatureValueSpec_Language.equals(feature)) {
100
			FeatureValueSpec featureRef = (FeatureValueSpec) object;
101
			ValueExpression constraint = getOrCreateValueExpression(featureRef);
102
			Language lang = Language.get((String) value);
103
			constraint.setLanguage(lang);
104
			fireMigrationApplied(true);
79
		} else {
105
		} else {
80
			// other cases are would be processed as defaults
106
			// other cases are would be processed as defaults
81
			return super.setValue(object, feature, value, position);
107
			return super.setValue(object, feature, value, position);
Lines 83-88 Link Here
83
		return true;
109
		return true;
84
	}
110
	}
85
111
112
	private ValueExpression getOrCreateValueExpression(FeatureValueSpec featureRef) {
113
		ValueExpression constraint = featureRef.getValue();
114
		if (constraint == null) {
115
			constraint = GMFMapFactory.eINSTANCE.createValueExpression();
116
			featureRef.setValue(constraint);
117
		}
118
		return constraint;
119
	}
120
86
	private FeatureLabelMapping saveFeatureLabelMappingFor(LabelMapping labelMapping) {
121
	private FeatureLabelMapping saveFeatureLabelMappingFor(LabelMapping labelMapping) {
87
		if (myLabelMappingMigrations == null) {
122
		if (myLabelMappingMigrations == null) {
88
			myLabelMappingMigrations = new HashMap<LabelMapping, FeatureLabelMapping>();
123
			myLabelMappingMigrations = new HashMap<LabelMapping, FeatureLabelMapping>();

Return to bug 227506