Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Redor2014-11-17 10:49:28 +0000
committerLaurent Redor2014-11-17 12:45:35 +0000
commitde9012fa8af3fcb4a91a2f812d4760847f50349a (patch)
tree9d41122d93dbc7fee1091e1cfb3d38b0e93558ad
parent30ba146d66028006d7937ab8119cdb073b4b14e1 (diff)
downloadorg.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.java30
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() {

Back to the top