Skip to content
Snippets Groups Projects
Commit b5697d9d authored by Christoph Döbber's avatar Christoph Döbber
Browse files

reworking decomposition mechanism

refs 133
parent 1f91a0ac
No related branches found
No related tags found
No related merge requests found
Showing
with 364 additions and 159 deletions
......@@ -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;
}
}
......
......@@ -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);
}
......@@ -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;
}
}
......@@ -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()
......
......@@ -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);
}
}
}
......@@ -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);
}
}
/*--------------------------------------------------------------------------+
$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;
}
}
......@@ -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);
......
......@@ -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);
}
/**
......
......@@ -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);
}
/**
......
......@@ -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);
}
......@@ -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);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment