Skip to content

Commit 4c7df96

Browse files
authored
centralize property tester and earlystartup in modeldebugging (#238)
contributes to #237
1 parent 4248e8f commit 4c7df96

File tree

13 files changed

+248
-113
lines changed

13 files changed

+248
-113
lines changed

framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.engine.ui/META-INF/MANIFEST.MF

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ Require-Bundle: org.eclipse.gemoc.xdsmlframework.api,
3030
org.eclipse.gemoc.executionframework.ui,
3131
org.eclipse.sirius.ui,
3232
org.eclipse.ui.workbench,
33-
org.eclipse.ui.ide;bundle-version="3.14.0"
33+
org.eclipse.ui.ide;bundle-version="3.14.0",
34+
org.eclipse.core.expressions
3435
Bundle-ActivationPolicy: lazy
3536
Bundle-RequiredExecutionEnvironment: JavaSE-17
3637
Export-Package: org.eclipse.gemoc.executionframework.engine.ui,
Lines changed: 110 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,116 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<?eclipse version="3.4"?>
33
<plugin>
4-
<extension
5-
point="org.eclipse.debug.ui.debugModelPresentations">
6-
<debugModelPresentation
7-
class="org.eclipse.gemoc.executionframework.engine.ui.genericdebugmodel.GemocGenericDebugModelPresentation"
8-
id="org.eclipse.gemoc.executionframework.engine.ui.generic.debugModel">
9-
</debugModelPresentation>
10-
</extension>
11-
<extension
12-
point="org.eclipse.debug.core.sourceLocators">
13-
<sourceLocator
14-
class="org.eclipse.gemoc.executionframework.engine.ui.genericdebugmodel.GemocGenericSourceLocator"
15-
id="org.eclipse.gemoc.executionframework.engine.ui.generic.sourceLocator"
16-
name="GEMOC Generic Source Locator">
17-
</sourceLocator>
18-
</extension>
19-
20-
21-
<extension
22-
point="org.eclipse.gemoc.gemoc_language_workbench.deciders">
23-
<DeciderSpecification
24-
Class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.deciders.StepByStepUserDecider"
25-
Icon="icons/user-shield-green-16.png"
26-
Name="Step by step user decider">
27-
</DeciderSpecification>
28-
<DeciderSpecification
29-
Class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.deciders.UserDecider"
30-
Icon="icons/user-shield-black-16.png"
31-
Name="User decider">
32-
</DeciderSpecification>
4+
<extension
5+
point="org.eclipse.debug.ui.debugModelPresentations">
6+
<debugModelPresentation
7+
class="org.eclipse.gemoc.executionframework.engine.ui.genericdebugmodel.GemocGenericDebugModelPresentation"
8+
id="org.eclipse.gemoc.executionframework.engine.ui.generic.debugModel">
9+
</debugModelPresentation>
3310
</extension>
34-
35-
<extension
36-
point="org.eclipse.ui.views">
37-
<category
38-
id="org.eclipse.gemoc.executionframework.ui.category"
39-
name="Gemoc">
40-
</category>
41-
42-
<view
43-
category="org.eclipse.gemoc.executionframework.ui.category"
44-
class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.views.step.LogicalStepsView"
45-
icon="icons/IconeGemocModel-16.png"
46-
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView"
47-
name="Concurrent Logical Steps Decider">
48-
</view>
49-
50-
<view
51-
category="org.eclipse.gemoc.executionframework.ui.category"
52-
class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.strategyselector.StrategySelectionView"
53-
icon="icons/IconeGemocModel-16.png"
54-
id="org.eclipse.gemoc.executionframework.engine.io.views.StrategySelectionView"
55-
name="Strategy Selection">
56-
</view>
57-
58-
11+
<extension
12+
point="org.eclipse.debug.core.sourceLocators">
13+
<sourceLocator
14+
class="org.eclipse.gemoc.executionframework.engine.ui.genericdebugmodel.GemocGenericSourceLocator"
15+
id="org.eclipse.gemoc.executionframework.engine.ui.generic.sourceLocator"
16+
name="GEMOC Generic Source Locator">
17+
</sourceLocator>
18+
</extension>
19+
20+
21+
<extension
22+
point="org.eclipse.gemoc.gemoc_language_workbench.deciders">
23+
<DeciderSpecification
24+
Class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.deciders.StepByStepUserDecider"
25+
Icon="icons/user-shield-green-16.png"
26+
Name="Step by step user decider">
27+
</DeciderSpecification>
28+
<DeciderSpecification
29+
Class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.deciders.UserDecider"
30+
Icon="icons/user-shield-black-16.png"
31+
Name="User decider">
32+
</DeciderSpecification>
33+
</extension>
34+
35+
<extension
36+
point="org.eclipse.ui.views">
37+
<category
38+
id="org.eclipse.gemoc.executionframework.ui.category"
39+
name="Gemoc">
40+
</category>
41+
42+
<view
43+
category="org.eclipse.gemoc.executionframework.ui.category"
44+
class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.views.step.LogicalStepsView"
45+
icon="icons/IconeGemocModel-16.png"
46+
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView"
47+
name="Concurrent Logical Steps Decider">
48+
</view>
49+
50+
<view
51+
category="org.eclipse.gemoc.executionframework.ui.category"
52+
class="org.eclipse.gemoc.executionframework.engine.ui.concurrency.strategyselector.StrategySelectionView"
53+
icon="icons/IconeGemocModel-16.png"
54+
id="org.eclipse.gemoc.executionframework.engine.io.views.StrategySelectionView"
55+
name="Strategy Selection">
56+
</view>
57+
58+
59+
</extension>
60+
61+
<extension
62+
point="org.eclipse.ui.perspectiveExtensions">
63+
<perspectiveExtension
64+
targetID="org.eclipse.sirius.ui.tools.perspective.modeling">
65+
66+
<view
67+
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView"
68+
minimized="false"
69+
relationship="stack"
70+
relative="org.eclipse.sirius.ui.tools.views.model.explorer"
71+
visible="true">
72+
</view>
73+
74+
<viewShortcut
75+
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView">
76+
</viewShortcut>
77+
78+
</perspectiveExtension>
79+
<perspectiveExtension
80+
targetID="org.eclipse.debug.ui.DebugPerspective">
81+
82+
83+
<view
84+
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView"
85+
minimized="false"
86+
ratio="0.5"
87+
relationship="bottom"
88+
relative="org.eclipse.gemoc.executionframework.ui.views.engine.EnginesStatusView"
89+
visible="true">
90+
</view>
91+
92+
<viewShortcut
93+
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView">
94+
</viewShortcut>
95+
96+
97+
</perspectiveExtension>
98+
</extension>
99+
<extension
100+
point="org.eclipse.core.expressions.propertyTesters">
101+
<propertyTester
102+
class="org.eclipse.gemoc.executionframework.engine.ui.propertytesters.GemocXDSMLPropertyTester"
103+
id="org.eclipse.gemoc.executionframework.engine.ui.propertytesters.GemocXDSMLPropertyTester"
104+
namespace="org.eclipse.gemoc.executionframework.engine.ui.propertytesters"
105+
properties="isModel, isExecutableDomainSpecificModel"
106+
type="org.eclipse.core.runtime.IAdaptable">
107+
</propertyTester>
108+
</extension>
109+
110+
<extension
111+
point="org.eclipse.ui.startup">
112+
<startup
113+
class="org.eclipse.gemoc.executionframework.engine.ui.ModelingWorkbenchEarlyStartup">
114+
</startup>
59115
</extension>
60-
61-
<extension
62-
point="org.eclipse.ui.perspectiveExtensions">
63-
<perspectiveExtension
64-
targetID="org.eclipse.sirius.ui.tools.perspective.modeling">
65-
66-
<view
67-
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView"
68-
minimized="false"
69-
relationship="stack"
70-
relative="org.eclipse.sirius.ui.tools.views.model.explorer"
71-
visible="true">
72-
</view>
73-
74-
<viewShortcut
75-
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView">
76-
</viewShortcut>
77-
78-
</perspectiveExtension>
79-
<perspectiveExtension
80-
targetID="org.eclipse.debug.ui.DebugPerspective">
81-
82-
83-
<view
84-
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView"
85-
minimized="false"
86-
ratio="0.5"
87-
relationship="bottom"
88-
relative="org.eclipse.gemoc.executionframework.ui.views.engine.EnginesStatusView"
89-
visible="true">
90-
</view>
91-
92-
<viewShortcut
93-
id="org.eclipse.gemoc.executionframework.engine.io.views.steps.LogicalStepsView">
94-
</viewShortcut>
95-
96-
97-
</perspectiveExtension>
98-
</extension>
99116
</plugin>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* INRIA - initial API and implementation
1010
* I3S Laboratory - API update and bug fix
1111
*******************************************************************************/
12-
package org.eclipse.gemoc.executionframework.engine.ui.concurrency;
12+
package org.eclipse.gemoc.executionframework.engine.ui;
1313

1414
import org.eclipse.ui.IStartup;
1515

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2017, 2019 INRIA and others.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* INRIA - initial API and implementation
10+
* I3S Laboratory - API update and bug fix
11+
*******************************************************************************/
12+
13+
package org.eclipse.gemoc.executionframework.engine.ui.propertytesters;
14+
15+
import org.eclipse.core.expressions.PropertyTester;
16+
import org.eclipse.core.resources.IFile;
17+
import org.eclipse.core.runtime.IAdaptable;
18+
import org.eclipse.emf.common.util.URI;
19+
import org.eclipse.emf.ecore.resource.Resource;
20+
import org.eclipse.emf.ecore.resource.ResourceSet;
21+
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
22+
import org.eclipse.gemoc.xdsmlframework.api.extensions.languages.LanguageDefinitionExtension;
23+
import org.eclipse.gemoc.xdsmlframework.api.extensions.languages.LanguageDefinitionExtensionPoint;
24+
25+
/**
26+
* Property tester for context launching menu.
27+
*
28+
* Note: this PropertyTester seems to be fully activated only when the containing plugin is started,
29+
* this start may be achieved either by another plguin or using the EarlyStart
30+
*/
31+
public class GemocXDSMLPropertyTester extends PropertyTester {
32+
33+
/**
34+
* name for the "is model" property
35+
*/
36+
private static final String PROPERTY_IS_MODEL = "isModel"; //$NON-NLS-1$
37+
38+
/**
39+
* name for the "is executable domain specific model" property
40+
*/
41+
private static final String PROPERTY_IS_EXECUTABLE_DOMAIN_SPECIFIC_MODEL = "isExecutableDomainSpecificModel"; //$NON-NLS-1$
42+
43+
44+
protected boolean isModel(IAdaptable receiver){
45+
IFile modelFile = (IFile)(receiver).getAdapter(IFile.class);
46+
if(modelFile !=null){
47+
ResourceSet rs = new ResourceSetImpl();
48+
URI modelURI = URI.createURI("platform:/resource/"+modelFile.getFullPath().toString());
49+
try{
50+
Resource resource = rs.getResource(modelURI, true);
51+
if (resource != null) {
52+
return true;
53+
}
54+
} catch (Exception e){
55+
// not a valid model, simply ignore
56+
return false;
57+
}
58+
}
59+
return false;
60+
}
61+
62+
protected boolean isExecutableDomainSpecificModel(IAdaptable receiver){
63+
IFile modelFile = (IFile)(receiver).getAdapter(IFile.class);
64+
if(modelFile !=null){
65+
66+
return existsDSMLWithFileExtension(modelFile.getFileExtension());
67+
}
68+
return false;
69+
}
70+
71+
72+
protected boolean existsDSMLWithFileExtension(String fileExtension){
73+
for(LanguageDefinitionExtension lde : LanguageDefinitionExtensionPoint.getSpecifications()){
74+
if( lde.getFileExtensions().contains(fileExtension)) return true;
75+
}
76+
77+
return false;
78+
}
79+
80+
/**
81+
* Method runs the tests defined from extension points for Run As... and Debug As... menu items.
82+
*
83+
* @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
84+
* @since 3.2
85+
* @return true if the specified tests pass, false otherwise
86+
*/
87+
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
88+
89+
if(PROPERTY_IS_MODEL.equals(property)) {
90+
if (receiver instanceof IAdaptable) {
91+
return isModel((IAdaptable)receiver);
92+
}
93+
return false;
94+
}
95+
if(PROPERTY_IS_EXECUTABLE_DOMAIN_SPECIFIC_MODEL.equals(property)) {
96+
if (receiver instanceof IAdaptable) {
97+
return isExecutableDomainSpecificModel((IAdaptable)receiver);
98+
}
99+
return false;
100+
}
101+
return false;
102+
}
103+
104+
}

