package rocks.inspectit.ui.rcp.editor.testers; import org.eclipse.core.expressions.PropertyTester; import rocks.inspectit.ui.rcp.editor.ISubView; import rocks.inspectit.ui.rcp.editor.composite.AbstractCompositeSubView; import rocks.inspectit.ui.rcp.editor.graph.GraphSubView; import rocks.inspectit.ui.rcp.editor.root.AbstractRootEditor; import rocks.inspectit.ui.rcp.editor.search.ISearchExecutor; import rocks.inspectit.ui.rcp.editor.table.TableSubView; import rocks.inspectit.ui.rcp.editor.tree.SteppingTreeSubView; import rocks.inspectit.ui.rcp.editor.tree.TreeSubView; /** * @author Patrice Bouillet * */ public class ActiveSubViewTester extends PropertyTester { /** * {@inheritDoc} */ @Override public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { if (receiver instanceof AbstractRootEditor) { AbstractRootEditor rootEditor = (AbstractRootEditor) receiver; if ("activeSubView".equals(property)) { if ("treeSubView".equals(expectedValue)) { return rootEditor.getActiveSubView() instanceof TreeSubView; } else if ("tableSubView".equals(expectedValue)) { return rootEditor.getActiveSubView() instanceof TableSubView; } else if ("notNull".equals(expectedValue)) { return rootEditor.getActiveSubView() != null; } } else if ("hasSubView".equals(property)) { if ("steppingTreeSubView".equals(expectedValue)) { return isSubViewExisting(rootEditor.getSubView(), SteppingTreeSubView.class); } else if ("graphSubView".equals(expectedValue)) { return isSubViewExisting(rootEditor.getSubView(), GraphSubView.class); } else if ("compositeSubView".equals(expectedValue)) { return isSubViewExisting(rootEditor.getSubView(), AbstractCompositeSubView.class); } else if ("searchExecutor".equals(expectedValue)) { return isSubViewExisting(rootEditor.getSubView(), ISearchExecutor.class); } } } return false; } /** * Returns if the given sub view is a instance of given sub-view class or if there is a sub-view * of this class in case composite sub-view is provided. This is a recursive method. * * @param subView * Sub-view to check. * @param subViewClass * Class to search for. * @return Returns true if the wanted class is found. */ private boolean isSubViewExisting(ISubView subView, Class<?> subViewClass) { if (subViewClass.isInstance(subView)) { return true; } else if (subView instanceof AbstractCompositeSubView) { AbstractCompositeSubView compositeSubView = (AbstractCompositeSubView) subView; for (ISubView viewInCompositeSubView : compositeSubView.getSubViews()) { if (isSubViewExisting(viewInCompositeSubView, subViewClass)) { return true; } } } return false; } }