Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.integration/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/AccessModelInterpreter.java27
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/OseeDslToAccessDataOperation.java63
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/OseeAccessModelInterpreter.java167
-rw-r--r--plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/AccessDataQuery.java367
-rw-r--r--plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/PermissionStatus.java31
-rw-r--r--plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/AccessContextId.java17
8 files changed, 479 insertions, 195 deletions
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.integration/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.framework.core.dsl.integration/META-INF/MANIFEST.MF
index edc6fe674be..076738d3e5d 100644
--- a/plugins/org.eclipse.osee.framework.core.dsl.integration/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.framework.core.dsl.integration/META-INF/MANIFEST.MF
@@ -16,6 +16,7 @@ Import-Package: org.eclipse.core.runtime,
org.eclipse.osee.framework.core.exception,
org.eclipse.osee.framework.core.message,
org.eclipse.osee.framework.core.model,
+ org.eclipse.osee.framework.core.model.access,
org.eclipse.osee.framework.core.model.cache,
org.eclipse.osee.framework.core.model.type,
org.eclipse.osee.framework.core.operation,
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/AccessModelInterpreter.java b/plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/AccessModelInterpreter.java
new file mode 100644
index 00000000000..2103bd30740
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/AccessModelInterpreter.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.integration;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.core.data.AccessContextId;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.AccessContext;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.model.access.AccessDetail;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public interface AccessModelInterpreter {
+
+ AccessContext getContext(Collection<AccessContext> contexts, AccessContextId contextId) throws OseeCoreException;
+
+ void computeAccessDetails(AccessContext context, Object objectToCheck, Collection<AccessDetail<?>> details) throws OseeCoreException;
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/OseeDslToAccessDataOperation.java b/plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/OseeDslToAccessDataOperation.java
new file mode 100644
index 00000000000..7c585ba6a2b
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.integration/src/org/eclipse/osee/framework/core/dsl/integration/OseeDslToAccessDataOperation.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.integration;
+
+import java.util.Collection;
+import java.util.HashSet;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.core.data.AccessContextId;
+import org.eclipse.osee.framework.core.dsl.integration.internal.Activator;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.AccessContext;
+import org.eclipse.osee.framework.core.model.access.AccessData;
+import org.eclipse.osee.framework.core.model.access.AccessDetail;
+import org.eclipse.osee.framework.core.operation.AbstractOperation;
+import org.eclipse.osee.framework.core.util.Conditions;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeDslToAccessDataOperation extends AbstractOperation {
+
+ private final AccessModelInterpreter interpreter;
+ private final AccessData accessData;
+ private final AccessContextId contextId;
+ private final Collection<AccessContext> accessContexts;
+ private final Collection<?> objectsToCheck;
+
+ public OseeDslToAccessDataOperation(AccessModelInterpreter interpreter, AccessData accessData, AccessContextId contextId, Collection<AccessContext> accessContexts, Collection<?> objectsToCheck) {
+ super("Access Dsl To AccessData", Activator.PLUGIN_ID);
+ this.accessData = accessData;
+ this.contextId = contextId;
+ this.accessContexts = accessContexts;
+ this.objectsToCheck = objectsToCheck;
+ this.interpreter = interpreter;
+ }
+
+ @Override
+ protected void doWork(IProgressMonitor monitor) throws Exception {
+ AccessContext context = interpreter.getContext(accessContexts, contextId);
+ Conditions.checkNotNull(context, "context", "Unable to find accessContext for [%s]", contextId);
+
+ if (objectsToCheck.isEmpty()) {
+ monitor.worked(getTotalWorkUnits());
+ } else {
+ double stepAmount = 1.0 / objectsToCheck.size();
+ int step = calculateWork(stepAmount);
+ for (Object objectToCheck : objectsToCheck) {
+ checkForCancelledStatus(monitor);
+ Collection<AccessDetail<?>> accessDetail = new HashSet<AccessDetail<?>>();
+ interpreter.computeAccessDetails(context, objectToCheck, accessDetail);
+ accessData.addAll(objectToCheck, accessDetail);
+ monitor.worked(step);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF
index 22927ce1d6d..a06aad22688 100644
--- a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/META-INF/MANIFEST.MF
@@ -22,6 +22,7 @@ Import-Package: org.eclipse.compare,
org.eclipse.osee.framework.core.exception,
org.eclipse.osee.framework.core.message,
org.eclipse.osee.framework.core.model,
+ org.eclipse.osee.framework.core.model.access,
org.eclipse.osee.framework.core.model.cache,
org.eclipse.osee.framework.core.operation,
org.eclipse.osee.framework.core.services,
diff --git a/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/OseeAccessModelInterpreter.java b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/OseeAccessModelInterpreter.java
new file mode 100644
index 00000000000..423c848bc84
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core.dsl.ui.integration/src/org/eclipse/osee/framework/core/dsl/ui/integration/internal/OseeAccessModelInterpreter.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.dsl.ui.integration.internal;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.core.data.AccessContextId;
+import org.eclipse.osee.framework.core.data.IArtifactType;
+import org.eclipse.osee.framework.core.data.IAttributeType;
+import org.eclipse.osee.framework.core.data.Identity;
+import org.eclipse.osee.framework.core.dsl.integration.AccessModelInterpreter;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.AccessContext;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.AccessPermissionEnum;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.ArtifactInstanceRestriction;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.ArtifactTypeRestriction;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.AttributeTypeOfArtifactTypeRestriction;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.AttributeTypeRestriction;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.HierarchyRestriction;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.ObjectRestriction;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.PermissionRule;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.RelationTypeRestriction;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.XArtifactRef;
+import org.eclipse.osee.framework.core.dsl.oseeDsl.util.OseeDslSwitch;
+import org.eclipse.osee.framework.core.enums.PermissionEnum;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.model.access.AccessDetail;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class OseeAccessModelInterpreter implements AccessModelInterpreter {
+
+ public static interface ObjectDataAccessor {
+
+ Collection<Identity> getHierarchy(Object object);
+
+ Collection<IAttributeType> getAttributeTypes(Object object);
+
+ Collection<IArtifactType> getArtifactSuperTypes(Object object);
+ }
+
+ public OseeAccessModelInterpreter() {
+ }
+
+ @Override
+ public AccessContext getContext(Collection<AccessContext> contexts, AccessContextId contextId) {
+ AccessContext toReturn = null;
+ for (AccessContext accessContext : contexts) {
+ if (contextId.equals(accessContext.getTypeGuid())) {
+ toReturn = accessContext;
+ }
+ }
+ return toReturn;
+ }
+
+ @Override
+ public void computeAccessDetails(AccessContext context, Object objectToCheck, Collection<AccessDetail<?>> details) {
+ computeAccess(context, objectToCheck, details);
+ for (AccessContext superContext : context.getSuperAccessContexts()) {
+ computeAccess(superContext, objectToCheck, details);
+ }
+ }
+
+ private void computeAccess(AccessContext context, Object objectToCheck, Collection<AccessDetail<?>> details) {
+ context.getAccessRules();
+
+ Collection<HierarchyRestriction> restrictions = context.getHierarchyRestrictions();
+ for (HierarchyRestriction restriction : restrictions) {
+ XArtifactRef artifactRef = restriction.getArtifact();
+ // Apply childrenOf Rule;
+ boolean isApplicable = false;
+ if (isApplicable) {
+ restriction.getAccessRules();
+ }
+ }
+
+ }
+
+ private AccessPermissionEnum getLeastRestrictive(AccessPermissionEnum permission1, AccessPermissionEnum permission2) {
+ if (permission1 == AccessPermissionEnum.ALLOW) {
+
+ }
+ return permission1;
+ }
+
+ public static void checkRuleConflict(Collection<PermissionRule> rules) throws OseeCoreException {
+ ObjectRestrictionSwitch checker = new ObjectRestrictionSwitch();
+ for (PermissionRule rule : rules) {
+ ObjectRestriction restriction = rule.getObjectRestriction();
+ checker.doSwitch(restriction);
+ }
+ if (checker.hasConflicts()) {
+
+ }
+ }
+
+ public static PermissionEnum toCorePermission(AccessPermissionEnum modelPermission) {
+ PermissionEnum toReturn = PermissionEnum.READ;
+ if (modelPermission == AccessPermissionEnum.ALLOW) {
+ toReturn = PermissionEnum.WRITE;
+ }
+ return toReturn;
+ }
+
+ private static final class ObjectRestrictionSwitch extends OseeDslSwitch<Object> {
+ Collection<Identity> artifactInstances;
+
+ // Collection<Identity>
+ @Override
+ public Object caseArtifactInstanceRestriction(ArtifactInstanceRestriction object) {
+ return object;
+ }
+
+ @Override
+ public Object caseArtifactTypeRestriction(ArtifactTypeRestriction object) {
+ return object;
+ }
+
+ @Override
+ public Object caseRelationTypeRestriction(RelationTypeRestriction object) {
+ return object;
+ }
+
+ @Override
+ public Object caseAttributeTypeRestriction(AttributeTypeRestriction object) {
+ return object;
+ }
+
+ @Override
+ public Object caseAttributeTypeOfArtifactTypeRestriction(AttributeTypeOfArtifactTypeRestriction object) {
+ object.getArtifactType();
+ object.getAttributeType();
+
+ return object;
+ }
+
+ public boolean hasConflicts() {
+ return false;
+ }
+ }
+
+ //
+ // RequirementFolder1 art
+ //
+ // art.getParent...
+ // if not matches SoftwareRequirements --
+ // PermissionEnum - Full --- Store what?
+ // else
+ // if ( art.getArtifactType isOfType("SoftwareRequirements")){
+ // data.add(art, new Access<IAttributeType>(QualificationMethod), DENY);
+ // } else {
+ //
+ // }
+ // endif
+ //
+ // Branch allows Type
+ // deny contextId "lba.requirementer" edit
+ // attributeType "Qualification Method" of artifactType "Software Requirement"
+ // under "Software Requirements"
+}
diff --git a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/AccessDataQuery.java b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/AccessDataQuery.java
index 2394ea9ba4a..1b7ac01054a 100644
--- a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/AccessDataQuery.java
+++ b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/AccessDataQuery.java
@@ -21,197 +21,178 @@ import org.eclipse.osee.framework.jdk.core.util.GUID;
public class AccessDataQuery {
- private final AccessData accessData;
-
- public AccessDataQuery(AccessData accessData) {
- this.accessData = accessData;
- }
-
- public void branchMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, PermissionStatus permissionStatus) throws OseeCoreException {
- Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
- checkAccess(branchAccessDetails, branchToMatch, permissionToMatch, permissionStatus);
- }
-
- public void branchArtifactTypeMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, IArtifactType artifactType, PermissionStatus permissionStatus) throws OseeCoreException {
- branchMatches(permissionToMatch, branchToMatch, permissionStatus);
- if (permissionStatus.matches()) {
- Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
- checkAccess(branchAccessDetails, artifactType, permissionToMatch, permissionStatus);
- }
- }
-
- public void branchAttributeTypeMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, IAttributeType attributeType, PermissionStatus permissionStatus) throws OseeCoreException {
- branchMatches(permissionToMatch, branchToMatch, permissionStatus);
- if (permissionStatus.matches()) {
- Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
- checkAccess(branchAccessDetails, attributeType, permissionToMatch, permissionStatus);
- }
- }
-
- public void branchRelationTypeMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, IRelationType relationType, PermissionStatus permissionStatus) throws OseeCoreException {
- branchMatches(permissionToMatch, branchToMatch, permissionStatus);
- if (permissionStatus.matches()) {
- Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
- checkAccess(branchAccessDetails, relationType, permissionToMatch, permissionStatus);
- }
- }
-
- public void artifactTypeMatches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, PermissionStatus permissionStatus) throws OseeCoreException {
- IArtifactType typeToMatch = artifact.getArtifactType();
- IOseeBranch branchToMatch = artifact.getBranch();
- branchArtifactTypeMatches(permissionToMatch, branchToMatch, typeToMatch, permissionStatus);
- if (permissionStatus.matches()) {
- Collection<AccessDetail<?>> artifactAccessDetails = accessData.getAccess(artifact);
- checkAccess(artifactAccessDetails, typeToMatch, permissionToMatch, permissionStatus);
- }
- }
-
- public void artifactMatches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, PermissionStatus permissionStatus) throws OseeCoreException {
- artifactTypeMatches(permissionToMatch, artifact, permissionStatus);
- if (permissionStatus.matches()) {
- Collection<AccessDetail<?>> artifactAccessDetails = accessData.getAccess(artifact);
- checkAccess(artifactAccessDetails, artifact, permissionToMatch, permissionStatus);
- }
- }
-
- public void attributeTypeMatches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, IAttributeType attributeType, PermissionStatus permissionStatus) throws OseeCoreException {
- artifactMatches(permissionToMatch, artifact, permissionStatus);
- if (permissionStatus.matches()) {
-
- Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(artifact.getBranch());
- checkAccess(branchAccessDetails, attributeType, permissionToMatch, permissionStatus);
-
- if (permissionStatus.matches()) {
- Collection<AccessDetail<?>> artifactAccessDetails = accessData.getAccess(artifact);
- checkAccess(artifactAccessDetails, attributeType, permissionToMatch, permissionStatus);
- }
- }
- }
-
- public void relationTypeMatches(PermissionEnum permissionToMatch) throws OseeCoreException {
- }
-
- PermissionStatus permissionStatus = new PermissionStatus();
-
- public boolean matchesAll(Collection<IBasicArtifact<?>> toCheck, PermissionEnum permissionToMatch) throws OseeCoreException {
- for (IBasicArtifact<?> artifact : toCheck) {
- artifactMatches(permissionToMatch, artifact, permissionStatus);
-
- if (!permissionStatus.matches()) {
- break;
- }
- }
- return permissionStatus.matches();
- }
-
- private <T> void checkAccess(Collection<AccessDetail<?>> accessList, T itemToMatch, PermissionEnum permissionToMatch, PermissionStatus status) {
- for (AccessDetail<?> data : accessList) {
- Object object = data.getAccessObject();
- if (itemToMatch.equals(object)) {
- boolean matches = data.getPermission().matches(permissionToMatch);
- if (!matches) {
- status.setReason(data.getReason());
- }
- status.setMatches(matches);
- break;
- }
- }
- }
-
- // public PermissionStatus matches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, IOseeBranch branchToMatch, IArtifactType artTypeToMatch, IAttributeType attrTypeToMatch, IRelationType relationTypeToMatch) throws OseeCoreException {
- // // Filter 1 - Branch - input Branch
- // // input branch
- // // output matched
- // PermissionStatus permissionStatus = new PermissionStatus();
- // Collection<AccessDetail<?>> branchAccessDetails = getAccess(branchToMatch);
- // checkAccess(branchAccessDetails, branchToMatch, permissionToMatch, permissionStatus);
- //
- // // Filter 5 - RelationType
- // // input artifact, relationType
- // // output matched
- //
- // Collection<AccessDetail<?>> artifactAccessDetails = getAccess(artifact);
- // // checkAccess(accessDetails, relationTypeToMatch, permissionToMatch, matchResults);
- //
- // if (permissionStatus.matches()) {
- // if (permissionStatus.matches()) {
- // // Filter 2 - Artifact Type
- // // input artifact, artifactType
- // // output matched
- // checkAccess(artifactAccessDetails, artTypeToMatch, permissionToMatch, permissionStatus);
- //
- // if (permissionStatus.matches()) {
- // // Filter 3 - Artifact
- // // input artifact
- // // output matched
- // checkAccess(artifactAccessDetails, artifact, permissionToMatch, permissionStatus);
- //
- // if (permissionStatus.matches()) {
- // // Filter 4 - Attribute Type
- // // input artifact, attributeType
- // // output matched
- // checkAccess(artifactAccessDetails, attrTypeToMatch, permissionToMatch, permissionStatus);
- // }
- // }
- // }
- // }
- // return permissionStatus;
- // }
-
- public static void main(String[] args) throws OseeCoreException {
- IOseeBranch branchToCheck = CoreBranches.SYSTEM_ROOT;
- IArtifactType artifactType = CoreArtifactTypes.AbstractSoftwareRequirement;
- IAttributeType attributeType = CoreAttributeTypes.PARAGRAPH_NUMBER;
- IAttributeType wordAttributeType = CoreAttributeTypes.WORD_TEMPLATE_CONTENT;
-
- IBasicArtifact<?> artifactToCheck = new DefaultBasicArtifact(12, GUID.create(), "Hello");
-
- AccessData data = new AccessData();
- data.add(branchToCheck, new AccessDetail<IOseeBranch>(branchToCheck, PermissionEnum.WRITE));
-
- // data.add(artifactToCheck, new Access<IBasicArtifact<?>>(artifactToCheck, PermissionEnum.READ));
- data.add(artifactToCheck, new AccessDetail<IBasicArtifact<?>>(artifactToCheck, PermissionEnum.WRITE));
-
- data.add(artifactToCheck, new AccessDetail<IArtifactType>(artifactType, PermissionEnum.WRITE));
-
- data.add(artifactToCheck, new AccessDetail<IAttributeType>(attributeType, PermissionEnum.WRITE));
- data.add(artifactToCheck, new AccessDetail<IAttributeType>(wordAttributeType, PermissionEnum.READ));
-
- // System.out.println(data.matches(PermissionEnum.WRITE, artifactToCheck, branchToCheck, artifactType,
- // attributeType, null));
- // System.out.println(data.matches(PermissionEnum.WRITE, artifactToCheck, branchToCheck, artifactType,
- // wordAttributeType, null));
- System.out.println(data);
- }
-
- //
- // RequirementFolder1 art
- //
- // art.getParent...
- // if not matches SoftwareRequirements --
- // PermissionEnum - Full --- Store what?
- // else
- // if ( art.getArtifactType isOfType("SoftwareRequirements")){
- // data.add(art, new Access<IAttributeType>(QualificationMethod), DENY);
- // } else {
- //
- // }
- // endif
- //
- // Branch allows Type
- // deny contextId "lba.requirementer" edit
- // attributeType "Qualification Method" of artifactType "Software Requirement"
- // under "Software Requirements"
-
- // Branch
- // IBasicArtifact<?>
- // ArtifactType
- // AttributeType(s)
- // RelationType(s)
-
- // Branch
- // Artifact, ArtifactType
- // AttributeType
- // Branch, ArtifactType
- // AttributeType ?
+ private final AccessData accessData;
+
+ public AccessDataQuery(AccessData accessData) {
+ this.accessData = accessData;
+ }
+
+ public void branchMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, PermissionStatus permissionStatus) throws OseeCoreException {
+ Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
+ checkAccess(branchAccessDetails, branchToMatch, permissionToMatch, permissionStatus);
+ }
+
+ public void branchArtifactTypeMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, IArtifactType artifactType, PermissionStatus permissionStatus) throws OseeCoreException {
+ branchMatches(permissionToMatch, branchToMatch, permissionStatus);
+ if (permissionStatus.matches()) {
+ Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
+ checkAccess(branchAccessDetails, artifactType, permissionToMatch, permissionStatus);
+ }
+ }
+
+ public void branchAttributeTypeMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, IAttributeType attributeType, PermissionStatus permissionStatus) throws OseeCoreException {
+ branchMatches(permissionToMatch, branchToMatch, permissionStatus);
+ if (permissionStatus.matches()) {
+ Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
+ checkAccess(branchAccessDetails, attributeType, permissionToMatch, permissionStatus);
+ }
+ }
+
+ public void branchRelationTypeMatches(PermissionEnum permissionToMatch, IOseeBranch branchToMatch, IRelationType relationType, PermissionStatus permissionStatus) throws OseeCoreException {
+ branchMatches(permissionToMatch, branchToMatch, permissionStatus);
+ if (permissionStatus.matches()) {
+ Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(branchToMatch);
+ checkAccess(branchAccessDetails, relationType, permissionToMatch, permissionStatus);
+ }
+ }
+
+ public void artifactTypeMatches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, PermissionStatus permissionStatus) throws OseeCoreException {
+ IArtifactType typeToMatch = artifact.getArtifactType();
+ IOseeBranch branchToMatch = artifact.getBranch();
+ branchArtifactTypeMatches(permissionToMatch, branchToMatch, typeToMatch, permissionStatus);
+ if (permissionStatus.matches()) {
+ Collection<AccessDetail<?>> artifactAccessDetails = accessData.getAccess(artifact);
+ checkAccess(artifactAccessDetails, typeToMatch, permissionToMatch, permissionStatus);
+ }
+ }
+
+ public void artifactMatches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, PermissionStatus permissionStatus) throws OseeCoreException {
+ artifactTypeMatches(permissionToMatch, artifact, permissionStatus);
+ if (permissionStatus.matches()) {
+ Collection<AccessDetail<?>> artifactAccessDetails = accessData.getAccess(artifact);
+ checkAccess(artifactAccessDetails, artifact, permissionToMatch, permissionStatus);
+ }
+ }
+
+ public void attributeTypeMatches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, IAttributeType attributeType, PermissionStatus permissionStatus) throws OseeCoreException {
+ artifactMatches(permissionToMatch, artifact, permissionStatus);
+ if (permissionStatus.matches()) {
+
+ Collection<AccessDetail<?>> branchAccessDetails = accessData.getAccess(artifact.getBranch());
+ checkAccess(branchAccessDetails, attributeType, permissionToMatch, permissionStatus);
+
+ if (permissionStatus.matches()) {
+ Collection<AccessDetail<?>> artifactAccessDetails = accessData.getAccess(artifact);
+ checkAccess(artifactAccessDetails, attributeType, permissionToMatch, permissionStatus);
+ }
+ }
+ }
+
+ public void relationTypeMatches(PermissionEnum permissionToMatch) throws OseeCoreException {
+ }
+
+ PermissionStatus permissionStatus = new PermissionStatus();
+
+ public boolean matchesAll(Collection<IBasicArtifact<?>> toCheck, PermissionEnum permissionToMatch) throws OseeCoreException {
+ for (IBasicArtifact<?> artifact : toCheck) {
+ artifactMatches(permissionToMatch, artifact, permissionStatus);
+
+ if (!permissionStatus.matches()) {
+ break;
+ }
+ }
+ return permissionStatus.matches();
+ }
+
+ private <T> void checkAccess(Collection<AccessDetail<?>> accessList, T itemToMatch, PermissionEnum permissionToMatch, PermissionStatus status) {
+ for (AccessDetail<?> data : accessList) {
+ Object object = data.getAccessObject();
+ if (itemToMatch.equals(object)) {
+ boolean matches = data.getPermission().matches(permissionToMatch);
+ if (!matches) {
+ status.setReason(data.getReason());
+ }
+ status.setMatches(matches);
+ break;
+ }
+ }
+ }
+
+ // public PermissionStatus matches(PermissionEnum permissionToMatch, IBasicArtifact<?> artifact, IOseeBranch branchToMatch, IArtifactType artTypeToMatch, IAttributeType attrTypeToMatch, IRelationType relationTypeToMatch) throws OseeCoreException {
+ // // Filter 1 - Branch - input Branch
+ // // input branch
+ // // output matched
+ // PermissionStatus permissionStatus = new PermissionStatus();
+ // Collection<AccessDetail<?>> branchAccessDetails = getAccess(branchToMatch);
+ // checkAccess(branchAccessDetails, branchToMatch, permissionToMatch, permissionStatus);
+ //
+ // // Filter 5 - RelationType
+ // // input artifact, relationType
+ // // output matched
+ //
+ // Collection<AccessDetail<?>> artifactAccessDetails = getAccess(artifact);
+ // // checkAccess(accessDetails, relationTypeToMatch, permissionToMatch, matchResults);
+ //
+ // if (permissionStatus.matches()) {
+ // if (permissionStatus.matches()) {
+ // // Filter 2 - Artifact Type
+ // // input artifact, artifactType
+ // // output matched
+ // checkAccess(artifactAccessDetails, artTypeToMatch, permissionToMatch, permissionStatus);
+ //
+ // if (permissionStatus.matches()) {
+ // // Filter 3 - Artifact
+ // // input artifact
+ // // output matched
+ // checkAccess(artifactAccessDetails, artifact, permissionToMatch, permissionStatus);
+ //
+ // if (permissionStatus.matches()) {
+ // // Filter 4 - Attribute Type
+ // // input artifact, attributeType
+ // // output matched
+ // checkAccess(artifactAccessDetails, attrTypeToMatch, permissionToMatch, permissionStatus);
+ // }
+ // }
+ // }
+ // }
+ // return permissionStatus;
+ // }
+
+ public static void main(String[] args) throws OseeCoreException {
+ IOseeBranch branchToCheck = CoreBranches.SYSTEM_ROOT;
+ IArtifactType artifactType = CoreArtifactTypes.AbstractSoftwareRequirement;
+ IAttributeType attributeType = CoreAttributeTypes.PARAGRAPH_NUMBER;
+ IAttributeType wordAttributeType = CoreAttributeTypes.WORD_TEMPLATE_CONTENT;
+
+ IBasicArtifact<?> artifactToCheck = new DefaultBasicArtifact(12, GUID.create(), "Hello");
+
+ AccessData data = new AccessData();
+ data.add(branchToCheck, new AccessDetail<IOseeBranch>(branchToCheck, PermissionEnum.WRITE));
+
+ // data.add(artifactToCheck, new Access<IBasicArtifact<?>>(artifactToCheck, PermissionEnum.READ));
+ data.add(artifactToCheck, new AccessDetail<IBasicArtifact<?>>(artifactToCheck, PermissionEnum.WRITE));
+
+ data.add(artifactToCheck, new AccessDetail<IArtifactType>(artifactType, PermissionEnum.WRITE));
+
+ data.add(artifactToCheck, new AccessDetail<IAttributeType>(attributeType, PermissionEnum.WRITE));
+ data.add(artifactToCheck, new AccessDetail<IAttributeType>(wordAttributeType, PermissionEnum.READ));
+
+ // System.out.println(data.matches(PermissionEnum.WRITE, artifactToCheck, branchToCheck, artifactType,
+ // attributeType, null));
+ // System.out.println(data.matches(PermissionEnum.WRITE, artifactToCheck, branchToCheck, artifactType,
+ // wordAttributeType, null));
+ System.out.println(data);
+ }
+
+ // Branch
+ // IBasicArtifact<?>
+ // ArtifactType
+ // AttributeType(s)
+ // RelationType(s)
+
+ // Branch
+ // Artifact, ArtifactType
+ // AttributeType
+ // Branch, ArtifactType
+ // AttributeType ?
}
diff --git a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/PermissionStatus.java b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/PermissionStatus.java
index 7ae16da5ae2..0699e178ff3 100644
--- a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/PermissionStatus.java
+++ b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/model/access/PermissionStatus.java
@@ -1,12 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
package org.eclipse.osee.framework.core.model.access;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Roberto E. Escobar
+ */
public final class PermissionStatus {
private final StringBuilder reason;
private boolean matchedPermission;
public PermissionStatus() {
+ this(true, null);
+ }
+
+ public PermissionStatus(boolean matched, String reason) {
this.reason = new StringBuilder();
- this.matchedPermission = true;
+ this.matchedPermission = matched;
+ append(reason);
}
public boolean matches() {
@@ -17,7 +38,13 @@ public final class PermissionStatus {
return reason.toString();
}
- public void setReason(String reason2) {
+ void append(String reason) {
+ if (Strings.isValid(reason)) {
+ this.reason.append(reason);
+ }
+ }
+
+ void setReason(String reason) {
}
void setMatches(boolean matchedPermission) {
diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/AccessContextId.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/AccessContextId.java
new file mode 100644
index 00000000000..b56dc9dd30d
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/data/AccessContextId.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.core.data;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public interface AccessContextId extends Identity, Named {
+} \ No newline at end of file

Back to the top