Bug 573384 - [privacydesigner] refactor creation of the requirement
6.1.a
Change-Id: Id85d26f5b12b31de972ffabd9d6fdba8e95f4efa
Signed-off-by: ptessier <Patrick.Tessier@cea.fr>
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/IRequirementGenerator.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/IRequirementGenerator.java
index 3f6bb7f..0318ca6 100644
--- a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/IRequirementGenerator.java
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/IRequirementGenerator.java
@@ -29,10 +29,21 @@
* @param owner
* @return
*/
+ //article 5
public Command generateArticle51a(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
public Command generateArticle51b(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
public Command generateArticle51c(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
public Command generateArticle51d(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
public Command generateArticle51e(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
public Command generateArticle51f(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+
+ //article 6
+ public Command generateArticle61a(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+ public Command generateArticle61b(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+ public Command generateArticle61c(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+ public Command generateArticle61d(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+ public Command generateArticle61e(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+ public Command generateArticle61f(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+ public Command generateArticle64(TransactionalEditingDomain domain, org.eclipse.uml2.uml.Package owner);
+
}
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/RequirementGenerator.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/RequirementGenerator.java
index 759d08d..a5caa63 100644
--- a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/RequirementGenerator.java
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/papyrus/pdp4eng/req/gdprananalysis/api/RequirementGenerator.java
@@ -54,6 +54,41 @@
return generatorImpl.generateArticle51e(domain, owner);
}
+ @Override
+ public Command generateArticle61a(TransactionalEditingDomain domain, Package owner) {
+ return generatorImpl.generateArticle61a(domain, owner);
+ }
+
+ @Override
+ public Command generateArticle61b(TransactionalEditingDomain domain, Package owner) {
+ return generatorImpl.generateArticle61b(domain, owner);
+ }
+
+ @Override
+ public Command generateArticle61c(TransactionalEditingDomain domain, Package owner) {
+ return generatorImpl.generateArticle61c(domain, owner);
+ }
+
+ @Override
+ public Command generateArticle61d(TransactionalEditingDomain domain, Package owner) {
+ return generatorImpl.generateArticle61d(domain, owner);
+ }
+
+ @Override
+ public Command generateArticle61e(TransactionalEditingDomain domain, Package owner) {
+ return generatorImpl.generateArticle61e(domain, owner);
+ }
+
+ @Override
+ public Command generateArticle61f(TransactionalEditingDomain domain, Package owner) {
+ return generatorImpl.generateArticle61f(domain, owner);
+ }
+
+ @Override
+ public Command generateArticle64(TransactionalEditingDomain domain, Package owner) {
+ return generatorImpl.generateArticle64(domain, owner);
+ }
+
}
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementByConsentCreateCommand.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementByConsentCreateCommand.java
new file mode 100644
index 0000000..44b7246
--- /dev/null
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementByConsentCreateCommand.java
@@ -0,0 +1,173 @@
+/*****************************************************************************
+ * Copyright (c)2020 CEA LIST, Committer Name, and others.
+ *
+ * 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:
+ * CEA LIST - Initial API and implementation
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr
+ * Gabriel Pedroza (CEA LIST) gabriel.pedroza@cea.fr
+ *****************************************************************************/
+package org.eclipse.pdp4eng.req.gdprananalysis.internal;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+/**
+ * Copyright (c) 2019 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are the property of the CEA.
+ * Any use is subject to specific agreement with the CEA.
+ * Contributors:
+ *
+ * Patrick Tessier (CEA LIST) - Initial API and implementation
+ *
+ */
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.sysml14.requirements.Requirement;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.UMLFactory;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.util.UMLUtil;
+import org.eclipse.uml2.uml.util.UMLUtil.StereotypeApplicationHelper;
+
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.Consent;
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.DataSubject;
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.PersonalData;
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.Purpose;
+import org.eclipse.papyrus.pdp4eng.req.metareq.GDPRRequirements;
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.pdp4engReqGDPRPackage;
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.PersonalDataRequirement;
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.ProcessRequirement;
+
+public class LawfulRequirementByConsentCreateCommand extends BasicGDPRRequirementCreateCommand {
+
+ private DataSubject dataSubject;
+ public LawfulRequirementByConsentCreateCommand(TransactionalEditingDomain domain, Element owner, String id, String text,ProcessRequirement processRequirement, DataSubject dataSubject) {
+ super(domain, owner, id, text,processRequirement);
+ this.dataSubject= dataSubject;
+ }
+
+ @Override
+ protected void createRequirement(Package owner, String id, String text) {
+ StereotypeApplicationHelper stereotypeApplicationHelper = StereotypeApplicationHelper.getInstance(null);
+ GDPRRequirements gdprRrequiement= new GDPRRequirements();
+
+ Class lawfullReq =null;
+ //1. look for LawfulRequirement
+ lawfullReq = lookForLawFullRequirement(owner, lawfullReq);
+
+
+ //2. create the sub requirement
+ for (Iterator<Consent> iteratorConsent = dataSubject.getGivenConsent().iterator(); iteratorConsent.hasNext();) {
+ Consent aConsent = (Consent) iteratorConsent.next();
+ for (Iterator<Purpose> purposeIterator = aConsent.getPurpose().iterator(); purposeIterator.hasNext();) {
+ Purpose aPurpose = (Purpose) purposeIterator.next();
+ if( aPurpose.getProcesses().contains(this.processRequirement)) {
+ //1.1 create the class
+ Class requirementClass =UMLFactory.eINSTANCE.createClass();
+
+ //2.1 set the owner
+ setTheOwner(owner, lawfullReq, requirementClass);
+ //3. apply the seterotype
+ stereotypeApplicationHelper.applyStereotype(requirementClass,org.eclipse.papyrus.sysml14.requirements.RequirementsPackage.eINSTANCE.getRequirement(),null );
+ Requirement reqStereotype= (Requirement)UMLUtil.getStereotypeApplication(requirementClass, Requirement.class);
+ stereotypeApplicationHelper.applyStereotype(requirementClass,pdp4engReqGDPRPackage.eINSTANCE.getLawfulByConsent(),null );
+ org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent lawfulRbyConsent= (org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent)UMLUtil.getStereotypeApplication(requirementClass, org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent.class);
+ //4. set attribute of the applied stereotype
+ setAttributeAppliedStereotype(gdprRrequiement, aConsent, reqStereotype, lawfulRbyConsent);
+ //5.set the ID
+ setTheID(id, lawfullReq, requirementClass, reqStereotype);
+
+ }
+
+ }
+
+ }
+
+
+ }
+
+ private void setAttributeAppliedStereotype(GDPRRequirements gdprRrequiement, Consent aConsent, Requirement reqStereotype, org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent lawfulRbyConsent) {
+ lawfulRbyConsent.setConsent(aConsent);
+ lawfulRbyConsent.setDataSubject(dataSubject);
+ for (PersonalData personalData : processRequirement.getPersonaldata()) {
+ lawfulRbyConsent.getPersonalData().add((PersonalDataRequirement) personalData);
+ }
+ lawfulRbyConsent.setProcess(this.processRequirement);
+ reqStereotype.setText(""+gdprRrequiement.getDescriptionForLawfulByConsent(lawfulRbyConsent));
+ }
+
+ /**
+ * set the id of the requirement
+ * @param id
+ * @param lawfullReq
+ * @param requirementClass
+ * @param reqStereotype
+ */
+ private void setTheID(String id, Class lawfullReq, Class requirementClass, Requirement reqStereotype) {
+ if(lawfullReq==null) {
+ reqStereotype.setId(id);
+ requirementClass.setName(id);
+ }
+ else {
+ reqStereotype.setId(lawfullReq.getName()+"."+lawfullReq.getNestedClassifiers().size());
+ requirementClass.setName(lawfullReq.getName()+"."+lawfullReq.getNestedClassifiers().size());
+ }
+ }
+
+ /** tSet the owner the of the requirement
+ *
+ * @param owner
+ * @param lawfullReq
+ * @param requirementClass
+ */
+ private void setTheOwner(Package owner, Class lawfullReq, Class requirementClass) {
+ if(lawfullReq==null) {
+ owner.getPackagedElements().add(requirementClass);
+ }
+ else {
+ lawfullReq.getNestedClassifiers().add(requirementClass);
+
+ }
+ }
+
+ /**
+ * look for lawfull requirement that could be the owner
+ * @param owner
+ * @param lawfullReq
+ * @return
+ */
+ private Class lookForLawFullRequirement(Package owner, Class lawfullReq) {
+ TreeIterator<EObject> iterator= owner.eAllContents();
+ while (iterator.hasNext()) {
+ EObject eObject = (EObject) iterator.next();
+ //test if is is a class
+ if (eObject instanceof Class) {
+ Class aclass=(Class)eObject;
+ org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Lawful lawful= (org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Lawful)UMLUtil.getStereotypeApplication(aclass, org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Lawful.class);
+ // test if this is a lawfull req.
+ if( lawful!=null) {
+ //test attributes
+ if(lawful.getProcess().equals(this.processRequirement) && lawful.getDataSubject().equals(this.dataSubject)) {
+ lawfullReq=(Class)lawful.getBase_NamedElement();
+ return lawfullReq;
+ }
+ }
+ }
+
+ }
+ return lawfullReq;
+ }
+
+}
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementByContractCreateCommand.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementByContractCreateCommand.java
new file mode 100644
index 0000000..337965b
--- /dev/null
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementByContractCreateCommand.java
@@ -0,0 +1,168 @@
+/*****************************************************************************
+ * Copyright (c)2020 CEA LIST, Committer Name, and others.
+ *
+ * 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:
+ * CEA LIST - Initial API and implementation
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr
+ * Gabriel Pedroza (CEA LIST) gabriel.pedroza@cea.fr
+ *****************************************************************************/
+package org.eclipse.pdp4eng.req.gdprananalysis.internal;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+/**
+ * Copyright (c) 2019 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are the property of the CEA.
+ * Any use is subject to specific agreement with the CEA.
+ * Contributors:
+ *
+ * Patrick Tessier (CEA LIST) - Initial API and implementation
+ *
+ */
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.sysml14.requirements.Requirement;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.UMLFactory;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.util.UMLUtil;
+import org.eclipse.uml2.uml.util.UMLUtil.StereotypeApplicationHelper;
+
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.Consent;
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.Contract;
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.DataSubject;
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.PersonalData;
+import org.eclipse.papyrus.pdp4eng.common.profile.pdp4engCommonGDPR.Purpose;
+import org.eclipse.papyrus.pdp4eng.req.metareq.GDPRRequirements;
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.pdp4engReqGDPRPackage;
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.PersonalDataRequirement;
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.ProcessRequirement;
+
+public class LawfulRequirementByContractCreateCommand extends BasicGDPRRequirementCreateCommand {
+
+ private DataSubject dataSubject;
+ public LawfulRequirementByContractCreateCommand(TransactionalEditingDomain domain, Element owner, String id, String text,ProcessRequirement processRequirement, DataSubject dataSubject) {
+ super(domain, owner, id, text,processRequirement);
+ this.dataSubject= dataSubject;
+ }
+
+ @Override
+ protected void createRequirement(Package owner, String id, String text) {
+ StereotypeApplicationHelper stereotypeApplicationHelper = StereotypeApplicationHelper.getInstance(null);
+ GDPRRequirements gdprRrequiement= new GDPRRequirements();
+
+ Class lawfullReq =null;
+ //1. look for LawfulRequirement
+ lawfullReq = lookForLawFullRequirement(owner, lawfullReq);
+
+
+ //2. create the sub requirement
+ for (Iterator<Consent> iteratorConsent = dataSubject.getGivenConsent().iterator(); iteratorConsent.hasNext();) {
+ Contract aContract =this.processRequirement.getPerformAContract();
+ if( aContract!=null) {
+
+ //1.1 create the class
+ Class requirementClass =UMLFactory.eINSTANCE.createClass();
+
+ //2.1 set the owner
+ setTheOwner(owner, lawfullReq, requirementClass);
+ //3. apply the stereotype
+ stereotypeApplicationHelper.applyStereotype(requirementClass,org.eclipse.papyrus.sysml14.requirements.RequirementsPackage.eINSTANCE.getRequirement(),null );
+ Requirement reqStereotype= (Requirement)UMLUtil.getStereotypeApplication(requirementClass, Requirement.class);
+ stereotypeApplicationHelper.applyStereotype(requirementClass,pdp4engReqGDPRPackage.eINSTANCE.getLawfulByConsent(),null );
+ org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByContract lawfulRbyContract= (org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByContract)UMLUtil.getStereotypeApplication(requirementClass, org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByContract.class);
+ //4. set attribute of the applied stereotype
+ setAttributeAppliedStereotype(gdprRrequiement, aContract, reqStereotype, lawfulRbyContract);
+ //5.set the ID
+ setTheID(id, lawfullReq, requirementClass, reqStereotype);
+ }
+ }
+
+ }
+
+ private void setAttributeAppliedStereotype(GDPRRequirements gdprRrequiement, Contract aContract, Requirement reqStereotype, org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByContract lawfulByContract) {
+ lawfulByContract.setContract(aContract);
+ lawfulByContract.setDataSubject(dataSubject);
+ for (PersonalData personalData : processRequirement.getPersonaldata()) {
+ lawfulByContract.getPersonalData().add((PersonalDataRequirement) personalData);
+ }
+ lawfulByContract.setProcess(this.processRequirement);
+ reqStereotype.setText(""+gdprRrequiement.getDescriptionForLawfulByConsent(lawfulByContract));
+ }
+
+ /**
+ * set the id of the requirement
+ * @param id
+ * @param lawfullReq
+ * @param requirementClass
+ * @param reqStereotype
+ */
+ private void setTheID(String id, Class lawfullReq, Class requirementClass, Requirement reqStereotype) {
+ if(lawfullReq==null) {
+ reqStereotype.setId(id);
+ requirementClass.setName(id);
+ }
+ else {
+ reqStereotype.setId(lawfullReq.getName()+"."+lawfullReq.getNestedClassifiers().size());
+ requirementClass.setName(lawfullReq.getName()+"."+lawfullReq.getNestedClassifiers().size());
+ }
+ }
+
+ /** tSet the owner the of the requirement
+ *
+ * @param owner
+ * @param lawfullReq
+ * @param requirementClass
+ */
+ private void setTheOwner(Package owner, Class lawfullReq, Class requirementClass) {
+ if(lawfullReq==null) {
+ owner.getPackagedElements().add(requirementClass);
+ }
+ else {
+ lawfullReq.getNestedClassifiers().add(requirementClass);
+
+ }
+ }
+
+ /**
+ * look for lawfull requirement that could be the owner
+ * @param owner
+ * @param lawfullReq
+ * @return
+ */
+ private Class lookForLawFullRequirement(Package owner, Class lawfullReq) {
+ TreeIterator<EObject> iterator= owner.eAllContents();
+ while (iterator.hasNext()) {
+ EObject eObject = (EObject) iterator.next();
+ //test if is is a class
+ if (eObject instanceof Class) {
+ Class aclass=(Class)eObject;
+ org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Lawful lawful= (org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Lawful)UMLUtil.getStereotypeApplication(aclass, org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Lawful.class);
+ // test if this is a lawfull req.
+ if( lawful!=null) {
+ //test attributes
+ if(lawful.getProcess().equals(this.processRequirement) && lawful.getDataSubject().equals(this.dataSubject)) {
+ lawfullReq=(Class)lawful.getBase_NamedElement();
+ return lawfullReq;
+ }
+ }
+ }
+
+ }
+ return lawfullReq;
+ }
+
+}
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementCreateCommand.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementCreateCommand.java
index 46b0aec..d075ffa 100644
--- a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementCreateCommand.java
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/LawfulRequirementCreateCommand.java
@@ -73,33 +73,6 @@
Command traceCommand=PDP4EngTraceabilityFactory.addTraceabilityToLFR(domain, processRequirement, reqStereotypeAppli);
traceCommand.execute();
-
- for (Iterator<Consent> iterator = dataSubject.getGivenConsent().iterator(); iterator.hasNext();) {
- Consent aConsent = (Consent) iterator.next();
- for (Iterator<Purpose> purposeIterator = aConsent.getPurpose().iterator(); purposeIterator.hasNext();) {
- Purpose aPurpose = (Purpose) purposeIterator.next();
- if( aPurpose.getProcesses().contains(this.processRequirement)) {
- System.out.println("Create Lawfull BY CONSENT");
- Class requirementClass=(Class)requirement.createNestedClassifier(reqStereotypeAppli.getId()+".1", UMLPackage.eINSTANCE.getClass_());
- stereotypeApplicationHelper.applyStereotype(requirementClass,org.eclipse.papyrus.sysml14.requirements.RequirementsPackage.eINSTANCE.getRequirement(),null );
- Requirement reqStereotype= (Requirement)UMLUtil.getStereotypeApplication(requirementClass, Requirement.class);
- stereotypeApplicationHelper.applyStereotype(requirementClass,pdp4engReqGDPRPackage.eINSTANCE.getLawfulByConsent(),null );
- org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent lawfulRbyConsent= (org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent)UMLUtil.getStereotypeApplication(requirementClass, org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent.class);
- lawfulRbyConsent.setConsent(aConsent);
- lawfulRbyConsent.setDataSubject(dataSubject);
- lawfulRbyConsent.getPersonalData().addAll(lawfulReq.getPersonalData());
- lawfulRbyConsent.setProcess(this.processRequirement);
- reqStereotype.setText(""+gdprRrequiement.getDescriptionForLawfulByConsent(lawfulRbyConsent));
- reqStereotype.setId(reqStereotypeAppli.getId()+".1");
-
-
- }
-
- }
-
- }
-
-
}
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/RequirementTestGeneratorImpl.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/RequirementTestGeneratorImpl.java
index 0d805ad..4b9cb8c 100644
--- a/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/RequirementTestGeneratorImpl.java
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.gdprananalysis/src/org/eclipse/pdp4eng/req/gdprananalysis/internal/RequirementTestGeneratorImpl.java
@@ -1,18 +1,18 @@
/*****************************************************************************
-* Copyright (c)2020 CEA LIST, Committer Name, and others.
-*
-* 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:
-* CEA LIST - Initial API and implementation
-* Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr
-* Gabriel Pedroza (CEA LIST) gabriel.pedroza@cea.fr
-*****************************************************************************/
+ * Copyright (c)2020 CEA LIST, Committer Name, and others.
+ *
+ * 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:
+ * CEA LIST - Initial API and implementation
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr
+ * Gabriel Pedroza (CEA LIST) gabriel.pedroza@cea.fr
+ *****************************************************************************/
package org.eclipse.pdp4eng.req.gdprananalysis.internal;
import java.util.HashSet;
@@ -45,7 +45,7 @@
protected String prefix="GDPRReq-";
protected Package generatedRequirementPackage=null;
-
+
@Override
public Command generateArticle51a(TransactionalEditingDomain domain, Package owner) {
@@ -201,7 +201,7 @@
String id = prefix+index;
Command cmd=new SecuritySafetyRequirementCreateCommand(domain, lookForGeneratedrequirementPackage(owner), id, "",processRequirement, dataSubject);
compoundCommand.append(cmd);
-
+
}
@@ -216,7 +216,7 @@
public Command generateArticle51c(TransactionalEditingDomain domain, Package owner) {
// data minimisation
// Create 1 requirement DataMinimization per PR-PD *PersonalData.size()
-
+
CompoundCommand compoundCommand= new CompoundCommand();
Iterator<EObject> iterator=owner.eAllContents();
@@ -238,4 +238,94 @@
}
return compoundCommand;
}
+
+ @Override
+ public Command generateArticle61a(TransactionalEditingDomain domain, Package owner) {
+ CompoundCommand compoundCommand= new CompoundCommand();
+ Iterator<EObject> iterator=owner.eAllContents();
+
+ while (iterator.hasNext()) {
+ EObject eObject = (EObject) iterator.next();
+ if( eObject instanceof NamedElement) {
+ NamedElement namedElement= (NamedElement)eObject;
+ ProcessRequirement processRequirement= (ProcessRequirement)UMLUtil.getStereotypeApplication(namedElement, ProcessRequirement.class);
+ if (processRequirement!=null) {
+ HashSet<DataSubject> dataSubjectList=new HashSet<>();
+ for (PersonalData personalData : processRequirement.getPersonaldata()) {
+ dataSubjectList.addAll(personalData.getRelatedTo());
+ }
+ for (DataSubject dataSubject : dataSubjectList) {
+ index++;
+ String id = prefix+index;
+ Command cmd=new LawfulRequirementByConsentCreateCommand(domain, lookForGeneratedrequirementPackage(owner), id, "",processRequirement, dataSubject);
+ compoundCommand.append(cmd);
+ }
+
+
+ }
+ }
+
+ }
+ return compoundCommand;
+ }
+
+ @Override
+ public Command generateArticle61b(TransactionalEditingDomain domain, Package owner) {
+ CompoundCommand compoundCommand= new CompoundCommand();
+ Iterator<EObject> iterator=owner.eAllContents();
+
+ while (iterator.hasNext()) {
+ EObject eObject = (EObject) iterator.next();
+ if( eObject instanceof NamedElement) {
+ NamedElement namedElement= (NamedElement)eObject;
+ ProcessRequirement processRequirement= (ProcessRequirement)UMLUtil.getStereotypeApplication(namedElement, ProcessRequirement.class);
+ if (processRequirement!=null) {
+ HashSet<DataSubject> dataSubjectList=new HashSet<>();
+ for (PersonalData personalData : processRequirement.getPersonaldata()) {
+ dataSubjectList.addAll(personalData.getRelatedTo());
+ }
+ for (DataSubject dataSubject : dataSubjectList) {
+ index++;
+ String id = prefix+index;
+ Command cmd=new LawfulRequirementByContractCreateCommand(domain, lookForGeneratedrequirementPackage(owner), id, "",processRequirement, dataSubject);
+ compoundCommand.append(cmd);
+ }
+
+
+ }
+ }
+
+ }
+ return compoundCommand;
+ }
+
+ @Override
+ public Command generateArticle61c(TransactionalEditingDomain domain, Package owner) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Command generateArticle61d(TransactionalEditingDomain domain, Package owner) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Command generateArticle61e(TransactionalEditingDomain domain, Package owner) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Command generateArticle61f(TransactionalEditingDomain domain, Package owner) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Command generateArticle64(TransactionalEditingDomain domain, Package owner) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/src/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.xtend b/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/src/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.xtend
index 518866a..31b6453 100644
--- a/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/src/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.xtend
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/src/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.xtend
@@ -25,6 +25,7 @@
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.SecuritySafety
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.DataMinimisation
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByContract
class GDPRRequirements {
/**
@@ -35,11 +36,6 @@
}
- def getDescriptionForLawfulByConsent(LawfulByConsent lawfulByConsent){
- '''Processing "«lawfulByConsent.process.base_NamedElement.name»" shall be lawful if the data subject "«lawfulByConsent.dataSubject.base_NamedElement.name»" has given consent "«lawfulByConsent.consent.base_NamedElement.name»" to the processing of his or her personal data "«getPersonalDataFromProcess(lawfulByConsent)»" for one or more specific purposes «lawfulByConsent.process.contributedTo.base_NamedElement.name»'''
- }
-
-
/**
* get Description for fairly requirements from article5.1
*/
@@ -90,6 +86,20 @@
'''Personal Data «getPersonalDataFromProcess(securitySafety)» shall be processed in a manner that ensures appropriate security. '''
}
+ /**
+ * get Description for lawfullByConsent requirements from article6.1.a
+ */
+ def getDescriptionForLawfulByConsent(LawfulByConsent lawfulByConsent){
+ '''Processing "«lawfulByConsent.process.base_NamedElement.name»" shall be lawful if the data subject "«lawfulByConsent.dataSubject.base_NamedElement.name»" has given consent "«lawfulByConsent.consent.base_NamedElement.name»" to the processing of his or her personal data :"«getPersonalDataFromProcess(lawfulByConsent)»" for one or more specific purposes «lawfulByConsent.process.contributedTo.base_NamedElement.name»'''
+ }
+
+ /**
+ * get Description for lawfullByContract requirements from article6.1.b
+ */
+ def getDescriptionForLawfulByConsent(LawfulByContract lawfulByContract){
+ '''Processing "«lawfulByContract.process.base_NamedElement.name»" shall be lawful if processing "«lawfulByContract.process.base_NamedElement.name»" is necessary for the performance of the contract:"«lawfulByContract.contract.base_NamedElement»" to which the data subject:"«lawfulByContract.dataSubject.base_NamedElement.name»" is party or in order to take steps at the request of the data subject prior to entering into a contract'''
+ }
+
def getPersonalDataFromProcess(ProcessPrinciple ProcessPrinciple){
var result = ""
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/xtend-gen/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/xtend-gen/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.java
index 407d548..f1857f5 100644
--- a/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/xtend-gen/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.java
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.metareq/xtend-gen/org/eclipse/papyrus/pdp4eng/req/metareq/GDPRRequirements.java
@@ -21,12 +21,14 @@
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Fairly;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Lawful;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByConsent;
+import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.LawfulByContract;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.PersonalDataRequirement;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.ProcessPrinciple;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.PurposeLimitation;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.SecuritySafety;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.StorageLimitation;
import org.eclipse.papyrus.pdp4eng.req.profile.pdp4engReqGDPR.Transparency;
+import org.eclipse.uml2.uml.NamedElement;
import org.eclipse.xtend2.lib.StringConcatenation;
@SuppressWarnings("all")
@@ -52,26 +54,6 @@
return _builder;
}
- public CharSequence getDescriptionForLawfulByConsent(final LawfulByConsent lawfulByConsent) {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("Processing \"");
- String _name = lawfulByConsent.getProcess().getBase_NamedElement().getName();
- _builder.append(_name);
- _builder.append("\" shall be lawful if the data subject \"");
- String _name_1 = lawfulByConsent.getDataSubject().getBase_NamedElement().getName();
- _builder.append(_name_1);
- _builder.append("\" has given consent \"");
- String _name_2 = lawfulByConsent.getConsent().getBase_NamedElement().getName();
- _builder.append(_name_2);
- _builder.append("\" to the processing of his or her personal data \"");
- String _personalDataFromProcess = this.getPersonalDataFromProcess(lawfulByConsent);
- _builder.append(_personalDataFromProcess);
- _builder.append("\" for one or more specific purposes ");
- String _name_3 = lawfulByConsent.getProcess().getContributedTo().getBase_NamedElement().getName();
- _builder.append(_name_3);
- return _builder;
- }
-
/**
* get Description for fairly requirements from article5.1
*/
@@ -192,6 +174,50 @@
return _builder;
}
+ /**
+ * get Description for lawfullByConsent requirements from article6.1.a
+ */
+ public CharSequence getDescriptionForLawfulByConsent(final LawfulByConsent lawfulByConsent) {
+ StringConcatenation _builder = new StringConcatenation();
+ _builder.append("Processing \"");
+ String _name = lawfulByConsent.getProcess().getBase_NamedElement().getName();
+ _builder.append(_name);
+ _builder.append("\" shall be lawful if the data subject \"");
+ String _name_1 = lawfulByConsent.getDataSubject().getBase_NamedElement().getName();
+ _builder.append(_name_1);
+ _builder.append("\" has given consent \"");
+ String _name_2 = lawfulByConsent.getConsent().getBase_NamedElement().getName();
+ _builder.append(_name_2);
+ _builder.append("\" to the processing of his or her personal data :\"");
+ String _personalDataFromProcess = this.getPersonalDataFromProcess(lawfulByConsent);
+ _builder.append(_personalDataFromProcess);
+ _builder.append("\" for one or more specific purposes ");
+ String _name_3 = lawfulByConsent.getProcess().getContributedTo().getBase_NamedElement().getName();
+ _builder.append(_name_3);
+ return _builder;
+ }
+
+ /**
+ * get Description for lawfullByContract requirements from article6.1.b
+ */
+ public CharSequence getDescriptionForLawfulByConsent(final LawfulByContract lawfulByContract) {
+ StringConcatenation _builder = new StringConcatenation();
+ _builder.append("Processing \"");
+ String _name = lawfulByContract.getProcess().getBase_NamedElement().getName();
+ _builder.append(_name);
+ _builder.append("\" shall be lawful if processing \"");
+ String _name_1 = lawfulByContract.getProcess().getBase_NamedElement().getName();
+ _builder.append(_name_1);
+ _builder.append("\" is necessary for the performance of the contract:\"");
+ NamedElement _base_NamedElement = lawfulByContract.getContract().getBase_NamedElement();
+ _builder.append(_base_NamedElement);
+ _builder.append("\" to which the data subject:\"");
+ String _name_2 = lawfulByContract.getDataSubject().getBase_NamedElement().getName();
+ _builder.append(_name_2);
+ _builder.append("\" is party or in order to take steps at the request of the data subject prior to entering into a contract");
+ return _builder;
+ }
+
public String getPersonalDataFromProcess(final ProcessPrinciple ProcessPrinciple) {
String result = "";
EList<PersonalDataRequirement> _personalData = ProcessPrinciple.getPersonalData();
diff --git a/plugins/req/org.eclipse.papyrus.pdp4eng.req.ui/src/org/eclipse/papyrus/pdp4eng/req/ui/GenerateGDPRRequirementHandler.java b/plugins/req/org.eclipse.papyrus.pdp4eng.req.ui/src/org/eclipse/papyrus/pdp4eng/req/ui/GenerateGDPRRequirementHandler.java
index 68d6d2f..1d1bcca 100644
--- a/plugins/req/org.eclipse.papyrus.pdp4eng.req.ui/src/org/eclipse/papyrus/pdp4eng/req/ui/GenerateGDPRRequirementHandler.java
+++ b/plugins/req/org.eclipse.papyrus.pdp4eng.req.ui/src/org/eclipse/papyrus/pdp4eng/req/ui/GenerateGDPRRequirementHandler.java
@@ -42,6 +42,8 @@
transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51d(transactionalEditingDomain, (Package)selectedElement));
transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51e(transactionalEditingDomain, (Package)selectedElement));
transactionalEditingDomain.getCommandStack().execute(generator.generateArticle51f(transactionalEditingDomain, (Package)selectedElement));
+ transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61a(transactionalEditingDomain, (Package)selectedElement));
+ transactionalEditingDomain.getCommandStack().execute(generator.generateArticle61b(transactionalEditingDomain, (Package)selectedElement));
}
return null;