/******************************************************************************* | |
* Copyright (c) 2005, 2012 IBM Corporation and others. | |
* 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: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.ui.adapters; | |
import java.util.List; | |
/** | |
* An IContainer is an element that has one or more children in an ordered | |
* list. | |
* | |
* @param <T> | |
*/ | |
public interface IContainer<T> { | |
/** | |
* Return an ordered list of all children of the container. | |
* The returned list may or may not be a copy of the list held | |
* by the model, and as such should be considered read-only. | |
* | |
* @param object the parent container | |
* @return the list of children | |
*/ | |
public List<T> getChildren(T object); | |
/** | |
* returns the next sibling in the list of children of this parent | |
* returns null if the object is a singular child and has no direct | |
* siblings. | |
* | |
* @param object the parent container | |
* @param child the child object | |
* @return the next sibling object. | |
*/ | |
public T getNextSiblingChild(T object, T child); | |
/** | |
* Adds the given child to the container before the object insertBefore. If insertBefore | |
* is null, or if insertBefore is invalid (i.e. not a child in the container), the object | |
* should be inserted at the end of the list. | |
* | |
* NOTE: some implementors may impose restrictions on where a certain child may appear | |
* within the total ordering; for example, a Process might require all Partners to | |
* appear before Containers, etc. These implementors should add the child as close to | |
* the requested position as possible. e.g. inserting a Container after a Partner might | |
* cause the insertion to occur between the last Partner and the first Container. | |
* | |
* Returns true if the child is added successfully, otherwise false. | |
* | |
* @param object the parent container | |
* @param child the child object | |
* @param insertBefore the reference point for insertion | |
* @return true if added, false otherwise. | |
* | |
*/ | |
public boolean addChild(T object, T child, T insertBefore); | |
/** | |
* this method allows us to test if we can actually add the object to the container | |
* at the specified location | |
* | |
* for this function to be more useful, always try to pass a value for the | |
* insertBefore so we can do addition validity checks | |
* | |
* @param object the parent container | |
* @param child the child object | |
* @param insertBefore the reference point for insertion | |
* @return true if can be added, false otherwise. | |
*/ | |
public boolean canAddObject(T object, T child, T insertBefore); | |
/** | |
* Answer if the child can be removed from the parent container. | |
* | |
* @param object the parent container | |
* @param child the child object | |
* @return true if can be removed, false otherwise. | |
*/ | |
public boolean canRemoveChild (T object, T child); | |
/** | |
* Removes the given child from the container. | |
* | |
* Returns true if the child is removed successfully, otherwise false. | |
* @param object the parent container | |
* @param child the child object | |
* @return true if removed, false otherwise. | |
*/ | |
public boolean removeChild(T object, T child); | |
/** | |
* Replace the old child with the new child. In the case of ordered | |
* containers, this must insert the new child at the same index as | |
* the old child and return a Token which can be passed to the undo()/redo() methods. | |
* | |
* Returns true if the child is replaced successfully, otherwise false. | |
* | |
* @param object the parent container | |
* @param oldChild the old child object | |
* @param newChild the new child object | |
* @return true if removed, false otherwise. | |
*/ | |
public boolean replaceChild(T object, T oldChild, T newChild); | |
} |