diff --git a/bundles/mdpa.gdpr.analysis.validation/src/mdpa/gdpr/analysis/validation/MemoryGDPRResourceProvider.java b/bundles/mdpa.gdpr.analysis.validation/src/mdpa/gdpr/analysis/validation/MemoryGDPRResourceProvider.java
index e35d447..7087051 100644
--- a/bundles/mdpa.gdpr.analysis.validation/src/mdpa/gdpr/analysis/validation/MemoryGDPRResourceProvider.java
+++ b/bundles/mdpa.gdpr.analysis.validation/src/mdpa/gdpr/analysis/validation/MemoryGDPRResourceProvider.java
@@ -14,7 +14,7 @@ public MemoryGDPRResourceProvider(GDPRModelBuilder modelBuilder) {
}
@Override
- public LegalAssessmentFacts getModel() {
+ public LegalAssessmentFacts getGDPRModel() {
return modelBuilder.getGdprModel();
}
diff --git a/bundles/mdpa.gdpr.analysis/META-INF/MANIFEST.MF b/bundles/mdpa.gdpr.analysis/META-INF/MANIFEST.MF
index 6f30d15..50cd97c 100644
--- a/bundles/mdpa.gdpr.analysis/META-INF/MANIFEST.MF
+++ b/bundles/mdpa.gdpr.analysis/META-INF/MANIFEST.MF
@@ -7,15 +7,17 @@ Export-Package: mdpa.gdpr.analysis,
mdpa.gdpr.analysis.core,
mdpa.gdpr.analysis.core.resource,
mdpa.gdpr.analysis.dfd
+Import-Package: org.antlr.runtime;version="3.2.0",
+ org.eclipse.xtext.parser.antlr
Require-Bundle: mdpa.gdpr.dfdconverter;bundle-version="1.0.0",
mdpa.gdpr.dfdconverter.tracemodel;bundle-version="0.1.0",
- org.dataflowanalysis.analysis;bundle-version="2.0.0",
+ org.dataflowanalysis.analysis,
mdpa.gdpr.metamodel.contextproperties;bundle-version="0.1.0",
- org.dataflowanalysis.analysis.dfd;bundle-version="2.0.0",
+ org.dataflowanalysis.analysis.dfd,
org.apache.log4j;bundle-version="1.2.24",
- org.eclipse.core.runtime;bundle-version="3.26.100",
- tools.mdsd.library.standalone.initialization;bundle-version="0.3.0",
- tools.mdsd.library.standalone.initialization.log4j;bundle-version="0.3.0",
- org.eclipse.emf.ecore.xmi;bundle-version="2.18.0"
+ org.eclipse.core.runtime,
+ tools.mdsd.library.standalone.initialization,
+ tools.mdsd.library.standalone.initialization.log4j,
+ org.eclipse.emf.ecore.xmi
Automatic-Module-Name: mdpa.gdpr.analysis
Bundle-RequiredExecutionEnvironment: JavaSE-17
diff --git a/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysis.java b/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysis.java
index 88b493b..06d325a 100644
--- a/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysis.java
+++ b/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysis.java
@@ -12,6 +12,14 @@
import tools.mdsd.library.standalone.initialization.StandaloneInitializationException;
import tools.mdsd.library.standalone.initialization.StandaloneInitializerBuilder;
+/**
+ * Extension of the {@link DataFlowConfidentialityAnalysis} for usage with the GDPR metamodel that is able to resolve
+ * uncertain context dependent attributes.
+ *
+ * Inputs to the analysis are a metamodel instance of the GDPR model and the context properties model
+ *
+ * Note: Do not create an instance of this class manually, use the {@link GDPRLegalAssessmentAnalysisBuilder} instead
+ */
public class GDPRLegalAssessmentAnalysis extends DataFlowConfidentialityAnalysis {
public static final String PLUGIN_PATH = "mdpa.gdpr.analysis";
@@ -21,6 +29,16 @@ public class GDPRLegalAssessmentAnalysis extends DataFlowConfidentialityAnalysis
private final Optional> modelProjectActivator;
private final String modelProjectName;
+ /**
+ * Create a new {@link GDPRLegalAssessmentAnalysis} with the given resource provider and optionally a modelling project
+ * with a plugin activator
+ *
+ * Note: Do not create an instance of this class manually, use the {@link GDPRLegalAssessmentAnalysisBuilder} instead
+ * @param resourceProvider {@link GDPRResourceProvider} providing a metamodel instance of the GDPR and Context Property
+ * model
+ * @param modelProjectActivator Optional model project activator
+ * @param modelProjectName Optional model project name
+ */
public GDPRLegalAssessmentAnalysis(GDPRResourceProvider resourceProvider, Optional> modelProjectActivator,
String modelProjectName) {
this.resourceProvider = resourceProvider;
diff --git a/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysisBuilder.java b/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysisBuilder.java
index a1020ff..baae828 100644
--- a/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysisBuilder.java
+++ b/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/GDPRLegalAssessmentAnalysisBuilder.java
@@ -8,6 +8,11 @@
import org.dataflowanalysis.analysis.utils.ResourceUtils;
import org.eclipse.core.runtime.Plugin;
+/**
+ * Extension of the {@link DataFlowAnalysisBuilder} responsible for creating a valid {@link GDPRLegalAssessmentAnalysis}
+ * from the following: - A valid path to a .gdpr metamodel instance - A valid path to a .contextproperties metamodel
+ * instance
+ */
public class GDPRLegalAssessmentAnalysisBuilder extends DataFlowAnalysisBuilder {
private final Logger logger = Logger.getLogger(GDPRLegalAssessmentAnalysisBuilder.class);
diff --git a/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/UncertaintyUtils.java b/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/UncertaintyUtils.java
index d1bee40..61ebeb9 100644
--- a/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/UncertaintyUtils.java
+++ b/bundles/mdpa.gdpr.analysis/src/mdpa/gdpr/analysis/UncertaintyUtils.java
@@ -2,15 +2,17 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import mdpa.gdpr.analysis.core.ContextDependentAttributeScenario;
import mdpa.gdpr.analysis.core.ContextDependentAttributeSource;
import mdpa.gdpr.analysis.dfd.DFDGDPRVertex;
import mdpa.gdpr.metamodel.GDPR.Data;
import mdpa.gdpr.metamodel.GDPR.NaturalPerson;
import mdpa.gdpr.metamodel.GDPR.PersonalData;
-import mdpa.gdpr.metamodel.contextproperties.ContextDefinition;
-import mdpa.gdpr.metamodel.contextproperties.GDPRContextElement;
-import mdpa.gdpr.metamodel.contextproperties.PropertyValue;
+import mdpa.gdpr.metamodel.contextproperties.Expression;
+import mdpa.gdpr.metamodel.contextproperties.LAFScopeElement;
+import mdpa.gdpr.metamodel.contextproperties.Scope;
+
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.dataflowanalysis.dfd.datadictionary.Assignment;
@@ -20,81 +22,46 @@
import org.dataflowanalysis.dfd.datadictionary.LabelType;
import org.dataflowanalysis.dfd.datadictionary.Pin;
import org.dataflowanalysis.dfd.datadictionary.datadictionaryFactory;
+import org.dataflowanalysis.dfd.dataflowdiagram.Node;
+import org.dataflowanalysis.dfd.dataflowdiagram.Process;
import org.eclipse.emf.ecore.util.EcoreUtil;
public class UncertaintyUtils {
private static final Logger logger = Logger.getLogger(UncertaintyUtils.class);
- public static Behavior createBehavior(DFDGDPRVertex impactedElement, DataDictionary dd, ContextDependentAttributeSource source,
+ public static Behavior createBehavior(Node element, DFDGDPRVertex impactedElement, DataDictionary dd, ContextDependentAttributeSource source,
ContextDependentAttributeScenario scenario, Data targetedData) {
logger.setLevel(Level.INFO);
- if (impactedElement.getReferencedElement()
- .getBehavior()
+ if (element.getBehavior()
.getOutPin()
.stream()
.noneMatch(it -> it.getEntityName()
.equals(targetedData.getEntityName()))) {
logger.info("Scenario" + scenario.getName() + " does not impact " + impactedElement.getName());
- return impactedElement.getReferencedElement()
+ return element
.getBehavior();
}
- logger.debug("Impacting element " + impactedElement.getReferencedElement()
+ logger.debug("Impacting element " + element
.getEntityName());
- Behavior behaviour = datadictionaryFactory.eINSTANCE.createBehavior();
- dd.getBehavior()
- .add(behaviour);
+ Behavior behaviour = element.getBehavior();
- if (impactedElement.getReferencedElement()
- .getBehavior()
+ if (behaviour
.getOutPin()
.isEmpty()) {
return behaviour;
}
- behaviour.getInPin()
- .addAll(impactedElement.getReferencedElement()
- .getBehavior()
- .getInPin()
- .stream()
- .map(it -> EcoreUtil.copy(it))
- .toList());
- behaviour.getOutPin()
- .addAll(impactedElement.getReferencedElement()
- .getBehavior()
- .getOutPin()
- .stream()
- .map(it -> EcoreUtil.copy(it))
- .toList());
-
- LabelType type = dd.getLabelTypes()
- .stream()
- .filter(it -> it.getEntityName()
- .equals(source.getPropertyType()
- .getEntityName()))
- .findAny()
- .orElseThrow();
- List