package rocks.inspectit.ui.rcp.editor.composite; import java.util.ArrayList; import java.util.Collections; import java.util.EnumSet; import java.util.List; import java.util.Set; import org.eclipse.jface.viewers.ISelectionProvider; import rocks.inspectit.ui.rcp.editor.AbstractSubView; import rocks.inspectit.ui.rcp.editor.ISubView; import rocks.inspectit.ui.rcp.editor.preferences.PreferenceEventCallback.PreferenceEvent; import rocks.inspectit.ui.rcp.editor.preferences.PreferenceId; import rocks.inspectit.ui.rcp.editor.root.AbstractRootEditor; /** * Some general methods for composite views are implemented in here. * * @author Patrice Bouillet * */ public abstract class AbstractCompositeSubView extends AbstractSubView { /** * The list containing all the sub-views which are painted in this composite sub-view. */ private List<ISubView> subViews = new ArrayList<>(); /** * Maximizes the given {@link ISubView}. The {@link ISubView} has to contained in this composite * sub-view. * * @param subView * Sub-view to maximize. */ public abstract void maximizeSubView(ISubView subView); /** * Minimizes the given {@link ISubView}. The {@link ISubView} has to contained in this composite * sub-view. */ public abstract void restoreMaximization(); /** * Layouts the sub-views. */ public abstract void layout(); /** * Adds a new sub-view to this composite view. * * @param subView * The {@link ISubView} which will be added. */ public void addSubView(ISubView subView) { subViews.add(subView); } /** * @return the subViews */ public List<ISubView> getSubViews() { // makes the list unmodifiable so that it can not be edited. return Collections.unmodifiableList(subViews); } /** * {@inheritDoc} */ @Override public <E extends ISubView> E getSubView(Class<E> clazz) { E view = super.getSubView(clazz); if (null != view) { return view; } else { for (ISubView subView : getSubViews()) { view = subView.getSubView(clazz); if (null != view) { return view; } } } return null; } /** * {@inheritDoc} */ @Override public ISubView getSubViewWithInputController(Class<?> inputControllerClass) { for (ISubView subView : getSubViews()) { ISubView view = subView.getSubViewWithInputController(inputControllerClass); if (null != view) { return view; } } return null; } /** * {@inheritDoc} * <p> * Delegates the select to all sub views. Implementing classes can override. */ @Override public void select(ISubView subView) { for (ISubView containedSubView : getSubViews()) { containedSubView.select(subView); } } /** * {@inheritDoc} */ @Override public Set<PreferenceId> getPreferenceIds() { Set<PreferenceId> preferenceIds = EnumSet.noneOf(PreferenceId.class); for (ISubView subView : subViews) { preferenceIds.addAll(subView.getPreferenceIds()); } return preferenceIds; } /** * {@inheritDoc} */ @Override public void doRefresh() { // just delegate to all sub-views. for (ISubView subView : subViews) { subView.doRefresh(); } } /** * {@inheritDoc} */ @Override public void preferenceEventFired(PreferenceEvent preferenceEvent) { // just delegate to all sub-views. for (ISubView subView : subViews) { subView.preferenceEventFired(preferenceEvent); } } /** * {@inheritDoc} */ @Override public void setDataInput(List<? extends Object> data) { // just delegate to all sub-views. for (ISubView subView : subViews) { subView.setDataInput(data); } layout(); } /** * {@inheritDoc} */ @Override public void init() { for (ISubView subView : subViews) { subView.init(); } } /** * {@inheritDoc} */ @Override public void setRootEditor(AbstractRootEditor rootEditor) { super.setRootEditor(rootEditor); for (ISubView subView : subViews) { subView.setRootEditor(rootEditor); } } /** * {@inheritDoc} */ @Override public ISelectionProvider getSelectionProvider() { return null; } /** * {@inheritDoc} */ @Override public void dispose() { // just delegate to all sub-views. for (ISubView subView : subViews) { subView.dispose(); } } }