diff options
author | Martin Fluegge | 2010-06-05 19:28:18 +0000 |
---|---|---|
committer | Martin Fluegge | 2010-06-05 19:28:18 +0000 |
commit | 7693663e85bf22ae381526853648358bedb87a13 (patch) | |
tree | 41772694f69a483500ee8693b96e322ca566e4f9 /plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit | |
parent | 2ef4689f1ced4900910e87eadfb6b5049de29a50 (diff) | |
download | cdo-7693663e85bf22ae381526853648358bedb87a13.tar.gz cdo-7693663e85bf22ae381526853648358bedb87a13.tar.xz cdo-7693663e85bf22ae381526853648358bedb87a13.zip |
[308232] [Dawn] Develop collaborative support for GMF on CDO
https://bugs.eclipse.org/bugs/show_bug.cgi?id=308232
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit')
65 files changed, 11506 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AAttribute2CreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AAttribute2CreateCommand.java new file mode 100644 index 0000000000..1b7d24f852 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AAttribute2CreateCommand.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AAttribute; +import org.eclipse.emf.cdo.dawn.examples.acore.ABasicClass; +import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AAttribute2CreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + public AAttribute2CreateCommand(CreateElementRequest req) + { + super(req.getLabel(), null, req); + } + + /** + * FIXME: replace with setElementToEdit() + * @generated + */ + protected EObject getElementToEdit() + { + EObject container = ((CreateElementRequest)getRequest()).getContainer(); + if (container instanceof View) + { + container = ((View)container).getElement(); + } + return container; + } + + /** + * @generated + */ + public boolean canExecute() + { + return true; + + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + AAttribute newElement = AcoreFactory.eINSTANCE.createAAttribute(); + + ABasicClass owner = (ABasicClass)getElementToEdit(); + owner.getAttributes().add(newElement); + + doConfigure(newElement, monitor, info); + + ((CreateElementRequest)getRequest()).setNewElement(newElement); + return CommandResult.newOKCommandResult(newElement); + } + + /** + * @generated + */ + protected void doConfigure(AAttribute newElement, IProgressMonitor monitor, IAdaptable info) + throws ExecutionException + { + IElementType elementType = ((CreateElementRequest)getRequest()).getElementType(); + ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType); + configureRequest.setClientContext(((CreateElementRequest)getRequest()).getClientContext()); + configureRequest.addParameters(getRequest().getParameters()); + ICommand configureCommand = elementType.getEditCommand(configureRequest); + if (configureCommand != null && configureCommand.canExecute()) + { + configureCommand.execute(monitor, info); + } + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AAttributeCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AAttributeCreateCommand.java new file mode 100644 index 0000000000..ff60d8441e --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AAttributeCreateCommand.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AAttribute; +import org.eclipse.emf.cdo.dawn.examples.acore.ABasicClass; +import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AAttributeCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + public AAttributeCreateCommand(CreateElementRequest req) + { + super(req.getLabel(), null, req); + } + + /** + * FIXME: replace with setElementToEdit() + * @generated + */ + protected EObject getElementToEdit() + { + EObject container = ((CreateElementRequest)getRequest()).getContainer(); + if (container instanceof View) + { + container = ((View)container).getElement(); + } + return container; + } + + /** + * @generated + */ + public boolean canExecute() + { + return true; + + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + AAttribute newElement = AcoreFactory.eINSTANCE.createAAttribute(); + + ABasicClass owner = (ABasicClass)getElementToEdit(); + owner.getAttributes().add(newElement); + + doConfigure(newElement, monitor, info); + + ((CreateElementRequest)getRequest()).setNewElement(newElement); + return CommandResult.newOKCommandResult(newElement); + } + + /** + * @generated + */ + protected void doConfigure(AAttribute newElement, IProgressMonitor monitor, IAdaptable info) + throws ExecutionException + { + IElementType elementType = ((CreateElementRequest)getRequest()).getElementType(); + ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType); + configureRequest.setClientContext(((CreateElementRequest)getRequest()).getClientContext()); + configureRequest.addParameters(getRequest().getParameters()); + ICommand configureCommand = elementType.getEditCommand(configureRequest); + if (configureCommand != null && configureCommand.canExecute()) + { + configureCommand.execute(monitor, info); + } + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAggregationsCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAggregationsCreateCommand.java new file mode 100644 index 0000000000..229259b719 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAggregationsCreateCommand.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; + +/** + * @generated + */ +public class AClassAggregationsCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final EObject source; + + /** + * @generated + */ + private final EObject target; + + /** + * @generated + */ + public AClassAggregationsCreateCommand(CreateRelationshipRequest request, EObject source, EObject target) + { + super(request.getLabel(), null, request); + this.source = source; + this.target = target; + } + + /** + * @generated + */ + public boolean canExecute() + { + if (source == null && target == null) + { + return false; + } + if (source != null && false == source instanceof AClass) + { + return false; + } + if (target != null && false == target instanceof AClass) + { + return false; + } + if (getSource() == null) + { + return true; // link creation is in progress; source is not defined yet + } + // target may be null here but it's possible to check constraint + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canCreateAClassAggregations_4004(getSource(), getTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in create link command"); //$NON-NLS-1$ + } + + if (getSource() != null && getTarget() != null) + { + getSource().getAggregations().add(getTarget()); + } + return CommandResult.newOKCommandResult(); + + } + + /** + * @generated + */ + protected void setElementToEdit(EObject element) + { + throw new UnsupportedOperationException(); + } + + /** + * @generated + */ + protected AClass getSource() + { + return (AClass)source; + } + + /** + * @generated + */ + protected AClass getTarget() + { + return (AClass)target; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAggregationsReorientCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAggregationsReorientCommand.java new file mode 100644 index 0000000000..c0e2177bbb --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAggregationsReorientCommand.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest; + +/** + * @generated + */ +public class AClassAggregationsReorientCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final int reorientDirection; + + /** + * @generated + */ + private final EObject referenceOwner; + + /** + * @generated + */ + private final EObject oldEnd; + + /** + * @generated + */ + private final EObject newEnd; + + /** + * @generated + */ + public AClassAggregationsReorientCommand(ReorientReferenceRelationshipRequest request) + { + super(request.getLabel(), null, request); + reorientDirection = request.getDirection(); + referenceOwner = request.getReferenceOwner(); + oldEnd = request.getOldRelationshipEnd(); + newEnd = request.getNewRelationshipEnd(); + } + + /** + * @generated + */ + public boolean canExecute() + { + if (false == referenceOwner instanceof AClass) + { + return false; + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return canReorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return canReorientTarget(); + } + return false; + } + + /** + * @generated + */ + protected boolean canReorientSource() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassAggregations_4004(getNewSource(), + getOldTarget()); + } + + /** + * @generated + */ + protected boolean canReorientTarget() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassAggregations_4004(getOldSource(), + getNewTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in reorient link command"); //$NON-NLS-1$ + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return reorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return reorientTarget(); + } + throw new IllegalStateException(); + } + + /** + * @generated + */ + protected CommandResult reorientSource() throws ExecutionException + { + getOldSource().getAggregations().remove(getOldTarget()); + getNewSource().getAggregations().add(getOldTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected CommandResult reorientTarget() throws ExecutionException + { + getOldSource().getAggregations().remove(getOldTarget()); + getOldSource().getAggregations().add(getNewTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected AClass getOldSource() + { + return (AClass)referenceOwner; + } + + /** + * @generated + */ + protected AClass getNewSource() + { + return (AClass)newEnd; + } + + /** + * @generated + */ + protected AClass getOldTarget() + { + return (AClass)oldEnd; + } + + /** + * @generated + */ + protected AClass getNewTarget() + { + return (AClass)newEnd; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAssociationsCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAssociationsCreateCommand.java new file mode 100644 index 0000000000..4f345f37ee --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAssociationsCreateCommand.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; + +/** + * @generated + */ +public class AClassAssociationsCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final EObject source; + + /** + * @generated + */ + private final EObject target; + + /** + * @generated + */ + public AClassAssociationsCreateCommand(CreateRelationshipRequest request, EObject source, EObject target) + { + super(request.getLabel(), null, request); + this.source = source; + this.target = target; + } + + /** + * @generated + */ + public boolean canExecute() + { + if (source == null && target == null) + { + return false; + } + if (source != null && false == source instanceof AClass) + { + return false; + } + if (target != null && false == target instanceof AClass) + { + return false; + } + if (getSource() == null) + { + return true; // link creation is in progress; source is not defined yet + } + // target may be null here but it's possible to check constraint + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canCreateAClassAssociations_4003(getSource(), getTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in create link command"); //$NON-NLS-1$ + } + + if (getSource() != null && getTarget() != null) + { + getSource().getAssociations().add(getTarget()); + } + return CommandResult.newOKCommandResult(); + + } + + /** + * @generated + */ + protected void setElementToEdit(EObject element) + { + throw new UnsupportedOperationException(); + } + + /** + * @generated + */ + protected AClass getSource() + { + return (AClass)source; + } + + /** + * @generated + */ + protected AClass getTarget() + { + return (AClass)target; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAssociationsReorientCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAssociationsReorientCommand.java new file mode 100644 index 0000000000..a45ad2f9cf --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassAssociationsReorientCommand.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest; + +/** + * @generated + */ +public class AClassAssociationsReorientCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final int reorientDirection; + + /** + * @generated + */ + private final EObject referenceOwner; + + /** + * @generated + */ + private final EObject oldEnd; + + /** + * @generated + */ + private final EObject newEnd; + + /** + * @generated + */ + public AClassAssociationsReorientCommand(ReorientReferenceRelationshipRequest request) + { + super(request.getLabel(), null, request); + reorientDirection = request.getDirection(); + referenceOwner = request.getReferenceOwner(); + oldEnd = request.getOldRelationshipEnd(); + newEnd = request.getNewRelationshipEnd(); + } + + /** + * @generated + */ + public boolean canExecute() + { + if (false == referenceOwner instanceof AClass) + { + return false; + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return canReorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return canReorientTarget(); + } + return false; + } + + /** + * @generated + */ + protected boolean canReorientSource() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassAssociations_4003(getNewSource(), + getOldTarget()); + } + + /** + * @generated + */ + protected boolean canReorientTarget() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassAssociations_4003(getOldSource(), + getNewTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in reorient link command"); //$NON-NLS-1$ + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return reorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return reorientTarget(); + } + throw new IllegalStateException(); + } + + /** + * @generated + */ + protected CommandResult reorientSource() throws ExecutionException + { + getOldSource().getAssociations().remove(getOldTarget()); + getNewSource().getAssociations().add(getOldTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected CommandResult reorientTarget() throws ExecutionException + { + getOldSource().getAssociations().remove(getOldTarget()); + getOldSource().getAssociations().add(getNewTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected AClass getOldSource() + { + return (AClass)referenceOwner; + } + + /** + * @generated + */ + protected AClass getNewSource() + { + return (AClass)newEnd; + } + + /** + * @generated + */ + protected AClass getOldTarget() + { + return (AClass)oldEnd; + } + + /** + * @generated + */ + protected AClass getNewTarget() + { + return (AClass)newEnd; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCompositionsCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCompositionsCreateCommand.java new file mode 100644 index 0000000000..484b1b89a7 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCompositionsCreateCommand.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; + +/** + * @generated + */ +public class AClassCompositionsCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final EObject source; + + /** + * @generated + */ + private final EObject target; + + /** + * @generated + */ + public AClassCompositionsCreateCommand(CreateRelationshipRequest request, EObject source, EObject target) + { + super(request.getLabel(), null, request); + this.source = source; + this.target = target; + } + + /** + * @generated + */ + public boolean canExecute() + { + if (source == null && target == null) + { + return false; + } + if (source != null && false == source instanceof AClass) + { + return false; + } + if (target != null && false == target instanceof AClass) + { + return false; + } + if (getSource() == null) + { + return true; // link creation is in progress; source is not defined yet + } + // target may be null here but it's possible to check constraint + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canCreateAClassCompositions_4005(getSource(), getTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in create link command"); //$NON-NLS-1$ + } + + if (getSource() != null && getTarget() != null) + { + getSource().getCompositions().add(getTarget()); + } + return CommandResult.newOKCommandResult(); + + } + + /** + * @generated + */ + protected void setElementToEdit(EObject element) + { + throw new UnsupportedOperationException(); + } + + /** + * @generated + */ + protected AClass getSource() + { + return (AClass)source; + } + + /** + * @generated + */ + protected AClass getTarget() + { + return (AClass)target; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCompositionsReorientCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCompositionsReorientCommand.java new file mode 100644 index 0000000000..3b7295dfc2 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCompositionsReorientCommand.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest; + +/** + * @generated + */ +public class AClassCompositionsReorientCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final int reorientDirection; + + /** + * @generated + */ + private final EObject referenceOwner; + + /** + * @generated + */ + private final EObject oldEnd; + + /** + * @generated + */ + private final EObject newEnd; + + /** + * @generated + */ + public AClassCompositionsReorientCommand(ReorientReferenceRelationshipRequest request) + { + super(request.getLabel(), null, request); + reorientDirection = request.getDirection(); + referenceOwner = request.getReferenceOwner(); + oldEnd = request.getOldRelationshipEnd(); + newEnd = request.getNewRelationshipEnd(); + } + + /** + * @generated + */ + public boolean canExecute() + { + if (false == referenceOwner instanceof AClass) + { + return false; + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return canReorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return canReorientTarget(); + } + return false; + } + + /** + * @generated + */ + protected boolean canReorientSource() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassCompositions_4005(getNewSource(), + getOldTarget()); + } + + /** + * @generated + */ + protected boolean canReorientTarget() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassCompositions_4005(getOldSource(), + getNewTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in reorient link command"); //$NON-NLS-1$ + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return reorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return reorientTarget(); + } + throw new IllegalStateException(); + } + + /** + * @generated + */ + protected CommandResult reorientSource() throws ExecutionException + { + getOldSource().getCompositions().remove(getOldTarget()); + getNewSource().getCompositions().add(getOldTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected CommandResult reorientTarget() throws ExecutionException + { + getOldSource().getCompositions().remove(getOldTarget()); + getOldSource().getCompositions().add(getNewTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected AClass getOldSource() + { + return (AClass)referenceOwner; + } + + /** + * @generated + */ + protected AClass getNewSource() + { + return (AClass)newEnd; + } + + /** + * @generated + */ + protected AClass getOldTarget() + { + return (AClass)oldEnd; + } + + /** + * @generated + */ + protected AClass getNewTarget() + { + return (AClass)newEnd; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCreateCommand.java new file mode 100644 index 0000000000..5ab6039916 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassCreateCommand.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.ACoreRoot; +import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + public AClassCreateCommand(CreateElementRequest req) + { + super(req.getLabel(), null, req); + } + + /** + * FIXME: replace with setElementToEdit() + * @generated + */ + protected EObject getElementToEdit() + { + EObject container = ((CreateElementRequest)getRequest()).getContainer(); + if (container instanceof View) + { + container = ((View)container).getElement(); + } + return container; + } + + /** + * @generated + */ + public boolean canExecute() + { + return true; + + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + AClass newElement = AcoreFactory.eINSTANCE.createAClass(); + + ACoreRoot owner = (ACoreRoot)getElementToEdit(); + owner.getClasses().add(newElement); + + doConfigure(newElement, monitor, info); + + ((CreateElementRequest)getRequest()).setNewElement(newElement); + return CommandResult.newOKCommandResult(newElement); + } + + /** + * @generated + */ + protected void doConfigure(AClass newElement, IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + IElementType elementType = ((CreateElementRequest)getRequest()).getElementType(); + ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType); + configureRequest.setClientContext(((CreateElementRequest)getRequest()).getClientContext()); + configureRequest.addParameters(getRequest().getParameters()); + ICommand configureCommand = elementType.getEditCommand(configureRequest); + if (configureCommand != null && configureCommand.canExecute()) + { + configureCommand.execute(monitor, info); + } + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassImplementedInterfacesCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassImplementedInterfacesCreateCommand.java new file mode 100644 index 0000000000..fe4db5f33f --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassImplementedInterfacesCreateCommand.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.AInterface; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; + +/** + * @generated + */ +public class AClassImplementedInterfacesCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final EObject source; + + /** + * @generated + */ + private final EObject target; + + /** + * @generated + */ + public AClassImplementedInterfacesCreateCommand(CreateRelationshipRequest request, EObject source, EObject target) + { + super(request.getLabel(), null, request); + this.source = source; + this.target = target; + } + + /** + * @generated + */ + public boolean canExecute() + { + if (source == null && target == null) + { + return false; + } + if (source != null && false == source instanceof AClass) + { + return false; + } + if (target != null && false == target instanceof AInterface) + { + return false; + } + if (getSource() == null) + { + return true; // link creation is in progress; source is not defined yet + } + // target may be null here but it's possible to check constraint + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canCreateAClassImplementedInterfaces_4002(getSource(), + getTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in create link command"); //$NON-NLS-1$ + } + + if (getSource() != null && getTarget() != null) + { + getSource().getImplementedInterfaces().add(getTarget()); + } + return CommandResult.newOKCommandResult(); + + } + + /** + * @generated + */ + protected void setElementToEdit(EObject element) + { + throw new UnsupportedOperationException(); + } + + /** + * @generated + */ + protected AClass getSource() + { + return (AClass)source; + } + + /** + * @generated + */ + protected AInterface getTarget() + { + return (AInterface)target; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassImplementedInterfacesReorientCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassImplementedInterfacesReorientCommand.java new file mode 100644 index 0000000000..f31e1300d4 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassImplementedInterfacesReorientCommand.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.AInterface; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest; + +/** + * @generated + */ +public class AClassImplementedInterfacesReorientCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final int reorientDirection; + + /** + * @generated + */ + private final EObject referenceOwner; + + /** + * @generated + */ + private final EObject oldEnd; + + /** + * @generated + */ + private final EObject newEnd; + + /** + * @generated + */ + public AClassImplementedInterfacesReorientCommand(ReorientReferenceRelationshipRequest request) + { + super(request.getLabel(), null, request); + reorientDirection = request.getDirection(); + referenceOwner = request.getReferenceOwner(); + oldEnd = request.getOldRelationshipEnd(); + newEnd = request.getNewRelationshipEnd(); + } + + /** + * @generated + */ + public boolean canExecute() + { + if (false == referenceOwner instanceof AClass) + { + return false; + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return canReorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return canReorientTarget(); + } + return false; + } + + /** + * @generated + */ + protected boolean canReorientSource() + { + if (!(oldEnd instanceof AInterface && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassImplementedInterfaces_4002(getNewSource(), + getOldTarget()); + } + + /** + * @generated + */ + protected boolean canReorientTarget() + { + if (!(oldEnd instanceof AInterface && newEnd instanceof AInterface)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canExistAClassImplementedInterfaces_4002(getOldSource(), + getNewTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in reorient link command"); //$NON-NLS-1$ + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return reorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return reorientTarget(); + } + throw new IllegalStateException(); + } + + /** + * @generated + */ + protected CommandResult reorientSource() throws ExecutionException + { + getOldSource().getImplementedInterfaces().remove(getOldTarget()); + getNewSource().getImplementedInterfaces().add(getOldTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected CommandResult reorientTarget() throws ExecutionException + { + getOldSource().getImplementedInterfaces().remove(getOldTarget()); + getOldSource().getImplementedInterfaces().add(getNewTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected AClass getOldSource() + { + return (AClass)referenceOwner; + } + + /** + * @generated + */ + protected AClass getNewSource() + { + return (AClass)newEnd; + } + + /** + * @generated + */ + protected AInterface getOldTarget() + { + return (AInterface)oldEnd; + } + + /** + * @generated + */ + protected AInterface getNewTarget() + { + return (AInterface)newEnd; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassSubClassesCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassSubClassesCreateCommand.java new file mode 100644 index 0000000000..72695224fb --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassSubClassesCreateCommand.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; + +/** + * @generated + */ +public class AClassSubClassesCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final EObject source; + + /** + * @generated + */ + private final EObject target; + + /** + * @generated + */ + public AClassSubClassesCreateCommand(CreateRelationshipRequest request, EObject source, EObject target) + { + super(request.getLabel(), null, request); + this.source = source; + this.target = target; + } + + /** + * @generated + */ + public boolean canExecute() + { + if (source == null && target == null) + { + return false; + } + if (source != null && false == source instanceof AClass) + { + return false; + } + if (target != null && false == target instanceof AClass) + { + return false; + } + if (getSource() == null) + { + return true; // link creation is in progress; source is not defined yet + } + // target may be null here but it's possible to check constraint + return AcoreBaseItemSemanticEditPolicy.LinkConstraints.canCreateAClassSubClasses_4001(getSource(), getTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in create link command"); //$NON-NLS-1$ + } + + if (getSource() != null && getTarget() != null) + { + getSource().getSubClasses().add(getTarget()); + } + return CommandResult.newOKCommandResult(); + + } + + /** + * @generated + */ + protected void setElementToEdit(EObject element) + { + throw new UnsupportedOperationException(); + } + + /** + * @generated + */ + protected AClass getSource() + { + return (AClass)source; + } + + /** + * @generated + */ + protected AClass getTarget() + { + return (AClass)target; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassSubClassesReorientCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassSubClassesReorientCommand.java new file mode 100644 index 0000000000..cf8a305ad4 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AClassSubClassesReorientCommand.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreBaseItemSemanticEditPolicy; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest; + +/** + * @generated + */ +public class AClassSubClassesReorientCommand extends EditElementCommand +{ + + /** + * @generated + */ + private final int reorientDirection; + + /** + * @generated + */ + private final EObject referenceOwner; + + /** + * @generated + */ + private final EObject oldEnd; + + /** + * @generated + */ + private final EObject newEnd; + + /** + * @generated + */ + public AClassSubClassesReorientCommand(ReorientReferenceRelationshipRequest request) + { + super(request.getLabel(), null, request); + reorientDirection = request.getDirection(); + referenceOwner = request.getReferenceOwner(); + oldEnd = request.getOldRelationshipEnd(); + newEnd = request.getNewRelationshipEnd(); + } + + /** + * @generated + */ + public boolean canExecute() + { + if (false == referenceOwner instanceof AClass) + { + return false; + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return canReorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return canReorientTarget(); + } + return false; + } + + /** + * @generated + */ + protected boolean canReorientSource() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints + .canExistAClassSubClasses_4001(getNewSource(), getOldTarget()); + } + + /** + * @generated + */ + protected boolean canReorientTarget() + { + if (!(oldEnd instanceof AClass && newEnd instanceof AClass)) + { + return false; + } + return AcoreBaseItemSemanticEditPolicy.LinkConstraints + .canExistAClassSubClasses_4001(getOldSource(), getNewTarget()); + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + if (!canExecute()) + { + throw new ExecutionException("Invalid arguments in reorient link command"); //$NON-NLS-1$ + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) + { + return reorientSource(); + } + if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) + { + return reorientTarget(); + } + throw new IllegalStateException(); + } + + /** + * @generated + */ + protected CommandResult reorientSource() throws ExecutionException + { + getOldSource().getSubClasses().remove(getOldTarget()); + getNewSource().getSubClasses().add(getOldTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected CommandResult reorientTarget() throws ExecutionException + { + getOldSource().getSubClasses().remove(getOldTarget()); + getOldSource().getSubClasses().add(getNewTarget()); + return CommandResult.newOKCommandResult(referenceOwner); + } + + /** + * @generated + */ + protected AClass getOldSource() + { + return (AClass)referenceOwner; + } + + /** + * @generated + */ + protected AClass getNewSource() + { + return (AClass)newEnd; + } + + /** + * @generated + */ + protected AClass getOldTarget() + { + return (AClass)oldEnd; + } + + /** + * @generated + */ + protected AClass getNewTarget() + { + return (AClass)newEnd; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AInterfaceCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AInterfaceCreateCommand.java new file mode 100644 index 0000000000..ed80a8ede0 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AInterfaceCreateCommand.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.ACoreRoot; +import org.eclipse.emf.cdo.dawn.examples.acore.AInterface; +import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AInterfaceCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + public AInterfaceCreateCommand(CreateElementRequest req) + { + super(req.getLabel(), null, req); + } + + /** + * FIXME: replace with setElementToEdit() + * @generated + */ + protected EObject getElementToEdit() + { + EObject container = ((CreateElementRequest)getRequest()).getContainer(); + if (container instanceof View) + { + container = ((View)container).getElement(); + } + return container; + } + + /** + * @generated + */ + public boolean canExecute() + { + return true; + + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + AInterface newElement = AcoreFactory.eINSTANCE.createAInterface(); + + ACoreRoot owner = (ACoreRoot)getElementToEdit(); + owner.getInterfaces().add(newElement); + + doConfigure(newElement, monitor, info); + + ((CreateElementRequest)getRequest()).setNewElement(newElement); + return CommandResult.newOKCommandResult(newElement); + } + + /** + * @generated + */ + protected void doConfigure(AInterface newElement, IProgressMonitor monitor, IAdaptable info) + throws ExecutionException + { + IElementType elementType = ((CreateElementRequest)getRequest()).getElementType(); + ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType); + configureRequest.setClientContext(((CreateElementRequest)getRequest()).getClientContext()); + configureRequest.addParameters(getRequest().getParameters()); + ICommand configureCommand = elementType.getEditCommand(configureRequest); + if (configureCommand != null && configureCommand.canExecute()) + { + configureCommand.execute(monitor, info); + } + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AOperation2CreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AOperation2CreateCommand.java new file mode 100644 index 0000000000..4ce577867b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AOperation2CreateCommand.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.ABasicClass; +import org.eclipse.emf.cdo.dawn.examples.acore.AOperation; +import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AOperation2CreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + public AOperation2CreateCommand(CreateElementRequest req) + { + super(req.getLabel(), null, req); + } + + /** + * FIXME: replace with setElementToEdit() + * @generated + */ + protected EObject getElementToEdit() + { + EObject container = ((CreateElementRequest)getRequest()).getContainer(); + if (container instanceof View) + { + container = ((View)container).getElement(); + } + return container; + } + + /** + * @generated + */ + public boolean canExecute() + { + return true; + + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + AOperation newElement = AcoreFactory.eINSTANCE.createAOperation(); + + ABasicClass owner = (ABasicClass)getElementToEdit(); + owner.getOperations().add(newElement); + + doConfigure(newElement, monitor, info); + + ((CreateElementRequest)getRequest()).setNewElement(newElement); + return CommandResult.newOKCommandResult(newElement); + } + + /** + * @generated + */ + protected void doConfigure(AOperation newElement, IProgressMonitor monitor, IAdaptable info) + throws ExecutionException + { + IElementType elementType = ((CreateElementRequest)getRequest()).getElementType(); + ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType); + configureRequest.setClientContext(((CreateElementRequest)getRequest()).getClientContext()); + configureRequest.addParameters(getRequest().getParameters()); + ICommand configureCommand = elementType.getEditCommand(configureRequest); + if (configureCommand != null && configureCommand.canExecute()) + { + configureCommand.execute(monitor, info); + } + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AOperationCreateCommand.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AOperationCreateCommand.java new file mode 100644 index 0000000000..76d30326fe --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/commands/AOperationCreateCommand.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.emf.cdo.dawn.examples.acore.ABasicClass; +import org.eclipse.emf.cdo.dawn.examples.acore.AOperation; +import org.eclipse.emf.cdo.dawn.examples.acore.AcoreFactory; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AOperationCreateCommand extends EditElementCommand +{ + + /** + * @generated + */ + public AOperationCreateCommand(CreateElementRequest req) + { + super(req.getLabel(), null, req); + } + + /** + * FIXME: replace with setElementToEdit() + * @generated + */ + protected EObject getElementToEdit() + { + EObject container = ((CreateElementRequest)getRequest()).getContainer(); + if (container instanceof View) + { + container = ((View)container).getElement(); + } + return container; + } + + /** + * @generated + */ + public boolean canExecute() + { + return true; + + } + + /** + * @generated + */ + protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + AOperation newElement = AcoreFactory.eINSTANCE.createAOperation(); + + ABasicClass owner = (ABasicClass)getElementToEdit(); + owner.getOperations().add(newElement); + + doConfigure(newElement, monitor, info); + + ((CreateElementRequest)getRequest()).setNewElement(newElement); + return CommandResult.newOKCommandResult(newElement); + } + + /** + * @generated + */ + protected void doConfigure(AOperation newElement, IProgressMonitor monitor, IAdaptable info) + throws ExecutionException + { + IElementType elementType = ((CreateElementRequest)getRequest()).getElementType(); + ConfigureRequest configureRequest = new ConfigureRequest(getEditingDomain(), newElement, elementType); + configureRequest.setClientContext(((CreateElementRequest)getRequest()).getClientContext()); + configureRequest.addParameters(getRequest().getParameters()); + ICommand configureCommand = elementType.getEditCommand(configureRequest); + if (configureCommand != null && configureCommand.canExecute()) + { + configureCommand.execute(monitor, info); + } + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AAttributeEditHelper.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AAttributeEditHelper.java new file mode 100644 index 0000000000..c7dab08b2e --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AAttributeEditHelper.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.helpers; + +/** + * @generated + */ +public class AAttributeEditHelper extends AcoreBaseEditHelper +{ +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AClassEditHelper.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AClassEditHelper.java new file mode 100644 index 0000000000..1e124eef34 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AClassEditHelper.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.helpers; + +/** + * @generated + */ +public class AClassEditHelper extends AcoreBaseEditHelper +{ +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/ACoreRootEditHelper.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/ACoreRootEditHelper.java new file mode 100644 index 0000000000..a45b515032 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/ACoreRootEditHelper.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.helpers; + +/** + * @generated + */ +public class ACoreRootEditHelper extends AcoreBaseEditHelper +{ +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AInterfaceEditHelper.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AInterfaceEditHelper.java new file mode 100644 index 0000000000..e1edb854e0 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AInterfaceEditHelper.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.helpers; + +/** + * @generated + */ +public class AInterfaceEditHelper extends AcoreBaseEditHelper +{ +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AOperationEditHelper.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AOperationEditHelper.java new file mode 100644 index 0000000000..7600f1dade --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AOperationEditHelper.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.helpers; + +/** + * @generated + */ +public class AOperationEditHelper extends AcoreBaseEditHelper +{ +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AcoreBaseEditHelper.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AcoreBaseEditHelper.java new file mode 100644 index 0000000000..ce4a1fcf01 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/helpers/AcoreBaseEditHelper.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.helpers; + +import org.eclipse.gmf.runtime.common.core.command.CompositeCommand; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.edithelper.AbstractEditHelper; +import org.eclipse.gmf.runtime.emf.type.core.edithelper.IEditHelperAdvice; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.IEditCommandRequest; + +/** + * @generated + */ +public class AcoreBaseEditHelper extends AbstractEditHelper +{ + + /** + * @generated + */ + public static final String EDIT_POLICY_COMMAND = "edit policy command"; //$NON-NLS-1$ + + /** + * @generated + */ + public static final String CONTEXT_ELEMENT_TYPE = "context element type"; //$NON-NLS-1$ + + /** + * @generated + */ + protected IEditHelperAdvice[] getEditHelperAdvice(IEditCommandRequest req) + { + if (req.getParameter(CONTEXT_ELEMENT_TYPE) instanceof IElementType) + { + return ElementTypeRegistry.getInstance() + .getEditHelperAdvice((IElementType)req.getParameter(CONTEXT_ELEMENT_TYPE)); + } + return super.getEditHelperAdvice(req); + } + + /** + * @generated + */ + protected ICommand getInsteadCommand(IEditCommandRequest req) + { + ICommand epCommand = (ICommand)req.getParameter(EDIT_POLICY_COMMAND); + req.setParameter(EDIT_POLICY_COMMAND, null); + ICommand ehCommand = super.getInsteadCommand(req); + if (epCommand == null) + { + return ehCommand; + } + if (ehCommand == null) + { + return epCommand; + } + CompositeCommand command = new CompositeCommand(null); + command.add(epCommand); + command.add(ehCommand); + return command; + } + + /** + * @generated + */ + protected ICommand getCreateCommand(CreateElementRequest req) + { + return null; + } + + /** + * @generated + */ + protected ICommand getCreateRelationshipCommand(CreateRelationshipRequest req) + { + return null; + } + + /** + * @generated + */ + protected ICommand getDestroyElementCommand(DestroyElementRequest req) + { + return null; + } + + /** + * @generated + */ + protected ICommand getDestroyReferenceCommand(DestroyReferenceRequest req) + { + return null; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AAttribute2EditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AAttribute2EditPart.java new file mode 100644 index 0000000000..3fa23a04ea --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AAttribute2EditPart.java @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.Collections; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AAttribute2ItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextNonResizableEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreParserProvider; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.gef.AccessibleEditPart; +import org.eclipse.gef.DragTracker; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.Request; +import org.eclipse.gef.requests.DirectEditRequest; +import org.eclipse.gef.requests.SelectionRequest; +import org.eclipse.gef.tools.DirectEditManager; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParser; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions; +import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ListItemComponentEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry; +import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx; +import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; +import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser; +import org.eclipse.gmf.runtime.notation.FontStyle; +import org.eclipse.gmf.runtime.notation.NotationPackage; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.viewers.ICellEditorValidator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; + +/** + * @generated + */ +public class AAttribute2EditPart extends CompartmentEditPart implements ITextAwareEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 3003; + + /** + * @generated + */ + private DirectEditManager manager; + + /** + * @generated + */ + private IParser parser; + + /** + * @generated + */ + private List parserElements; + + /** + * @generated + */ + private String defaultText; + + /** + * @generated + */ + public AAttribute2EditPart(View view) + { + super(view); + } + + /** + * @generated + */ + public DragTracker getDragTracker(Request request) + { + if (request instanceof SelectionRequest && ((SelectionRequest)request).getLastButtonPressed() == 3) + { + return null; + } + return new DragEditPartsTrackerEx(this); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AAttribute2ItemSemanticEditPolicy()); + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new AcoreTextNonResizableEditPolicy()); + installEditPolicy(EditPolicy.COMPONENT_ROLE, new ListItemComponentEditPolicy()); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy()); + } + + /** + * @generated + */ + protected String getLabelTextHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getText(); + } + else + { + return ((Label)figure).getText(); + } + } + + /** + * @generated + */ + protected void setLabelTextHelper(IFigure figure, String text) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setText(text); + } + else + { + ((Label)figure).setText(text); + } + } + + /** + * @generated + */ + protected Image getLabelIconHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getIcon(); + } + else + { + return ((Label)figure).getIcon(); + } + } + + /** + * @generated + */ + protected void setLabelIconHelper(IFigure figure, Image icon) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setIcon(icon); + } + else + { + ((Label)figure).setIcon(icon); + } + } + + /** + * @generated + */ + public void setLabel(IFigure figure) + { + unregisterVisuals(); + setFigure(figure); + defaultText = getLabelTextHelper(figure); + registerVisuals(); + refreshVisuals(); + } + + /** + * @generated + */ + protected List getModelChildren() + { + return Collections.EMPTY_LIST; + } + + /** + * @generated + */ + public IGraphicalEditPart getChildBySemanticHint(String semanticHint) + { + return null; + } + + /** + * @generated + */ + protected EObject getParserElement() + { + return resolveSemanticElement(); + } + + /** + * @generated + */ + protected Image getLabelIcon() + { + return null; + } + + /** + * @generated + */ + protected String getLabelText() + { + String text = null; + EObject parserElement = getParserElement(); + if (parserElement != null && getParser() != null) + { + text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue()); + } + if (text == null || text.length() == 0) + { + text = defaultText; + } + return text; + } + + /** + * @generated + */ + public void setLabelText(String text) + { + setLabelTextHelper(getFigure(), text); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + public String getEditText() + { + if (getParserElement() == null || getParser() == null) + { + return ""; //$NON-NLS-1$ + } + return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue()); + } + + /** + * @generated + */ + protected boolean isEditable() + { + return getParser() != null; + } + + /** + * @generated + */ + public ICellEditorValidator getEditTextValidator() + { + return new ICellEditorValidator() + { + + public String isValid(final Object value) + { + if (value instanceof String) + { + final EObject element = getParserElement(); + final IParser parser = getParser(); + try + { + IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() + { + + public void run() + { + setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value)); + } + }); + return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage(); + } + catch (InterruptedException ie) + { + ie.printStackTrace(); + } + } + + // shouldn't get here + return null; + } + }; + } + + /** + * @generated + */ + public IContentAssistProcessor getCompletionProcessor() + { + if (getParserElement() == null || getParser() == null) + { + return null; + } + return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement())); + } + + /** + * @generated + */ + public ParserOptions getParserOptions() + { + return ParserOptions.NONE; + } + + /** + * @generated + */ + public IParser getParser() + { + if (parser == null) + { + parser = AcoreParserProvider.getParser(AcoreElementTypes.AAttribute_3003, getParserElement(), + AcoreVisualIDRegistry + .getType(org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AAttribute2EditPart.VISUAL_ID)); + } + return parser; + } + + /** + * @generated + */ + protected DirectEditManager getManager() + { + if (manager == null) + { + setManager(new TextDirectEditManager(this, TextDirectEditManager.getTextCellEditorClass(this), + AcoreEditPartFactory.getTextCellEditorLocator(this))); + } + return manager; + } + + /** + * @generated + */ + protected void setManager(DirectEditManager manager) + { + this.manager = manager; + } + + /** + * @generated + */ + protected void performDirectEdit() + { + getManager().show(); + } + + /** + * @generated + */ + protected void performDirectEdit(Point eventLocation) + { + if (getManager().getClass() == TextDirectEditManager.class) + { + ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint()); + } + } + + /** + * @generated + */ + private void performDirectEdit(char initialCharacter) + { + if (getManager() instanceof TextDirectEditManager) + { + ((TextDirectEditManager)getManager()).show(initialCharacter); + } + else + { + performDirectEdit(); + } + } + + /** + * @generated + */ + protected void performDirectEditRequest(Request request) + { + final Request theRequest = request; + try + { + getEditingDomain().runExclusive(new Runnable() + { + + public void run() + { + if (isActive() && isEditable()) + { + if (theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) + { + Character initialChar = (Character)theRequest.getExtendedData().get( + RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR); + performDirectEdit(initialChar.charValue()); + } + else if ((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) + { + DirectEditRequest editRequest = (DirectEditRequest)theRequest; + performDirectEdit(editRequest.getLocation()); + } + else + { + performDirectEdit(); + } + } + } + }); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + /** + * @generated + */ + protected void refreshVisuals() + { + super.refreshVisuals(); + refreshLabel(); + refreshFont(); + refreshFontColor(); + refreshUnderline(); + refreshStrikeThrough(); + } + + /** + * @generated + */ + protected void refreshLabel() + { + setLabelTextHelper(getFigure(), getLabelText()); + setLabelIconHelper(getFigure(), getLabelIcon()); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + protected void refreshUnderline() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline()); + } + } + + /** + * @generated + */ + protected void refreshStrikeThrough() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough()); + } + } + + /** + * @generated + */ + protected void refreshFont() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null) + { + FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD + : SWT.NORMAL) + | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL)); + setFont(fontData); + } + } + + /** + * @generated + */ + protected void setFontColor(Color color) + { + getFigure().setForegroundColor(color); + } + + /** + * @generated + */ + protected void addSemanticListeners() + { + if (getParser() instanceof ISemanticParser) + { + EObject element = resolveSemanticElement(); + parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element); + for (int i = 0; i < parserElements.size(); i++) + { + addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$ + } + } + else + { + super.addSemanticListeners(); + } + } + + /** + * @generated + */ + protected void removeSemanticListeners() + { + if (parserElements != null) + { + for (int i = 0; i < parserElements.size(); i++) + { + removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$ + } + } + else + { + super.removeSemanticListeners(); + } + } + + /** + * @generated + */ + protected AccessibleEditPart getAccessibleEditPart() + { + if (accessibleEP == null) + { + accessibleEP = new AccessibleGraphicalEditPart() + { + + public void getName(AccessibleEvent e) + { + e.result = getLabelTextHelper(getFigure()); + } + }; + } + return accessibleEP; + } + + /** + * @generated + */ + private View getFontStyleOwnerView() + { + return getPrimaryView(); + } + + /** + * @generated + */ + protected void addNotationalListeners() + { + super.addNotationalListeners(); + addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void removeNotationalListeners() + { + super.removeNotationalListeners(); + removeListenerFilter("PrimaryView"); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void handleNotificationEvent(Notification event) + { + Object feature = event.getFeature(); + if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) + { + Integer c = (Integer)event.getNewValue(); + setFontColor(DiagramColorRegistry.getInstance().getColor(c)); + } + else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) + { + refreshUnderline(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) + { + refreshStrikeThrough(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) + { + refreshFont(); + } + else + { + if (getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) + { + refreshLabel(); + } + if (getParser() instanceof ISemanticParser) + { + ISemanticParser modelParser = (ISemanticParser)getParser(); + if (modelParser.areSemanticElementsAffected(null, event)) + { + removeSemanticListeners(); + if (resolveSemanticElement() != null) + { + addSemanticListeners(); + } + refreshLabel(); + } + } + } + super.handleNotificationEvent(event); + } + + /** + * @generated + */ + protected IFigure createFigure() + { + IFigure label = createFigurePrim(); + defaultText = getLabelTextHelper(label); + return label; + } + + /** + * @generated + */ + protected IFigure createFigurePrim() + { + return new WrappingLabel(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AAttributeEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AAttributeEditPart.java new file mode 100644 index 0000000000..1924adca79 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AAttributeEditPart.java @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.Collections; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AAttributeItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextNonResizableEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreParserProvider; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.gef.AccessibleEditPart; +import org.eclipse.gef.DragTracker; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.Request; +import org.eclipse.gef.requests.DirectEditRequest; +import org.eclipse.gef.requests.SelectionRequest; +import org.eclipse.gef.tools.DirectEditManager; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParser; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions; +import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ListItemComponentEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry; +import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx; +import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; +import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser; +import org.eclipse.gmf.runtime.notation.FontStyle; +import org.eclipse.gmf.runtime.notation.NotationPackage; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.viewers.ICellEditorValidator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; + +/** + * @generated + */ +public class AAttributeEditPart extends CompartmentEditPart implements ITextAwareEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 3001; + + /** + * @generated + */ + private DirectEditManager manager; + + /** + * @generated + */ + private IParser parser; + + /** + * @generated + */ + private List parserElements; + + /** + * @generated + */ + private String defaultText; + + /** + * @generated + */ + public AAttributeEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + public DragTracker getDragTracker(Request request) + { + if (request instanceof SelectionRequest && ((SelectionRequest)request).getLastButtonPressed() == 3) + { + return null; + } + return new DragEditPartsTrackerEx(this); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AAttributeItemSemanticEditPolicy()); + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new AcoreTextNonResizableEditPolicy()); + installEditPolicy(EditPolicy.COMPONENT_ROLE, new ListItemComponentEditPolicy()); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy()); + } + + /** + * @generated + */ + protected String getLabelTextHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getText(); + } + else + { + return ((Label)figure).getText(); + } + } + + /** + * @generated + */ + protected void setLabelTextHelper(IFigure figure, String text) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setText(text); + } + else + { + ((Label)figure).setText(text); + } + } + + /** + * @generated + */ + protected Image getLabelIconHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getIcon(); + } + else + { + return ((Label)figure).getIcon(); + } + } + + /** + * @generated + */ + protected void setLabelIconHelper(IFigure figure, Image icon) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setIcon(icon); + } + else + { + ((Label)figure).setIcon(icon); + } + } + + /** + * @generated + */ + public void setLabel(IFigure figure) + { + unregisterVisuals(); + setFigure(figure); + defaultText = getLabelTextHelper(figure); + registerVisuals(); + refreshVisuals(); + } + + /** + * @generated + */ + protected List getModelChildren() + { + return Collections.EMPTY_LIST; + } + + /** + * @generated + */ + public IGraphicalEditPart getChildBySemanticHint(String semanticHint) + { + return null; + } + + /** + * @generated + */ + protected EObject getParserElement() + { + return resolveSemanticElement(); + } + + /** + * @generated + */ + protected Image getLabelIcon() + { + return null; + } + + /** + * @generated + */ + protected String getLabelText() + { + String text = null; + EObject parserElement = getParserElement(); + if (parserElement != null && getParser() != null) + { + text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue()); + } + if (text == null || text.length() == 0) + { + text = defaultText; + } + return text; + } + + /** + * @generated + */ + public void setLabelText(String text) + { + setLabelTextHelper(getFigure(), text); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + public String getEditText() + { + if (getParserElement() == null || getParser() == null) + { + return ""; //$NON-NLS-1$ + } + return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue()); + } + + /** + * @generated + */ + protected boolean isEditable() + { + return getParser() != null; + } + + /** + * @generated + */ + public ICellEditorValidator getEditTextValidator() + { + return new ICellEditorValidator() + { + + public String isValid(final Object value) + { + if (value instanceof String) + { + final EObject element = getParserElement(); + final IParser parser = getParser(); + try + { + IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() + { + + public void run() + { + setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value)); + } + }); + return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage(); + } + catch (InterruptedException ie) + { + ie.printStackTrace(); + } + } + + // shouldn't get here + return null; + } + }; + } + + /** + * @generated + */ + public IContentAssistProcessor getCompletionProcessor() + { + if (getParserElement() == null || getParser() == null) + { + return null; + } + return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement())); + } + + /** + * @generated + */ + public ParserOptions getParserOptions() + { + return ParserOptions.NONE; + } + + /** + * @generated + */ + public IParser getParser() + { + if (parser == null) + { + parser = AcoreParserProvider.getParser(AcoreElementTypes.AAttribute_3001, getParserElement(), + AcoreVisualIDRegistry + .getType(org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AAttributeEditPart.VISUAL_ID)); + } + return parser; + } + + /** + * @generated + */ + protected DirectEditManager getManager() + { + if (manager == null) + { + setManager(new TextDirectEditManager(this, TextDirectEditManager.getTextCellEditorClass(this), + AcoreEditPartFactory.getTextCellEditorLocator(this))); + } + return manager; + } + + /** + * @generated + */ + protected void setManager(DirectEditManager manager) + { + this.manager = manager; + } + + /** + * @generated + */ + protected void performDirectEdit() + { + getManager().show(); + } + + /** + * @generated + */ + protected void performDirectEdit(Point eventLocation) + { + if (getManager().getClass() == TextDirectEditManager.class) + { + ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint()); + } + } + + /** + * @generated + */ + private void performDirectEdit(char initialCharacter) + { + if (getManager() instanceof TextDirectEditManager) + { + ((TextDirectEditManager)getManager()).show(initialCharacter); + } + else + { + performDirectEdit(); + } + } + + /** + * @generated + */ + protected void performDirectEditRequest(Request request) + { + final Request theRequest = request; + try + { + getEditingDomain().runExclusive(new Runnable() + { + + public void run() + { + if (isActive() && isEditable()) + { + if (theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) + { + Character initialChar = (Character)theRequest.getExtendedData().get( + RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR); + performDirectEdit(initialChar.charValue()); + } + else if ((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) + { + DirectEditRequest editRequest = (DirectEditRequest)theRequest; + performDirectEdit(editRequest.getLocation()); + } + else + { + performDirectEdit(); + } + } + } + }); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + /** + * @generated + */ + protected void refreshVisuals() + { + super.refreshVisuals(); + refreshLabel(); + refreshFont(); + refreshFontColor(); + refreshUnderline(); + refreshStrikeThrough(); + } + + /** + * @generated + */ + protected void refreshLabel() + { + setLabelTextHelper(getFigure(), getLabelText()); + setLabelIconHelper(getFigure(), getLabelIcon()); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + protected void refreshUnderline() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline()); + } + } + + /** + * @generated + */ + protected void refreshStrikeThrough() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough()); + } + } + + /** + * @generated + */ + protected void refreshFont() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null) + { + FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD + : SWT.NORMAL) + | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL)); + setFont(fontData); + } + } + + /** + * @generated + */ + protected void setFontColor(Color color) + { + getFigure().setForegroundColor(color); + } + + /** + * @generated + */ + protected void addSemanticListeners() + { + if (getParser() instanceof ISemanticParser) + { + EObject element = resolveSemanticElement(); + parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element); + for (int i = 0; i < parserElements.size(); i++) + { + addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$ + } + } + else + { + super.addSemanticListeners(); + } + } + + /** + * @generated + */ + protected void removeSemanticListeners() + { + if (parserElements != null) + { + for (int i = 0; i < parserElements.size(); i++) + { + removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$ + } + } + else + { + super.removeSemanticListeners(); + } + } + + /** + * @generated + */ + protected AccessibleEditPart getAccessibleEditPart() + { + if (accessibleEP == null) + { + accessibleEP = new AccessibleGraphicalEditPart() + { + + public void getName(AccessibleEvent e) + { + e.result = getLabelTextHelper(getFigure()); + } + }; + } + return accessibleEP; + } + + /** + * @generated + */ + private View getFontStyleOwnerView() + { + return getPrimaryView(); + } + + /** + * @generated + */ + protected void addNotationalListeners() + { + super.addNotationalListeners(); + addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void removeNotationalListeners() + { + super.removeNotationalListeners(); + removeListenerFilter("PrimaryView"); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void handleNotificationEvent(Notification event) + { + Object feature = event.getFeature(); + if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) + { + Integer c = (Integer)event.getNewValue(); + setFontColor(DiagramColorRegistry.getInstance().getColor(c)); + } + else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) + { + refreshUnderline(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) + { + refreshStrikeThrough(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) + { + refreshFont(); + } + else + { + if (getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) + { + refreshLabel(); + } + if (getParser() instanceof ISemanticParser) + { + ISemanticParser modelParser = (ISemanticParser)getParser(); + if (modelParser.areSemanticElementsAffected(null, event)) + { + removeSemanticListeners(); + if (resolveSemanticElement() != null) + { + addSemanticListeners(); + } + refreshLabel(); + } + } + } + super.handleNotificationEvent(event); + } + + /** + * @generated + */ + protected IFigure createFigure() + { + IFigure label = createFigurePrim(); + defaultText = getLabelTextHelper(label); + return label; + } + + /** + * @generated + */ + protected IFigure createFigurePrim() + { + return new WrappingLabel(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAAttributeCompartmentEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAAttributeCompartmentEditPart.java new file mode 100644 index 0000000000..3440e62958 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAAttributeCompartmentEditPart.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassAAttributeCompartmentCanonicalEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassAAttributeCompartmentItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.Messages; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ListCompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassAAttributeCompartmentEditPart extends ListCompartmentEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 7003; + + /** + * @generated + */ + public AClassAAttributeCompartmentEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected boolean hasModelChildrenChanged(Notification evt) + { + return false; + } + + /** + * @generated + */ + public String getCompartmentName() + { + return Messages.AClassAAttributeCompartmentEditPart_title; + } + + /** + * @generated + */ + public IFigure createFigure() + { + ResizableCompartmentFigure result = (ResizableCompartmentFigure)super.createFigure(); + result.setTitleVisibility(false); + return result; + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassAAttributeCompartmentItemSemanticEditPolicy()); + installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy()); + installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE, new DragDropEditPolicy()); + installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new AClassAAttributeCompartmentCanonicalEditPolicy()); + } + + /** + * @generated + */ + protected void setRatio(Double ratio) + { + // nothing to do -- parent layout does not accept Double constraints as ratio + // super.setRatio(ratio); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAOperationClassCompartmentEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAOperationClassCompartmentEditPart.java new file mode 100644 index 0000000000..a2c524c4e9 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAOperationClassCompartmentEditPart.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassAOperationClassCompartmentCanonicalEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassAOperationClassCompartmentItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.Messages; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ListCompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassAOperationClassCompartmentEditPart extends ListCompartmentEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 7004; + + /** + * @generated + */ + public AClassAOperationClassCompartmentEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected boolean hasModelChildrenChanged(Notification evt) + { + return false; + } + + /** + * @generated + */ + public String getCompartmentName() + { + return Messages.AClassAOperationClassCompartmentEditPart_title; + } + + /** + * @generated + */ + public IFigure createFigure() + { + ResizableCompartmentFigure result = (ResizableCompartmentFigure)super.createFigure(); + result.setTitleVisibility(false); + return result; + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassAOperationClassCompartmentItemSemanticEditPolicy()); + installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy()); + installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE, new DragDropEditPolicy()); + installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new AClassAOperationClassCompartmentCanonicalEditPolicy()); + } + + /** + * @generated + */ + protected void setRatio(Double ratio) + { + // nothing to do -- parent layout does not accept Double constraints as ratio + // super.setRatio(ratio); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAggregationsEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAggregationsEditPart.java new file mode 100644 index 0000000000..22402cf228 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAggregationsEditPart.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.Connection; +import org.eclipse.draw2d.PolygonDecoration; +import org.eclipse.draw2d.RotatableDecoration; +import org.eclipse.draw2d.geometry.PointList; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassAggregationsItemSemanticEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.swt.graphics.Color; + +/** + * @generated + */ +public class AClassAggregationsEditPart extends ConnectionNodeEditPart implements ITreeBranchEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 4004; + + /** + * @generated + */ + public AClassAggregationsEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassAggregationsItemSemanticEditPolicy()); + } + + /** + * Creates figure for this edit part. + * + * Body of this method does not depend on settings in generation model + * so you may safely remove <i>generated</i> tag and modify it. + * + * @generated + */ + + protected Connection createConnectionFigure() + { + return new AClassAggregationClassesFigure(); + } + + /** + * @generated + */ + public AClassAggregationClassesFigure getPrimaryShape() + { + return (AClassAggregationClassesFigure)getFigure(); + } + + /** + * @generated + */ + public class AClassAggregationClassesFigure extends PolylineConnectionEx + { + + /** + * @generated + */ + public AClassAggregationClassesFigure() + { + this.setLineWidth(1); + + setTargetDecoration(createTargetDecoration()); + } + + /** + * @generated + */ + private RotatableDecoration createTargetDecoration() + { + PolygonDecoration df = new PolygonDecoration(); + df.setFill(true); + df.setLineWidth(1); + df.setBackgroundColor(DF_BACK); + PointList pl = new PointList(); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(2)); + pl.addPoint(getMapMode().DPtoLP(0), getMapMode().DPtoLP(0)); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(-2)); + pl.addPoint(getMapMode().DPtoLP(-4), getMapMode().DPtoLP(0)); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(2)); + df.setTemplate(pl); + df.setScale(getMapMode().DPtoLP(7), getMapMode().DPtoLP(3)); + return df; + } + + } + + /** + * @generated + */ + static final Color DF_BACK = new Color(null, 255, 255, 255); + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAssociationsEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAssociationsEditPart.java new file mode 100644 index 0000000000..395daea6bd --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassAssociationsEditPart.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.Connection; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassAssociationsItemSemanticEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassAssociationsEditPart extends ConnectionNodeEditPart implements ITreeBranchEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 4003; + + /** + * @generated + */ + public AClassAssociationsEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassAssociationsItemSemanticEditPolicy()); + } + + /** + * Creates figure for this edit part. + * + * Body of this method does not depend on settings in generation model + * so you may safely remove <i>generated</i> tag and modify it. + * + * @generated + */ + protected Connection createConnectionFigure() + { + return new PolylineConnectionEx(); + } + + /** + * @generated + */ + public PolylineConnectionEx getPrimaryShape() + { + return (PolylineConnectionEx)getFigure(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassCompositionsEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassCompositionsEditPart.java new file mode 100644 index 0000000000..c572398f54 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassCompositionsEditPart.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.Connection; +import org.eclipse.draw2d.PolygonDecoration; +import org.eclipse.draw2d.RotatableDecoration; +import org.eclipse.draw2d.geometry.PointList; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassCompositionsItemSemanticEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.swt.graphics.Color; + +/** + * @generated + */ +public class AClassCompositionsEditPart extends ConnectionNodeEditPart implements ITreeBranchEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 4005; + + /** + * @generated + */ + public AClassCompositionsEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassCompositionsItemSemanticEditPolicy()); + } + + /** + * Creates figure for this edit part. + * + * Body of this method does not depend on settings in generation model + * so you may safely remove <i>generated</i> tag and modify it. + * + * @generated + */ + + protected Connection createConnectionFigure() + { + return new AClassCompositionClassesFigure(); + } + + /** + * @generated + */ + public AClassCompositionClassesFigure getPrimaryShape() + { + return (AClassCompositionClassesFigure)getFigure(); + } + + /** + * @generated + */ + public class AClassCompositionClassesFigure extends PolylineConnectionEx + { + + /** + * @generated + */ + public AClassCompositionClassesFigure() + { + this.setLineWidth(1); + + setTargetDecoration(createTargetDecoration()); + } + + /** + * @generated + */ + private RotatableDecoration createTargetDecoration() + { + PolygonDecoration df = new PolygonDecoration(); + df.setFill(true); + df.setLineWidth(1); + df.setBackgroundColor(DF_BACK); + PointList pl = new PointList(); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(2)); + pl.addPoint(getMapMode().DPtoLP(0), getMapMode().DPtoLP(0)); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(-2)); + pl.addPoint(getMapMode().DPtoLP(-4), getMapMode().DPtoLP(0)); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(2)); + df.setTemplate(pl); + df.setScale(getMapMode().DPtoLP(7), getMapMode().DPtoLP(3)); + return df; + } + + } + + /** + * @generated + */ + static final Color DF_BACK = new Color(null, 0, 0, 0); + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassEditPart.java new file mode 100644 index 0000000000..a71cfd13f5 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassEditPart.java @@ -0,0 +1,581 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.RectangleFigure; +import org.eclipse.draw2d.Shape; +import org.eclipse.draw2d.StackLayout; +import org.eclipse.draw2d.ToolbarLayout; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.Request; +import org.eclipse.gef.editpolicies.LayoutEditPolicy; +import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ConstrainedToolbarLayoutEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest; +import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure; +import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.swt.graphics.Color; + +/** + * @generated + */ +public class AClassEditPart extends ShapeNodeEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 2002; + + /** + * @generated + */ + protected IFigure contentPane; + + /** + * @generated + */ + protected IFigure primaryShape; + + /** + * @generated + */ + public AClassEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy()); + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassItemSemanticEditPolicy()); + installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy()); + // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies + // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE); + } + + /** + * @generated + */ + protected LayoutEditPolicy createLayoutEditPolicy() + { + + ConstrainedToolbarLayoutEditPolicy lep = new ConstrainedToolbarLayoutEditPolicy() + { + + protected EditPolicy createChildEditPolicy(EditPart child) + { + if (child.getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE) == null) + { + if (child instanceof ITextAwareEditPart) + { + return new AcoreTextSelectionEditPolicy(); + } + } + return super.createChildEditPolicy(child); + } + }; + return lep; + } + + /** + * @generated + */ + protected IFigure createNodeShape() + { + AClassFigure figure = new AClassFigure(); + return primaryShape = figure; + } + + /** + * @generated + */ + public AClassFigure getPrimaryShape() + { + return (AClassFigure)primaryShape; + } + + /** + * @generated + */ + protected boolean addFixedChild(EditPart childEditPart) + { + if (childEditPart instanceof AClassNameEditPart) + { + ((AClassNameEditPart)childEditPart).setLabel(getPrimaryShape().getFigureAClassNameFigure()); + return true; + } + if (childEditPart instanceof AClassAAttributeCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureClassAttributes(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.add(((AClassAAttributeCompartmentEditPart)childEditPart).getFigure()); + return true; + } + if (childEditPart instanceof AClassAOperationClassCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureClassOperations(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.add(((AClassAOperationClassCompartmentEditPart)childEditPart).getFigure()); + return true; + } + return false; + } + + /** + * @generated + */ + protected boolean removeFixedChild(EditPart childEditPart) + { + if (childEditPart instanceof AClassNameEditPart) + { + return true; + } + if (childEditPart instanceof AClassAAttributeCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureClassAttributes(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.remove(((AClassAAttributeCompartmentEditPart)childEditPart).getFigure()); + return true; + } + if (childEditPart instanceof AClassAOperationClassCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureClassOperations(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.remove(((AClassAOperationClassCompartmentEditPart)childEditPart).getFigure()); + return true; + } + return false; + } + + /** + * @generated + */ + protected void addChildVisual(EditPart childEditPart, int index) + { + if (addFixedChild(childEditPart)) + { + return; + } + super.addChildVisual(childEditPart, -1); + } + + /** + * @generated + */ + protected void removeChildVisual(EditPart childEditPart) + { + if (removeFixedChild(childEditPart)) + { + return; + } + super.removeChildVisual(childEditPart); + } + + /** + * @generated + */ + protected IFigure getContentPaneFor(IGraphicalEditPart editPart) + { + if (editPart instanceof AClassAAttributeCompartmentEditPart) + { + return getPrimaryShape().getFigureClassAttributes(); + } + if (editPart instanceof AClassAOperationClassCompartmentEditPart) + { + return getPrimaryShape().getFigureClassOperations(); + } + return getContentPane(); + } + + /** + * @generated + */ + protected NodeFigure createNodePlate() + { + DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40); + return result; + } + + /** + * Creates figure for this edit part. + * + * Body of this method does not depend on settings in generation model + * so you may safely remove <i>generated</i> tag and modify it. + * + * @generated + */ + protected NodeFigure createNodeFigure() + { + NodeFigure figure = createNodePlate(); + figure.setLayoutManager(new StackLayout()); + IFigure shape = createNodeShape(); + figure.add(shape); + contentPane = setupContentPane(shape); + return figure; + } + + /** + * Default implementation treats passed figure as content pane. + * Respects layout one may have set for generated figure. + * @param nodeShape instance of generated figure class + * @generated + */ + protected IFigure setupContentPane(IFigure nodeShape) + { + if (nodeShape.getLayoutManager() == null) + { + ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout(); + layout.setSpacing(5); + nodeShape.setLayoutManager(layout); + } + return nodeShape; // use nodeShape itself as contentPane + } + + /** + * @generated + */ + public IFigure getContentPane() + { + if (contentPane != null) + { + return contentPane; + } + return super.getContentPane(); + } + + /** + * @generated + */ + protected void setForegroundColor(Color color) + { + if (primaryShape != null) + { + primaryShape.setForegroundColor(color); + } + } + + /** + * @generated + */ + protected void setBackgroundColor(Color color) + { + if (primaryShape != null) + { + primaryShape.setBackgroundColor(color); + } + } + + /** + * @generated + */ + protected void setLineWidth(int width) + { + if (primaryShape instanceof Shape) + { + ((Shape)primaryShape).setLineWidth(width); + } + } + + /** + * @generated + */ + protected void setLineType(int style) + { + if (primaryShape instanceof Shape) + { + ((Shape)primaryShape).setLineStyle(style); + } + } + + /** + * @generated + */ + public EditPart getPrimaryChildEditPart() + { + return getChildBySemanticHint(AcoreVisualIDRegistry.getType(AClassNameEditPart.VISUAL_ID)); + } + + /** + * @generated + */ + public List<IElementType> getMARelTypesOnSource() + { + ArrayList<IElementType> types = new ArrayList<IElementType>(5); + types.add(AcoreElementTypes.AClassSubClasses_4001); + types.add(AcoreElementTypes.AClassImplementedInterfaces_4002); + types.add(AcoreElementTypes.AClassAssociations_4003); + types.add(AcoreElementTypes.AClassAggregations_4004); + types.add(AcoreElementTypes.AClassCompositions_4005); + return types; + } + + /** + * @generated + */ + public List<IElementType> getMARelTypesOnSourceAndTarget(IGraphicalEditPart targetEditPart) + { + LinkedList<IElementType> types = new LinkedList<IElementType>(); + if (targetEditPart instanceof org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassEditPart) + { + types.add(AcoreElementTypes.AClassSubClasses_4001); + } + if (targetEditPart instanceof AInterfaceEditPart) + { + types.add(AcoreElementTypes.AClassImplementedInterfaces_4002); + } + if (targetEditPart instanceof org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassEditPart) + { + types.add(AcoreElementTypes.AClassAssociations_4003); + } + if (targetEditPart instanceof org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassEditPart) + { + types.add(AcoreElementTypes.AClassAggregations_4004); + } + if (targetEditPart instanceof org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassEditPart) + { + types.add(AcoreElementTypes.AClassCompositions_4005); + } + return types; + } + + /** + * @generated + */ + public List<IElementType> getMATypesForTarget(IElementType relationshipType) + { + LinkedList<IElementType> types = new LinkedList<IElementType>(); + if (relationshipType == AcoreElementTypes.AClassSubClasses_4001) + { + types.add(AcoreElementTypes.AClass_2002); + } + else if (relationshipType == AcoreElementTypes.AClassImplementedInterfaces_4002) + { + types.add(AcoreElementTypes.AInterface_2001); + } + else if (relationshipType == AcoreElementTypes.AClassAssociations_4003) + { + types.add(AcoreElementTypes.AClass_2002); + } + else if (relationshipType == AcoreElementTypes.AClassAggregations_4004) + { + types.add(AcoreElementTypes.AClass_2002); + } + else if (relationshipType == AcoreElementTypes.AClassCompositions_4005) + { + types.add(AcoreElementTypes.AClass_2002); + } + return types; + } + + /** + * @generated + */ + public List<IElementType> getMARelTypesOnTarget() + { + ArrayList<IElementType> types = new ArrayList<IElementType>(4); + types.add(AcoreElementTypes.AClassSubClasses_4001); + types.add(AcoreElementTypes.AClassAssociations_4003); + types.add(AcoreElementTypes.AClassAggregations_4004); + types.add(AcoreElementTypes.AClassCompositions_4005); + return types; + } + + /** + * @generated + */ + public List<IElementType> getMATypesForSource(IElementType relationshipType) + { + LinkedList<IElementType> types = new LinkedList<IElementType>(); + if (relationshipType == AcoreElementTypes.AClassSubClasses_4001) + { + types.add(AcoreElementTypes.AClass_2002); + } + else if (relationshipType == AcoreElementTypes.AClassAssociations_4003) + { + types.add(AcoreElementTypes.AClass_2002); + } + else if (relationshipType == AcoreElementTypes.AClassAggregations_4004) + { + types.add(AcoreElementTypes.AClass_2002); + } + else if (relationshipType == AcoreElementTypes.AClassCompositions_4005) + { + types.add(AcoreElementTypes.AClass_2002); + } + return types; + } + + /** + * @generated + */ + public EditPart getTargetEditPart(Request request) + { + if (request instanceof CreateViewAndElementRequest) + { + CreateElementRequestAdapter adapter = ((CreateViewAndElementRequest)request).getViewAndElementDescriptor() + .getCreateElementRequestAdapter(); + IElementType type = (IElementType)adapter.getAdapter(IElementType.class); + if (type == AcoreElementTypes.AAttribute_3003) + { + return getChildBySemanticHint(AcoreVisualIDRegistry.getType(AClassAAttributeCompartmentEditPart.VISUAL_ID)); + } + if (type == AcoreElementTypes.AOperation_3004) + { + return getChildBySemanticHint(AcoreVisualIDRegistry.getType(AClassAOperationClassCompartmentEditPart.VISUAL_ID)); + } + } + return super.getTargetEditPart(request); + } + + /** + * @generated + */ + public class AClassFigure extends RectangleFigure + { + + /** + * @generated + */ + private RectangleFigure fFigureClassAttributes; + + /** + * @generated + */ + private WrappingLabel fFigureAClassNameFigure; + + /** + * @generated + */ + private RectangleFigure fFigureClassOperations; + + /** + * @generated + */ + public AClassFigure() + { + + ToolbarLayout layoutThis = new ToolbarLayout(); + layoutThis.setStretchMinorAxis(true); + layoutThis.setMinorAlignment(ToolbarLayout.ALIGN_CENTER); + + layoutThis.setSpacing(0); + layoutThis.setVertical(true); + + this.setLayoutManager(layoutThis); + + this.setLineWidth(1); + this.setBackgroundColor(THIS_BACK); + createContents(); + } + + /** + * @generated + */ + private void createContents() + { + + fFigureAClassNameFigure = new WrappingLabel(); + fFigureAClassNameFigure.setText("<...>"); + + this.add(fFigureAClassNameFigure); + + fFigureClassAttributes = new RectangleFigure(); + fFigureClassAttributes.setLineWidth(1); + + this.add(fFigureClassAttributes); + fFigureClassAttributes.setLayoutManager(new StackLayout()); + + fFigureClassOperations = new RectangleFigure(); + fFigureClassOperations.setLineWidth(1); + + this.add(fFigureClassOperations); + fFigureClassOperations.setLayoutManager(new StackLayout()); + + } + + /** + * @generated + */ + private boolean myUseLocalCoordinates = false; + + /** + * @generated + */ + protected boolean useLocalCoordinates() + { + return myUseLocalCoordinates; + } + + /** + * @generated + */ + protected void setUseLocalCoordinates(boolean useLocalCoordinates) + { + myUseLocalCoordinates = useLocalCoordinates; + } + + /** + * @generated + */ + public RectangleFigure getFigureClassAttributes() + { + return fFigureClassAttributes; + } + + /** + * @generated + */ + public WrappingLabel getFigureAClassNameFigure() + { + return fFigureAClassNameFigure; + } + + /** + * @generated + */ + public RectangleFigure getFigureClassOperations() + { + return fFigureClassOperations; + } + + } + + /** + * @generated + */ + static final Color THIS_BACK = new Color(null, 230, 230, 255); + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassImplementedInterfacesEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassImplementedInterfacesEditPart.java new file mode 100644 index 0000000000..cadb28c77a --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassImplementedInterfacesEditPart.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.Connection; +import org.eclipse.draw2d.Graphics; +import org.eclipse.draw2d.PolylineDecoration; +import org.eclipse.draw2d.RotatableDecoration; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassImplementedInterfacesItemSemanticEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassImplementedInterfacesEditPart extends ConnectionNodeEditPart implements ITreeBranchEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 4002; + + /** + * @generated + */ + public AClassImplementedInterfacesEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassImplementedInterfacesItemSemanticEditPolicy()); + } + + /** + * Creates figure for this edit part. + * + * Body of this method does not depend on settings in generation model + * so you may safely remove <i>generated</i> tag and modify it. + * + * @generated + */ + + protected Connection createConnectionFigure() + { + return new AClassImplementedInterfacesFigure(); + } + + /** + * @generated + */ + public AClassImplementedInterfacesFigure getPrimaryShape() + { + return (AClassImplementedInterfacesFigure)getFigure(); + } + + /** + * @generated + */ + public class AClassImplementedInterfacesFigure extends PolylineConnectionEx + { + + /** + * @generated + */ + public AClassImplementedInterfacesFigure() + { + this.setLineWidth(1); + this.setLineStyle(Graphics.LINE_DASH); + + setTargetDecoration(createTargetDecoration()); + } + + /** + * @generated + */ + private RotatableDecoration createTargetDecoration() + { + PolylineDecoration df = new PolylineDecoration(); + df.setLineWidth(1); + return df; + } + + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassNameEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassNameEditPart.java new file mode 100644 index 0000000000..83952baae5 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassNameEditPart.java @@ -0,0 +1,684 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreParserProvider; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.gef.AccessibleEditPart; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.GraphicalEditPart; +import org.eclipse.gef.Request; +import org.eclipse.gef.commands.Command; +import org.eclipse.gef.editpolicies.NonResizableEditPolicy; +import org.eclipse.gef.handles.MoveHandle; +import org.eclipse.gef.handles.NonResizableHandleKit; +import org.eclipse.gef.requests.DirectEditRequest; +import org.eclipse.gef.tools.DirectEditManager; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParser; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions; +import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry; +import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; +import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser; +import org.eclipse.gmf.runtime.notation.FontStyle; +import org.eclipse.gmf.runtime.notation.NotationPackage; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.viewers.ICellEditorValidator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; + +/** + * @generated + */ +public class AClassNameEditPart extends CompartmentEditPart implements ITextAwareEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 5002; + + /** + * @generated + */ + private DirectEditManager manager; + + /** + * @generated + */ + private IParser parser; + + /** + * @generated + */ + private List parserElements; + + /** + * @generated + */ + private String defaultText; + + /** + * @generated + */ + public AClassNameEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new AcoreTextSelectionEditPolicy()); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy()); + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new NonResizableEditPolicy() + { + + protected List createSelectionHandles() + { + List handles = new ArrayList(); + NonResizableHandleKit.addMoveHandle((GraphicalEditPart)getHost(), handles); + ((MoveHandle)handles.get(0)).setBorder(null); + return handles; + } + + public Command getCommand(Request request) + { + return null; + } + + public boolean understandsRequest(Request request) + { + return false; + } + }); + } + + /** + * @generated + */ + protected String getLabelTextHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getText(); + } + else + { + return ((Label)figure).getText(); + } + } + + /** + * @generated + */ + protected void setLabelTextHelper(IFigure figure, String text) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setText(text); + } + else + { + ((Label)figure).setText(text); + } + } + + /** + * @generated + */ + protected Image getLabelIconHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getIcon(); + } + else + { + return ((Label)figure).getIcon(); + } + } + + /** + * @generated + */ + protected void setLabelIconHelper(IFigure figure, Image icon) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setIcon(icon); + } + else + { + ((Label)figure).setIcon(icon); + } + } + + /** + * @generated + */ + public void setLabel(WrappingLabel figure) + { + unregisterVisuals(); + setFigure(figure); + defaultText = getLabelTextHelper(figure); + registerVisuals(); + refreshVisuals(); + } + + /** + * @generated + */ + protected List getModelChildren() + { + return Collections.EMPTY_LIST; + } + + /** + * @generated + */ + public IGraphicalEditPart getChildBySemanticHint(String semanticHint) + { + return null; + } + + /** + * @generated + */ + protected EObject getParserElement() + { + return resolveSemanticElement(); + } + + /** + * @generated + */ + protected Image getLabelIcon() + { + EObject parserElement = getParserElement(); + if (parserElement == null) + { + return null; + } + return AcoreElementTypes.getImage(parserElement.eClass()); + } + + /** + * @generated + */ + protected String getLabelText() + { + String text = null; + EObject parserElement = getParserElement(); + if (parserElement != null && getParser() != null) + { + text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue()); + } + if (text == null || text.length() == 0) + { + text = defaultText; + } + return text; + } + + /** + * @generated + */ + public void setLabelText(String text) + { + setLabelTextHelper(getFigure(), text); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + public String getEditText() + { + if (getParserElement() == null || getParser() == null) + { + return ""; //$NON-NLS-1$ + } + return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue()); + } + + /** + * @generated + */ + protected boolean isEditable() + { + return getParser() != null; + } + + /** + * @generated + */ + public ICellEditorValidator getEditTextValidator() + { + return new ICellEditorValidator() + { + + public String isValid(final Object value) + { + if (value instanceof String) + { + final EObject element = getParserElement(); + final IParser parser = getParser(); + try + { + IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() + { + + public void run() + { + setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value)); + } + }); + return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage(); + } + catch (InterruptedException ie) + { + ie.printStackTrace(); + } + } + + // shouldn't get here + return null; + } + }; + } + + /** + * @generated + */ + public IContentAssistProcessor getCompletionProcessor() + { + if (getParserElement() == null || getParser() == null) + { + return null; + } + return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement())); + } + + /** + * @generated + */ + public ParserOptions getParserOptions() + { + return ParserOptions.NONE; + } + + /** + * @generated + */ + public IParser getParser() + { + if (parser == null) + { + parser = AcoreParserProvider.getParser(AcoreElementTypes.AClass_2002, getParserElement(), AcoreVisualIDRegistry + .getType(org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassNameEditPart.VISUAL_ID)); + } + return parser; + } + + /** + * @generated + */ + protected DirectEditManager getManager() + { + if (manager == null) + { + setManager(new TextDirectEditManager(this, TextDirectEditManager.getTextCellEditorClass(this), + AcoreEditPartFactory.getTextCellEditorLocator(this))); + } + return manager; + } + + /** + * @generated + */ + protected void setManager(DirectEditManager manager) + { + this.manager = manager; + } + + /** + * @generated + */ + protected void performDirectEdit() + { + getManager().show(); + } + + /** + * @generated + */ + protected void performDirectEdit(Point eventLocation) + { + if (getManager().getClass() == TextDirectEditManager.class) + { + ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint()); + } + } + + /** + * @generated + */ + private void performDirectEdit(char initialCharacter) + { + if (getManager() instanceof TextDirectEditManager) + { + ((TextDirectEditManager)getManager()).show(initialCharacter); + } + else + { + performDirectEdit(); + } + } + + /** + * @generated + */ + protected void performDirectEditRequest(Request request) + { + final Request theRequest = request; + try + { + getEditingDomain().runExclusive(new Runnable() + { + + public void run() + { + if (isActive() && isEditable()) + { + if (theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) + { + Character initialChar = (Character)theRequest.getExtendedData().get( + RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR); + performDirectEdit(initialChar.charValue()); + } + else if ((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) + { + DirectEditRequest editRequest = (DirectEditRequest)theRequest; + performDirectEdit(editRequest.getLocation()); + } + else + { + performDirectEdit(); + } + } + } + }); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + /** + * @generated + */ + protected void refreshVisuals() + { + super.refreshVisuals(); + refreshLabel(); + refreshFont(); + refreshFontColor(); + refreshUnderline(); + refreshStrikeThrough(); + } + + /** + * @generated + */ + protected void refreshLabel() + { + setLabelTextHelper(getFigure(), getLabelText()); + setLabelIconHelper(getFigure(), getLabelIcon()); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + protected void refreshUnderline() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline()); + } + } + + /** + * @generated + */ + protected void refreshStrikeThrough() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough()); + } + } + + /** + * @generated + */ + protected void refreshFont() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null) + { + FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD + : SWT.NORMAL) + | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL)); + setFont(fontData); + } + } + + /** + * @generated + */ + protected void setFontColor(Color color) + { + getFigure().setForegroundColor(color); + } + + /** + * @generated + */ + protected void addSemanticListeners() + { + if (getParser() instanceof ISemanticParser) + { + EObject element = resolveSemanticElement(); + parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element); + for (int i = 0; i < parserElements.size(); i++) + { + addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$ + } + } + else + { + super.addSemanticListeners(); + } + } + + /** + * @generated + */ + protected void removeSemanticListeners() + { + if (parserElements != null) + { + for (int i = 0; i < parserElements.size(); i++) + { + removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$ + } + } + else + { + super.removeSemanticListeners(); + } + } + + /** + * @generated + */ + protected AccessibleEditPart getAccessibleEditPart() + { + if (accessibleEP == null) + { + accessibleEP = new AccessibleGraphicalEditPart() + { + + public void getName(AccessibleEvent e) + { + e.result = getLabelTextHelper(getFigure()); + } + }; + } + return accessibleEP; + } + + /** + * @generated + */ + private View getFontStyleOwnerView() + { + return getPrimaryView(); + } + + /** + * @generated + */ + protected void addNotationalListeners() + { + super.addNotationalListeners(); + addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void removeNotationalListeners() + { + super.removeNotationalListeners(); + removeListenerFilter("PrimaryView"); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void handleNotificationEvent(Notification event) + { + Object feature = event.getFeature(); + if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) + { + Integer c = (Integer)event.getNewValue(); + setFontColor(DiagramColorRegistry.getInstance().getColor(c)); + } + else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) + { + refreshUnderline(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) + { + refreshStrikeThrough(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) + { + refreshFont(); + } + else + { + if (getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) + { + refreshLabel(); + } + if (getParser() instanceof ISemanticParser) + { + ISemanticParser modelParser = (ISemanticParser)getParser(); + if (modelParser.areSemanticElementsAffected(null, event)) + { + removeSemanticListeners(); + if (resolveSemanticElement() != null) + { + addSemanticListeners(); + } + refreshLabel(); + } + } + } + super.handleNotificationEvent(event); + } + + /** + * @generated + */ + protected IFigure createFigure() + { + // Parent should assign one using setLabel() method + return null; + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassSubClassesEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassSubClassesEditPart.java new file mode 100644 index 0000000000..34c9a55e73 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AClassSubClassesEditPart.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.Connection; +import org.eclipse.draw2d.PolygonDecoration; +import org.eclipse.draw2d.RotatableDecoration; +import org.eclipse.draw2d.geometry.PointList; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AClassSubClassesItemSemanticEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.swt.graphics.Color; + +/** + * @generated + */ +public class AClassSubClassesEditPart extends ConnectionNodeEditPart implements ITreeBranchEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 4001; + + /** + * @generated + */ + public AClassSubClassesEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AClassSubClassesItemSemanticEditPolicy()); + } + + /** + * Creates figure for this edit part. + * + * Body of this method does not depend on settings in generation model + * so you may safely remove <i>generated</i> tag and modify it. + * + * @generated + */ + + protected Connection createConnectionFigure() + { + return new AClassSubClassesFigure(); + } + + /** + * @generated + */ + public AClassSubClassesFigure getPrimaryShape() + { + return (AClassSubClassesFigure)getFigure(); + } + + /** + * @generated + */ + public class AClassSubClassesFigure extends PolylineConnectionEx + { + + /** + * @generated + */ + public AClassSubClassesFigure() + { + this.setLineWidth(1); + + setTargetDecoration(createTargetDecoration()); + } + + /** + * @generated + */ + private RotatableDecoration createTargetDecoration() + { + PolygonDecoration df = new PolygonDecoration(); + df.setFill(true); + df.setLineWidth(1); + df.setBackgroundColor(DF_BACK); + PointList pl = new PointList(); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(2)); + pl.addPoint(getMapMode().DPtoLP(0), getMapMode().DPtoLP(0)); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(-2)); + pl.addPoint(getMapMode().DPtoLP(-2), getMapMode().DPtoLP(2)); + df.setTemplate(pl); + df.setScale(getMapMode().DPtoLP(7), getMapMode().DPtoLP(3)); + return df; + } + + } + + /** + * @generated + */ + static final Color DF_BACK = new Color(null, 255, 255, 255); + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/ACoreRootEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/ACoreRootEditPart.java new file mode 100644 index 0000000000..0d4438da6a --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/ACoreRootEditPart.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.ACoreRootCanonicalEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.ACoreRootItemSemanticEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class ACoreRootEditPart extends DiagramEditPart +{ + + /** + * @generated + */ + public final static String MODEL_ID = "Acore"; //$NON-NLS-1$ + + /** + * @generated + */ + public static final int VISUAL_ID = 1000; + + /** + * @generated + */ + public ACoreRootEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new ACoreRootItemSemanticEditPolicy()); + installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new ACoreRootCanonicalEditPolicy()); + // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.POPUPBAR_ROLE); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceAAttributeInterfaceCompartmentEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceAAttributeInterfaceCompartmentEditPart.java new file mode 100644 index 0000000000..aa8a2a2326 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceAAttributeInterfaceCompartmentEditPart.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AInterfaceAAttributeInterfaceCompartmentCanonicalEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AInterfaceAAttributeInterfaceCompartmentItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.Messages; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ListCompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AInterfaceAAttributeInterfaceCompartmentEditPart extends ListCompartmentEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 7001; + + /** + * @generated + */ + public AInterfaceAAttributeInterfaceCompartmentEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected boolean hasModelChildrenChanged(Notification evt) + { + return false; + } + + /** + * @generated + */ + public String getCompartmentName() + { + return Messages.AInterfaceAAttributeInterfaceCompartmentEditPart_title; + } + + /** + * @generated + */ + public IFigure createFigure() + { + ResizableCompartmentFigure result = (ResizableCompartmentFigure)super.createFigure(); + result.setTitleVisibility(false); + return result; + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, + new AInterfaceAAttributeInterfaceCompartmentItemSemanticEditPolicy()); + installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy()); + installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE, new DragDropEditPolicy()); + installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new AInterfaceAAttributeInterfaceCompartmentCanonicalEditPolicy()); + } + + /** + * @generated + */ + protected void setRatio(Double ratio) + { + // nothing to do -- parent layout does not accept Double constraints as ratio + // super.setRatio(ratio); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceAOperationInterfaceCompartmentEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceAOperationInterfaceCompartmentEditPart.java new file mode 100644 index 0000000000..f21ee2ede3 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceAOperationInterfaceCompartmentEditPart.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AInterfaceAOperationInterfaceCompartmentCanonicalEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AInterfaceAOperationInterfaceCompartmentItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.Messages; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ListCompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.figures.ResizableCompartmentFigure; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AInterfaceAOperationInterfaceCompartmentEditPart extends ListCompartmentEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 7002; + + /** + * @generated + */ + public AInterfaceAOperationInterfaceCompartmentEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected boolean hasModelChildrenChanged(Notification evt) + { + return false; + } + + /** + * @generated + */ + public String getCompartmentName() + { + return Messages.AInterfaceAOperationInterfaceCompartmentEditPart_title; + } + + /** + * @generated + */ + public IFigure createFigure() + { + ResizableCompartmentFigure result = (ResizableCompartmentFigure)super.createFigure(); + result.setTitleVisibility(false); + return result; + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, + new AInterfaceAOperationInterfaceCompartmentItemSemanticEditPolicy()); + installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy()); + installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE, new DragDropEditPolicy()); + installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new AInterfaceAOperationInterfaceCompartmentCanonicalEditPolicy()); + } + + /** + * @generated + */ + protected void setRatio(Double ratio) + { + // nothing to do -- parent layout does not accept Double constraints as ratio + // super.setRatio(ratio); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceEditPart.java new file mode 100644 index 0000000000..9575419a06 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceEditPart.java @@ -0,0 +1,504 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.RectangleFigure; +import org.eclipse.draw2d.RoundedRectangle; +import org.eclipse.draw2d.Shape; +import org.eclipse.draw2d.StackLayout; +import org.eclipse.draw2d.ToolbarLayout; +import org.eclipse.draw2d.geometry.Dimension; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AInterfaceItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.Request; +import org.eclipse.gef.editpolicies.LayoutEditPolicy; +import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ConstrainedToolbarLayoutEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest; +import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure; +import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.swt.graphics.Color; + +/** + * @generated + */ +public class AInterfaceEditPart extends ShapeNodeEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 2001; + + /** + * @generated + */ + protected IFigure contentPane; + + /** + * @generated + */ + protected IFigure primaryShape; + + /** + * @generated + */ + public AInterfaceEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy()); + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AInterfaceItemSemanticEditPolicy()); + installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy()); + // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies + // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE); + } + + /** + * @generated + */ + protected LayoutEditPolicy createLayoutEditPolicy() + { + + ConstrainedToolbarLayoutEditPolicy lep = new ConstrainedToolbarLayoutEditPolicy() + { + + protected EditPolicy createChildEditPolicy(EditPart child) + { + if (child.getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE) == null) + { + if (child instanceof ITextAwareEditPart) + { + return new AcoreTextSelectionEditPolicy(); + } + } + return super.createChildEditPolicy(child); + } + }; + return lep; + } + + /** + * @generated + */ + protected IFigure createNodeShape() + { + AInterfaceFigure figure = new AInterfaceFigure(); + return primaryShape = figure; + } + + /** + * @generated + */ + public AInterfaceFigure getPrimaryShape() + { + return (AInterfaceFigure)primaryShape; + } + + /** + * @generated + */ + protected boolean addFixedChild(EditPart childEditPart) + { + if (childEditPart instanceof AInterfaceNameEditPart) + { + ((AInterfaceNameEditPart)childEditPart).setLabel(getPrimaryShape().getFigureAInterfaceNameFigure()); + return true; + } + if (childEditPart instanceof AInterfaceAAttributeInterfaceCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureInterfaceAttributes(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.add(((AInterfaceAAttributeInterfaceCompartmentEditPart)childEditPart).getFigure()); + return true; + } + if (childEditPart instanceof AInterfaceAOperationInterfaceCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureInterfaceOperations(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.add(((AInterfaceAOperationInterfaceCompartmentEditPart)childEditPart).getFigure()); + return true; + } + return false; + } + + /** + * @generated + */ + protected boolean removeFixedChild(EditPart childEditPart) + { + if (childEditPart instanceof AInterfaceNameEditPart) + { + return true; + } + if (childEditPart instanceof AInterfaceAAttributeInterfaceCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureInterfaceAttributes(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.remove(((AInterfaceAAttributeInterfaceCompartmentEditPart)childEditPart).getFigure()); + return true; + } + if (childEditPart instanceof AInterfaceAOperationInterfaceCompartmentEditPart) + { + IFigure pane = getPrimaryShape().getFigureInterfaceOperations(); + setupContentPane(pane); // FIXME each comparment should handle his content pane in his own way + pane.remove(((AInterfaceAOperationInterfaceCompartmentEditPart)childEditPart).getFigure()); + return true; + } + return false; + } + + /** + * @generated + */ + protected void addChildVisual(EditPart childEditPart, int index) + { + if (addFixedChild(childEditPart)) + { + return; + } + super.addChildVisual(childEditPart, -1); + } + + /** + * @generated + */ + protected void removeChildVisual(EditPart childEditPart) + { + if (removeFixedChild(childEditPart)) + { + return; + } + super.removeChildVisual(childEditPart); + } + + /** + * @generated + */ + protected IFigure getContentPaneFor(IGraphicalEditPart editPart) + { + if (editPart instanceof AInterfaceAAttributeInterfaceCompartmentEditPart) + { + return getPrimaryShape().getFigureInterfaceAttributes(); + } + if (editPart instanceof AInterfaceAOperationInterfaceCompartmentEditPart) + { + return getPrimaryShape().getFigureInterfaceOperations(); + } + return getContentPane(); + } + + /** + * @generated + */ + protected NodeFigure createNodePlate() + { + DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40); + return result; + } + + /** + * Creates figure for this edit part. + * + * Body of this method does not depend on settings in generation model + * so you may safely remove <i>generated</i> tag and modify it. + * + * @generated + */ + protected NodeFigure createNodeFigure() + { + NodeFigure figure = createNodePlate(); + figure.setLayoutManager(new StackLayout()); + IFigure shape = createNodeShape(); + figure.add(shape); + contentPane = setupContentPane(shape); + return figure; + } + + /** + * Default implementation treats passed figure as content pane. + * Respects layout one may have set for generated figure. + * @param nodeShape instance of generated figure class + * @generated + */ + protected IFigure setupContentPane(IFigure nodeShape) + { + if (nodeShape.getLayoutManager() == null) + { + ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout(); + layout.setSpacing(5); + nodeShape.setLayoutManager(layout); + } + return nodeShape; // use nodeShape itself as contentPane + } + + /** + * @generated + */ + public IFigure getContentPane() + { + if (contentPane != null) + { + return contentPane; + } + return super.getContentPane(); + } + + /** + * @generated + */ + protected void setForegroundColor(Color color) + { + if (primaryShape != null) + { + primaryShape.setForegroundColor(color); + } + } + + /** + * @generated + */ + protected void setBackgroundColor(Color color) + { + if (primaryShape != null) + { + primaryShape.setBackgroundColor(color); + } + } + + /** + * @generated + */ + protected void setLineWidth(int width) + { + if (primaryShape instanceof Shape) + { + ((Shape)primaryShape).setLineWidth(width); + } + } + + /** + * @generated + */ + protected void setLineType(int style) + { + if (primaryShape instanceof Shape) + { + ((Shape)primaryShape).setLineStyle(style); + } + } + + /** + * @generated + */ + public EditPart getPrimaryChildEditPart() + { + return getChildBySemanticHint(AcoreVisualIDRegistry.getType(AInterfaceNameEditPart.VISUAL_ID)); + } + + /** + * @generated + */ + public List<IElementType> getMARelTypesOnTarget() + { + ArrayList<IElementType> types = new ArrayList<IElementType>(1); + types.add(AcoreElementTypes.AClassImplementedInterfaces_4002); + return types; + } + + /** + * @generated + */ + public List<IElementType> getMATypesForSource(IElementType relationshipType) + { + LinkedList<IElementType> types = new LinkedList<IElementType>(); + if (relationshipType == AcoreElementTypes.AClassImplementedInterfaces_4002) + { + types.add(AcoreElementTypes.AClass_2002); + } + return types; + } + + /** + * @generated + */ + public EditPart getTargetEditPart(Request request) + { + if (request instanceof CreateViewAndElementRequest) + { + CreateElementRequestAdapter adapter = ((CreateViewAndElementRequest)request).getViewAndElementDescriptor() + .getCreateElementRequestAdapter(); + IElementType type = (IElementType)adapter.getAdapter(IElementType.class); + if (type == AcoreElementTypes.AAttribute_3001) + { + return getChildBySemanticHint(AcoreVisualIDRegistry + .getType(AInterfaceAAttributeInterfaceCompartmentEditPart.VISUAL_ID)); + } + if (type == AcoreElementTypes.AOperation_3002) + { + return getChildBySemanticHint(AcoreVisualIDRegistry + .getType(AInterfaceAOperationInterfaceCompartmentEditPart.VISUAL_ID)); + } + } + return super.getTargetEditPart(request); + } + + /** + * @generated + */ + public class AInterfaceFigure extends RoundedRectangle + { + + /** + * @generated + */ + private WrappingLabel fFigureAInterfaceNameFigure; + + /** + * @generated + */ + private RectangleFigure fFigureInterfaceAttributes; + + /** + * @generated + */ + private RectangleFigure fFigureInterfaceOperations; + + /** + * @generated + */ + public AInterfaceFigure() + { + + ToolbarLayout layoutThis = new ToolbarLayout(); + layoutThis.setStretchMinorAxis(true); + layoutThis.setMinorAlignment(ToolbarLayout.ALIGN_CENTER); + + layoutThis.setSpacing(0); + layoutThis.setVertical(true); + + this.setLayoutManager(layoutThis); + + this.setCornerDimensions(new Dimension(getMapMode().DPtoLP(12), getMapMode().DPtoLP(12))); + this.setLineWidth(1); + this.setBackgroundColor(THIS_BACK); + createContents(); + } + + /** + * @generated + */ + private void createContents() + { + + WrappingLabel aInterfaceTypeLabelFigure0 = new WrappingLabel(); + aInterfaceTypeLabelFigure0.setText("«Interface»"); + + this.add(aInterfaceTypeLabelFigure0); + + fFigureAInterfaceNameFigure = new WrappingLabel(); + fFigureAInterfaceNameFigure.setText("<...>"); + + this.add(fFigureAInterfaceNameFigure); + + fFigureInterfaceAttributes = new RectangleFigure(); + fFigureInterfaceAttributes.setLineWidth(1); + + this.add(fFigureInterfaceAttributes); + fFigureInterfaceAttributes.setLayoutManager(new StackLayout()); + + fFigureInterfaceOperations = new RectangleFigure(); + fFigureInterfaceOperations.setLineWidth(1); + + this.add(fFigureInterfaceOperations); + fFigureInterfaceOperations.setLayoutManager(new StackLayout()); + + } + + /** + * @generated + */ + private boolean myUseLocalCoordinates = false; + + /** + * @generated + */ + protected boolean useLocalCoordinates() + { + return myUseLocalCoordinates; + } + + /** + * @generated + */ + protected void setUseLocalCoordinates(boolean useLocalCoordinates) + { + myUseLocalCoordinates = useLocalCoordinates; + } + + /** + * @generated + */ + public WrappingLabel getFigureAInterfaceNameFigure() + { + return fFigureAInterfaceNameFigure; + } + + /** + * @generated + */ + public RectangleFigure getFigureInterfaceAttributes() + { + return fFigureInterfaceAttributes; + } + + /** + * @generated + */ + public RectangleFigure getFigureInterfaceOperations() + { + return fFigureInterfaceOperations; + } + + } + + /** + * @generated + */ + static final Color THIS_BACK = new Color(null, 250, 250, 190); + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceNameEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceNameEditPart.java new file mode 100644 index 0000000000..d0b51f33b9 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AInterfaceNameEditPart.java @@ -0,0 +1,685 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreParserProvider; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.gef.AccessibleEditPart; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.GraphicalEditPart; +import org.eclipse.gef.Request; +import org.eclipse.gef.commands.Command; +import org.eclipse.gef.editpolicies.NonResizableEditPolicy; +import org.eclipse.gef.handles.MoveHandle; +import org.eclipse.gef.handles.NonResizableHandleKit; +import org.eclipse.gef.requests.DirectEditRequest; +import org.eclipse.gef.tools.DirectEditManager; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParser; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions; +import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry; +import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; +import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser; +import org.eclipse.gmf.runtime.notation.FontStyle; +import org.eclipse.gmf.runtime.notation.NotationPackage; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.viewers.ICellEditorValidator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; + +/** + * @generated + */ +public class AInterfaceNameEditPart extends CompartmentEditPart implements ITextAwareEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 5001; + + /** + * @generated + */ + private DirectEditManager manager; + + /** + * @generated + */ + private IParser parser; + + /** + * @generated + */ + private List parserElements; + + /** + * @generated + */ + private String defaultText; + + /** + * @generated + */ + public AInterfaceNameEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new AcoreTextSelectionEditPolicy()); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy()); + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new NonResizableEditPolicy() + { + + protected List createSelectionHandles() + { + List handles = new ArrayList(); + NonResizableHandleKit.addMoveHandle((GraphicalEditPart)getHost(), handles); + ((MoveHandle)handles.get(0)).setBorder(null); + return handles; + } + + public Command getCommand(Request request) + { + return null; + } + + public boolean understandsRequest(Request request) + { + return false; + } + }); + } + + /** + * @generated + */ + protected String getLabelTextHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getText(); + } + else + { + return ((Label)figure).getText(); + } + } + + /** + * @generated + */ + protected void setLabelTextHelper(IFigure figure, String text) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setText(text); + } + else + { + ((Label)figure).setText(text); + } + } + + /** + * @generated + */ + protected Image getLabelIconHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getIcon(); + } + else + { + return ((Label)figure).getIcon(); + } + } + + /** + * @generated + */ + protected void setLabelIconHelper(IFigure figure, Image icon) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setIcon(icon); + } + else + { + ((Label)figure).setIcon(icon); + } + } + + /** + * @generated + */ + public void setLabel(WrappingLabel figure) + { + unregisterVisuals(); + setFigure(figure); + defaultText = getLabelTextHelper(figure); + registerVisuals(); + refreshVisuals(); + } + + /** + * @generated + */ + protected List getModelChildren() + { + return Collections.EMPTY_LIST; + } + + /** + * @generated + */ + public IGraphicalEditPart getChildBySemanticHint(String semanticHint) + { + return null; + } + + /** + * @generated + */ + protected EObject getParserElement() + { + return resolveSemanticElement(); + } + + /** + * @generated + */ + protected Image getLabelIcon() + { + EObject parserElement = getParserElement(); + if (parserElement == null) + { + return null; + } + return AcoreElementTypes.getImage(parserElement.eClass()); + } + + /** + * @generated + */ + protected String getLabelText() + { + String text = null; + EObject parserElement = getParserElement(); + if (parserElement != null && getParser() != null) + { + text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue()); + } + if (text == null || text.length() == 0) + { + text = defaultText; + } + return text; + } + + /** + * @generated + */ + public void setLabelText(String text) + { + setLabelTextHelper(getFigure(), text); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + public String getEditText() + { + if (getParserElement() == null || getParser() == null) + { + return ""; //$NON-NLS-1$ + } + return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue()); + } + + /** + * @generated + */ + protected boolean isEditable() + { + return getParser() != null; + } + + /** + * @generated + */ + public ICellEditorValidator getEditTextValidator() + { + return new ICellEditorValidator() + { + + public String isValid(final Object value) + { + if (value instanceof String) + { + final EObject element = getParserElement(); + final IParser parser = getParser(); + try + { + IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() + { + + public void run() + { + setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value)); + } + }); + return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage(); + } + catch (InterruptedException ie) + { + ie.printStackTrace(); + } + } + + // shouldn't get here + return null; + } + }; + } + + /** + * @generated + */ + public IContentAssistProcessor getCompletionProcessor() + { + if (getParserElement() == null || getParser() == null) + { + return null; + } + return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement())); + } + + /** + * @generated + */ + public ParserOptions getParserOptions() + { + return ParserOptions.NONE; + } + + /** + * @generated + */ + public IParser getParser() + { + if (parser == null) + { + parser = AcoreParserProvider.getParser(AcoreElementTypes.AInterface_2001, getParserElement(), + AcoreVisualIDRegistry + .getType(org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AInterfaceNameEditPart.VISUAL_ID)); + } + return parser; + } + + /** + * @generated + */ + protected DirectEditManager getManager() + { + if (manager == null) + { + setManager(new TextDirectEditManager(this, TextDirectEditManager.getTextCellEditorClass(this), + AcoreEditPartFactory.getTextCellEditorLocator(this))); + } + return manager; + } + + /** + * @generated + */ + protected void setManager(DirectEditManager manager) + { + this.manager = manager; + } + + /** + * @generated + */ + protected void performDirectEdit() + { + getManager().show(); + } + + /** + * @generated + */ + protected void performDirectEdit(Point eventLocation) + { + if (getManager().getClass() == TextDirectEditManager.class) + { + ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint()); + } + } + + /** + * @generated + */ + private void performDirectEdit(char initialCharacter) + { + if (getManager() instanceof TextDirectEditManager) + { + ((TextDirectEditManager)getManager()).show(initialCharacter); + } + else + { + performDirectEdit(); + } + } + + /** + * @generated + */ + protected void performDirectEditRequest(Request request) + { + final Request theRequest = request; + try + { + getEditingDomain().runExclusive(new Runnable() + { + + public void run() + { + if (isActive() && isEditable()) + { + if (theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) + { + Character initialChar = (Character)theRequest.getExtendedData().get( + RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR); + performDirectEdit(initialChar.charValue()); + } + else if ((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) + { + DirectEditRequest editRequest = (DirectEditRequest)theRequest; + performDirectEdit(editRequest.getLocation()); + } + else + { + performDirectEdit(); + } + } + } + }); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + /** + * @generated + */ + protected void refreshVisuals() + { + super.refreshVisuals(); + refreshLabel(); + refreshFont(); + refreshFontColor(); + refreshUnderline(); + refreshStrikeThrough(); + } + + /** + * @generated + */ + protected void refreshLabel() + { + setLabelTextHelper(getFigure(), getLabelText()); + setLabelIconHelper(getFigure(), getLabelIcon()); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + protected void refreshUnderline() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline()); + } + } + + /** + * @generated + */ + protected void refreshStrikeThrough() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough()); + } + } + + /** + * @generated + */ + protected void refreshFont() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null) + { + FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD + : SWT.NORMAL) + | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL)); + setFont(fontData); + } + } + + /** + * @generated + */ + protected void setFontColor(Color color) + { + getFigure().setForegroundColor(color); + } + + /** + * @generated + */ + protected void addSemanticListeners() + { + if (getParser() instanceof ISemanticParser) + { + EObject element = resolveSemanticElement(); + parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element); + for (int i = 0; i < parserElements.size(); i++) + { + addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$ + } + } + else + { + super.addSemanticListeners(); + } + } + + /** + * @generated + */ + protected void removeSemanticListeners() + { + if (parserElements != null) + { + for (int i = 0; i < parserElements.size(); i++) + { + removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$ + } + } + else + { + super.removeSemanticListeners(); + } + } + + /** + * @generated + */ + protected AccessibleEditPart getAccessibleEditPart() + { + if (accessibleEP == null) + { + accessibleEP = new AccessibleGraphicalEditPart() + { + + public void getName(AccessibleEvent e) + { + e.result = getLabelTextHelper(getFigure()); + } + }; + } + return accessibleEP; + } + + /** + * @generated + */ + private View getFontStyleOwnerView() + { + return getPrimaryView(); + } + + /** + * @generated + */ + protected void addNotationalListeners() + { + super.addNotationalListeners(); + addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void removeNotationalListeners() + { + super.removeNotationalListeners(); + removeListenerFilter("PrimaryView"); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void handleNotificationEvent(Notification event) + { + Object feature = event.getFeature(); + if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) + { + Integer c = (Integer)event.getNewValue(); + setFontColor(DiagramColorRegistry.getInstance().getColor(c)); + } + else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) + { + refreshUnderline(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) + { + refreshStrikeThrough(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) + { + refreshFont(); + } + else + { + if (getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) + { + refreshLabel(); + } + if (getParser() instanceof ISemanticParser) + { + ISemanticParser modelParser = (ISemanticParser)getParser(); + if (modelParser.areSemanticElementsAffected(null, event)) + { + removeSemanticListeners(); + if (resolveSemanticElement() != null) + { + addSemanticListeners(); + } + refreshLabel(); + } + } + } + super.handleNotificationEvent(event); + } + + /** + * @generated + */ + protected IFigure createFigure() + { + // Parent should assign one using setLabel() method + return null; + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AOperation2EditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AOperation2EditPart.java new file mode 100644 index 0000000000..07e8c0b2d5 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AOperation2EditPart.java @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.Collections; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AOperation2ItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextNonResizableEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreParserProvider; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.gef.AccessibleEditPart; +import org.eclipse.gef.DragTracker; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.Request; +import org.eclipse.gef.requests.DirectEditRequest; +import org.eclipse.gef.requests.SelectionRequest; +import org.eclipse.gef.tools.DirectEditManager; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParser; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions; +import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ListItemComponentEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry; +import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx; +import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; +import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser; +import org.eclipse.gmf.runtime.notation.FontStyle; +import org.eclipse.gmf.runtime.notation.NotationPackage; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.viewers.ICellEditorValidator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; + +/** + * @generated + */ +public class AOperation2EditPart extends CompartmentEditPart implements ITextAwareEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 3004; + + /** + * @generated + */ + private DirectEditManager manager; + + /** + * @generated + */ + private IParser parser; + + /** + * @generated + */ + private List parserElements; + + /** + * @generated + */ + private String defaultText; + + /** + * @generated + */ + public AOperation2EditPart(View view) + { + super(view); + } + + /** + * @generated + */ + public DragTracker getDragTracker(Request request) + { + if (request instanceof SelectionRequest && ((SelectionRequest)request).getLastButtonPressed() == 3) + { + return null; + } + return new DragEditPartsTrackerEx(this); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AOperation2ItemSemanticEditPolicy()); + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new AcoreTextNonResizableEditPolicy()); + installEditPolicy(EditPolicy.COMPONENT_ROLE, new ListItemComponentEditPolicy()); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy()); + } + + /** + * @generated + */ + protected String getLabelTextHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getText(); + } + else + { + return ((Label)figure).getText(); + } + } + + /** + * @generated + */ + protected void setLabelTextHelper(IFigure figure, String text) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setText(text); + } + else + { + ((Label)figure).setText(text); + } + } + + /** + * @generated + */ + protected Image getLabelIconHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getIcon(); + } + else + { + return ((Label)figure).getIcon(); + } + } + + /** + * @generated + */ + protected void setLabelIconHelper(IFigure figure, Image icon) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setIcon(icon); + } + else + { + ((Label)figure).setIcon(icon); + } + } + + /** + * @generated + */ + public void setLabel(IFigure figure) + { + unregisterVisuals(); + setFigure(figure); + defaultText = getLabelTextHelper(figure); + registerVisuals(); + refreshVisuals(); + } + + /** + * @generated + */ + protected List getModelChildren() + { + return Collections.EMPTY_LIST; + } + + /** + * @generated + */ + public IGraphicalEditPart getChildBySemanticHint(String semanticHint) + { + return null; + } + + /** + * @generated + */ + protected EObject getParserElement() + { + return resolveSemanticElement(); + } + + /** + * @generated + */ + protected Image getLabelIcon() + { + return null; + } + + /** + * @generated + */ + protected String getLabelText() + { + String text = null; + EObject parserElement = getParserElement(); + if (parserElement != null && getParser() != null) + { + text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue()); + } + if (text == null || text.length() == 0) + { + text = defaultText; + } + return text; + } + + /** + * @generated + */ + public void setLabelText(String text) + { + setLabelTextHelper(getFigure(), text); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + public String getEditText() + { + if (getParserElement() == null || getParser() == null) + { + return ""; //$NON-NLS-1$ + } + return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue()); + } + + /** + * @generated + */ + protected boolean isEditable() + { + return getParser() != null; + } + + /** + * @generated + */ + public ICellEditorValidator getEditTextValidator() + { + return new ICellEditorValidator() + { + + public String isValid(final Object value) + { + if (value instanceof String) + { + final EObject element = getParserElement(); + final IParser parser = getParser(); + try + { + IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() + { + + public void run() + { + setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value)); + } + }); + return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage(); + } + catch (InterruptedException ie) + { + ie.printStackTrace(); + } + } + + // shouldn't get here + return null; + } + }; + } + + /** + * @generated + */ + public IContentAssistProcessor getCompletionProcessor() + { + if (getParserElement() == null || getParser() == null) + { + return null; + } + return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement())); + } + + /** + * @generated + */ + public ParserOptions getParserOptions() + { + return ParserOptions.NONE; + } + + /** + * @generated + */ + public IParser getParser() + { + if (parser == null) + { + parser = AcoreParserProvider.getParser(AcoreElementTypes.AOperation_3004, getParserElement(), + AcoreVisualIDRegistry + .getType(org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AOperation2EditPart.VISUAL_ID)); + } + return parser; + } + + /** + * @generated + */ + protected DirectEditManager getManager() + { + if (manager == null) + { + setManager(new TextDirectEditManager(this, TextDirectEditManager.getTextCellEditorClass(this), + AcoreEditPartFactory.getTextCellEditorLocator(this))); + } + return manager; + } + + /** + * @generated + */ + protected void setManager(DirectEditManager manager) + { + this.manager = manager; + } + + /** + * @generated + */ + protected void performDirectEdit() + { + getManager().show(); + } + + /** + * @generated + */ + protected void performDirectEdit(Point eventLocation) + { + if (getManager().getClass() == TextDirectEditManager.class) + { + ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint()); + } + } + + /** + * @generated + */ + private void performDirectEdit(char initialCharacter) + { + if (getManager() instanceof TextDirectEditManager) + { + ((TextDirectEditManager)getManager()).show(initialCharacter); + } + else + { + performDirectEdit(); + } + } + + /** + * @generated + */ + protected void performDirectEditRequest(Request request) + { + final Request theRequest = request; + try + { + getEditingDomain().runExclusive(new Runnable() + { + + public void run() + { + if (isActive() && isEditable()) + { + if (theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) + { + Character initialChar = (Character)theRequest.getExtendedData().get( + RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR); + performDirectEdit(initialChar.charValue()); + } + else if ((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) + { + DirectEditRequest editRequest = (DirectEditRequest)theRequest; + performDirectEdit(editRequest.getLocation()); + } + else + { + performDirectEdit(); + } + } + } + }); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + /** + * @generated + */ + protected void refreshVisuals() + { + super.refreshVisuals(); + refreshLabel(); + refreshFont(); + refreshFontColor(); + refreshUnderline(); + refreshStrikeThrough(); + } + + /** + * @generated + */ + protected void refreshLabel() + { + setLabelTextHelper(getFigure(), getLabelText()); + setLabelIconHelper(getFigure(), getLabelIcon()); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + protected void refreshUnderline() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline()); + } + } + + /** + * @generated + */ + protected void refreshStrikeThrough() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough()); + } + } + + /** + * @generated + */ + protected void refreshFont() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null) + { + FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD + : SWT.NORMAL) + | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL)); + setFont(fontData); + } + } + + /** + * @generated + */ + protected void setFontColor(Color color) + { + getFigure().setForegroundColor(color); + } + + /** + * @generated + */ + protected void addSemanticListeners() + { + if (getParser() instanceof ISemanticParser) + { + EObject element = resolveSemanticElement(); + parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element); + for (int i = 0; i < parserElements.size(); i++) + { + addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$ + } + } + else + { + super.addSemanticListeners(); + } + } + + /** + * @generated + */ + protected void removeSemanticListeners() + { + if (parserElements != null) + { + for (int i = 0; i < parserElements.size(); i++) + { + removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$ + } + } + else + { + super.removeSemanticListeners(); + } + } + + /** + * @generated + */ + protected AccessibleEditPart getAccessibleEditPart() + { + if (accessibleEP == null) + { + accessibleEP = new AccessibleGraphicalEditPart() + { + + public void getName(AccessibleEvent e) + { + e.result = getLabelTextHelper(getFigure()); + } + }; + } + return accessibleEP; + } + + /** + * @generated + */ + private View getFontStyleOwnerView() + { + return getPrimaryView(); + } + + /** + * @generated + */ + protected void addNotationalListeners() + { + super.addNotationalListeners(); + addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void removeNotationalListeners() + { + super.removeNotationalListeners(); + removeListenerFilter("PrimaryView"); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void handleNotificationEvent(Notification event) + { + Object feature = event.getFeature(); + if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) + { + Integer c = (Integer)event.getNewValue(); + setFontColor(DiagramColorRegistry.getInstance().getColor(c)); + } + else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) + { + refreshUnderline(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) + { + refreshStrikeThrough(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) + { + refreshFont(); + } + else + { + if (getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) + { + refreshLabel(); + } + if (getParser() instanceof ISemanticParser) + { + ISemanticParser modelParser = (ISemanticParser)getParser(); + if (modelParser.areSemanticElementsAffected(null, event)) + { + removeSemanticListeners(); + if (resolveSemanticElement() != null) + { + addSemanticListeners(); + } + refreshLabel(); + } + } + } + super.handleNotificationEvent(event); + } + + /** + * @generated + */ + protected IFigure createFigure() + { + IFigure label = createFigurePrim(); + defaultText = getLabelTextHelper(label); + return label; + } + + /** + * @generated + */ + protected IFigure createFigurePrim() + { + return new WrappingLabel(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AOperationEditPart.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AOperationEditPart.java new file mode 100644 index 0000000000..a25cf5b4be --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AOperationEditPart.java @@ -0,0 +1,683 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import java.util.Collections; +import java.util.List; + +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AOperationItemSemanticEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextNonResizableEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies.AcoreTextSelectionEditPolicy; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreParserProvider; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RunnableWithResult; +import org.eclipse.gef.AccessibleEditPart; +import org.eclipse.gef.DragTracker; +import org.eclipse.gef.EditPolicy; +import org.eclipse.gef.Request; +import org.eclipse.gef.requests.DirectEditRequest; +import org.eclipse.gef.requests.SelectionRequest; +import org.eclipse.gef.tools.DirectEditManager; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParser; +import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus; +import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions; +import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ListItemComponentEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry; +import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx; +import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; +import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser; +import org.eclipse.gmf.runtime.notation.FontStyle; +import org.eclipse.gmf.runtime.notation.NotationPackage; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.text.contentassist.IContentAssistProcessor; +import org.eclipse.jface.viewers.ICellEditorValidator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Image; + +/** + * @generated + */ +public class AOperationEditPart extends CompartmentEditPart implements ITextAwareEditPart +{ + + /** + * @generated + */ + public static final int VISUAL_ID = 3002; + + /** + * @generated + */ + private DirectEditManager manager; + + /** + * @generated + */ + private IParser parser; + + /** + * @generated + */ + private List parserElements; + + /** + * @generated + */ + private String defaultText; + + /** + * @generated + */ + public AOperationEditPart(View view) + { + super(view); + } + + /** + * @generated + */ + public DragTracker getDragTracker(Request request) + { + if (request instanceof SelectionRequest && ((SelectionRequest)request).getLastButtonPressed() == 3) + { + return null; + } + return new DragEditPartsTrackerEx(this); + } + + /** + * @generated + */ + protected void createDefaultEditPolicies() + { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new AOperationItemSemanticEditPolicy()); + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new AcoreTextNonResizableEditPolicy()); + installEditPolicy(EditPolicy.COMPONENT_ROLE, new ListItemComponentEditPolicy()); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy()); + } + + /** + * @generated + */ + protected String getLabelTextHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getText(); + } + else + { + return ((Label)figure).getText(); + } + } + + /** + * @generated + */ + protected void setLabelTextHelper(IFigure figure, String text) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setText(text); + } + else + { + ((Label)figure).setText(text); + } + } + + /** + * @generated + */ + protected Image getLabelIconHelper(IFigure figure) + { + if (figure instanceof WrappingLabel) + { + return ((WrappingLabel)figure).getIcon(); + } + else + { + return ((Label)figure).getIcon(); + } + } + + /** + * @generated + */ + protected void setLabelIconHelper(IFigure figure, Image icon) + { + if (figure instanceof WrappingLabel) + { + ((WrappingLabel)figure).setIcon(icon); + } + else + { + ((Label)figure).setIcon(icon); + } + } + + /** + * @generated + */ + public void setLabel(IFigure figure) + { + unregisterVisuals(); + setFigure(figure); + defaultText = getLabelTextHelper(figure); + registerVisuals(); + refreshVisuals(); + } + + /** + * @generated + */ + protected List getModelChildren() + { + return Collections.EMPTY_LIST; + } + + /** + * @generated + */ + public IGraphicalEditPart getChildBySemanticHint(String semanticHint) + { + return null; + } + + /** + * @generated + */ + protected EObject getParserElement() + { + return resolveSemanticElement(); + } + + /** + * @generated + */ + protected Image getLabelIcon() + { + return null; + } + + /** + * @generated + */ + protected String getLabelText() + { + String text = null; + EObject parserElement = getParserElement(); + if (parserElement != null && getParser() != null) + { + text = getParser().getPrintString(new EObjectAdapter(parserElement), getParserOptions().intValue()); + } + if (text == null || text.length() == 0) + { + text = defaultText; + } + return text; + } + + /** + * @generated + */ + public void setLabelText(String text) + { + setLabelTextHelper(getFigure(), text); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + public String getEditText() + { + if (getParserElement() == null || getParser() == null) + { + return ""; //$NON-NLS-1$ + } + return getParser().getEditString(new EObjectAdapter(getParserElement()), getParserOptions().intValue()); + } + + /** + * @generated + */ + protected boolean isEditable() + { + return getParser() != null; + } + + /** + * @generated + */ + public ICellEditorValidator getEditTextValidator() + { + return new ICellEditorValidator() + { + + public String isValid(final Object value) + { + if (value instanceof String) + { + final EObject element = getParserElement(); + final IParser parser = getParser(); + try + { + IParserEditStatus valid = (IParserEditStatus)getEditingDomain().runExclusive(new RunnableWithResult.Impl() + { + + public void run() + { + setResult(parser.isValidEditString(new EObjectAdapter(element), (String)value)); + } + }); + return valid.getCode() == ParserEditStatus.EDITABLE ? null : valid.getMessage(); + } + catch (InterruptedException ie) + { + ie.printStackTrace(); + } + } + + // shouldn't get here + return null; + } + }; + } + + /** + * @generated + */ + public IContentAssistProcessor getCompletionProcessor() + { + if (getParserElement() == null || getParser() == null) + { + return null; + } + return getParser().getCompletionProcessor(new EObjectAdapter(getParserElement())); + } + + /** + * @generated + */ + public ParserOptions getParserOptions() + { + return ParserOptions.NONE; + } + + /** + * @generated + */ + public IParser getParser() + { + if (parser == null) + { + parser = AcoreParserProvider.getParser(AcoreElementTypes.AOperation_3002, getParserElement(), + AcoreVisualIDRegistry + .getType(org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AOperationEditPart.VISUAL_ID)); + } + return parser; + } + + /** + * @generated + */ + protected DirectEditManager getManager() + { + if (manager == null) + { + setManager(new TextDirectEditManager(this, TextDirectEditManager.getTextCellEditorClass(this), + AcoreEditPartFactory.getTextCellEditorLocator(this))); + } + return manager; + } + + /** + * @generated + */ + protected void setManager(DirectEditManager manager) + { + this.manager = manager; + } + + /** + * @generated + */ + protected void performDirectEdit() + { + getManager().show(); + } + + /** + * @generated + */ + protected void performDirectEdit(Point eventLocation) + { + if (getManager().getClass() == TextDirectEditManager.class) + { + ((TextDirectEditManager)getManager()).show(eventLocation.getSWTPoint()); + } + } + + /** + * @generated + */ + private void performDirectEdit(char initialCharacter) + { + if (getManager() instanceof TextDirectEditManager) + { + ((TextDirectEditManager)getManager()).show(initialCharacter); + } + else + { + performDirectEdit(); + } + } + + /** + * @generated + */ + protected void performDirectEditRequest(Request request) + { + final Request theRequest = request; + try + { + getEditingDomain().runExclusive(new Runnable() + { + + public void run() + { + if (isActive() && isEditable()) + { + if (theRequest.getExtendedData().get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) + { + Character initialChar = (Character)theRequest.getExtendedData().get( + RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR); + performDirectEdit(initialChar.charValue()); + } + else if ((theRequest instanceof DirectEditRequest) && (getEditText().equals(getLabelText()))) + { + DirectEditRequest editRequest = (DirectEditRequest)theRequest; + performDirectEdit(editRequest.getLocation()); + } + else + { + performDirectEdit(); + } + } + } + }); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + /** + * @generated + */ + protected void refreshVisuals() + { + super.refreshVisuals(); + refreshLabel(); + refreshFont(); + refreshFontColor(); + refreshUnderline(); + refreshStrikeThrough(); + } + + /** + * @generated + */ + protected void refreshLabel() + { + setLabelTextHelper(getFigure(), getLabelText()); + setLabelIconHelper(getFigure(), getLabelIcon()); + Object pdEditPolicy = getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE); + if (pdEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)pdEditPolicy).refreshFeedback(); + } + Object sfEditPolicy = getEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE); + if (sfEditPolicy instanceof AcoreTextSelectionEditPolicy) + { + ((AcoreTextSelectionEditPolicy)sfEditPolicy).refreshFeedback(); + } + } + + /** + * @generated + */ + protected void refreshUnderline() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextUnderline(style.isUnderline()); + } + } + + /** + * @generated + */ + protected void refreshStrikeThrough() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null && getFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getFigure()).setTextStrikeThrough(style.isStrikeThrough()); + } + } + + /** + * @generated + */ + protected void refreshFont() + { + FontStyle style = (FontStyle)getFontStyleOwnerView().getStyle(NotationPackage.eINSTANCE.getFontStyle()); + if (style != null) + { + FontData fontData = new FontData(style.getFontName(), style.getFontHeight(), (style.isBold() ? SWT.BOLD + : SWT.NORMAL) + | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL)); + setFont(fontData); + } + } + + /** + * @generated + */ + protected void setFontColor(Color color) + { + getFigure().setForegroundColor(color); + } + + /** + * @generated + */ + protected void addSemanticListeners() + { + if (getParser() instanceof ISemanticParser) + { + EObject element = resolveSemanticElement(); + parserElements = ((ISemanticParser)getParser()).getSemanticElementsBeingParsed(element); + for (int i = 0; i < parserElements.size(); i++) + { + addListenerFilter("SemanticModel" + i, this, (EObject)parserElements.get(i)); //$NON-NLS-1$ + } + } + else + { + super.addSemanticListeners(); + } + } + + /** + * @generated + */ + protected void removeSemanticListeners() + { + if (parserElements != null) + { + for (int i = 0; i < parserElements.size(); i++) + { + removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$ + } + } + else + { + super.removeSemanticListeners(); + } + } + + /** + * @generated + */ + protected AccessibleEditPart getAccessibleEditPart() + { + if (accessibleEP == null) + { + accessibleEP = new AccessibleGraphicalEditPart() + { + + public void getName(AccessibleEvent e) + { + e.result = getLabelTextHelper(getFigure()); + } + }; + } + return accessibleEP; + } + + /** + * @generated + */ + private View getFontStyleOwnerView() + { + return getPrimaryView(); + } + + /** + * @generated + */ + protected void addNotationalListeners() + { + super.addNotationalListeners(); + addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void removeNotationalListeners() + { + super.removeNotationalListeners(); + removeListenerFilter("PrimaryView"); //$NON-NLS-1$ + } + + /** + * @generated + */ + protected void handleNotificationEvent(Notification event) + { + Object feature = event.getFeature(); + if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) + { + Integer c = (Integer)event.getNewValue(); + setFontColor(DiagramColorRegistry.getInstance().getColor(c)); + } + else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(feature)) + { + refreshUnderline(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough().equals(feature)) + { + refreshStrikeThrough(); + } + else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Bold().equals(feature) + || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(feature)) + { + refreshFont(); + } + else + { + if (getParser() != null && getParser().isAffectingEvent(event, getParserOptions().intValue())) + { + refreshLabel(); + } + if (getParser() instanceof ISemanticParser) + { + ISemanticParser modelParser = (ISemanticParser)getParser(); + if (modelParser.areSemanticElementsAffected(null, event)) + { + removeSemanticListeners(); + if (resolveSemanticElement() != null) + { + addSemanticListeners(); + } + refreshLabel(); + } + } + } + super.handleNotificationEvent(event); + } + + /** + * @generated + */ + protected IFigure createFigure() + { + IFigure label = createFigurePrim(); + defaultText = getLabelTextHelper(label); + return label; + } + + /** + * @generated + */ + protected IFigure createFigurePrim() + { + return new WrappingLabel(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AcoreEditPartFactory.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AcoreEditPartFactory.java new file mode 100644 index 0000000000..d240cbde7c --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/parts/AcoreEditPartFactory.java @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts; + +import org.eclipse.draw2d.FigureUtilities; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.geometry.Dimension; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.EditPartFactory; +import org.eclipse.gef.tools.CellEditorLocator; +import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.viewers.CellEditor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Text; + +/** + * @generated + */ +public class AcoreEditPartFactory implements EditPartFactory +{ + + /** + * @generated + */ + public EditPart createEditPart(EditPart context, Object model) + { + if (model instanceof View) + { + View view = (View)model; + switch (AcoreVisualIDRegistry.getVisualID(view)) + { + + case ACoreRootEditPart.VISUAL_ID: + return new ACoreRootEditPart(view); + + case AInterfaceEditPart.VISUAL_ID: + return new AInterfaceEditPart(view); + + case AInterfaceNameEditPart.VISUAL_ID: + return new AInterfaceNameEditPart(view); + + case AClassEditPart.VISUAL_ID: + return new AClassEditPart(view); + + case AClassNameEditPart.VISUAL_ID: + return new AClassNameEditPart(view); + + case AAttributeEditPart.VISUAL_ID: + return new AAttributeEditPart(view); + + case AOperationEditPart.VISUAL_ID: + return new AOperationEditPart(view); + + case AAttribute2EditPart.VISUAL_ID: + return new AAttribute2EditPart(view); + + case AOperation2EditPart.VISUAL_ID: + return new AOperation2EditPart(view); + + case AInterfaceAAttributeInterfaceCompartmentEditPart.VISUAL_ID: + return new AInterfaceAAttributeInterfaceCompartmentEditPart(view); + + case AInterfaceAOperationInterfaceCompartmentEditPart.VISUAL_ID: + return new AInterfaceAOperationInterfaceCompartmentEditPart(view); + + case AClassAAttributeCompartmentEditPart.VISUAL_ID: + return new AClassAAttributeCompartmentEditPart(view); + + case AClassAOperationClassCompartmentEditPart.VISUAL_ID: + return new AClassAOperationClassCompartmentEditPart(view); + + case AClassSubClassesEditPart.VISUAL_ID: + return new AClassSubClassesEditPart(view); + + case AClassImplementedInterfacesEditPart.VISUAL_ID: + return new AClassImplementedInterfacesEditPart(view); + + case AClassAssociationsEditPart.VISUAL_ID: + return new AClassAssociationsEditPart(view); + + case AClassAggregationsEditPart.VISUAL_ID: + return new AClassAggregationsEditPart(view); + + case AClassCompositionsEditPart.VISUAL_ID: + return new AClassCompositionsEditPart(view); + + } + } + return createUnrecognizedEditPart(context, model); + } + + /** + * @generated + */ + private EditPart createUnrecognizedEditPart(EditPart context, Object model) + { + // Handle creation of unrecognized child node EditParts here + return null; + } + + /** + * @generated + */ + public static CellEditorLocator getTextCellEditorLocator(ITextAwareEditPart source) + { + if (source.getFigure() instanceof WrappingLabel) + return new TextCellEditorLocator((WrappingLabel)source.getFigure()); + else + { + return new LabelCellEditorLocator((Label)source.getFigure()); + } + } + + /** + * @generated + */ + static private class TextCellEditorLocator implements CellEditorLocator + { + + /** + * @generated + */ + private WrappingLabel wrapLabel; + + /** + * @generated + */ + public TextCellEditorLocator(WrappingLabel wrapLabel) + { + this.wrapLabel = wrapLabel; + } + + /** + * @generated + */ + public WrappingLabel getWrapLabel() + { + return wrapLabel; + } + + /** + * @generated + */ + public void relocate(CellEditor celleditor) + { + Text text = (Text)celleditor.getControl(); + Rectangle rect = getWrapLabel().getTextBounds().getCopy(); + getWrapLabel().translateToAbsolute(rect); + if (!text.getFont().isDisposed()) + { + if (getWrapLabel().isTextWrapOn() && getWrapLabel().getText().length() > 0) + { + rect.setSize(new Dimension(text.computeSize(rect.width, SWT.DEFAULT))); + } + else + { + int avr = FigureUtilities.getFontMetrics(text.getFont()).getAverageCharWidth(); + rect.setSize(new Dimension(text.computeSize(SWT.DEFAULT, SWT.DEFAULT)).expand(avr * 2, 0)); + } + } + if (!rect.equals(new Rectangle(text.getBounds()))) + { + text.setBounds(rect.x, rect.y, rect.width, rect.height); + } + } + } + + /** + * @generated + */ + private static class LabelCellEditorLocator implements CellEditorLocator + { + + /** + * @generated + */ + private Label label; + + /** + * @generated + */ + public LabelCellEditorLocator(Label label) + { + this.label = label; + } + + /** + * @generated + */ + public Label getLabel() + { + return label; + } + + /** + * @generated + */ + public void relocate(CellEditor celleditor) + { + Text text = (Text)celleditor.getControl(); + Rectangle rect = getLabel().getTextBounds().getCopy(); + getLabel().translateToAbsolute(rect); + if (!text.getFont().isDisposed()) + { + int avr = FigureUtilities.getFontMetrics(text.getFont()).getAverageCharWidth(); + rect.setSize(new Dimension(text.computeSize(SWT.DEFAULT, SWT.DEFAULT)).expand(avr * 2, 0)); + } + if (!rect.equals(new Rectangle(text.getBounds()))) + { + text.setBounds(rect.x, rect.y, rect.width, rect.height); + } + } + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AAttribute2ItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AAttribute2ItemSemanticEditPolicy.java new file mode 100644 index 0000000000..90490b4ec4 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AAttribute2ItemSemanticEditPolicy.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.ecore.EAnnotation; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand; +import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AAttribute2ItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AAttribute2ItemSemanticEditPolicy() + { + super(AcoreElementTypes.AAttribute_3003); + } + + /** + * @generated + */ + protected Command getDestroyElementCommand(DestroyElementRequest req) + { + View view = (View)getHost().getModel(); + CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(getEditingDomain(), null); + cmd.setTransactionNestingEnabled(false); + EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$ + if (annotation == null) + { + // there are indirectly referenced children, need extra commands: false + addDestroyShortcutsCommand(cmd, view); + // delete host element + cmd.add(new DestroyElementCommand(req)); + } + else + { + cmd.add(new DeleteCommand(getEditingDomain(), view)); + } + return getGEFWrapper(cmd.reduce()); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AAttributeItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AAttributeItemSemanticEditPolicy.java new file mode 100644 index 0000000000..7ec9f46b97 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AAttributeItemSemanticEditPolicy.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.ecore.EAnnotation; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand; +import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AAttributeItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AAttributeItemSemanticEditPolicy() + { + super(AcoreElementTypes.AAttribute_3001); + } + + /** + * @generated + */ + protected Command getDestroyElementCommand(DestroyElementRequest req) + { + View view = (View)getHost().getModel(); + CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(getEditingDomain(), null); + cmd.setTransactionNestingEnabled(false); + EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$ + if (annotation == null) + { + // there are indirectly referenced children, need extra commands: false + addDestroyShortcutsCommand(cmd, view); + // delete host element + cmd.add(new DestroyElementCommand(req)); + } + else + { + cmd.add(new DeleteCommand(getEditingDomain(), view)); + } + return getGEFWrapper(cmd.reduce()); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAAttributeCompartmentCanonicalEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAAttributeCompartmentCanonicalEditPolicy.java new file mode 100644 index 0000000000..76d83d3cd3 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAAttributeCompartmentCanonicalEditPolicy.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.emf.cdo.dawn.examples.acore.AcorePackage; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AAttribute2EditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramUpdater; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreNodeDescriptor; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassAAttributeCompartmentCanonicalEditPolicy extends CanonicalEditPolicy +{ + + /** + * @generated + */ + protected List getSemanticChildrenList() + { + View viewObject = (View)getHost().getModel(); + LinkedList<EObject> result = new LinkedList<EObject>(); + List<AcoreNodeDescriptor> childDescriptors = AcoreDiagramUpdater + .getAClassAAttributeCompartment_7003SemanticChildren(viewObject); + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor d = it.next(); + result.add(d.getModelElement()); + } + return result; + } + + /** + * @generated + */ + protected boolean isOrphaned(Collection semanticChildren, final View view) + { + int visualID = AcoreVisualIDRegistry.getVisualID(view); + switch (visualID) + { + case AAttribute2EditPart.VISUAL_ID: + if (!semanticChildren.contains(view.getElement())) + { + return true; + } + } + return false; + } + + /** + * @generated + */ + protected EStructuralFeature getFeatureToSynchronize() + { + return AcorePackage.eINSTANCE.getABasicClass_Attributes(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAAttributeCompartmentItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAAttributeCompartmentItemSemanticEditPolicy.java new file mode 100644 index 0000000000..e853931e52 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAAttributeCompartmentItemSemanticEditPolicy.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AAttribute2CreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; + +/** + * @generated + */ +public class AClassAAttributeCompartmentItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassAAttributeCompartmentItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClass_2002); + } + + /** + * @generated + */ + protected Command getCreateCommand(CreateElementRequest req) + { + if (AcoreElementTypes.AAttribute_3003 == req.getElementType()) + { + return getGEFWrapper(new AAttribute2CreateCommand(req)); + } + return super.getCreateCommand(req); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAOperationClassCompartmentCanonicalEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAOperationClassCompartmentCanonicalEditPolicy.java new file mode 100644 index 0000000000..5228fce162 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAOperationClassCompartmentCanonicalEditPolicy.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.emf.cdo.dawn.examples.acore.AcorePackage; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AOperation2EditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramUpdater; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreNodeDescriptor; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassAOperationClassCompartmentCanonicalEditPolicy extends CanonicalEditPolicy +{ + + /** + * @generated + */ + protected List getSemanticChildrenList() + { + View viewObject = (View)getHost().getModel(); + LinkedList<EObject> result = new LinkedList<EObject>(); + List<AcoreNodeDescriptor> childDescriptors = AcoreDiagramUpdater + .getAClassAOperationClassCompartment_7004SemanticChildren(viewObject); + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor d = it.next(); + result.add(d.getModelElement()); + } + return result; + } + + /** + * @generated + */ + protected boolean isOrphaned(Collection semanticChildren, final View view) + { + int visualID = AcoreVisualIDRegistry.getVisualID(view); + switch (visualID) + { + case AOperation2EditPart.VISUAL_ID: + if (!semanticChildren.contains(view.getElement())) + { + return true; + } + } + return false; + } + + /** + * @generated + */ + protected EStructuralFeature getFeatureToSynchronize() + { + return AcorePackage.eINSTANCE.getABasicClass_Operations(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAOperationClassCompartmentItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAOperationClassCompartmentItemSemanticEditPolicy.java new file mode 100644 index 0000000000..5d7724dbe8 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAOperationClassCompartmentItemSemanticEditPolicy.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AOperation2CreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; + +/** + * @generated + */ +public class AClassAOperationClassCompartmentItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassAOperationClassCompartmentItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClass_2002); + } + + /** + * @generated + */ + protected Command getCreateCommand(CreateElementRequest req) + { + if (AcoreElementTypes.AOperation_3004 == req.getElementType()) + { + return getGEFWrapper(new AOperation2CreateCommand(req)); + } + return super.getCreateCommand(req); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAggregationsItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAggregationsItemSemanticEditPolicy.java new file mode 100644 index 0000000000..0d369a3d4f --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAggregationsItemSemanticEditPolicy.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; + +/** + * @generated + */ +public class AClassAggregationsItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassAggregationsItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClassAggregations_4004); + } + + /** + * @generated + */ + protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) + { + return getGEFWrapper(new DestroyReferenceCommand(req)); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAssociationsItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAssociationsItemSemanticEditPolicy.java new file mode 100644 index 0000000000..10e99c61df --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassAssociationsItemSemanticEditPolicy.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; + +/** + * @generated + */ +public class AClassAssociationsItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassAssociationsItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClassAssociations_4003); + } + + /** + * @generated + */ + protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) + { + return getGEFWrapper(new DestroyReferenceCommand(req)); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassCompositionsItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassCompositionsItemSemanticEditPolicy.java new file mode 100644 index 0000000000..8acc83b591 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassCompositionsItemSemanticEditPolicy.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; + +/** + * @generated + */ +public class AClassCompositionsItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassCompositionsItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClassCompositions_4005); + } + + /** + * @generated + */ + protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) + { + return getGEFWrapper(new DestroyReferenceCommand(req)); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassImplementedInterfacesItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassImplementedInterfacesItemSemanticEditPolicy.java new file mode 100644 index 0000000000..0655263a3e --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassImplementedInterfacesItemSemanticEditPolicy.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; + +/** + * @generated + */ +public class AClassImplementedInterfacesItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassImplementedInterfacesItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClassImplementedInterfaces_4002); + } + + /** + * @generated + */ + protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) + { + return getGEFWrapper(new DestroyReferenceCommand(req)); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassItemSemanticEditPolicy.java new file mode 100644 index 0000000000..7c9ec3575c --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassItemSemanticEditPolicy.java @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Iterator; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassAggregationsCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassAggregationsReorientCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassAssociationsCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassAssociationsReorientCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassCompositionsCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassCompositionsReorientCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassImplementedInterfacesCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassImplementedInterfacesReorientCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassSubClassesCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassSubClassesReorientCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AAttribute2EditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassAAttributeCompartmentEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassAOperationClassCompartmentEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassAggregationsEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassAssociationsEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassCompositionsEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassImplementedInterfacesEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassSubClassesEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AOperation2EditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.ecore.EAnnotation; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand; +import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand; +import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.notation.Edge; +import org.eclipse.gmf.runtime.notation.Node; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AClassItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClass_2002); + } + + /** + * @generated + */ + protected Command getDestroyElementCommand(DestroyElementRequest req) + { + View view = (View)getHost().getModel(); + CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(getEditingDomain(), null); + cmd.setTransactionNestingEnabled(false); + for (Iterator it = view.getTargetEdges().iterator(); it.hasNext();) + { + Edge incomingLink = (Edge)it.next(); + if (AcoreVisualIDRegistry.getVisualID(incomingLink) == AClassSubClassesEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(incomingLink.getSource().getElement(), null, + incomingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), incomingLink)); + continue; + } + if (AcoreVisualIDRegistry.getVisualID(incomingLink) == AClassAssociationsEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(incomingLink.getSource().getElement(), null, + incomingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), incomingLink)); + continue; + } + if (AcoreVisualIDRegistry.getVisualID(incomingLink) == AClassAggregationsEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(incomingLink.getSource().getElement(), null, + incomingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), incomingLink)); + continue; + } + if (AcoreVisualIDRegistry.getVisualID(incomingLink) == AClassCompositionsEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(incomingLink.getSource().getElement(), null, + incomingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), incomingLink)); + continue; + } + } + for (Iterator it = view.getSourceEdges().iterator(); it.hasNext();) + { + Edge outgoingLink = (Edge)it.next(); + if (AcoreVisualIDRegistry.getVisualID(outgoingLink) == AClassSubClassesEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(outgoingLink.getSource().getElement(), null, + outgoingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink)); + continue; + } + if (AcoreVisualIDRegistry.getVisualID(outgoingLink) == AClassImplementedInterfacesEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(outgoingLink.getSource().getElement(), null, + outgoingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink)); + continue; + } + if (AcoreVisualIDRegistry.getVisualID(outgoingLink) == AClassAssociationsEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(outgoingLink.getSource().getElement(), null, + outgoingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink)); + continue; + } + if (AcoreVisualIDRegistry.getVisualID(outgoingLink) == AClassAggregationsEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(outgoingLink.getSource().getElement(), null, + outgoingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink)); + continue; + } + if (AcoreVisualIDRegistry.getVisualID(outgoingLink) == AClassCompositionsEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(outgoingLink.getSource().getElement(), null, + outgoingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink)); + continue; + } + } + EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$ + if (annotation == null) + { + // there are indirectly referenced children, need extra commands: false + addDestroyChildNodesCommand(cmd); + addDestroyShortcutsCommand(cmd, view); + // delete host element + cmd.add(new DestroyElementCommand(req)); + } + else + { + cmd.add(new DeleteCommand(getEditingDomain(), view)); + } + return getGEFWrapper(cmd.reduce()); + } + + /** + * @generated + */ + private void addDestroyChildNodesCommand(ICompositeCommand cmd) + { + View view = (View)getHost().getModel(); + for (Iterator nit = view.getChildren().iterator(); nit.hasNext();) + { + Node node = (Node)nit.next(); + switch (AcoreVisualIDRegistry.getVisualID(node)) + { + case AClassAAttributeCompartmentEditPart.VISUAL_ID: + for (Iterator cit = node.getChildren().iterator(); cit.hasNext();) + { + Node cnode = (Node)cit.next(); + switch (AcoreVisualIDRegistry.getVisualID(cnode)) + { + case AAttribute2EditPart.VISUAL_ID: + cmd.add(new DestroyElementCommand(new DestroyElementRequest(getEditingDomain(), cnode.getElement(), false))); // directlyOwned: true + // don't need explicit deletion of cnode as parent's view deletion would clean child views as well + // cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), cnode)); + break; + } + } + break; + case AClassAOperationClassCompartmentEditPart.VISUAL_ID: + for (Iterator cit = node.getChildren().iterator(); cit.hasNext();) + { + Node cnode = (Node)cit.next(); + switch (AcoreVisualIDRegistry.getVisualID(cnode)) + { + case AOperation2EditPart.VISUAL_ID: + cmd.add(new DestroyElementCommand(new DestroyElementRequest(getEditingDomain(), cnode.getElement(), false))); // directlyOwned: true + // don't need explicit deletion of cnode as parent's view deletion would clean child views as well + // cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), cnode)); + break; + } + } + break; + } + } + } + + /** + * @generated + */ + protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) + { + Command command = req.getTarget() == null ? getStartCreateRelationshipCommand(req) + : getCompleteCreateRelationshipCommand(req); + return command != null ? command : super.getCreateRelationshipCommand(req); + } + + /** + * @generated + */ + protected Command getStartCreateRelationshipCommand(CreateRelationshipRequest req) + { + if (AcoreElementTypes.AClassSubClasses_4001 == req.getElementType()) + { + return getGEFWrapper(new AClassSubClassesCreateCommand(req, req.getSource(), req.getTarget())); + } + if (AcoreElementTypes.AClassImplementedInterfaces_4002 == req.getElementType()) + { + return getGEFWrapper(new AClassImplementedInterfacesCreateCommand(req, req.getSource(), req.getTarget())); + } + if (AcoreElementTypes.AClassAssociations_4003 == req.getElementType()) + { + return getGEFWrapper(new AClassAssociationsCreateCommand(req, req.getSource(), req.getTarget())); + } + if (AcoreElementTypes.AClassAggregations_4004 == req.getElementType()) + { + return getGEFWrapper(new AClassAggregationsCreateCommand(req, req.getSource(), req.getTarget())); + } + if (AcoreElementTypes.AClassCompositions_4005 == req.getElementType()) + { + return getGEFWrapper(new AClassCompositionsCreateCommand(req, req.getSource(), req.getTarget())); + } + return null; + } + + /** + * @generated + */ + protected Command getCompleteCreateRelationshipCommand(CreateRelationshipRequest req) + { + if (AcoreElementTypes.AClassSubClasses_4001 == req.getElementType()) + { + return getGEFWrapper(new AClassSubClassesCreateCommand(req, req.getSource(), req.getTarget())); + } + if (AcoreElementTypes.AClassImplementedInterfaces_4002 == req.getElementType()) + { + return null; + } + if (AcoreElementTypes.AClassAssociations_4003 == req.getElementType()) + { + return getGEFWrapper(new AClassAssociationsCreateCommand(req, req.getSource(), req.getTarget())); + } + if (AcoreElementTypes.AClassAggregations_4004 == req.getElementType()) + { + return getGEFWrapper(new AClassAggregationsCreateCommand(req, req.getSource(), req.getTarget())); + } + if (AcoreElementTypes.AClassCompositions_4005 == req.getElementType()) + { + return getGEFWrapper(new AClassCompositionsCreateCommand(req, req.getSource(), req.getTarget())); + } + return null; + } + + /** + * Returns command to reorient EReference based link. New link target or source + * should be the domain model element associated with this node. + * + * @generated + */ + protected Command getReorientReferenceRelationshipCommand(ReorientReferenceRelationshipRequest req) + { + switch (getVisualID(req)) + { + case AClassSubClassesEditPart.VISUAL_ID: + return getGEFWrapper(new AClassSubClassesReorientCommand(req)); + case AClassImplementedInterfacesEditPart.VISUAL_ID: + return getGEFWrapper(new AClassImplementedInterfacesReorientCommand(req)); + case AClassAssociationsEditPart.VISUAL_ID: + return getGEFWrapper(new AClassAssociationsReorientCommand(req)); + case AClassAggregationsEditPart.VISUAL_ID: + return getGEFWrapper(new AClassAggregationsReorientCommand(req)); + case AClassCompositionsEditPart.VISUAL_ID: + return getGEFWrapper(new AClassCompositionsReorientCommand(req)); + } + return super.getReorientReferenceRelationshipCommand(req); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassSubClassesItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassSubClassesItemSemanticEditPolicy.java new file mode 100644 index 0000000000..bec87f03ef --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AClassSubClassesItemSemanticEditPolicy.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; + +/** + * @generated + */ +public class AClassSubClassesItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AClassSubClassesItemSemanticEditPolicy() + { + super(AcoreElementTypes.AClassSubClasses_4001); + } + + /** + * @generated + */ + protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) + { + return getGEFWrapper(new DestroyReferenceCommand(req)); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/ACoreRootCanonicalEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/ACoreRootCanonicalEditPolicy.java new file mode 100644 index 0000000000..fa983769ad --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/ACoreRootCanonicalEditPolicy.java @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.emf.cdo.dawn.examples.acore.AcorePackage; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.ACoreRootEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AInterfaceEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramUpdater; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreLinkDescriptor; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreNodeDescriptor; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil; +import org.eclipse.gmf.runtime.diagram.ui.commands.DeferredLayoutCommand; +import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; +import org.eclipse.gmf.runtime.diagram.ui.commands.SetViewMutabilityCommand; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest; +import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest; +import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; +import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.gmf.runtime.notation.Edge; +import org.eclipse.gmf.runtime.notation.Node; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class ACoreRootCanonicalEditPolicy extends CanonicalEditPolicy +{ + + /** + * @generated + */ + Set<EStructuralFeature> myFeaturesToSynchronize; + + /** + * @generated + */ + protected List getSemanticChildrenList() + { + View viewObject = (View)getHost().getModel(); + LinkedList<EObject> result = new LinkedList<EObject>(); + List<AcoreNodeDescriptor> childDescriptors = AcoreDiagramUpdater.getACoreRoot_1000SemanticChildren(viewObject); + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor d = it.next(); + result.add(d.getModelElement()); + } + return result; + } + + /** + * @generated + */ + protected boolean shouldDeleteView(View view) + { + return true; + } + + /** + * @generated + */ + protected boolean isOrphaned(Collection semanticChildren, final View view) + { + int visualID = AcoreVisualIDRegistry.getVisualID(view); + switch (visualID) + { + case AInterfaceEditPart.VISUAL_ID: + case AClassEditPart.VISUAL_ID: + if (!semanticChildren.contains(view.getElement())) + { + return true; + } + } + return false; + } + + /** + * @generated + */ + protected Set getFeaturesToSynchronize() + { + if (myFeaturesToSynchronize == null) + { + myFeaturesToSynchronize = new HashSet<EStructuralFeature>(); + myFeaturesToSynchronize.add(AcorePackage.eINSTANCE.getACoreRoot_Interfaces()); + myFeaturesToSynchronize.add(AcorePackage.eINSTANCE.getACoreRoot_Classes()); + } + return myFeaturesToSynchronize; + } + + /** + * @generated + */ + protected void refreshSemantic() + { + if (resolveSemanticElement() == null) + { + return; + } + LinkedList<IAdaptable> createdViews = new LinkedList<IAdaptable>(); + // refreshSemanticChildren() alternative + List<AcoreNodeDescriptor> childDescriptors = AcoreDiagramUpdater.getACoreRoot_1000SemanticChildren((View)getHost() + .getModel()); + ArrayList<EObject> semanticChildren = new ArrayList<EObject>(childDescriptors.size()); + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor next = it.next(); + semanticChildren.add(next.getModelElement()); + } + List<View> orphaned = cleanCanonicalSemanticChildren(getViewChildren(), semanticChildren); + boolean changed = deleteViews(orphaned.iterator()); + // leave descriptors that reference survived semanticChildren. + // NOTE, we may want to stop using cleanCanonicalSemanticChildren() here, replacing with own code, that respects NodeDescriptors + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor next = it.next(); + if (!semanticChildren.contains(next.getModelElement())) + { + it.remove(); + } + } + ArrayList<CreateViewRequest.ViewDescriptor> viewDescriptors = new ArrayList<CreateViewRequest.ViewDescriptor>( + childDescriptors.size()); + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor next = it.next(); + String hint = AcoreVisualIDRegistry.getType(next.getVisualID()); + IAdaptable elementAdapter = new CanonicalElementAdapter(next.getModelElement(), hint); + viewDescriptors.add(new CreateViewRequest.ViewDescriptor(elementAdapter, Node.class, hint, ViewUtil.APPEND, + false, host().getDiagramPreferencesHint())); + } + // + CreateViewRequest request = getCreateViewRequest(viewDescriptors); + Command cmd = getCreateViewCommand(request); + if (cmd != null && cmd.canExecute()) + { + SetViewMutabilityCommand.makeMutable(new EObjectAdapter(host().getNotationView())).execute(); + executeCommand(cmd); + createdViews.addAll((List<IAdaptable>)request.getNewObject()); + } + if (changed || createdViews.size() > 0) + { + postProcessRefreshSemantic(createdViews); + } + Collection<IAdaptable> createdConnectionViews = refreshConnections(); + + if (createdViews.size() > 1) + { + // perform a layout of the container + DeferredLayoutCommand layoutCmd = new DeferredLayoutCommand(host().getEditingDomain(), createdViews, host()); + executeCommand(new ICommandProxy(layoutCmd)); + } + + createdViews.addAll(createdConnectionViews); + makeViewsImmutable(createdViews); + } + + /** + * @generated + */ + private Diagram getDiagram() + { + return ((View)getHost().getModel()).getDiagram(); + } + + /** + * @generated + */ + private Collection<IAdaptable> refreshConnections() + { + Map<EObject, View> domain2NotationMap = new HashMap<EObject, View>(); + Collection<AcoreLinkDescriptor> linkDescriptors = collectAllLinks(getDiagram(), domain2NotationMap); + Collection existingLinks = new LinkedList(getDiagram().getEdges()); + for (Iterator linksIterator = existingLinks.iterator(); linksIterator.hasNext();) + { + Edge nextDiagramLink = (Edge)linksIterator.next(); + int diagramLinkVisualID = AcoreVisualIDRegistry.getVisualID(nextDiagramLink); + if (diagramLinkVisualID == -1) + { + if (nextDiagramLink.getSource() != null && nextDiagramLink.getTarget() != null) + { + linksIterator.remove(); + } + continue; + } + EObject diagramLinkObject = nextDiagramLink.getElement(); + EObject diagramLinkSrc = nextDiagramLink.getSource().getElement(); + EObject diagramLinkDst = nextDiagramLink.getTarget().getElement(); + for (Iterator<AcoreLinkDescriptor> linkDescriptorsIterator = linkDescriptors.iterator(); linkDescriptorsIterator + .hasNext();) + { + AcoreLinkDescriptor nextLinkDescriptor = linkDescriptorsIterator.next(); + if (diagramLinkObject == nextLinkDescriptor.getModelElement() + && diagramLinkSrc == nextLinkDescriptor.getSource() + && diagramLinkDst == nextLinkDescriptor.getDestination() + && diagramLinkVisualID == nextLinkDescriptor.getVisualID()) + { + linksIterator.remove(); + linkDescriptorsIterator.remove(); + break; + } + } + } + deleteViews(existingLinks.iterator()); + return createConnections(linkDescriptors, domain2NotationMap); + } + + /** + * @generated + */ + private Collection<AcoreLinkDescriptor> collectAllLinks(View view, Map<EObject, View> domain2NotationMap) + { + if (!ACoreRootEditPart.MODEL_ID.equals(AcoreVisualIDRegistry.getModelID(view))) + { + return Collections.emptyList(); + } + LinkedList<AcoreLinkDescriptor> result = new LinkedList<AcoreLinkDescriptor>(); + switch (AcoreVisualIDRegistry.getVisualID(view)) + { + case ACoreRootEditPart.VISUAL_ID: + { + if (!domain2NotationMap.containsKey(view.getElement())) + { + result.addAll(AcoreDiagramUpdater.getACoreRoot_1000ContainedLinks(view)); + } + if (!domain2NotationMap.containsKey(view.getElement()) || view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$ + domain2NotationMap.put(view.getElement(), view); + } + break; + } + case AInterfaceEditPart.VISUAL_ID: + { + if (!domain2NotationMap.containsKey(view.getElement())) + { + result.addAll(AcoreDiagramUpdater.getAInterface_2001ContainedLinks(view)); + } + if (!domain2NotationMap.containsKey(view.getElement()) || view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$ + domain2NotationMap.put(view.getElement(), view); + } + break; + } + case AClassEditPart.VISUAL_ID: + { + if (!domain2NotationMap.containsKey(view.getElement())) + { + result.addAll(AcoreDiagramUpdater.getAClass_2002ContainedLinks(view)); + } + if (!domain2NotationMap.containsKey(view.getElement()) || view.getEAnnotation("Shortcut") == null) { //$NON-NLS-1$ + domain2NotationMap.put(view.getElement(), view); + } + break; + } + } + for (Iterator children = view.getChildren().iterator(); children.hasNext();) + { + result.addAll(collectAllLinks((View)children.next(), domain2NotationMap)); + } + for (Iterator edges = view.getSourceEdges().iterator(); edges.hasNext();) + { + result.addAll(collectAllLinks((View)edges.next(), domain2NotationMap)); + } + return result; + } + + /** + * @generated + */ + private Collection<IAdaptable> createConnections(Collection<AcoreLinkDescriptor> linkDescriptors, + Map<EObject, View> domain2NotationMap) + { + LinkedList<IAdaptable> adapters = new LinkedList<IAdaptable>(); + for (Iterator<AcoreLinkDescriptor> it = linkDescriptors.iterator(); it.hasNext();) + { + AcoreLinkDescriptor nextLinkDescriptor = it.next(); + EditPart sourceEditPart = getEditPart(nextLinkDescriptor.getSource(), domain2NotationMap); + EditPart targetEditPart = getEditPart(nextLinkDescriptor.getDestination(), domain2NotationMap); + if (sourceEditPart == null || targetEditPart == null) + { + continue; + } + CreateConnectionViewRequest.ConnectionViewDescriptor descriptor = new CreateConnectionViewRequest.ConnectionViewDescriptor( + nextLinkDescriptor.getSemanticAdapter(), String.valueOf(nextLinkDescriptor.getVisualID()), ViewUtil.APPEND, + false, ((IGraphicalEditPart)getHost()).getDiagramPreferencesHint()); + CreateConnectionViewRequest ccr = new CreateConnectionViewRequest(descriptor); + ccr.setType(RequestConstants.REQ_CONNECTION_START); + ccr.setSourceEditPart(sourceEditPart); + sourceEditPart.getCommand(ccr); + ccr.setTargetEditPart(targetEditPart); + ccr.setType(RequestConstants.REQ_CONNECTION_END); + Command cmd = targetEditPart.getCommand(ccr); + if (cmd != null && cmd.canExecute()) + { + executeCommand(cmd); + IAdaptable viewAdapter = (IAdaptable)ccr.getNewObject(); + if (viewAdapter != null) + { + adapters.add(viewAdapter); + } + } + } + return adapters; + } + + /** + * @generated + */ + private EditPart getEditPart(EObject domainModelElement, Map<EObject, View> domain2NotationMap) + { + View view = (View)domain2NotationMap.get(domainModelElement); + if (view != null) + { + return (EditPart)getHost().getViewer().getEditPartRegistry().get(view); + } + return null; + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/ACoreRootItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/ACoreRootItemSemanticEditPolicy.java new file mode 100644 index 0000000000..b9527ecdc5 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/ACoreRootItemSemanticEditPolicy.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AInterfaceCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.emf.commands.core.commands.DuplicateEObjectsCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DuplicateElementsRequest; + +/** + * @generated + */ +public class ACoreRootItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public ACoreRootItemSemanticEditPolicy() + { + super(AcoreElementTypes.ACoreRoot_1000); + } + + /** + * @generated + */ + protected Command getCreateCommand(CreateElementRequest req) + { + if (AcoreElementTypes.AInterface_2001 == req.getElementType()) + { + return getGEFWrapper(new AInterfaceCreateCommand(req)); + } + if (AcoreElementTypes.AClass_2002 == req.getElementType()) + { + return getGEFWrapper(new AClassCreateCommand(req)); + } + return super.getCreateCommand(req); + } + + /** + * @generated + */ + protected Command getDuplicateCommand(DuplicateElementsRequest req) + { + TransactionalEditingDomain editingDomain = ((IGraphicalEditPart)getHost()).getEditingDomain(); + return getGEFWrapper(new DuplicateAnythingCommand(editingDomain, req)); + } + + /** + * @generated + */ + private static class DuplicateAnythingCommand extends DuplicateEObjectsCommand + { + + /** + * @generated + */ + public DuplicateAnythingCommand(TransactionalEditingDomain editingDomain, DuplicateElementsRequest req) + { + super(editingDomain, req.getLabel(), req.getElementsToBeDuplicated(), req.getAllDuplicatedElementsMap()); + } + + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAAttributeInterfaceCompartmentCanonicalEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAAttributeInterfaceCompartmentCanonicalEditPolicy.java new file mode 100644 index 0000000000..141a755943 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAAttributeInterfaceCompartmentCanonicalEditPolicy.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.emf.cdo.dawn.examples.acore.AcorePackage; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AAttributeEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramUpdater; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreNodeDescriptor; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AInterfaceAAttributeInterfaceCompartmentCanonicalEditPolicy extends CanonicalEditPolicy +{ + + /** + * @generated + */ + protected List getSemanticChildrenList() + { + View viewObject = (View)getHost().getModel(); + LinkedList<EObject> result = new LinkedList<EObject>(); + List<AcoreNodeDescriptor> childDescriptors = AcoreDiagramUpdater + .getAInterfaceAAttributeInterfaceCompartment_7001SemanticChildren(viewObject); + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor d = it.next(); + result.add(d.getModelElement()); + } + return result; + } + + /** + * @generated + */ + protected boolean isOrphaned(Collection semanticChildren, final View view) + { + int visualID = AcoreVisualIDRegistry.getVisualID(view); + switch (visualID) + { + case AAttributeEditPart.VISUAL_ID: + if (!semanticChildren.contains(view.getElement())) + { + return true; + } + } + return false; + } + + /** + * @generated + */ + protected EStructuralFeature getFeatureToSynchronize() + { + return AcorePackage.eINSTANCE.getABasicClass_Attributes(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAAttributeInterfaceCompartmentItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAAttributeInterfaceCompartmentItemSemanticEditPolicy.java new file mode 100644 index 0000000000..4e45637021 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAAttributeInterfaceCompartmentItemSemanticEditPolicy.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AAttributeCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; + +/** + * @generated + */ +public class AInterfaceAAttributeInterfaceCompartmentItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AInterfaceAAttributeInterfaceCompartmentItemSemanticEditPolicy() + { + super(AcoreElementTypes.AInterface_2001); + } + + /** + * @generated + */ + protected Command getCreateCommand(CreateElementRequest req) + { + if (AcoreElementTypes.AAttribute_3001 == req.getElementType()) + { + return getGEFWrapper(new AAttributeCreateCommand(req)); + } + return super.getCreateCommand(req); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAOperationInterfaceCompartmentCanonicalEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAOperationInterfaceCompartmentCanonicalEditPolicy.java new file mode 100644 index 0000000000..e4662c9fdb --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAOperationInterfaceCompartmentCanonicalEditPolicy.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.emf.cdo.dawn.examples.acore.AcorePackage; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AOperationEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramUpdater; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreNodeDescriptor; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AInterfaceAOperationInterfaceCompartmentCanonicalEditPolicy extends CanonicalEditPolicy +{ + + /** + * @generated + */ + protected List getSemanticChildrenList() + { + View viewObject = (View)getHost().getModel(); + LinkedList<EObject> result = new LinkedList<EObject>(); + List<AcoreNodeDescriptor> childDescriptors = AcoreDiagramUpdater + .getAInterfaceAOperationInterfaceCompartment_7002SemanticChildren(viewObject); + for (Iterator<AcoreNodeDescriptor> it = childDescriptors.iterator(); it.hasNext();) + { + AcoreNodeDescriptor d = it.next(); + result.add(d.getModelElement()); + } + return result; + } + + /** + * @generated + */ + protected boolean isOrphaned(Collection semanticChildren, final View view) + { + int visualID = AcoreVisualIDRegistry.getVisualID(view); + switch (visualID) + { + case AOperationEditPart.VISUAL_ID: + if (!semanticChildren.contains(view.getElement())) + { + return true; + } + } + return false; + } + + /** + * @generated + */ + protected EStructuralFeature getFeatureToSynchronize() + { + return AcorePackage.eINSTANCE.getABasicClass_Operations(); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAOperationInterfaceCompartmentItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAOperationInterfaceCompartmentItemSemanticEditPolicy.java new file mode 100644 index 0000000000..678a84f06b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceAOperationInterfaceCompartmentItemSemanticEditPolicy.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AOperationCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; + +/** + * @generated + */ +public class AInterfaceAOperationInterfaceCompartmentItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AInterfaceAOperationInterfaceCompartmentItemSemanticEditPolicy() + { + super(AcoreElementTypes.AInterface_2001); + } + + /** + * @generated + */ + protected Command getCreateCommand(CreateElementRequest req) + { + if (AcoreElementTypes.AOperation_3002 == req.getElementType()) + { + return getGEFWrapper(new AOperationCreateCommand(req)); + } + return super.getCreateCommand(req); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceItemSemanticEditPolicy.java new file mode 100644 index 0000000000..6669573eba --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AInterfaceItemSemanticEditPolicy.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Iterator; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassImplementedInterfacesCreateCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.commands.AClassImplementedInterfacesReorientCommand; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AAttributeEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AClassImplementedInterfacesEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AInterfaceAAttributeInterfaceCompartmentEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AInterfaceAOperationInterfaceCompartmentEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.parts.AOperationEditPart; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.ecore.EAnnotation; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand; +import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand; +import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.notation.Edge; +import org.eclipse.gmf.runtime.notation.Node; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AInterfaceItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AInterfaceItemSemanticEditPolicy() + { + super(AcoreElementTypes.AInterface_2001); + } + + /** + * @generated + */ + protected Command getDestroyElementCommand(DestroyElementRequest req) + { + View view = (View)getHost().getModel(); + CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(getEditingDomain(), null); + cmd.setTransactionNestingEnabled(false); + for (Iterator it = view.getTargetEdges().iterator(); it.hasNext();) + { + Edge incomingLink = (Edge)it.next(); + if (AcoreVisualIDRegistry.getVisualID(incomingLink) == AClassImplementedInterfacesEditPart.VISUAL_ID) + { + DestroyReferenceRequest r = new DestroyReferenceRequest(incomingLink.getSource().getElement(), null, + incomingLink.getTarget().getElement(), false); + cmd.add(new DestroyReferenceCommand(r)); + cmd.add(new DeleteCommand(getEditingDomain(), incomingLink)); + continue; + } + } + EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$ + if (annotation == null) + { + // there are indirectly referenced children, need extra commands: false + addDestroyChildNodesCommand(cmd); + addDestroyShortcutsCommand(cmd, view); + // delete host element + cmd.add(new DestroyElementCommand(req)); + } + else + { + cmd.add(new DeleteCommand(getEditingDomain(), view)); + } + return getGEFWrapper(cmd.reduce()); + } + + /** + * @generated + */ + private void addDestroyChildNodesCommand(ICompositeCommand cmd) + { + View view = (View)getHost().getModel(); + for (Iterator nit = view.getChildren().iterator(); nit.hasNext();) + { + Node node = (Node)nit.next(); + switch (AcoreVisualIDRegistry.getVisualID(node)) + { + case AInterfaceAAttributeInterfaceCompartmentEditPart.VISUAL_ID: + for (Iterator cit = node.getChildren().iterator(); cit.hasNext();) + { + Node cnode = (Node)cit.next(); + switch (AcoreVisualIDRegistry.getVisualID(cnode)) + { + case AAttributeEditPart.VISUAL_ID: + cmd.add(new DestroyElementCommand(new DestroyElementRequest(getEditingDomain(), cnode.getElement(), false))); // directlyOwned: true + // don't need explicit deletion of cnode as parent's view deletion would clean child views as well + // cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), cnode)); + break; + } + } + break; + case AInterfaceAOperationInterfaceCompartmentEditPart.VISUAL_ID: + for (Iterator cit = node.getChildren().iterator(); cit.hasNext();) + { + Node cnode = (Node)cit.next(); + switch (AcoreVisualIDRegistry.getVisualID(cnode)) + { + case AOperationEditPart.VISUAL_ID: + cmd.add(new DestroyElementCommand(new DestroyElementRequest(getEditingDomain(), cnode.getElement(), false))); // directlyOwned: true + // don't need explicit deletion of cnode as parent's view deletion would clean child views as well + // cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), cnode)); + break; + } + } + break; + } + } + } + + /** + * @generated + */ + protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) + { + Command command = req.getTarget() == null ? getStartCreateRelationshipCommand(req) + : getCompleteCreateRelationshipCommand(req); + return command != null ? command : super.getCreateRelationshipCommand(req); + } + + /** + * @generated + */ + protected Command getStartCreateRelationshipCommand(CreateRelationshipRequest req) + { + if (AcoreElementTypes.AClassImplementedInterfaces_4002 == req.getElementType()) + { + return null; + } + return null; + } + + /** + * @generated + */ + protected Command getCompleteCreateRelationshipCommand(CreateRelationshipRequest req) + { + if (AcoreElementTypes.AClassImplementedInterfaces_4002 == req.getElementType()) + { + return getGEFWrapper(new AClassImplementedInterfacesCreateCommand(req, req.getSource(), req.getTarget())); + } + return null; + } + + /** + * Returns command to reorient EReference based link. New link target or source + * should be the domain model element associated with this node. + * + * @generated + */ + protected Command getReorientReferenceRelationshipCommand(ReorientReferenceRelationshipRequest req) + { + switch (getVisualID(req)) + { + case AClassImplementedInterfacesEditPart.VISUAL_ID: + return getGEFWrapper(new AClassImplementedInterfacesReorientCommand(req)); + } + return super.getReorientReferenceRelationshipCommand(req); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AOperation2ItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AOperation2ItemSemanticEditPolicy.java new file mode 100644 index 0000000000..d0921cadb0 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AOperation2ItemSemanticEditPolicy.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.ecore.EAnnotation; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand; +import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AOperation2ItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AOperation2ItemSemanticEditPolicy() + { + super(AcoreElementTypes.AOperation_3004); + } + + /** + * @generated + */ + protected Command getDestroyElementCommand(DestroyElementRequest req) + { + View view = (View)getHost().getModel(); + CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(getEditingDomain(), null); + cmd.setTransactionNestingEnabled(false); + EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$ + if (annotation == null) + { + // there are indirectly referenced children, need extra commands: false + addDestroyShortcutsCommand(cmd, view); + // delete host element + cmd.add(new DestroyElementCommand(req)); + } + else + { + cmd.add(new DeleteCommand(getEditingDomain(), view)); + } + return getGEFWrapper(cmd.reduce()); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AOperationItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AOperationItemSemanticEditPolicy.java new file mode 100644 index 0000000000..e78cdc177b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AOperationItemSemanticEditPolicy.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.ecore.EAnnotation; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand; +import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; +import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AOperationItemSemanticEditPolicy extends AcoreBaseItemSemanticEditPolicy +{ + + /** + * @generated + */ + public AOperationItemSemanticEditPolicy() + { + super(AcoreElementTypes.AOperation_3002); + } + + /** + * @generated + */ + protected Command getDestroyElementCommand(DestroyElementRequest req) + { + View view = (View)getHost().getModel(); + CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(getEditingDomain(), null); + cmd.setTransactionNestingEnabled(false); + EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$ + if (annotation == null) + { + // there are indirectly referenced children, need extra commands: false + addDestroyShortcutsCommand(cmd, view); + // delete host element + cmd.add(new DestroyElementCommand(req)); + } + else + { + cmd.add(new DeleteCommand(getEditingDomain(), view)); + } + return getGEFWrapper(cmd.reduce()); + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreBaseItemSemanticEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreBaseItemSemanticEditPolicy.java new file mode 100644 index 0000000000..94789ea680 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreBaseItemSemanticEditPolicy.java @@ -0,0 +1,470 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Iterator; + +import org.eclipse.emf.cdo.dawn.examples.acore.AClass; +import org.eclipse.emf.cdo.dawn.examples.acore.AInterface; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.helpers.AcoreBaseEditHelper; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreVisualIDRegistry; +import org.eclipse.emf.cdo.dawn.examples.acore.diagram.providers.AcoreElementTypes; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.gef.Request; +import org.eclipse.gef.commands.Command; +import org.eclipse.gef.commands.UnexecutableCommand; +import org.eclipse.gef.requests.ReconnectRequest; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand; +import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand; +import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy; +import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.SemanticEditPolicy; +import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand; +import org.eclipse.gmf.runtime.emf.type.core.IElementType; +import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.DuplicateElementsRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.GetEditContextRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.IEditCommandRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.MoveRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest; +import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest; +import org.eclipse.gmf.runtime.notation.View; + +/** + * @generated + */ +public class AcoreBaseItemSemanticEditPolicy extends SemanticEditPolicy +{ + + /** + * Extended request data key to hold editpart visual id. + * @generated + */ + public static final String VISUAL_ID_KEY = "visual_id"; //$NON-NLS-1$ + + /** + * @generated + */ + private final IElementType myElementType; + + /** + * @generated + */ + protected AcoreBaseItemSemanticEditPolicy(IElementType elementType) + { + myElementType = elementType; + } + + /** + * Extended request data key to hold editpart visual id. + * Add visual id of edited editpart to extended data of the request + * so command switch can decide what kind of diagram element is being edited. + * It is done in those cases when it's not possible to deduce diagram + * element kind from domain element. + * + * @generated + */ + public Command getCommand(Request request) + { + if (request instanceof ReconnectRequest) + { + Object view = ((ReconnectRequest)request).getConnectionEditPart().getModel(); + if (view instanceof View) + { + Integer id = new Integer(AcoreVisualIDRegistry.getVisualID((View)view)); + request.getExtendedData().put(VISUAL_ID_KEY, id); + } + } + return super.getCommand(request); + } + + /** + * Returns visual id from request parameters. + * @generated + */ + protected int getVisualID(IEditCommandRequest request) + { + Object id = request.getParameter(VISUAL_ID_KEY); + return id instanceof Integer ? ((Integer)id).intValue() : -1; + } + + /** + * @generated + */ + protected Command getSemanticCommand(IEditCommandRequest request) + { + IEditCommandRequest completedRequest = completeRequest(request); + Command semanticCommand = getSemanticCommandSwitch(completedRequest); + semanticCommand = getEditHelperCommand(completedRequest, semanticCommand); + if (completedRequest instanceof DestroyRequest) + { + DestroyRequest destroyRequest = (DestroyRequest)completedRequest; + return shouldProceed(destroyRequest) ? addDeleteViewCommand(semanticCommand, destroyRequest) : null; + } + return semanticCommand; + } + + /** + * @generated + */ + protected Command addDeleteViewCommand(Command mainCommand, DestroyRequest completedRequest) + { + Command deleteViewCommand = getGEFWrapper(new DeleteCommand(getEditingDomain(), (View)getHost().getModel())); + return mainCommand == null ? deleteViewCommand : mainCommand.chain(deleteViewCommand); + } + + /** + * @generated + */ + private Command getEditHelperCommand(IEditCommandRequest request, Command editPolicyCommand) + { + if (editPolicyCommand != null) + { + ICommand command = editPolicyCommand instanceof ICommandProxy ? ((ICommandProxy)editPolicyCommand).getICommand() + : new CommandProxy(editPolicyCommand); + request.setParameter(AcoreBaseEditHelper.EDIT_POLICY_COMMAND, command); + } + IElementType requestContextElementType = getContextElementType(request); + request.setParameter(AcoreBaseEditHelper.CONTEXT_ELEMENT_TYPE, requestContextElementType); + ICommand command = requestContextElementType.getEditCommand(request); + request.setParameter(AcoreBaseEditHelper.EDIT_POLICY_COMMAND, null); + request.setParameter(AcoreBaseEditHelper.CONTEXT_ELEMENT_TYPE, null); + if (command != null) + { + if (!(command instanceof CompositeTransactionalCommand)) + { + command = new CompositeTransactionalCommand(getEditingDomain(), command.getLabel()).compose(command); + } + return new ICommandProxy(command); + } + return editPolicyCommand; + } + + /** + * @generated + */ + private IElementType getContextElementType(IEditCommandRequest request) + { + IElementType requestContextElementType = AcoreElementTypes.getElementType(getVisualID(request)); + return requestContextElementType != null ? requestContextElementType : myElementType; + } + + /** + * @generated + */ + protected Command getSemanticCommandSwitch(IEditCommandRequest req) + { + if (req instanceof CreateRelationshipRequest) + { + return getCreateRelationshipCommand((CreateRelationshipRequest)req); + } + else if (req instanceof CreateElementRequest) + { + return getCreateCommand((CreateElementRequest)req); + } + else if (req instanceof ConfigureRequest) + { + return getConfigureCommand((ConfigureRequest)req); + } + else if (req instanceof DestroyElementRequest) + { + return getDestroyElementCommand((DestroyElementRequest)req); + } + else if (req instanceof DestroyReferenceRequest) + { + return getDestroyReferenceCommand((DestroyReferenceRequest)req); + } + else if (req instanceof DuplicateElementsRequest) + { + return getDuplicateCommand((DuplicateElementsRequest)req); + } + else if (req instanceof GetEditContextRequest) + { + return getEditContextCommand((GetEditContextRequest)req); + } + else if (req instanceof MoveRequest) + { + return getMoveCommand((MoveRequest)req); + } + else if (req instanceof ReorientReferenceRelationshipRequest) + { + return getReorientReferenceRelationshipCommand((ReorientReferenceRelationshipRequest)req); + } + else if (req instanceof ReorientRelationshipRequest) + { + return getReorientRelationshipCommand((ReorientRelationshipRequest)req); + } + else if (req instanceof SetRequest) + { + return getSetCommand((SetRequest)req); + } + return null; + } + + /** + * @generated + */ + protected Command getConfigureCommand(ConfigureRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getCreateCommand(CreateElementRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getSetCommand(SetRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getEditContextCommand(GetEditContextRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getDestroyElementCommand(DestroyElementRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getDuplicateCommand(DuplicateElementsRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getMoveCommand(MoveRequest req) + { + return null; + } + + /** + * @generated + */ + protected Command getReorientReferenceRelationshipCommand(ReorientReferenceRelationshipRequest req) + { + return UnexecutableCommand.INSTANCE; + } + + /** + * @generated + */ + protected Command getReorientRelationshipCommand(ReorientRelationshipRequest req) + { + return UnexecutableCommand.INSTANCE; + } + + /** + * @generated + */ + protected final Command getGEFWrapper(ICommand cmd) + { + return new ICommandProxy(cmd); + } + + /** + * Returns editing domain from the host edit part. + * @generated + */ + protected TransactionalEditingDomain getEditingDomain() + { + return ((IGraphicalEditPart)getHost()).getEditingDomain(); + } + + /** + * Clean all shortcuts to the host element from the same diagram + * @generated + */ + protected void addDestroyShortcutsCommand(ICompositeCommand cmd, View view) + { + assert view.getEAnnotation("Shortcut") == null; //$NON-NLS-1$ + for (Iterator it = view.getDiagram().getChildren().iterator(); it.hasNext();) + { + View nextView = (View)it.next(); + if (nextView.getEAnnotation("Shortcut") == null || !nextView.isSetElement() || nextView.getElement() != view.getElement()) { //$NON-NLS-1$ + continue; + } + cmd.add(new DeleteCommand(getEditingDomain(), nextView)); + } + } + + /** + * @generated + */ + public static class LinkConstraints + { + + /** + * @generated + */ + public static boolean canCreateAClassSubClasses_4001(AClass source, AClass target) + { + if (source != null) + { + if (source.getSubClasses().contains(target)) + { + return false; + } + } + + return canExistAClassSubClasses_4001(source, target); + } + + /** + * @generated + */ + public static boolean canCreateAClassImplementedInterfaces_4002(AClass source, AInterface target) + { + if (source != null) + { + if (source.getImplementedInterfaces().contains(target)) + { + return false; + } + } + + return canExistAClassImplementedInterfaces_4002(source, target); + } + + /** + * @generated + */ + public static boolean canCreateAClassAssociations_4003(AClass source, AClass target) + { + if (source != null) + { + if (source.getAssociations().contains(target)) + { + return false; + } + } + + return canExistAClassAssociations_4003(source, target); + } + + /** + * @generated + */ + public static boolean canCreateAClassAggregations_4004(AClass source, AClass target) + { + if (source != null) + { + if (source.getAggregations().contains(target)) + { + return false; + } + } + + return canExistAClassAggregations_4004(source, target); + } + + /** + * @generated + */ + public static boolean canCreateAClassCompositions_4005(AClass source, AClass target) + { + if (source != null) + { + if (source.getCompositions().contains(target)) + { + return false; + } + } + + return canExistAClassCompositions_4005(source, target); + } + + /** + * @generated + */ + public static boolean canExistAClassSubClasses_4001(AClass source, AClass target) + { + return true; + } + + /** + * @generated + */ + public static boolean canExistAClassImplementedInterfaces_4002(AClass source, AInterface target) + { + return true; + } + + /** + * @generated + */ + public static boolean canExistAClassAssociations_4003(AClass source, AClass target) + { + return true; + } + + /** + * @generated + */ + public static boolean canExistAClassAggregations_4004(AClass source, AClass target) + { + return true; + } + + /** + * @generated + */ + public static boolean canExistAClassCompositions_4005(AClass source, AClass target) + { + return true; + } + } + +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreTextNonResizableEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreTextNonResizableEditPolicy.java new file mode 100644 index 0000000000..9c76be610b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreTextNonResizableEditPolicy.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import java.util.Collections; +import java.util.List; + +import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.Figure; +import org.eclipse.draw2d.FigureListener; +import org.eclipse.draw2d.Graphics; +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.RectangleFigure; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gef.GraphicalEditPart; +import org.eclipse.gef.handles.MoveHandle; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.NonResizableEditPolicyEx; +import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; + +/** + * @generated + */ +public class AcoreTextNonResizableEditPolicy extends NonResizableEditPolicyEx +{ + + /** + * @generated + */ + private IFigure selectionFeedbackFigure; + + /** + * @generated + */ + private IFigure focusFeedbackFigure; + + /** + * @generated + */ + private FigureListener hostPositionListener; + + /** + * @generated + */ + protected void showPrimarySelection() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setSelected(true); + ((WrappingLabel)getHostFigure()).setFocus(true); + } + else + { + showSelection(); + showFocus(); + } + } + + /** + * @generated + */ + protected void showSelection() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setSelected(true); + ((WrappingLabel)getHostFigure()).setFocus(false); + } + else + { + hideSelection(); + addFeedback(selectionFeedbackFigure = createSelectionFeedbackFigure()); + getHostFigure().addFigureListener(getHostPositionListener()); + refreshSelectionFeedback(); + hideFocus(); + } + } + + /** + * @generated + */ + protected void hideSelection() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setSelected(false); + ((WrappingLabel)getHostFigure()).setFocus(false); + } + else + { + if (selectionFeedbackFigure != null) + { + removeFeedback(selectionFeedbackFigure); + getHostFigure().removeFigureListener(getHostPositionListener()); + selectionFeedbackFigure = null; + } + hideFocus(); + } + } + + /** + * @generated + */ + protected void showFocus() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setFocus(true); + } + else + { + hideFocus(); + addFeedback(focusFeedbackFigure = createFocusFeedbackFigure()); + refreshFocusFeedback(); + } + } + + /** + * @generated + */ + protected void hideFocus() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setFocus(false); + } + else + { + if (focusFeedbackFigure != null) + { + removeFeedback(focusFeedbackFigure); + focusFeedbackFigure = null; + } + } + } + + /** + * @generated + */ + protected Rectangle getFeedbackBounds() + { + Rectangle bounds; + if (getHostFigure() instanceof Label) + { + bounds = ((Label)getHostFigure()).getTextBounds(); + bounds.intersect(getHostFigure().getBounds()); + } + else + { + bounds = getHostFigure().getBounds().getCopy(); + } + getHostFigure().getParent().translateToAbsolute(bounds); + getFeedbackLayer().translateToRelative(bounds); + return bounds; + } + + /** + * @generated + */ + protected IFigure createSelectionFeedbackFigure() + { + if (getHostFigure() instanceof Label) + { + Label feedbackFigure = new Label(); + feedbackFigure.setOpaque(true); + feedbackFigure.setBackgroundColor(ColorConstants.menuBackgroundSelected); + feedbackFigure.setForegroundColor(ColorConstants.menuForegroundSelected); + return feedbackFigure; + } + else + { + RectangleFigure feedbackFigure = new RectangleFigure(); + feedbackFigure.setFill(false); + return feedbackFigure; + } + } + + /** + * @generated + */ + protected IFigure createFocusFeedbackFigure() + { + return new Figure() + { + + protected void paintFigure(Graphics graphics) + { + graphics.drawFocus(getBounds().getResized(-1, -1)); + } + }; + } + + /** + * @generated + */ + protected void updateLabel(Label target) + { + Label source = (Label)getHostFigure(); + target.setText(source.getText()); + target.setTextAlignment(source.getTextAlignment()); + target.setFont(source.getFont()); + } + + /** + * @generated + */ + protected void refreshSelectionFeedback() + { + if (selectionFeedbackFigure != null) + { + if (selectionFeedbackFigure instanceof Label) + { + updateLabel((Label)selectionFeedbackFigure); + selectionFeedbackFigure.setBounds(getFeedbackBounds()); + } + else + { + selectionFeedbackFigure.setBounds(getFeedbackBounds().expand(5, 5)); + } + } + } + + /** + * @generated + */ + protected void refreshFocusFeedback() + { + if (focusFeedbackFigure != null) + { + focusFeedbackFigure.setBounds(getFeedbackBounds()); + } + } + + /** + * @generated + */ + public void refreshFeedback() + { + refreshSelectionFeedback(); + refreshFocusFeedback(); + } + + /** + * @generated + */ + private FigureListener getHostPositionListener() + { + if (hostPositionListener == null) + { + hostPositionListener = new FigureListener() + { + public void figureMoved(IFigure source) + { + refreshFeedback(); + } + }; + } + return hostPositionListener; + } + + /** + * @generated + */ + protected List createSelectionHandles() + { + MoveHandle moveHandle = new MoveHandle((GraphicalEditPart)getHost()); + moveHandle.setBorder(null); + moveHandle.setDragTracker(new DragEditPartsTrackerEx(getHost())); + return Collections.singletonList(moveHandle); + } +} diff --git a/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreTextSelectionEditPolicy.java b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreTextSelectionEditPolicy.java new file mode 100644 index 0000000000..cf7715cb84 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.dawn.examples.acore.diagram/src/org/eclipse/emf/cdo/dawn/examples/acore/diagram/edit/policies/AcoreTextSelectionEditPolicy.java @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2004 - 2010 Eike Stepper (Berlin, Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Fluegge - initial API and implementation + * + */ +package org.eclipse.emf.cdo.dawn.examples.acore.diagram.edit.policies; + +import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.Figure; +import org.eclipse.draw2d.FigureListener; +import org.eclipse.draw2d.Graphics; +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.RectangleFigure; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gef.editpolicies.SelectionEditPolicy; +import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel; + +/** + * @generated + */ +public class AcoreTextSelectionEditPolicy extends SelectionEditPolicy +{ + + /** + * @generated + */ + private IFigure selectionFeedbackFigure; + + /** + * @generated + */ + private IFigure focusFeedbackFigure; + + /** + * @generated + */ + private FigureListener hostPositionListener; + + /** + * @generated + */ + protected void showPrimarySelection() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setSelected(true); + ((WrappingLabel)getHostFigure()).setFocus(true); + } + else + { + showSelection(); + showFocus(); + } + } + + /** + * @generated + */ + protected void showSelection() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setSelected(true); + ((WrappingLabel)getHostFigure()).setFocus(false); + } + else + { + hideSelection(); + addFeedback(selectionFeedbackFigure = createSelectionFeedbackFigure()); + getHostFigure().addFigureListener(getHostPositionListener()); + refreshSelectionFeedback(); + hideFocus(); + } + } + + /** + * @generated + */ + protected void hideSelection() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setSelected(false); + ((WrappingLabel)getHostFigure()).setFocus(false); + } + else + { + if (selectionFeedbackFigure != null) + { + removeFeedback(selectionFeedbackFigure); + getHostFigure().removeFigureListener(getHostPositionListener()); + selectionFeedbackFigure = null; + } + hideFocus(); + } + } + + /** + * @generated + */ + protected void showFocus() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setFocus(true); + } + else + { + hideFocus(); + addFeedback(focusFeedbackFigure = createFocusFeedbackFigure()); + refreshFocusFeedback(); + } + } + + /** + * @generated + */ + protected void hideFocus() + { + if (getHostFigure() instanceof WrappingLabel) + { + ((WrappingLabel)getHostFigure()).setFocus(false); + } + else + { + if (focusFeedbackFigure != null) + { + removeFeedback(focusFeedbackFigure); + focusFeedbackFigure = null; + } + } + } + + /** + * @generated + */ + protected Rectangle getFeedbackBounds() + { + Rectangle bounds; + if (getHostFigure() instanceof Label) + { + bounds = ((Label)getHostFigure()).getTextBounds(); + bounds.intersect(getHostFigure().getBounds()); + } + else + { + bounds = getHostFigure().getBounds().getCopy(); + } + getHostFigure().getParent().translateToAbsolute(bounds); + getFeedbackLayer().translateToRelative(bounds); + return bounds; + } + + /** + * @generated + */ + protected IFigure createSelectionFeedbackFigure() + { + if (getHostFigure() instanceof Label) + { + Label feedbackFigure = new Label(); + feedbackFigure.setOpaque(true); + feedbackFigure.setBackgroundColor(ColorConstants.menuBackgroundSelected); + feedbackFigure.setForegroundColor(ColorConstants.menuForegroundSelected); + return feedbackFigure; + } + else + { + RectangleFigure feedbackFigure = new RectangleFigure(); + feedbackFigure.setFill(false); + return feedbackFigure; + } + } + + /** + * @generated + */ + protected IFigure createFocusFeedbackFigure() + { + return new Figure() + { + + protected void paintFigure(Graphics graphics) + { + graphics.drawFocus(getBounds().getResized(-1, -1)); + } + }; + } + + /** + * @generated + */ + protected void updateLabel(Label target) + { + Label source = (Label)getHostFigure(); + target.setText(source.getText()); + target.setTextAlignment(source.getTextAlignment()); + target.setFont(source.getFont()); + } + + /** + * @generated + */ + protected void refreshSelectionFeedback() + { + if (selectionFeedbackFigure != null) + { + if (selectionFeedbackFigure instanceof Label) + { + updateLabel((Label)selectionFeedbackFigure); + selectionFeedbackFigure.setBounds(getFeedbackBounds()); + } + else + { + selectionFeedbackFigure.setBounds(getFeedbackBounds().expand(5, 5)); + } + } + } + + /** + * @generated + */ + protected void refreshFocusFeedback() + { + if (focusFeedbackFigure != null) + { + focusFeedbackFigure.setBounds(getFeedbackBounds()); + } + } + + /** + * @generated + */ + public void refreshFeedback() + { + refreshSelectionFeedback(); + refreshFocusFeedback(); + } + + /** + * @generated + */ + private FigureListener getHostPositionListener() + { + if (hostPositionListener == null) + { + hostPositionListener = new FigureListener() + { + public void figureMoved(IFigure source) + { + refreshFeedback(); + } + }; + } + return hostPositionListener; + } +} |