bug[ats_TW11516]: Show dialog for deny branch access in BranchXViewer

Change-Id: I60b028a8d86d44e2b6fa7a43a98acf1782a9ffd4
diff --git a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java
index 26d4812..416ec1b 100644
--- a/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java
+++ b/plugins/org.eclipse.osee.framework.access/src/org/eclipse/osee/framework/access/internal/AccessControlService.java
@@ -439,10 +439,11 @@
             }
          }
       }
+      // user does not have entry in the branch access control table for this branch
       if (userPermission == null) {
-         if (!CoreBranches.COMMON.equals(accessObject.getBranch()) && BranchManager.getType(
-            accessObject.getBranch()).isBaselineBranch()) {
-            userPermission = PermissionEnum.READ;
+         // If there are any other access on this branch, it's locked for this user
+         if (objectToSubjectCache.containsKey(accessObject)) {
+            userPermission = PermissionEnum.DENY;
          } else {
             userPermission = PermissionEnum.FULLACCESS;
          }
diff --git a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/services/IAccessControlService.java b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/services/IAccessControlService.java
index df54eed..475015d 100644
--- a/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/services/IAccessControlService.java
+++ b/plugins/org.eclipse.osee.framework.core.model/src/org/eclipse/osee/framework/core/services/IAccessControlService.java
@@ -19,6 +19,9 @@
 
 public interface IAccessControlService {
 
+   /**
+    * @param object Artifact, Branch or collection of either
+    */
    boolean hasPermission(Object object, PermissionEnum permission) throws OseeCoreException;
 
    void removePermissions(BranchId branch) throws OseeCoreException;
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/BranchManager.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/BranchManager.java
index bdbe944..439412d 100644
--- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/BranchManager.java
+++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/artifact/BranchManager.java
@@ -731,4 +731,8 @@
    public static String getBranchShortName(TransactionToken tx) {
       return getBranch(tx.getBranch()).getShortName();
    }
+
+   public static String toStringWithId(BranchId branch) {
+      return getBranch(branch).toStringWithId();
+   }
 }
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xBranch/BranchXViewer.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xBranch/BranchXViewer.java
index 99fe96b..675102d 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xBranch/BranchXViewer.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xBranch/BranchXViewer.java
@@ -15,10 +15,13 @@
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.nebula.widgets.xviewer.XViewer;
 import org.eclipse.nebula.widgets.xviewer.XViewerTextFilter;
+import org.eclipse.osee.framework.access.AccessControlManager;
 import org.eclipse.osee.framework.core.data.BranchId;
 import org.eclipse.osee.framework.core.data.IOseeBranch;
 import org.eclipse.osee.framework.core.enums.CoreBranches;
+import org.eclipse.osee.framework.core.enums.PermissionEnum;
 import org.eclipse.osee.framework.core.model.MergeBranch;
+import org.eclipse.osee.framework.core.util.XResultData;
 import org.eclipse.osee.framework.help.ui.OseeHelpContext;
 import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
 import org.eclipse.osee.framework.logging.OseeLevel;
@@ -27,6 +30,7 @@
 import org.eclipse.osee.framework.ui.plugin.util.HelpUtil;
 import org.eclipse.osee.framework.ui.skynet.explorer.ArtifactExplorer;
 import org.eclipse.osee.framework.ui.skynet.internal.Activator;
+import org.eclipse.osee.framework.ui.skynet.results.XResultDataUI;
 import org.eclipse.osee.framework.ui.skynet.util.PromptChangeUtil;
 import org.eclipse.osee.framework.ui.skynet.widgets.xBranch.XBranchWidget.IBranchWidgetMenuListener;
 import org.eclipse.osee.framework.ui.skynet.widgets.xmerge.MergeView;
@@ -48,24 +52,33 @@
 
    @Override
    public void handleDoubleClick() {
+      XResultData rd = new XResultData();
       ArrayList<BranchId> branches = xBranchViewer.getSelectedBranches();
       if (branches != null && !branches.isEmpty()) {
          for (BranchId branch : branches) {
-            if (!branch.equals(CoreBranches.SYSTEM_ROOT)) {
-               if (!BranchManager.getType(branch).isMergeBranch()) {
-                  ArtifactExplorer.exploreBranch(branch);
-                  BranchManager.setLastBranch(branch);
-               } else {
-                  if (branch instanceof MergeBranch) {
-                     MergeBranch mergeBranch = (MergeBranch) branch;
-                     IOseeBranch source = mergeBranch.getSourceBranch();
-                     IOseeBranch destination = mergeBranch.getDestinationBranch();
-                     MergeView.openView(source, destination, BranchManager.getBaseTransaction(source));
+            boolean hasPermission = AccessControlManager.hasPermission(branch, PermissionEnum.READ);
+            if (hasPermission) {
+               if (!branch.equals(CoreBranches.SYSTEM_ROOT)) {
+                  if (!BranchManager.getType(branch).isMergeBranch()) {
+                     ArtifactExplorer.exploreBranch(branch);
+                     BranchManager.setLastBranch(branch);
+                  } else {
+                     if (branch instanceof MergeBranch) {
+                        MergeBranch mergeBranch = (MergeBranch) branch;
+                        IOseeBranch source = mergeBranch.getSourceBranch();
+                        IOseeBranch destination = mergeBranch.getDestinationBranch();
+                        MergeView.openView(source, destination, BranchManager.getBaseTransaction(source));
+                     }
                   }
                }
+            } else {
+               rd.errorf("Access Restricted on branch %s\n", BranchManager.toStringWithId(branch));
             }
          }
       }
+      if (rd.isErrors()) {
+         XResultDataUI.report(rd, "Branch Access Denied");
+      }
    }
 
    @Override