Bug 477828 - [Extra Plugin][Req] ID must be compute and adding by using
Service Type component
Change-Id: Ia388c461be15c8da54091db5b378757610d43f89
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirement.architecture/resources/papyrusreq.architecture b/plugins/sysml14/org.eclipse.papyrus.requirement.architecture/resources/papyrusreq.architecture
index b188429..dac4c3f 100644
--- a/plugins/sysml14/org.eclipse.papyrus.requirement.architecture/resources/papyrusreq.architecture
+++ b/plugins/sysml14/org.eclipse.papyrus.requirement.architecture/resources/papyrusreq.architecture
@@ -13,6 +13,7 @@
<representationKinds xsi:type="nattablerepresentation:PapyrusTable" href="#_zDnG8JI1EeeIi5L9EZAlzw"/>
<representationKinds xsi:type="nattablerepresentation:PapyrusTable" href="#_Cfnr8LP2EeeLo8Gu4FwO3w"/>
</viewpoints>
+ <elementTypes href="platform:/plugin/org.eclipse.papyrus.requirements.sysml14.common/resource/Requirement.elementtypesconfigurations#org.eclipse.papyrus.requirements.sysml.common.elementTypeSet"/>
<representationKinds xsi:type="nattablerepresentation:PapyrusTable" xmi:id="_WdWhUI85EeeoX5z29mN4Kg" id="SysMLSatisfactionRequirementMatrix" name="Satisfaction Requirement Matrix" description="This table is a matrix that shows if the element satisfies a requirement" icon="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/icons/table_SysML_Requirement.png" concerns="_hhXXgIv7EeeNBcglvVZtOQ" implementationID="SysMLSatisfactionRequirementMatrix">
<modelRules xmi:id="_-v9pgI85EeeoX5z29mN4Kg">
<element href="http://www.eclipse.org/uml2/5.0.0/UML#//Package"/>
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/META-INF/MANIFEST.MF b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/META-INF/MANIFEST.MF
index 04e2018..47c2817 100644
--- a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/META-INF/MANIFEST.MF
+++ b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/META-INF/MANIFEST.MF
@@ -1,15 +1,23 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: org.eclipse.papyrus.requirements.sysml14.common
+Bundle-SymbolicName: org.eclipse.papyrus.requirements.sysml14.common;singleton:=true
Bundle-Version: 0.7.0.qualifier
Bundle-Activator: org.eclipse.papyrus.requirements.sysml14.common.Activator
Bundle-Vendor: %Bundle-Vendor
-Require-Bundle: org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.8.0",
+Require-Bundle: org.eclipse.papyrus.uml.service.types;bundle-version="3.1.0",
+ org.eclipse.papyrus.sysml14;bundle-version="0.9.1",
+ org.eclipse.gmf.runtime.emf.type.core,
+ org.eclipse.papyrus.infra.types.core,
+ org.eclipse.papyrus.infra.services.edit,
+ org.eclipse.papyrus.uml.tools.utils,
+ org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.8.0",
org.eclipse.papyrus.infra.ui,
org.eclipse.papyrus.requirements.sysml14.preferences,
- org.eclipse.papyrus.sysml14;bundle-version="0.9.1"
+ org.eclipse.papyrus.uml.types.core
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-Localization: bundle
-Export-Package: org.eclipse.papyrus.requirements.sysml14.common
+Export-Package: org.eclipse.papyrus.requirements.sysml.common.advices,
+ org.eclipse.papyrus.requirements.sysml.common.command,
+ org.eclipse.papyrus.requirements.sysml14.common
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/build.properties b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/build.properties
index 4279aa9..32b96f3 100644
--- a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/build.properties
+++ b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/build.properties
@@ -3,5 +3,7 @@
bin.includes = .,\
about.html,\
bundle.properties,\
- META-INF/
+ META-INF/,\
+ plugin.xml,\
+ resource/
src.includes = about.html
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/plugin.xml b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/plugin.xml
new file mode 100644
index 0000000..9d95006
--- /dev/null
+++ b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.papyrus.infra.types.core.elementTypeSetConfiguration">
+ <elementTypeSet
+ clientContextID="org.eclipse.papyrus.infra.services.edit.TypeContext"
+ path="resource/Requirement.elementtypesconfigurations">
+ </elementTypeSet>
+ </extension>
+
+</plugin>
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/resource/Requirement.elementtypesconfigurations b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/resource/Requirement.elementtypesconfigurations
new file mode 100644
index 0000000..32ced0c
--- /dev/null
+++ b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/resource/Requirement.elementtypesconfigurations
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<elementtypesconfigurations:ElementTypeSetConfiguration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:elementtypesconfigurations="http://www.eclipse.org/papyrus/infra/elementtypesconfigurations/1.2" xmi:id="org.eclipse.papyrus.requirements.sysml.common.elementTypeSet" identifier="org.eclipse.papyrus.requirements.sysml.common.elementTypesconfiguration" name="org.eclipse.papyrus.requirements.sysml.common.elementTypesconfiguration" metamodelNsURI="http://www.eclipse.org/uml2/5.0.0/UML">
+ <adviceBindingsConfigurations xsi:type="elementtypesconfigurations:AdviceBindingConfiguration" xmi:id="_iEqC8HeQEeesoqsNSRk13w" identifier="org.eclipse.papyrus.requirements.sysml.common.advices.RequirementEditHelperAdvice" editHelperAdviceClassName="org.eclipse.papyrus.requirements.sysml.common.advices.RequirementEditHelperAdvice">
+ <target xsi:type="elementtypesconfigurations:MetamodelTypeConfiguration" href="../../../plugin/org.eclipse.papyrus.uml.service.types/model/uml.elementtypesconfigurations#org.eclipse.papyrus.uml.Class"/>
+ </adviceBindingsConfigurations>
+</elementtypesconfigurations:ElementTypeSetConfiguration>
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml/common/advices/RequirementEditHelperAdvice.java b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml/common/advices/RequirementEditHelperAdvice.java
new file mode 100644
index 0000000..8d24a36
--- /dev/null
+++ b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml/common/advices/RequirementEditHelperAdvice.java
@@ -0,0 +1,43 @@
+/*****************************************************************************
+ * Copyright (c) 2018 CEA LIST 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:
+ * CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.requirements.sysml.common.advices;
+
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.papyrus.infra.emf.gmf.command.EMFtoGMFCommandWrapper;
+import org.eclipse.papyrus.requirements.sysml.common.command.SetRequirementIdCommand;
+import org.eclipse.papyrus.requirements.sysml14.common.Utils;
+import org.eclipse.papyrus.uml.types.core.requests.ApplyStereotypeRequest;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * This advice has in charge to update the id of the requirement.
+ *
+ */
+public class RequirementEditHelperAdvice extends org.eclipse.papyrus.uml.types.core.edithelper.DefaultUMLEditHelperAdvice{// org.eclipse.papyrus.uml.types.core.edithelper.DefaultUMLEditHelperAdvice{//org.eclipse.gmf.runtime.emf.type.core.edithelper.AbstractEditHelperAdvice{//
+
+ /**
+ * @see org.eclipse.papyrus.uml.types.core.edithelper.DefaultUMLEditHelperAdvice#getAfterApplyStereotypeCommand(org.eclipse.papyrus.uml.types.core.requests.ApplyStereotypeRequest)
+ *
+ * @param req
+ * @return
+ */
+ @Override
+ protected ICommand getAfterApplyStereotypeCommand(ApplyStereotypeRequest req) {
+ Stereotype appliedStereotype=req.getStereotype();
+ if(Utils.isRequirementStereotype(appliedStereotype)) {
+ return new EMFtoGMFCommandWrapper(new SetRequirementIdCommand(req.getEditingDomain(), req.getUmlElement()));
+ }
+ return super.getAfterApplyStereotypeCommand(req);
+ }
+}
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml/common/command/SetRequirementIdCommand.java b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml/common/command/SetRequirementIdCommand.java
new file mode 100644
index 0000000..97b1b74
--- /dev/null
+++ b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml/common/command/SetRequirementIdCommand.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST.
+ *
+ *
+ * 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:
+ *
+ * Mauricio Alferez (mauricio.alferez@cea.fr) CEA LIST - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.requirements.sysml.common.command;
+
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.requirements.sysml14.common.I_SysMLStereotype;
+import org.eclipse.papyrus.requirements.sysml14.common.Utils;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Set Id to all sub requirement from a package by taking as prefix the name of the package
+ *
+ */
+public class SetRequirementIdCommand extends RecordingCommand {
+ protected org.eclipse.uml2.uml.Element selectedElement;
+ protected TransactionalEditingDomain domain;
+
+
+ public SetRequirementIdCommand(TransactionalEditingDomain domain, Element selectedElement) {
+ super(domain, "PapyrusReqSysMLRequirementCreateCommand");
+ this.selectedElement = selectedElement;
+ }
+
+ protected void setID(org.eclipse.uml2.uml.Class reqclass, String text) {
+ Stereotype reqStereotype = reqclass.getApplicableStereotype(I_SysMLStereotype.REQUIREMENT_STEREOTYPE);
+ String id = Utils.getNewRequirementID(reqclass.getOwner());
+ reqclass.setName(id);
+ reqclass.setValue(reqStereotype, I_SysMLStereotype.REQUIREMENT_ID_ATT, id);
+ }
+
+ @Override
+ protected void doExecute() {
+ if (selectedElement instanceof Class) {
+ setID((Class) selectedElement, "");
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml14/common/Utils.java b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml14/common/Utils.java
index 6ff5bb8..a1be73e 100644
--- a/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml14/common/Utils.java
+++ b/plugins/sysml14/org.eclipse.papyrus.requirements.sysml14.common/src/org/eclipse/papyrus/requirements/sysml14/common/Utils.java
@@ -28,6 +28,7 @@
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Stereotype;
import org.eclipse.uml2.uml.util.UMLUtil;
public class Utils {
@@ -36,6 +37,24 @@
}
/**
+ * test if the stereotype is a SysML Requirement Stereotype
+ * @param stereotype a given stereotype
+ * @return return true if this is a SysML stereotype or inherits directly or indirectly from requirement
+ */
+ public static boolean isRequirementStereotype(Stereotype stereotype) {
+ if( I_SysMLStereotype.REQUIREMENT_STEREOTYPE.equals(stereotype.getQualifiedName())){
+ return true;
+ }
+ for(org.eclipse.uml2.uml.Class superStereotype : stereotype.getSuperClasses()) {
+ if( superStereotype instanceof Stereotype){
+ if(isRequirementStereotype((Stereotype)superStereotype)){
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ /**
* @param elem
* UML model element
* @return the highest level Package of the element