From b5697d9df96db90f7e2c9a80b3de501c19282cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20D=C3=B6bber?= <doebber@in.tum.de> Date: Tue, 30 Aug 2011 09:42:53 +0000 Subject: [PATCH] reworking decomposition mechanism refs 133 --- .../ui/action/CutModelElementsAction.java | 6 +- .../ConnectorConnectionCompositorBase.java | 26 ++ ...archicElementConnectionCompositorBase.java | 18 +- .../editor/gef/GraphicalViewerEditorBase.java | 32 +- .../ui/editpart/policy/RemoveEditPolicy.java | 6 +- .../HierarchicElementCompositorBase.java | 332 ++++++++++++++---- .../decompose/IConnectionCompositorBase.java | 54 --- .../kernel/ui/internal/ActionService.java | 18 +- .../internal/ConnectionCompositorService.java | 13 +- .../internal/ElementCompositorService.java | 7 +- .../service/IConnectionCompositorService.java | 4 +- .../service/IElementCompositorService.java | 7 +- 12 files changed, 364 insertions(+), 159 deletions(-) delete mode 100644 org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/IConnectionCompositorBase.java diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/action/CutModelElementsAction.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/action/CutModelElementsAction.java index f173f01f1..b0d7bd443 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/action/CutModelElementsAction.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/action/CutModelElementsAction.java @@ -60,8 +60,7 @@ public class CutModelElementsAction extends ModelElementsActionBase { try { CopyPasteUtils.copyToClipboard(selection); for (EObject o : selection) { - IElementCompositorService.INSTANCE.decompose( - o.eContainer(), o, null); + IElementCompositorService.INSTANCE.decompose(o); } } catch (IOException e) { LoggingUtils.error(ToolingBaseUIActivator.getDefault(), @@ -78,8 +77,7 @@ public class CutModelElementsAction extends ModelElementsActionBase { @Override public boolean canExecute() { for (EObject o : selection) { - if (!IElementCompositorService.INSTANCE.canDecompose( - o)) { + if (!IElementCompositorService.INSTANCE.canDecompose(o)) { return false; } } diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java index 51b71216b..cee567af9 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/ConnectorConnectionCompositorBase.java @@ -23,13 +23,16 @@ import org.fortiss.tooling.base.model.base.ConnectorBase; import org.fortiss.tooling.base.model.base.EntryConnectorBase; import org.fortiss.tooling.base.model.base.ExitConnectorBase; import org.fortiss.tooling.base.model.base.HierarchicElementBase; +import org.fortiss.tooling.base.model.element.IConnection; import org.fortiss.tooling.base.model.element.IConnector; import org.fortiss.tooling.base.model.element.IHierarchicElement; +import org.fortiss.tooling.base.model.element.IModelElementSpecification; import org.fortiss.tooling.base.ui.dnd.DragContext; import org.fortiss.tooling.base.ui.editpart.FreeConnectorEditPartBase; import org.fortiss.tooling.kernel.extension.IConnectionCompositor; import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; +import org.fortiss.tooling.kernel.service.IElementCompositorService; import org.fortiss.tooling.kernel.service.IPersistencyService; /** @@ -258,4 +261,27 @@ public abstract class ConnectorConnectionCompositorBase<HE extends IHierarchicEl throw new UnsupportedOperationException( "Connection parent is determined by connect."); } + + /** {@inheritDoc} */ + @Override + public boolean canDisconnect(S source, T target, EObject connection, + IConnectionCompositionContext context) { + if (!canDisconnectSpecific(source, target, connection, context)) { + return false; + } + if (connection instanceof IConnection) { + IConnection conn = (IConnection) connection; + for (IModelElementSpecification spec : conn.getSpecificationsList()) { + if (!IElementCompositorService.INSTANCE.canDecompose(spec)) { + return false; + } + } + } + + return true; + } + + /** Base implementation returns true by default */ + public abstract boolean canDisconnectSpecific(S source, T target, + EObject connection, IConnectionCompositionContext context); } diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java index 3122556dd..f621aac57 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/compose/HierarchicElementConnectionCompositorBase.java @@ -22,6 +22,7 @@ import org.eclipse.gef.RootEditPart; import org.fortiss.tooling.base.model.element.IConnection; import org.fortiss.tooling.base.model.element.IConnector; import org.fortiss.tooling.base.model.element.IHierarchicElement; +import org.fortiss.tooling.base.model.element.IModelElementSpecification; import org.fortiss.tooling.base.ui.dnd.DragContext; import org.fortiss.tooling.base.ui.dnd.DropContext; import org.fortiss.tooling.base.ui.editpart.DiagramEditPartBase; @@ -137,9 +138,20 @@ public abstract class HierarchicElementConnectionCompositorBase<HE extends IHier return true; } - /** Base implementation returns true by default */ - public boolean canDisconnectSpecific(S source, T target, - EObject connection, IConnectionCompositionContext context) { + /** {@inheritDoc} */ + @Override + public boolean canDisconnect(S source, T target, EObject connection, + IConnectionCompositionContext context) { + if (connection instanceof IConnection) { + IConnection conn = (IConnection) connection; + for (IModelElementSpecification spec : conn.getSpecificationsList()) { + if (!IElementCompositorService.INSTANCE.canDecompose(spec)) { + return false; + } + } + } + return true; } + } diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java index fd6658b3f..09d080b73 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java @@ -51,6 +51,7 @@ import org.eclipse.gef.ui.actions.ZoomOutAction; import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.IPostSelectionProvider; @@ -58,6 +59,7 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; @@ -73,7 +75,10 @@ import org.fortiss.tooling.base.ui.dnd.DropTargetListener; import org.fortiss.tooling.base.ui.editpart.ExtendedLayerRootEditPart; import org.fortiss.tooling.base.ui.editpart.figure.EVisualStyle; import org.fortiss.tooling.base.ui.layout.constants.DefaultLayoutConstants; +import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider; +import org.fortiss.tooling.kernel.ui.service.IContextMenuService; import org.fortiss.tooling.kernel.ui.service.IEditPartFactoryService; +import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils; /** * GEF editor base implementation for graphical viewer editors. @@ -86,7 +91,7 @@ import org.fortiss.tooling.kernel.ui.service.IEditPartFactoryService; * @ConQAT.Rating YELLOW Hash: 63FF468A2D042586A22495828A0798EF */ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T> - implements IPostSelectionProvider { + implements IPostSelectionProvider, ContextMenuContextProvider { /** Stores the viewer. */ protected EditPartViewer viewer = new ScrollingGraphicalViewer(); @@ -125,6 +130,24 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T> } + /** {@inheritDoc} */ + @Override + public EObject getSelectedModelElement() { + return EObjectSelectionUtils.getFirstElement(getSite() + .getSelectionProvider().getSelection()); + } + + /** Creates the context menu. */ + private void createContextMenu() { + MenuManager menuManager = IContextMenuService.INSTANCE + .createDefaultContextMenu(this); + + Menu contextMenu = menuManager.createContextMenu(viewer.getControl()); + viewer.getControl().setMenu(contextMenu); + + getSite().registerContextMenu(menuManager, viewer); + } + /** {@inheritDoc} */ @Override public void createPartControl(Composite parent) { @@ -135,11 +158,8 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T> viewer.setEditPartFactory(createEditPartFactory()); viewer.setContents(getViewerContentObject()); - // TODO (FH): add context menu support - // MenuManager contextMenu = getContextMenuManager(); - // if (contextMenu != null) { - // viewer.setContextMenu(contextMenu); - // } + + createContextMenu(); getSite().setSelectionProvider(this); ToolingBaseUIActivator.getDefault().getPreferenceStore() diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RemoveEditPolicy.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RemoveEditPolicy.java index 86bdfba96..c21f0d460 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RemoveEditPolicy.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editpart/policy/RemoveEditPolicy.java @@ -71,15 +71,13 @@ public final class RemoveEditPolicy extends ComponentEditPolicy { /** {@inheritDoc} */ @Override public void execute() { - IElementCompositorService.INSTANCE.decompose(toRemove.eContainer(), - toRemove, null); + IElementCompositorService.INSTANCE.decompose(toRemove); } /** {@inheritDoc} */ @Override public boolean canExecute() { - return IElementCompositorService.INSTANCE.canDecompose( - toRemove); + return IElementCompositorService.INSTANCE.canDecompose(toRemove); } } } diff --git a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java index 1b727b54b..126d3efd5 100644 --- a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java +++ b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/HierarchicElementCompositorBase.java @@ -17,19 +17,25 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.base.decompose; -import java.util.HashSet; +import java.util.ArrayList; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.fortiss.tooling.base.model.element.IConnection; import org.fortiss.tooling.base.model.element.IConnector; +import org.fortiss.tooling.base.model.element.IHiddenSpecification; import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IHierarchicElementContainer; import org.fortiss.tooling.base.model.element.IModelElement; import org.fortiss.tooling.base.model.element.IModelElementSpecification; import org.fortiss.tooling.kernel.extension.IElementCompositor; import org.fortiss.tooling.kernel.service.IConnectionCompositorService; +import org.fortiss.tooling.kernel.service.IElementCompositorService; /** + * Base implementation of a compositor for {@link IHierarchicElementContainer}s + * focusing on the remove mechanism. * * @author doebber * @author $Author: hoelzl $ @@ -39,117 +45,311 @@ import org.fortiss.tooling.kernel.service.IConnectionCompositorService; public abstract class HierarchicElementCompositorBase<HE extends IHierarchicElementContainer> implements IElementCompositor<HE> { - /** {@inheritDoc} */ + /** + * Decomposition ability check that takes care of the whole model subtree. + * Subclasses implement {@link #canDecompose*****()} instead. + */ @Override - public boolean canDecompose(EObject contained) { - return iterateCanDecompose(contained, new CanDecomposeIterator()); + public final boolean canDecompose(EObject contained) { + // TODO remove + System.out.println(contained); + return iterateDecompose(contained, true); + } + + /** + * Decomposition ability check that takes care of the whole model subtree. + * Subclasses implement {@link #decompose*****()} instead. + */ + @Override + public final boolean decompose(EObject contained) { + return iterateDecompose(contained, false); + } + + /** + * Returns whether the compositor is able to decompose the given model + * element + */ + protected abstract boolean canDecomposeSpecific(EObject contained); + + /** + * Base implementation for element removal using EcoreUtil.delete + * (non-recursively). Subclasses may override. + */ + protected boolean decomposeSpecific(EObject contained) { + System.out.println("specific: " + contained + " ### " + this); + EcoreUtil.delete(contained); + return true; } /** recursive traversion of all model elements in subtree */ - private boolean iterateCanDecompose(EObject contained, - CanDecomposeIterator cdi) { + private boolean iterateDecompose(EObject contained, boolean can) { if (!canDecomposeSpecific(contained)) { return false; } - if (contained instanceof IConnection) { - IConnection c = (IConnection) contained; - return IConnectionCompositorService.INSTANCE.canDecomposeSpecific( - c.getSource(), c.getTarget(), c, null); - } - - if (contained instanceof IModelElement) { - IModelElement me = (IModelElement) contained; - for (IModelElementSpecification spec : me.getSpecificationsList()) { - if (cdi.contains(spec)) { - continue; + if (can) { + if (contained instanceof IModelElement) { + if (!iterateCanDecomposeSpecifications((IModelElement) contained)) { + return false; } - if (!iterateCanDecompose(spec, cdi)) { + // TODO CD: handle references + } + if (contained instanceof IHierarchicElementContainer) { + if (!iterateCanDecomposeSubelements((IHierarchicElementContainer) contained)) { return false; } - cdi.add(spec); } - // TODO CD: handle references - } - if (contained instanceof IHierarchicElement) { - IHierarchicElement he = (IHierarchicElement) contained; - for (IHierarchicElement subelement : he.getContainedElementsList()) { - if (cdi.contains(subelement)) { - continue; + if (contained instanceof IHierarchicElement) { + IHierarchicElement he = (IHierarchicElement) contained; + + if (!iterateCanDecomposeConnections(he.getConnectionsList())) { + return false; } - if (!iterateCanDecompose(subelement, cdi)) { + + if (!iterateCanDecomposeConnectors((IHierarchicElement) contained)) { return false; } - cdi.add(subelement); + } - for (IConnection conn : he.getConnectionsList()) { - if (cdi.contains(conn)) { - continue; + if (contained instanceof IConnector) { + IConnector connector = (IConnector) contained; + if (!iterateCanDecomposeConnections(connector.getIncomingList())) { + return false; } - if (!iterateCanDecompose(conn, cdi)) { + if (!iterateCanDecomposeConnections(connector.getOutgoingList())) { return false; } - cdi.add(conn); } - for (IConnector c : he.getConnectorsList()) { - if (cdi.contains(c)) { - continue; + } else { + if (contained instanceof IModelElement) { + if (!iterateDecomposeSpecifications((IModelElement) contained)) { + return false; } - if (!iterateCanDecompose(c, cdi)) { + // TODO CD: handle references + } + if (contained instanceof IHierarchicElementContainer) { + if (!iterateDecomposeSubelements((IHierarchicElementContainer) contained)) { return false; } - cdi.add(c); } - } - if (contained instanceof IConnector) { - IConnector connector = (IConnector) contained; - for (IConnection conn : connector.getIncomingList()) { - if (cdi.contains(conn)) { - continue; + if (contained instanceof IHierarchicElement) { + IHierarchicElement he = (IHierarchicElement) contained; + + if (!iterateDecomposeConnections(he.getConnectionsList())) { + return false; } - if (!iterateCanDecompose(conn, cdi)) { + + if (!iterateDecomposeConnectors((IHierarchicElement) contained)) { return false; } - cdi.add(conn); + } - for (IConnection conn : connector.getOutgoingList()) { - if (cdi.contains(conn)) { - continue; + if (contained instanceof IConnector) { + IConnector connector = (IConnector) contained; + if (!iterateDecomposeConnections(connector.getIncomingList())) { + return false; } - if (!iterateCanDecompose(conn, cdi)) { + if (!iterateDecomposeConnections(connector.getOutgoingList())) { return false; } - cdi.add(conn); + } + return decomposeSpecific(contained); + } + + return true; + } + + /** + * Iterates over specifications of given {@link IModelElement} and checks + * for decomposition ability + */ + private boolean iterateCanDecomposeSpecifications(IModelElement me) { + for (IModelElementSpecification spec : me.getSpecificationsList()) { + if (!canDecomposeSpecification(spec)) { + return false; + } + } + return true; + } + + /** + * Iterates over sub elements of given {@link IHierarchicElementContainer} + * and checks for decomposition ability. + */ + private boolean iterateCanDecomposeSubelements( + IHierarchicElementContainer contained) { + for (IHierarchicElement subelement : contained + .getContainedElementsList()) { + if (!canDecomposeSubElement(subelement)) { + return false; + } + } + return true; + } + + /** + * Iterates over list of connections and checks for disconnection ability or + * decomposition ability of sub elements respectively. + */ + private boolean iterateCanDecomposeConnections( + EList<IConnection> connectionsList) { + for (IConnection conn : connectionsList) { + if (!canDecomposeConnection(conn)) { + return false; + } + } + return true; + } + + /** + * Iterates over connectors of given {@link IHierarchicElement} and checks + * for decomposition ability. + */ + private boolean iterateCanDecomposeConnectors(IHierarchicElement contained) { + for (IConnector c : contained.getConnectorsList()) { + if (!canDecomposeConnector(c)) { + return false; + } + } + return true; + } + + /** + * Iterates over specifications of given {@link IModelElement} and checks + * for decomposition ability + */ + private boolean iterateDecomposeSpecifications(IModelElement me) { + ArrayList<IModelElementSpecification> list = new ArrayList<IModelElementSpecification>( + me.getSpecificationsList()); + for (IModelElementSpecification spec : list) { + if (!decomposeSpecification(spec)) { + return false; + } + } + return true; + } + + /** + * Iterates over sub elements of given {@link IHierarchicElementContainer} + * and checks for decomposition ability. + */ + private boolean iterateDecomposeSubelements( + IHierarchicElementContainer contained) { + ArrayList<IHierarchicElement> list = new ArrayList<IHierarchicElement>( + contained.getContainedElementsList()); + for (IHierarchicElement subelement : list) { + if (!decomposeSubelement(subelement)) { + return false; } } + return true; + } + /** + * Iterates over list of connections and checks for disconnection ability or + * decomposition ability of sub elements respectively. + */ + private boolean iterateDecomposeConnections( + EList<IConnection> connectionsList) { + ArrayList<IConnection> list = new ArrayList<IConnection>( + connectionsList); + for (IConnection conn : list) { + if (!decomposeConnection(conn)) { + return false; + } + } return true; } + /** + * Iterates over connectors of given {@link IHierarchicElement} and checks + * for decomposition ability. + */ + private boolean iterateDecomposeConnectors(IHierarchicElement contained) { + ArrayList<IConnector> list = new ArrayList<IConnector>( + contained.getConnectorsList()); + for (IConnector c : list) { + if (!decomposeConnector(c)) { + return false; + } + } + return true; + } + + /** Base implementation returns true by default. Subclasses may override. */ + protected boolean canDecomposeSpecification( + IModelElementSpecification element) { + if (element instanceof IHiddenSpecification) { + return true; + } + return IElementCompositorService.INSTANCE.canDecompose(element); + } + /** Base implementation returns true by default. Subclasses may override. */ - public boolean canDecomposeSpecific( - @SuppressWarnings("unused") EObject contained) { + protected boolean canDecomposeReference(EObject element) { + // TODO implement reference removal return true; } - /** Helper class to iterate over model elements in subtree to remove */ - private class CanDecomposeIterator { + /** Base implementation returns true by default. Subclasses may override. */ + protected boolean canDecomposeSubElement(IHierarchicElement element) { + return IElementCompositorService.INSTANCE.canDecompose(element); + } + + /** Base implementation returns true by default. Subclasses may override. */ + protected boolean canDecomposeConnector(IConnector element) { + return IElementCompositorService.INSTANCE.canDecompose(element); + } + + /** + * Base implementation returns compositors' decision by default. Subclasses + * may override. + */ + protected boolean canDecomposeConnection(IConnection conn) { + return IConnectionCompositorService.INSTANCE.canDisconnect( + conn.getSource(), conn.getTarget(), conn, null); + } + + protected boolean decomposeSpecification(IModelElementSpecification element) { + System.out.println("specification: " + element + " ### " + this); + EcoreUtil.delete(element); + return true; + } - /** holds the model elements already visited */ - private HashSet<EObject> set = new HashSet<EObject>(); + protected boolean decomposeReferences(EObject element) { + // TODO implement reference removal + return true; + } - /** add model element to traversed elements */ - public void add(EObject element) { - set.add(element); + protected boolean decomposeSubelement(IHierarchicElement element) { + System.out.println("subelement: " + element + " ### " + this); + if (IElementCompositorService.INSTANCE.canDecompose(element)) { + return IElementCompositorService.INSTANCE.decompose(element); } + EcoreUtil.delete(element); + return true; + } - /** - * returns whether this model element has been inquired for - * decomposition ability before - */ - public boolean contains(EObject element) { - return set.contains(element); + protected boolean decomposeConnector(IConnector element) { + ArrayList<IConnection> list = new ArrayList<IConnection>( + element.getIncomingList()); + list.addAll(element.getOutgoingList()); + for (IConnection conn : list) { + System.out.println("disconnect: " + element + " ### " + this); + if (!IConnectionCompositorService.INSTANCE.disconnect( + conn.getSource(), conn.getTarget(), conn, null)) { + return false; + } } + EcoreUtil.delete(element); + return true; } + + protected boolean decomposeConnection(IConnection conn) { + System.out.println("connection: " + conn + " ### " + this); + return IConnectionCompositorService.INSTANCE.disconnect( + conn.getSource(), conn.getTarget(), conn, null); + } + } diff --git a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/IConnectionCompositorBase.java b/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/IConnectionCompositorBase.java deleted file mode 100644 index e341a4770..000000000 --- a/org.fortiss.tooling.base/trunk/src/org/fortiss/tooling/base/decompose/IConnectionCompositorBase.java +++ /dev/null @@ -1,54 +0,0 @@ -/*--------------------------------------------------------------------------+ -$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ -| | -| Copyright 2011 ForTISS GmbH | -| | -| Licensed under the Apache License, Version 2.0 (the "License"); | -| you may not use this file except in compliance with the License. | -| You may obtain a copy of the License at | -| | -| http://www.apache.org/licenses/LICENSE-2.0 | -| | -| Unless required by applicable law or agreed to in writing, software | -| distributed under the License is distributed on an "AS IS" BASIS, | -| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | -| See the License for the specific language governing permissions and | -| limitations under the License. | -+--------------------------------------------------------------------------*/ -package org.fortiss.tooling.base.decompose; - -import org.eclipse.emf.ecore.EObject; -import org.fortiss.tooling.base.model.element.IConnection; -import org.fortiss.tooling.base.model.element.IHierarchicElement; -import org.fortiss.tooling.base.model.element.IModelElementSpecification; -import org.fortiss.tooling.kernel.extension.IConnectionCompositor; -import org.fortiss.tooling.kernel.extension.data.IConnectionCompositionContext; -import org.fortiss.tooling.kernel.service.IElementCompositorService; - -/** - * - * @author doebber - * @author $Author: hoelzl $ - * @version $Rev: 18709 $ - * @ConQAT.Rating RED Hash: - */ -public abstract class IConnectionCompositorBase<HE extends IHierarchicElement, S extends IHierarchicElement, T extends IHierarchicElement> - implements IConnectionCompositor<HE, S, T> { - - /** {@inheritDoc} */ - @Override - public boolean canDisconnect(S source, T target, EObject connection, - IConnectionCompositionContext context) { - if (connection instanceof IConnection) { - IConnection conn = (IConnection) connection; - for (IModelElementSpecification spec : conn.getSpecificationsList()) { - if (!IElementCompositorService.INSTANCE.canDecompose(spec)) { - return false; - } - } - } - - return true; - } - -} diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java index a3361ec84..547ab9157 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java @@ -89,9 +89,8 @@ public class ActionService implements IActionService, new Runnable() { @Override public void run() { - IElementCompositorService.INSTANCE.decompose( - selectedObject.eContainer(), - selectedObject, null); + IElementCompositorService.INSTANCE + .decompose(selectedObject); } }); } @@ -113,9 +112,12 @@ public class ActionService implements IActionService, /** {@inheritDoc} */ @Override public void addGlobalDefaultActionSectionToMenu(IMenuManager menuManager) { - menuManager.appendToGroup(GLOBAL_DEFAULT_MENU_SECTION_ID, globalDeleteAction); - menuManager.appendToGroup(GLOBAL_DEFAULT_MENU_SECTION_ID, globalUndoAction); - menuManager.appendToGroup(GLOBAL_DEFAULT_MENU_SECTION_ID, globalRedoAction); + menuManager.appendToGroup(GLOBAL_DEFAULT_MENU_SECTION_ID, + globalDeleteAction); + menuManager.appendToGroup(GLOBAL_DEFAULT_MENU_SECTION_ID, + globalUndoAction); + menuManager.appendToGroup(GLOBAL_DEFAULT_MENU_SECTION_ID, + globalRedoAction); } /** {@inheritDoc} */ @@ -155,8 +157,8 @@ public class ActionService implements IActionService, globalRedoAction.setEnabled(ICommandStackService.INSTANCE .canRedo(target)); - boolean canDelete = IElementCompositorService.INSTANCE.canDecompose( - target); + boolean canDelete = IElementCompositorService.INSTANCE + .canDecompose(target); canDelete = canDelete && !IPersistencyService.INSTANCE.isTopLevelElement(target); globalDeleteAction.setTarget(target); diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConnectionCompositorService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConnectionCompositorService.java index 4224f2df6..bb50b5eff 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConnectionCompositorService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ConnectionCompositorService.java @@ -69,18 +69,23 @@ public class ConnectionCompositorService /** {@inheritDoc} */ @Override - public boolean canDecomposeSpecific(EObject source, EObject destination, + public boolean canDisconnect(EObject source, EObject destination, EObject connection, IConnectionCompositionContext context) { + // TODO remove + System.out.println(connection); return findWorkingConnector(source, destination, connection, false, - context) != null; + context) != null + && findWorkingConnector(source, destination, connection, false, + context).canDisconnect(source, destination, connection, + context); } /** {@inheritDoc} */ @Override - public boolean decompose(EObject source, EObject destination, + public boolean disconnect(EObject source, EObject destination, EObject connection, IConnectionCompositionContext context) { return findWorkingConnector(source, destination, connection, true, - context).connect(source, destination, connection, context); + context).disconnect(source, destination, connection, context); } /** diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ElementCompositorService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ElementCompositorService.java index 24ed4529d..38e934b80 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ElementCompositorService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/ElementCompositorService.java @@ -91,10 +91,9 @@ public final class ElementCompositorService extends /** {@inheritDoc} */ @Override - public boolean decompose(EObject container, EObject contained, - IElementCompositionContext context) { - return findWorkingCompositor(container, contained, context, true) - .decompose(contained); + public boolean decompose(EObject contained) { + return findWorkingCompositor(contained.eContainer(), contained, null, + true).decompose(contained); } /** diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConnectionCompositorService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConnectionCompositorService.java index 19172451c..d7779ee4f 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConnectionCompositorService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IConnectionCompositorService.java @@ -75,13 +75,13 @@ public interface IConnectionCompositorService { * Determines if there is a compositor that allows the decomposition of the * connection between the source and target model element. */ - boolean canDecomposeSpecific(EObject source, EObject destination, + boolean canDisconnect(EObject source, EObject destination, EObject connection, IConnectionCompositionContext context); /** * Decomposes the connection. Since this operation may be canceled by the * user, it returns a boolean value. */ - boolean decompose(EObject source, EObject destination, EObject connection, + boolean disconnect(EObject source, EObject destination, EObject connection, IConnectionCompositionContext context); } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IElementCompositorService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IElementCompositorService.java index 728c9ed23..f4d16f952 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IElementCompositorService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IElementCompositorService.java @@ -73,9 +73,8 @@ public interface IElementCompositorService { boolean canDecompose(EObject contained); /** - * Decomposes the container and the element. Since this operation may be - * canceled by the user, it returns a boolean value. + * Decomposes the contained element from the container. Since this operation + * may be canceled by the user, it returns a boolean value. */ - boolean decompose(EObject container, EObject contained, - IElementCompositionContext context); + boolean decompose(EObject contained); } -- GitLab