diff options
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 |