- Add possibility to customize the calculation of port direction
- Remove SBlock/SPort attributes from property view.
Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr>
diff --git a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/META-INF/MANIFEST.MF b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/META-INF/MANIFEST.MF
index 803f530..27764a5 100644
--- a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/META-INF/MANIFEST.MF
+++ b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
Bundle-SymbolicName: org.polarsys.esf.localanalysis.profile;singleton:=true
Bundle-Version: 0.7.0.qualifier
Bundle-ClassPath: .
-Bundle-Activator: org.polarsys.esf.localanalysis.profile.ESFLocalAnalysisPorfileActivator$Implementation
+Bundle-Activator: org.polarsys.esf.localanalysis.profile.ESFLocalAnalysisProfileActivator$Implementation
Bundle-Vendor: %Bundle-Vendor
Bundle-Localization: src/main/resources/properties/plugin
Require-Bundle: org.eclipse.uml2.uml;bundle-version="5.1.0";visibility:=reexport,
@@ -24,5 +24,6 @@
Export-Package: org.polarsys.esf.esflocalanalysis,
org.polarsys.esf.esflocalanalysis.impl,
org.polarsys.esf.esflocalanalysis.util,
+ org.polarsys.esf.localanalysis.profile,
org.polarsys.esf.localanalysis.profile.set
Bundle-ActivationPolicy: lazy
diff --git a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/plugin.xml b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/plugin.xml
index c6665cb..38d6ad8 100644
--- a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/plugin.xml
+++ b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/plugin.xml
@@ -18,6 +18,7 @@
-->
<plugin>
+ <extension-point id="portdirection" name="Port Direction" schema="schema/portdirection.exsd"/>
<extension point="org.eclipse.emf.ecore.generated_package">
<!-- @generated esflocalanalysis -->
<package
diff --git a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/schema/portdirection.exsd b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/schema/portdirection.exsd
new file mode 100644
index 0000000..176ba88
--- /dev/null
+++ b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/schema/portdirection.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.polarsys.esf.localanalysis.profile" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.polarsys.esf.localanalysis.profile" id="portdirection" name="Port Direction"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appInfo>
+ <meta.element />
+ </appInfo>
+ </annotation>
+ <complexType>
+ <choice>
+ <element ref="portDirection" minOccurs="0" maxOccurs="unbounded"/>
+ </choice>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="portDirection">
+ <complexType>
+ <attribute name="class" type="string">
+ <annotation>
+ <documentation>
+ A class that provides access to the code generator. It must implement the ILangCodegen interface.
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.polarsys.esf.localanalysis.profile.IGetPortDirection"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiinfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src-gen/main/java/org/polarsys/esf/esflocalanalysis/impl/SPortLAnalysis.java b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src-gen/main/java/org/polarsys/esf/esflocalanalysis/impl/SPortLAnalysis.java
index d978f35..1481499 100644
--- a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src-gen/main/java/org/polarsys/esf/esflocalanalysis/impl/SPortLAnalysis.java
+++ b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src-gen/main/java/org/polarsys/esf/esflocalanalysis/impl/SPortLAnalysis.java
@@ -13,19 +13,16 @@
package org.polarsys.esf.esflocalanalysis.impl;
import org.eclipse.emf.common.notify.Notification;
-
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.InternalEObject;
-
import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
import org.eclipse.uml2.uml.Port;
-
import org.polarsys.esf.esfarchitectureconcepts.ISPort;
import org.polarsys.esf.esflocalanalysis.IESFLocalAnalysisPackage;
import org.polarsys.esf.esflocalanalysis.ISBlockLAnalysis;
import org.polarsys.esf.esflocalanalysis.ISPortLAnalysis;
import org.polarsys.esf.esflocalanalysis.SDirectionLAnalysis;
+import org.polarsys.esf.localanalysis.profile.PortDirection;
/**
* <!-- begin-user-doc -->
@@ -235,14 +232,7 @@
public SDirectionLAnalysis getSDirectionLAnalysis() {
Port port = getBase_Port();
if (port != null) {
- // TODO: obtain direction by taking other (domain-specific) profiles into account
- if (port.getProvideds().size() > 0 && port.getRequireds().size() > 0) {
- return SDirectionLAnalysis.INOUT;
- } else if (port.getProvideds().size() > 0) {
- return SDirectionLAnalysis.IN;
- } else if (port.getRequireds().size() > 0) {
- return SDirectionLAnalysis.OUT;
- }
+ return PortDirection.getSDirectionLAnalysis(port);
}
return SDirectionLAnalysis.UNDEFINED;
}
diff --git a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/ESFLocalAnalysisPorfileActivator.java b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/ESFLocalAnalysisProfileActivator.java
similarity index 88%
rename from analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/ESFLocalAnalysisPorfileActivator.java
rename to analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/ESFLocalAnalysisProfileActivator.java
index 01b1a29..03c2ebb 100644
--- a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/ESFLocalAnalysisPorfileActivator.java
+++ b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/ESFLocalAnalysisProfileActivator.java
@@ -24,12 +24,15 @@
* @author $Author: jdumont $
* @version $Revision: 183 $
*/
-public final class ESFLocalAnalysisPorfileActivator
+public final class ESFLocalAnalysisProfileActivator
extends EMFPlugin
implements BundleActivator {
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.polarsys.esf.localanalysis.profile"; //$NON-NLS-1$
+
/** Keep track of the encapsulating singleton. */
- public static final ESFLocalAnalysisPorfileActivator INSTANCE = new ESFLocalAnalysisPorfileActivator();
+ public static final ESFLocalAnalysisProfileActivator INSTANCE = new ESFLocalAnalysisProfileActivator();
/** Execution context for the bundle. */
private static BundleContext sBundleContext = null;
@@ -40,7 +43,7 @@
/**
* Create the instance.
*/
- public ESFLocalAnalysisPorfileActivator() {
+ public ESFLocalAnalysisProfileActivator() {
super(new ResourceLocator[] {});
}
diff --git a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/IGetPortDirection.java b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/IGetPortDirection.java
new file mode 100644
index 0000000..64027b8
--- /dev/null
+++ b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/IGetPortDirection.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2016 ALL4TEC & CEA LIST.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * ALL4TEC & CEA LIST - initial API and implementation
+ ******************************************************************************/
+
+package org.polarsys.esf.localanalysis.profile;
+
+import org.eclipse.uml2.uml.Port;
+import org.polarsys.esf.esflocalanalysis.SDirectionLAnalysis;
+
+public interface IGetPortDirection {
+ /**
+ * Returns the direction of a port
+ * Domain-specific implementations should return UNDEFINED, if the port
+ * does not apply a stereotype from which the direction can be deferred.
+ */
+ SDirectionLAnalysis getSDirectionLAnalysis(Port port);
+}
diff --git a/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/PortDirection.java b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/PortDirection.java
new file mode 100644
index 0000000..1050c7f
--- /dev/null
+++ b/analysis/localanalysis/profile/org.polarsys.esf.localanalysis.profile/src/main/java/org/polarsys/esf/localanalysis/profile/PortDirection.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2016 ALL4TEC & CEA LIST.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * ALL4TEC & CEA LIST - initial API and implementation
+ ******************************************************************************/
+
+package org.polarsys.esf.localanalysis.profile;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.uml2.uml.Port;
+import org.polarsys.esf.esflocalanalysis.SDirectionLAnalysis;
+
+/**
+ * Handle calculation of port direction based on extension points
+ */
+public class PortDirection {
+
+ private static final String CLASS = "class"; //$NON-NLS-1$
+
+ public static final String IPORT_DIRECTION_ID = ESFLocalAnalysisProfileActivator.PLUGIN_ID + ".portdirection"; //$NON-NLS-1$
+
+ /**
+ * Retrieve a direction from a port. The first extension returning a
+ * defined value (in, out, inout) is returned
+ *
+ * @param port a UML port for which the direction should be determined
+ * @return the direction of the passed port
+ */
+ public static SDirectionLAnalysis getSDirectionLAnalysis(Port port) {
+ IExtensionRegistry reg = Platform.getExtensionRegistry();
+ IConfigurationElement[] configElements = reg.getConfigurationElementsFor(IPORT_DIRECTION_ID);
+
+ for (IConfigurationElement configElement : configElements) {
+ try {
+ final Object obj = configElement.createExecutableExtension(CLASS);
+ if (obj instanceof IGetPortDirection) {
+ IGetPortDirection calcDirection = (IGetPortDirection) obj;
+ SDirectionLAnalysis direction = calcDirection.getSDirectionLAnalysis(port);
+ if (direction != SDirectionLAnalysis.UNDEFINED) {
+ return direction;
+ }
+ }
+ } catch (CoreException exception) {
+ exception.printStackTrace();
+ }
+ }
+ // No value via extension point, return default calculation
+ if (port.getProvideds().size() > 0 && port.getRequireds().size() > 0) {
+ return SDirectionLAnalysis.INOUT;
+ } else if (port.getProvideds().size() > 0) {
+ return SDirectionLAnalysis.IN;
+ } else if (port.getRequireds().size() > 0) {
+ return SDirectionLAnalysis.OUT;
+ }
+ return SDirectionLAnalysis.UNDEFINED;
+ }
+}
diff --git a/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/esflocalanalysis.ctx b/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/esflocalanalysis.ctx
index 438e6e0..e3b2896 100644
--- a/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/esflocalanalysis.ctx
+++ b/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/esflocalanalysis.ctx
@@ -2,7 +2,7 @@
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9">
<contexts:Context xmi:id="_bokhUK2SEeaML4zug24PgQ" name="ESFLocalAnalysis">
<dependencies href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_69QJkKDJEeSZxfCXzZz3-w"/>
- <tabs xmi:id="_iB4MwK2SEeaML4zug24PgQ" label="ESFLocalAnalysis" id="esflocalanalysis" priority="10">
+ <tabs xmi:id="_iB4MwK2SEeaML4zug24PgQ" label="Component analysis" id="esflocalanalysis" priority="10">
<afterTab href="ppe:/context/org.eclipse.papyrus.uml.properties/Model/UML/UML.ctx#_69QJkaDJEeSZxfCXzZz3-w"/>
<sections xmi:id="_iB4z0K2SEeaML4zug24PgQ" name="Single AbstractSLogicalGateLAnalysis" sectionFile="ui/SingleAbstractSLogicalGateLAnalysis.xwt">
<widget href="ui/SingleAbstractSLogicalGateLAnalysis.xwt#/"/>
diff --git a/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSBlockLAnalysis.xwt b/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSBlockLAnalysis.xwt
index c2241ec..489cd5a 100644
--- a/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSBlockLAnalysis.xwt
+++ b/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSBlockLAnalysis.xwt
@@ -21,13 +21,6 @@
<Composite.layout>
<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
</Composite.layout>
- <ppe:ReferenceDialog input="{Binding}"
- property="ESFLocalAnalysis:SBlockLAnalysis:sBlock" readOnly="true" customLabel="SBlock"></ppe:ReferenceDialog>
- </Composite>
- <Composite>
- <Composite.layout>
- <ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
- </Composite.layout>
<ppe:MultiReference input="{Binding}"
property="ESFLocalAnalysis:SBlockLAnalysis:sPropagationLinksList" readOnly="true" customLabel="Propagation Links List"></ppe:MultiReference>
</Composite>
diff --git a/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSPortLAnalysis.xwt b/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSPortLAnalysis.xwt
index 78ac8e8..598c22a 100644
--- a/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSPortLAnalysis.xwt
+++ b/analysis/localanalysis/ui/org.polarsys.esf.localanalysis.ui/src/main/resources/properties_view/ui/SingleSPortLAnalysis.xwt
@@ -22,14 +22,12 @@
<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
</Composite.layout>
<ppe:EnumCombo input="{Binding}"
- property="ESFLocalAnalysis:SPortLAnalysis:sDirectionLAnalysis" customLabel="Direction"></ppe:EnumCombo>
+ property="ESFLocalAnalysis:SPortLAnalysis:sDirectionLAnalysis" readOnly="true" customLabel="Direction"></ppe:EnumCombo>
</Composite>
<Composite>
<Composite.layout>
<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
</Composite.layout>
- <ppe:ReferenceDialog input="{Binding}"
- property="ESFLocalAnalysis:SPortLAnalysis:sPort" customLabel="SPort"></ppe:ReferenceDialog>
<ppe:MultiReference input="{Binding}"
property="ESFLocalAnalysis:SPortLAnalysis:sFailureModesLAnalysisList" readOnly="true" customLabel="Failure Mode"></ppe:MultiReference>
</Composite>