diff options
| author | Laurent Redor | 2014-11-17 10:49:28 +0000 |
|---|---|---|
| committer | Laurent Redor | 2014-11-17 12:45:35 +0000 |
| commit | de9012fa8af3fcb4a91a2f812d4760847f50349a (patch) | |
| tree | 9d41122d93dbc7fee1091e1cfb3d38b0e93558ad | |
| parent | 30ba146d66028006d7937ab8119cdb073b4b14e1 (diff) | |
| download | org.eclipse.sirius-de9012fa8af3fcb4a91a2f812d4760847f50349a.tar.gz org.eclipse.sirius-de9012fa8af3fcb4a91a2f812d4760847f50349a.tar.xz org.eclipse.sirius-de9012fa8af3fcb4a91a2f812d4760847f50349a.zip | |
[447945] Report permission checks from Node to Container.
Some complementary checks have been made on Node in [1] but have not
been reported for Container in [2].
This difference has been introduce since 13/10/2010.
[1]
org.eclipse.sirius.diagram.tools.internal.command.builders.NodeCreationCommandBuilder
[2]
org.eclipse.sirius.diagram.tools.internal.command.builders.ContainerCreationCommandBuilder
Bug: 447945
Change-Id: I053b2488bf57716a72f29bdcc52390dd9828eadd
Signed-off-by: Laurent Redor <laurent.redor@obeo.fr>
| -rw-r--r-- | plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/tools/internal/command/builders/ContainerCreationCommandBuilder.java | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/tools/internal/command/builders/ContainerCreationCommandBuilder.java b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/tools/internal/command/builders/ContainerCreationCommandBuilder.java index 36f8dea258..72de94c490 100644 --- a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/tools/internal/command/builders/ContainerCreationCommandBuilder.java +++ b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/tools/internal/command/builders/ContainerCreationCommandBuilder.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.ext.base.Option; import org.eclipse.sirius.ext.base.Options; import org.eclipse.sirius.tools.api.command.DCommand; import org.eclipse.sirius.tools.api.interpreter.InterpreterUtil; +import org.eclipse.sirius.viewpoint.DSemanticDecorator; import org.eclipse.sirius.viewpoint.description.tool.AbstractVariable; /** @@ -121,7 +122,7 @@ public class ContainerCreationCommandBuilder extends AbstractDiagramCommandBuild } private Command buildInDNodeContainerCommand() { - if (permissionAuthority.canEditInstance(nodeContainer)) { + if (canCreateContainerInTarget()) { final EObject model = nodeContainer.getTarget(); if (model != null && checkPrecondition(nodeContainer, tool)) { final DCommand result = buildCreateNodeCommandFromTool(model, nodeContainer); @@ -147,7 +148,7 @@ public class ContainerCreationCommandBuilder extends AbstractDiagramCommandBuild */ protected DCommand buildCreateNodeCommandFromTool(final EObject semanticContainer, final EObject container) { final DCommand result = createEnclosingCommand(); - if (permissionAuthority.canEditInstance(container)) { + if (canCreateContainerInTarget()) { final IInterpreter interpreter = InterpreterUtil.getInterpreter(semanticContainer); final Map<AbstractVariable, Object> variables = new HashMap<AbstractVariable, Object>(); result.getTasks().add(new InitInterpreterVariablesTask(variables, interpreter, uiCallback)); @@ -164,6 +165,31 @@ public class ContainerCreationCommandBuilder extends AbstractDiagramCommandBuild } /** + * Indicates if the target of the Container to create (DDiagramElement or + * directly the DDiagram) can be editable (by calling the + * PermissionAuthority). + * + * @return true if the container can be created, false otherwise + */ + private boolean canCreateContainerInTarget() { + boolean containerCanBeCreatedInTarget = false; + if (nodeContainer != null) { + containerCanBeCreatedInTarget = permissionAuthority.canEditInstance(nodeContainer); + if (containerCanBeCreatedInTarget) { + EObject target = nodeContainer.getTarget(); + containerCanBeCreatedInTarget = target != null && !target.eIsProxy(); + } + } else if (diagram != null) { + containerCanBeCreatedInTarget = permissionAuthority.canEditInstance(diagram); + if (containerCanBeCreatedInTarget && diagram instanceof DSemanticDecorator) { + EObject target = ((DSemanticDecorator) diagram).getTarget(); + containerCanBeCreatedInTarget = target != null && !target.eIsProxy(); + } + } + return containerCanBeCreatedInTarget; + } + + /** * {@inheritDoc} */ protected String getEnclosingCommandLabel() { |