framework/framework_commons/pomfirst/org.eclipse.gemoc.xdsmlframework.api/.classpath

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<attribute name="test" value="true"/>
2626
</attributes>
2727
</classpathentry>
28-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
28+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
2929
<attributes>
3030
<attribute name="maven.pomderived" value="true"/>
3131
</attributes>
@@ -35,5 +35,18 @@
3535
<attribute name="maven.pomderived" value="true"/>
3636
</attributes>
3737
</classpathentry>
38+
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
39+
<attributes>
40+
<attribute name="maven.pomderived" value="true"/>
41+
<attribute name="optional" value="true"/>
42+
</attributes>
43+
</classpathentry>
44+
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
45+
<attributes>
46+
<attribute name="maven.pomderived" value="true"/>
47+
<attribute name="test" value="true"/>
48+
<attribute name="optional" value="true"/>
49+
</attributes>
50+
</classpathentry>
3851
<classpathentry kind="output" path="target/classes"/>
3952
</classpath>
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
eclipse.preferences.version=1
2-
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
3-
org.eclipse.jdt.core.compiler.compliance=1.8
2+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
3+
org.eclipse.jdt.core.compiler.compliance=17
44
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
55
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
66
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
77
org.eclipse.jdt.core.compiler.release=disabled
8-
org.eclipse.jdt.core.compiler.source=1.8
8+
org.eclipse.jdt.core.compiler.source=17

protocols/engine_addon_protocol/pomfirst/org.eclipse.gemoc.protocols.eaop.api/.classpath

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<classpath>
3-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
3+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
44
<attributes>
55
<attribute name="maven.pomderived" value="true"/>
66
</attributes>
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
eclipse.preferences.version=1
2-
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
3-
org.eclipse.jdt.core.compiler.compliance=1.8
2+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
3+
org.eclipse.jdt.core.compiler.compliance=17
44
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
55
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
66
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
77
org.eclipse.jdt.core.compiler.release=disabled
8-
org.eclipse.jdt.core.compiler.source=1.8
8+
org.eclipse.jdt.core.compiler.source=17

0 commit comments

Comments
 (0)