diff options
author | Florian Barbin | 2019-03-04 13:08:23 +0000 |
---|---|---|
committer | Florian Barbin | 2019-03-05 14:10:23 +0000 |
commit | 7f3a84a511a17ef856c769519b751591168ec4f8 (patch) | |
tree | bc9da72d0554e94fe38c8ca1b5cbebfcda5d9533 | |
parent | 8f7dd3427baa56cd34df20134fa4a7feb72f85b6 (diff) | |
download | org.eclipse.sirius-7f3a84a511a17ef856c769519b751591168ec4f8.tar.gz org.eclipse.sirius-7f3a84a511a17ef856c769519b751591168ec4f8.tar.xz org.eclipse.sirius-7f3a84a511a17ef856c769519b751591168ec4f8.zip |
* The Show/Hide elements actions are now available if at least one
element is Hidden/Visible.
* The Show/Hide labels actions are now checking the authorization from
the permission authority.
Bug: 543252
Cherry-picked-from Bug: 543540
Change-Id: I01eb2a88562f8aecb75c12b383527196a326d586
Signed-off-by: Florian Barbin <florian.barbin@obeo.fr>
5 files changed, 50 insertions, 25 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml index 8e70b51698..4dfaf6ff52 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml +++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml @@ -1283,7 +1283,7 @@ <with variable="activeMenuSelection"> <iterate - operator="and"> + operator="or"> <instanceof value="org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramElementEditPart"> </instanceof> @@ -1304,7 +1304,7 @@ <with variable="activeMenuSelection"> <iterate - operator="and"> + operator="or"> <instanceof value="org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramElementEditPart"> </instanceof> diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementAction.java index 70244b33e8..8f02f9cdd4 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementAction.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementAction.java @@ -154,7 +154,7 @@ public class HideDDiagramElementAction extends Action implements IObjectActionDe DDiagram parentDiagram = ddes.iterator().next().getParentDiagram(); Predicate<DDiagramElement> allowsHideReveal = allowsHideReveal(parentDiagram); Predicate<DDiagramElement> notDirectlyHidden = dde -> dde.isVisible(); - return Iterables.all(ddes, Predicates.and(allowsHideReveal, notDirectlyHidden)); + return Iterables.any(ddes, Predicates.and(allowsHideReveal, notDirectlyHidden)); } } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementLabelAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementLabelAction.java index 278946a6fa..7cf976ccbb 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementLabelAction.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/HideDDiagramElementLabelAction.java @@ -21,6 +21,7 @@ import java.util.Set; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.util.TransactionUtil; @@ -33,6 +34,7 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.sirius.diagram.DDiagram; import org.eclipse.sirius.diagram.DDiagramElement; import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery; import org.eclipse.sirius.diagram.tools.api.command.IDiagramCommandFactory; @@ -42,6 +44,8 @@ import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin; import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor; import org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath; import org.eclipse.sirius.diagram.ui.tools.internal.editor.DiagramOutlinePage; +import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority; +import org.eclipse.sirius.ecore.extender.business.api.permission.PermissionAuthorityRegistry; import org.eclipse.sirius.ext.base.Option; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; @@ -139,8 +143,19 @@ public class HideDDiagramElementLabelAction extends Action implements IObjectAct } private static boolean isEnabled(DDiagramElement diagramElement) { + DDiagram dDiagram = diagramElement.getParentDiagram(); DDiagramElementQuery query = new DDiagramElementQuery(diagramElement); - return query.canHideLabel() && !query.isLabelHidden(); + return (dDiagram != null && isEditable(dDiagram)) && query.canHideLabel() && !query.isLabelHidden(); + } + + private static boolean isEditable(DDiagram diagram) { + boolean isEditable = false; + Resource resource = diagram.eResource(); + if (resource != null) { + IPermissionAuthority permissionAuthority = PermissionAuthorityRegistry.getDefault().getPermissionAuthority(resource.getResourceSet()); + isEditable = permissionAuthority.canEditInstance(diagram); + } + return isEditable; } /** diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/RevealElementsAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/RevealElementsAction.java index dd6353d76c..c9ef58d25d 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/RevealElementsAction.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/RevealElementsAction.java @@ -45,7 +45,7 @@ public class RevealElementsAction extends AbstractRevealElementsAction<Object> { public RevealElementsAction() { super(Messages.RevealOutlineElementsAction_label); } - + /** * Constructor. * @@ -75,29 +75,22 @@ public class RevealElementsAction extends AbstractRevealElementsAction<Object> { } /** - * Tests whether this action should be active. The action is active if the the given selection contains only hidden - * diagram graphical element. + * Tests whether this action should be active. The action is active if the given selection contains at least one + * hidden diagram graphical element. * * @param selectedElements * The current selection * @return true if all selected elements are hidden. */ public static boolean isActive(IStructuredSelection selectedElements) { - boolean result = true; final Iterator<?> iterator = selectedElements.iterator(); - - if (!iterator.hasNext()) { - result = false; - } while (iterator.hasNext()) { final Object selectedElement = iterator.next(); - if (selectedElement instanceof IDiagramElementEditPart) { - result = result && isActive((IDiagramElementEditPart) selectedElement); - } else { - result = false; + if (selectedElement instanceof IDiagramElementEditPart && isActive((IDiagramElementEditPart) selectedElement)) { + return true; } } - return result; + return false; } /** @@ -124,13 +117,15 @@ public class RevealElementsAction extends AbstractRevealElementsAction<Object> { final DDiagramEditor diagramEditor = (DDiagramEditor) wrapper.getViewer().getProperty(DDiagramEditor.EDITOR_ID); runRevealCommand(root, diagramEditor, (DDiagramElement) vpe); } else if (vpe instanceof IDiagramElementEditPart) { - Optional<DDiagramElement> optionalDiagramElement = Optional.of((IGraphicalEditPart) vpe).map(IGraphicalEditPart::resolveSemanticElement).filter(DDiagramElement.class::isInstance) - .map(DDiagramElement.class::cast); - if (optionalDiagramElement.isPresent()) { - IDiagramElementEditPart diagramElementEditPart = (IDiagramElementEditPart) vpe; - SelectionRequest request = new SelectionRequest(); - request.setType(RequestConstants.REQ_OPEN); - diagramElementEditPart.performRequest(request); + if (isActive((IDiagramElementEditPart) vpe)) { + Optional<DDiagramElement> optionalDiagramElement = Optional.of((IGraphicalEditPart) vpe).map(IGraphicalEditPart::resolveSemanticElement).filter(DDiagramElement.class::isInstance) + .map(DDiagramElement.class::cast); + if (optionalDiagramElement.isPresent()) { + IDiagramElementEditPart diagramElementEditPart = (IDiagramElementEditPart) vpe; + SelectionRequest request = new SelectionRequest(); + request.setType(RequestConstants.REQ_OPEN); + diagramElementEditPart.performRequest(request); + } } } } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/TabbarRevealLabelsAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/TabbarRevealLabelsAction.java index 8e4c80960e..0735c701be 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/TabbarRevealLabelsAction.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/visibility/TabbarRevealLabelsAction.java @@ -14,12 +14,14 @@ package org.eclipse.sirius.diagram.ui.tools.internal.actions.visibility; import java.util.Collection; +import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.gef.Disposable; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.jface.action.IAction; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.sirius.diagram.DDiagram; import org.eclipse.sirius.diagram.DDiagramElement; import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery; import org.eclipse.sirius.diagram.ui.business.api.provider.AbstractDDiagramElementLabelItemProvider; @@ -27,6 +29,8 @@ import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin; import org.eclipse.sirius.diagram.ui.provider.Messages; import org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath; import org.eclipse.sirius.diagram.ui.tools.internal.editor.DiagramOutlinePage; +import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority; +import org.eclipse.sirius.ecore.extender.business.api.permission.PermissionAuthorityRegistry; import org.eclipse.sirius.ext.base.Option; import com.google.common.base.Predicate; @@ -143,8 +147,19 @@ public class TabbarRevealLabelsAction extends RevealOutlineLabelsAction implemen } private static boolean isEnabled(DDiagramElement diagramElement) { + DDiagram dDiagram = diagramElement.getParentDiagram(); DDiagramElementQuery query = new DDiagramElementQuery(diagramElement); - return query.isLabelHidden(); + return (dDiagram != null && isEditable(dDiagram)) && query.isLabelHidden(); + } + + private static boolean isEditable(DDiagram diagram) { + boolean isEditable = false; + Resource resource = diagram.eResource(); + if (resource != null) { + IPermissionAuthority permissionAuthority = PermissionAuthorityRegistry.getDefault().getPermissionAuthority(resource.getResourceSet()); + isEditable = permissionAuthority.canEditInstance(diagram); + } + return isEditable; } /** |