Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.osee.framework.ui.skynet.test/src/org/eclipse/osee/framework/ui/skynet/test/artifact/ArtifactPromptChangeTest.java6
-rw-r--r--plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java11
-rw-r--r--plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerDragAndDrop.java49
-rw-r--r--plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/IAccessPolicyHandlerService.java2
-rw-r--r--plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/internal/AccessPolicyHandlerServiceImpl.java10
5 files changed, 59 insertions, 19 deletions
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet.test/src/org/eclipse/osee/framework/ui/skynet/test/artifact/ArtifactPromptChangeTest.java b/plugins/org.eclipse.osee.framework.ui.skynet.test/src/org/eclipse/osee/framework/ui/skynet/test/artifact/ArtifactPromptChangeTest.java
index e5888e4275a..12835b7e24d 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet.test/src/org/eclipse/osee/framework/ui/skynet/test/artifact/ArtifactPromptChangeTest.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet.test/src/org/eclipse/osee/framework/ui/skynet/test/artifact/ArtifactPromptChangeTest.java
@@ -85,6 +85,12 @@ public class ArtifactPromptChangeTest {
public IAccessControlService getAccessService() {
return null;
}
+
+ @Override
+ public PermissionStatus hasArtifactRelatablePermission(Collection<? extends IBasicArtifact<?>> artifacts, Collection<? extends IRelationTypeSide> relationTypeSides, PermissionEnum permission, Level level) throws OseeCoreException {
+ return new PermissionStatus();
+ }
+
}
private static class MockPromptFactory implements IPromptFactory {
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
index ea8d2a03a51..d249ee87371 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorer.java
@@ -614,17 +614,16 @@ public class ArtifactExplorer extends ViewPart implements IArtifactExplorerEvent
@Override
public void widgetSelected(SelectionEvent e) {
try {
- ArtifactTypeFilteredTreeEntryDialog dialog = getDialog();
Artifact parent = getParent();
IAccessPolicyHandlerService policy = SkynetGuiPlugin.getInstance().getPolicyHandlerService();
PermissionStatus status =
- policy.hasRelationSidePermission(
+ policy.hasArtifactRelatablePermission(Collections.singleton(parent),
java.util.Collections.singleton(CoreRelationTypes.Default_Hierarchical__Child),
PermissionEnum.WRITE, Level.FINE);
-
if (status.matched()) {
+ ArtifactTypeFilteredTreeEntryDialog dialog = getDialog();
if (dialog.open() == Window.OK) {
IArtifactType type = dialog.getSelection();
String name = dialog.getEntryValue();
@@ -639,6 +638,11 @@ public class ArtifactExplorer extends ViewPart implements IArtifactExplorerEvent
treeViewer.refresh();
treeViewer.refresh(false);
}
+ } else {
+ MessageDialog.openError(
+ AWorkbench.getActiveShell(),
+ "New Child Error",
+ "Access control has restricted this action. The current user does not have sufficient permission to create relations on this artifact.");
}
} catch (Exception ex) {
OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
@@ -1496,4 +1500,5 @@ public class ArtifactExplorer extends ViewPart implements IArtifactExplorerEvent
}
return null;
}
+
}
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerDragAndDrop.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerDragAndDrop.java
index b755abd224c..b6a7dd00c97 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerDragAndDrop.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/ArtifactExplorerDragAndDrop.java
@@ -11,12 +11,16 @@
package org.eclipse.osee.framework.ui.skynet;
import java.io.File;
+import java.util.Collections;
+import java.util.logging.Level;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.osee.framework.core.enums.CoreRelationTypes;
+import org.eclipse.osee.framework.core.enums.PermissionEnum;
import org.eclipse.osee.framework.core.enums.RelationOrderBaseTypes;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.model.access.PermissionStatus;
import org.eclipse.osee.framework.logging.OseeLevel;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
@@ -26,6 +30,7 @@ import org.eclipse.osee.framework.ui.plugin.util.Wizards;
import org.eclipse.osee.framework.ui.skynet.Import.ArtifactImportWizard;
import org.eclipse.osee.framework.ui.skynet.Import.ArtifactImporter;
import org.eclipse.osee.framework.ui.skynet.artifact.ArtifactTransfer;
+import org.eclipse.osee.framework.ui.skynet.artifact.IAccessPolicyHandlerService;
import org.eclipse.osee.framework.ui.skynet.update.InterArtifactExplorerDropHandler;
import org.eclipse.osee.framework.ui.skynet.util.SkynetDragAndDrop;
import org.eclipse.swt.dnd.DND;
@@ -77,29 +82,42 @@ public class ArtifactExplorerDragAndDrop extends SkynetDragAndDrop {
}
}
+ private boolean checkArtifactPermissions(Artifact toCheck) {
+ boolean toReturn = false;
+ try {
+ IAccessPolicyHandlerService policy = SkynetGuiPlugin.getInstance().getPolicyHandlerService();
+ PermissionStatus status =
+ policy.hasArtifactRelatablePermission(Collections.singleton(toCheck),
+ Collections.singleton(CoreRelationTypes.Default_Hierarchical__Child), PermissionEnum.WRITE, Level.FINE);
+ toReturn = status.matched();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(SkynetGuiPlugin.class, OseeLevel.SEVERE_POPUP, ex);
+ }
+ return toReturn;
+ }
+
private boolean isValidForArtifactDrop(DropTargetEvent event) {
+ boolean valid = false;
if (ArtifactTransfer.getInstance().isSupportedType(event.currentDataType)) {
- ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(event.currentDataType);
- if (artData != null) {
-
- Artifact parentArtifact = getSelectedArtifact(event);
- if (parentArtifact != null && artData.getSource().equals(viewId)) {
- Artifact[] artifactsToBeRelated = artData.getArtifacts();
-
- for (Artifact artifact : artifactsToBeRelated) {
- if (parentArtifact.equals(artifact)) {
- return false;
+ Artifact parentArtifact = getSelectedArtifact(event);
+ ArtifactData artData = ArtifactTransfer.getInstance().nativeToJava(event.currentDataType);
+ if (parentArtifact != null && artData.getSource().equals(viewId)) {
+ valid = checkArtifactPermissions(parentArtifact);
+
+ // if valid, check artifacts that are moving
+ if (valid) {
+ Artifact[] toCheck = artData.getArtifacts();
+ for (Artifact art : toCheck) {
+ valid = (art.equals(parentArtifact) ? false : checkArtifactPermissions(art));
+ if (!valid) {
+ break;
}
}
- return true;
}
- } else {
- // only occurs during the drag on some platforms
- return true;
}
}
- return false;
+ return valid;
}
private Artifact getSelectedArtifact(DropTargetEvent event) {
@@ -162,4 +180,5 @@ public class ArtifactExplorerDragAndDrop extends SkynetDragAndDrop {
}
}
}
+
}
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/IAccessPolicyHandlerService.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/IAccessPolicyHandlerService.java
index 16e681483a3..bb088d11767 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/IAccessPolicyHandlerService.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/artifact/IAccessPolicyHandlerService.java
@@ -31,5 +31,7 @@ public interface IAccessPolicyHandlerService {
PermissionStatus hasArtifactPermission(Collection<? extends IBasicArtifact<?>> artifacts, PermissionEnum permission, Level level) throws OseeCoreException;
+ PermissionStatus hasArtifactRelatablePermission(Collection<? extends IBasicArtifact<?>> artifacts, Collection<? extends IRelationTypeSide> relationTypeSides, PermissionEnum permission, Level level) throws OseeCoreException;
+
IAccessControlService getAccessService();
}
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/internal/AccessPolicyHandlerServiceImpl.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/internal/AccessPolicyHandlerServiceImpl.java
index 07734a494da..828908485e1 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/internal/AccessPolicyHandlerServiceImpl.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/internal/AccessPolicyHandlerServiceImpl.java
@@ -87,7 +87,6 @@ public class AccessPolicyHandlerServiceImpl implements IAccessPolicyHandlerServi
if (relationTypeSides != null) {
for (IRelationTypeSide relationTypeSide : relationTypeSides) {
query.relationTypeMatches(permission, relationTypeSide, permissionStatus);
-
if (printErrorMessage(relationTypeSides, permissionStatus, level)) {
break;
}
@@ -129,4 +128,13 @@ public class AccessPolicyHandlerServiceImpl implements IAccessPolicyHandlerServi
public IAccessControlService getAccessService() {
return accessControlService;
}
+
+ @Override
+ public PermissionStatus hasArtifactRelatablePermission(Collection<? extends IBasicArtifact<?>> artifacts, Collection<? extends IRelationTypeSide> relationTypeSides, PermissionEnum permission, Level level) throws OseeCoreException {
+ PermissionStatus status = hasRelationSidePermission(relationTypeSides, permission, level);
+ if (status.matched()) {
+ status = hasArtifactPermission(artifacts, permission, level);
+ }
+ return status;
+ }
}

Back to the top