diff --git a/rse/tests/org.eclipse.rse.tests/META-INF/MANIFEST.MF b/rse/tests/org.eclipse.rse.tests/META-INF/MANIFEST.MF index ffe4659d977..dc407674047 100644 --- a/rse/tests/org.eclipse.rse.tests/META-INF/MANIFEST.MF +++ b/rse/tests/org.eclipse.rse.tests/META-INF/MANIFEST.MF @@ -15,7 +15,13 @@ Require-Bundle: org.junit, org.eclipse.rse.subsystems.files.core, org.eclipse.rse.subsystems.shells.core, org.eclipse.rse.tests.framework, + org.eclipse.ui.views, org.eclipse.rse.services Eclipse-LazyStart: true Bundle-RequiredExecutionEnvironment: J2SE-1.4 +Export-Package: org.eclipse.rse.tests, + org.eclipse.rse.tests.core, + org.eclipse.rse.tests.core.connection, + org.eclipse.rse.tests.testsubsystem, + org.eclipse.rse.tests.testsubsystem.interfaces Bundle-ClassPath: rsetests.jar diff --git a/rse/tests/org.eclipse.rse.tests/icons/branch.gif b/rse/tests/org.eclipse.rse.tests/icons/branch.gif new file mode 100644 index 00000000000..3ce1ae4e5cf Binary files /dev/null and b/rse/tests/org.eclipse.rse.tests/icons/branch.gif differ diff --git a/rse/tests/org.eclipse.rse.tests/icons/leaf.gif b/rse/tests/org.eclipse.rse.tests/icons/leaf.gif new file mode 100644 index 00000000000..be83d3942ce Binary files /dev/null and b/rse/tests/org.eclipse.rse.tests/icons/leaf.gif differ diff --git a/rse/tests/org.eclipse.rse.tests/icons/systemconnection.gif b/rse/tests/org.eclipse.rse.tests/icons/systemconnection.gif new file mode 100644 index 00000000000..7472fac341a Binary files /dev/null and b/rse/tests/org.eclipse.rse.tests/icons/systemconnection.gif differ diff --git a/rse/tests/org.eclipse.rse.tests/icons/systemconnectionlive.gif b/rse/tests/org.eclipse.rse.tests/icons/systemconnectionlive.gif new file mode 100644 index 00000000000..c2b6dc2238f Binary files /dev/null and b/rse/tests/org.eclipse.rse.tests/icons/systemconnectionlive.gif differ diff --git a/rse/tests/org.eclipse.rse.tests/plugin.properties b/rse/tests/org.eclipse.rse.tests/plugin.properties index a02b04f32ed..fe3684cfee4 100644 --- a/rse/tests/org.eclipse.rse.tests/plugin.properties +++ b/rse/tests/org.eclipse.rse.tests/plugin.properties @@ -15,3 +15,6 @@ # pluginName=RSE Unit Tests providerName=Eclipse.org + +testSubSystemName = Tests +testSubSystemDescription = Test Subsystem \ No newline at end of file diff --git a/rse/tests/org.eclipse.rse.tests/plugin.xml b/rse/tests/org.eclipse.rse.tests/plugin.xml index baac218689f..f49f1e527bc 100644 --- a/rse/tests/org.eclipse.rse.tests/plugin.xml +++ b/rse/tests/org.eclipse.rse.tests/plugin.xml @@ -14,4 +14,19 @@ + + + + + diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/RSETestsPlugin.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/RSETestsPlugin.java index 32f56fa44df..9a6f5df061d 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/RSETestsPlugin.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/RSETestsPlugin.java @@ -17,9 +17,15 @@ import java.util.List; import java.util.MissingResourceException; import java.util.ResourceBundle; +import org.eclipse.core.runtime.IAdapterManager; +import org.eclipse.core.runtime.Platform; +import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.tests.core.IRSETestLogCollectorDelegate; import org.eclipse.rse.tests.internal.RSEDefaultTestLogCollectorDelegate; -import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.rse.tests.internal.testsubsystem.TestSubSystemAdapterFactory; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystem; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemConfiguration; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; import org.osgi.framework.BundleContext; /** @@ -27,7 +33,7 @@ import org.osgi.framework.BundleContext; * class provides basic infra structure for accessing externalized * string data. */ -public class RSETestsPlugin extends AbstractUIPlugin { +public class RSETestsPlugin extends SystemBasePlugin { // The shared plugin instance. private static RSETestsPlugin plugin; // The resource bundle associated with this plugin. @@ -138,6 +144,12 @@ public class RSETestsPlugin extends AbstractUIPlugin { public void start(BundleContext context) throws Exception { super.start(context); addDelegate(defaultLogCollectorDelegate); + + IAdapterManager manager = Platform.getAdapterManager(); + TestSubSystemAdapterFactory subSystemAdapterFactory = new TestSubSystemAdapterFactory(); + manager.registerAdapters(subSystemAdapterFactory, ITestSubSystem.class); + manager.registerAdapters(subSystemAdapterFactory, ITestSubSystemNode.class); + manager.registerAdapters(subSystemAdapterFactory, ITestSubSystemConfiguration.class); } /* (non-Javadoc) @@ -211,4 +223,14 @@ public class RSETestsPlugin extends AbstractUIPlugin { public synchronized IRSETestLogCollectorDelegate[] getTestLogCollectorDelegates() { return (IRSETestLogCollectorDelegate[])logCollectorDelegates.toArray(new IRSETestLogCollectorDelegate[logCollectorDelegates.size()]); } + + /** + * Initialize the image registry by declaring all of the required graphics. + */ + protected void initializeImageRegistry() { + String path = getIconPath(); + putImageInRegistry("ICON_ID_BRANCH", path + "branch.gif"); //$NON-NLS-1$ //$NON-NLS-2$ + putImageInRegistry("ICON_ID_LEAF", path + "leaf.gif"); //$NON-NLS-1$ //$NON-NLS-2$ + } } + diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java index bab0aa0705d..62ac16e42a8 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSECoreTestCase.java @@ -248,7 +248,8 @@ public class RSECoreTestCase extends TestCase { * @see junit.framework.TestCase#run(junit.framework.TestResult) */ public final void run(TestResult result) { - if (isProperty(IRSECoreTestCaseProperties.PROP_FORCE_BACKGROUND_EXECUTION, false)) { + if (isProperty(IRSECoreTestCaseProperties.PROP_FORCE_BACKGROUND_EXECUTION, false) + || !RSEWaitAndDispatchUtil.isDispatchThread()) { // do not force test execution into background, just call super.run(result) // from with the current thread. result.addListener(TEST_LISTENER); @@ -273,7 +274,8 @@ public class RSECoreTestCase extends TestCase { public void runBare() throws Throwable { // If PROP_PERFORMANCE_TIMING_INCLUDE_SETUP_TEARDOWN is set to true, // print the timing information including the tests setUp and tearDown methods. - if (isProperty(IRSECoreTestCaseProperties.PROP_PERFORMANCE_TIMING_INCLUDE_SETUP_TEARDOWN, true)) { + if (isProperty(IRSECoreTestCaseProperties.PROP_FORCE_BACKGROUND_EXECUTION, false) + || !RSEWaitAndDispatchUtil.isDispatchThread()) { // Print timing information here long start = printTestStartInformation(getName()); try { @@ -293,7 +295,8 @@ public class RSECoreTestCase extends TestCase { protected void runTest() throws Throwable { // If PROP_PERFORMANCE_TIMING_INCLUDE_SETUP_TEARDOWN is set to false (default), // print the timing information only the test method itself. - if (isProperty(IRSECoreTestCaseProperties.PROP_PERFORMANCE_TIMING_INCLUDE_SETUP_TEARDOWN, false)) { + if (isProperty(IRSECoreTestCaseProperties.PROP_PERFORMANCE_TIMING_INCLUDE_SETUP_TEARDOWN, false) + || !RSEWaitAndDispatchUtil.isDispatchThread()) { // Print timing information here and run the test. long start = printTestStartInformation(getName()); try { diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSEWaitAndDispatchUtil.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSEWaitAndDispatchUtil.java index 30b8f3c2d03..9ccb5ff5a52 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSEWaitAndDispatchUtil.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/RSEWaitAndDispatchUtil.java @@ -28,6 +28,15 @@ public final class RSEWaitAndDispatchUtil { // nothing to do. The class cannot be instanciated. } + /** + * Checks if the current thread is a dispatch (UI) thread or not. + * + * @return True if the current thread is a dispatch thread, false otherwise. + */ + public static boolean isDispatchThread() { + return Display.findDisplay(Thread.currentThread()) != null; + } + /** * Blocks the calling thread from execution till the specified * time out has exceeded. If the calling thread is an display thread, diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystem.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystem.java new file mode 100644 index 00000000000..c199d768ef3 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystem.java @@ -0,0 +1,175 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.core.subsystems.IConnectorService; +import org.eclipse.rse.core.subsystems.SubSystem; +import org.eclipse.rse.tests.testsubsystem.TestSubSystemContainerNode; +import org.eclipse.rse.tests.testsubsystem.TestSubSystemNode; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystem; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNodeContainer; + +/** + * Simple test subsystem with branches and leafes. + * Further childs can be added or removed via context menu actions. + */ +public class TestSubSystem extends SubSystem implements ITestSubSystem { + + private ArrayList fChildren = new ArrayList(); + + /** + * Constructor. + * @param host + * @param connectorService + */ + public TestSubSystem(IHost host, IConnectorService connectorService) { + super(host, connectorService); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystem#initializeSubSystem(org.eclipse.core.runtime.IProgressMonitor) + */ + public void initializeSubSystem(IProgressMonitor monitor) { + TestSubSystemContainerNode parent0 = new TestSubSystemContainerNode("0"); //$NON-NLS-1$ + TestSubSystemContainerNode child0 = new TestSubSystemContainerNode("0:0"); //$NON-NLS-1$ + parent0.addChildNode(child0); + parent0.addChildNode(new TestSubSystemContainerNode("0:1")); //$NON-NLS-1$ + parent0.addChildNode(new TestSubSystemContainerNode("0:2")); //$NON-NLS-1$ + parent0.addChildNode(new TestSubSystemNode("0:3;")); //$NON-NLS-1$ + parent0.addChildNode(new TestSubSystemContainerNode("0:4")); //$NON-NLS-1$ + child0.addChildNode(new TestSubSystemNode("0:0:0;")); //$NON-NLS-1$ + addChildNode(parent0); + addChildNode(new TestSubSystemContainerNode("1")); //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystem#uninitializeSubSystem(org.eclipse.core.runtime.IProgressMonitor) + */ + public void uninitializeSubSystem(IProgressMonitor monitor) { + fChildren.clear(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystem#getObjectWithAbsoluteName(java.lang.String) + */ + public Object getObjectWithAbsoluteName(String key) { + ITestSubSystemNode[] childs = getChildNodes(); + for (int i = 0; i < childs.length; i++) { + if (childs[i].getName().equalsIgnoreCase(key)) { + return childs[i]; + } + } + + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystem#internalResolveFilterString(org.eclipse.core.runtime.IProgressMonitor, java.lang.String) + */ + protected Object[] internalResolveFilterString(IProgressMonitor monitor, String filterString) throws InvocationTargetException, InterruptedException { + ArrayList filteredChilds = new ArrayList(); + ITestSubSystemNode[] childs = getChildNodes(); + for (int i = 0; i < childs.length; i++) { + if (childs[i].getName().matches(filterString)) { + filteredChilds.add(childs[i]); + } + } + + return filteredChilds.toArray(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystem#internalResolveFilterString(org.eclipse.core.runtime.IProgressMonitor, java.lang.Object, java.lang.String) + */ + protected Object[] internalResolveFilterString(IProgressMonitor monitor, Object parent, String filterString) throws InvocationTargetException, InterruptedException { + ArrayList filteredChilds = new ArrayList(); + if (parent instanceof ITestSubSystemNodeContainer) { + ITestSubSystemNodeContainer container = (ITestSubSystemNodeContainer)parent; + ITestSubSystemNode[] childs = container.getChildNodes(); + for (int i = 0; i < childs.length; i++) { + if (childs[i].getName().matches(filterString)) { + filteredChilds.add(childs[i]); + } + } + } + + return filteredChilds.toArray(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#addChildNode(org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode) + */ + public boolean addChildNode(ITestSubSystemNode node) { + if (node != null && !fChildren.contains(node)) { + node.setSubSystem(this); + fChildren.add(node); + return true; + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#removeChildNode(org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode) + */ + public boolean removeChildNode(ITestSubSystemNode node) { + if (node != null && fChildren.contains(node)) { + if (node instanceof ITestSubSystemNodeContainer) { + ((ITestSubSystemNodeContainer)node).removeAllChildNodes(); + } + fChildren.remove(node); + return true; + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#removeAllChildNodes() + */ + public boolean removeAllChildNodes() { + if (!fChildren.isEmpty()) { + ITestSubSystemNode[] childs = getChildNodes(); + for (int i = 0; i < childs.length; i++) { + if (childs[i] instanceof ITestSubSystemNodeContainer) { + ((ITestSubSystemNodeContainer)childs[i]).removeAllChildNodes(); + } + } + fChildren.clear(); + return true; + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#hasChildNodes() + */ + public boolean hasChildNodes() { + return !fChildren.isEmpty(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#getChildNodeCount() + */ + public int getChildNodeCount() { + return fChildren.size(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#getChildNodes() + */ + public ITestSubSystemNode[] getChildNodes() { + return (ITestSubSystemNode[])fChildren.toArray(new ITestSubSystemNode[fChildren.size()]); + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemAdapter.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemAdapter.java new file mode 100644 index 00000000000..0330dd2acb3 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemAdapter.java @@ -0,0 +1,151 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.rse.core.SystemPerspectiveHelpers; +import org.eclipse.rse.tests.testsubsystem.TestSubSystemAddAction; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemAddTarget; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNodeContainer; +import org.eclipse.rse.ui.SystemMenuManager; +import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; +import org.eclipse.rse.ui.view.SystemView; +import org.eclipse.rse.ui.view.SystemViewSubSystemAdapter; +import org.eclipse.swt.widgets.Shell; + +/** + * Adapter for subsystem node. + */ +public class TestSubSystemAdapter extends SystemViewSubSystemAdapter + implements ISystemRemoteElementAdapter, ITestSubSystemAddTarget { + + /** + * Constructor. + */ + public TestSubSystemAdapter() { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.internal.testsubsystem.actions.ITestSubSystemAddTarget#canAdd(java.lang.Object) + */ + public boolean canAdd(Object element) { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.internal.testsubsystem.actions.ITestSubSystemAddTarget#doAdd(org.eclipse.swt.widgets.Shell, java.lang.Object, java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) + */ + public boolean doAdd(Shell shell, Object container, Object element, IProgressMonitor monitor) { + boolean added = false; + if (container instanceof ITestSubSystemNodeContainer && element instanceof ITestSubSystemNode) { + added = ((ITestSubSystemNodeContainer)container).addChildNode(((ITestSubSystemNode)element)); + if (added) { + SystemView view = SystemPerspectiveHelpers.findRSEView(); + if (view != null) { + view.expandSelected(); + view.refresh(container, true); + } + } + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.internal.testsubsystem.actions.ITestSubSystemAddTarget#showAdd(java.lang.Object) + */ + public boolean showAdd(Object element) { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getAbsoluteParentName(java.lang.Object) + */ + public String getAbsoluteParentName(Object element) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParent(org.eclipse.swt.widgets.Shell, java.lang.Object) + */ + public Object getRemoteParent(Shell shell, Object element) throws Exception { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParentNamesInUse(org.eclipse.swt.widgets.Shell, java.lang.Object) + */ + public String[] getRemoteParentNamesInUse(Shell shell, Object element) throws Exception { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteSubType(java.lang.Object) + */ + public String getRemoteSubType(Object element) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteType(java.lang.Object) + */ + public String getRemoteType(Object element) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteTypeCategory(java.lang.Object) + */ + public String getRemoteTypeCategory(Object element) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getSubSystemConfigurationId(java.lang.Object) + */ + public String getSubSystemConfigurationId(Object element) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#refreshRemoteObject(java.lang.Object, java.lang.Object) + */ + public boolean refreshRemoteObject(Object oldElement, Object newElement) { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#supportsUserDefinedActions(java.lang.Object) + */ + public boolean supportsUserDefinedActions(Object object) { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#addActions(org.eclipse.rse.ui.SystemMenuManager, org.eclipse.jface.viewers.IStructuredSelection, org.eclipse.swt.widgets.Shell, java.lang.String) + */ + public void addActions(SystemMenuManager menu, IStructuredSelection selection, Shell parent, String menuGroup) { + if (selection.size() == 1 && isTestSubSystemNodeContainer(selection.getFirstElement())) { + if (canAdd(selection.getFirstElement())) { + menu.add(menuGroup, new TestSubSystemAddAction("Add branch", true, getShell())); //$NON-NLS-1$ + menu.add(menuGroup, new TestSubSystemAddAction("Add leaf", false, getShell())); //$NON-NLS-1$ + } + } + } + + /* + * Returns true if the element is a node container. + */ + private boolean isTestSubSystemNodeContainer(Object element) { + return element instanceof ITestSubSystemNodeContainer; + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemAdapterFactory.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemAdapterFactory.java new file mode 100644 index 00000000000..d6f3ac97dca --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemAdapterFactory.java @@ -0,0 +1,59 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystem; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemConfiguration; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; +import org.eclipse.rse.ui.view.AbstractSystemRemoteAdapterFactory; +import org.eclipse.rse.ui.view.ISystemViewElementAdapter; +import org.eclipse.ui.views.properties.IPropertySource; + +/** + * Adapter factory for subsystem adapters. + */ +public class TestSubSystemAdapterFactory extends AbstractSystemRemoteAdapterFactory + implements IAdapterFactory { + + private TestSubSystemAdapter subSystemAdapter = new TestSubSystemAdapter(); + private TestSubSystemNodeAdapter subSystemNodeAdapter = new TestSubSystemNodeAdapter(); + private TestSubSystemConfigurationAdapter SubSystemConfigAdapter = new TestSubSystemConfigurationAdapter(); + + /** + * Constructor. + */ + public TestSubSystemAdapterFactory() { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemRemoteAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + public Object getAdapter(Object adaptableObject, Class adapterType) { + Object adapter = null; + if (adaptableObject instanceof ITestSubSystem) { + adapter = subSystemAdapter; + } + if (adaptableObject instanceof ITestSubSystemNode) { + adapter = subSystemNodeAdapter; + } + if (adaptableObject instanceof ITestSubSystemConfiguration) { + adapter = SubSystemConfigAdapter; + } + + if (adapter != null && adapter instanceof ISystemViewElementAdapter && adapterType == IPropertySource.class) { + ((ISystemViewElementAdapter)adapter).setPropertySourceInput(adaptableObject); + } + + return adapter; + } + +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConfiguration.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConfiguration.java new file mode 100644 index 00000000000..e5d366a840f --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConfiguration.java @@ -0,0 +1,83 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import java.util.Vector; + +import org.eclipse.rse.core.filters.ISystemFilter; +import org.eclipse.rse.core.filters.ISystemFilterPool; +import org.eclipse.rse.core.filters.ISystemFilterPoolManager; +import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.core.subsystems.IConnectorService; +import org.eclipse.rse.core.subsystems.ISubSystem; +import org.eclipse.rse.core.subsystems.SubSystemConfiguration; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystem; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemConfiguration; + +public class TestSubSystemConfiguration extends SubSystemConfiguration implements ITestSubSystemConfiguration { + + /** + * Constructor. + */ + public TestSubSystemConfiguration() { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystemConfiguration#createSubSystemInternal(org.eclipse.rse.core.model.IHost) + */ + public ISubSystem createSubSystemInternal(IHost conn) { + return new TestSubSystem(conn, getConnectorService(conn)); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.ISubSystemConfiguration#getConnectorService(org.eclipse.rse.core.model.IHost) + */ + public IConnectorService getConnectorService(IHost host) { + return TestSubSystemConnectorServiceManager.getInstance().getConnectorService(host, ITestSubSystem.class); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystemConfiguration#createDefaultFilterPool(org.eclipse.rse.core.filters.ISystemFilterPoolManager) + */ + protected ISystemFilterPool createDefaultFilterPool(ISystemFilterPoolManager mgr) { + ISystemFilterPool defaultPool = null; + try { + defaultPool = mgr.createSystemFilterPool(getDefaultFilterPoolName(mgr.getName(), getId()), true); // true=>is deletable by user + + Vector strings = new Vector(); + strings.add(".*"); //$NON-NLS-1$ + + ISystemFilter filter = mgr.createSystemFilter(defaultPool, "All", strings); //$NON-NLS-1$ + filter.setType("all"); //$NON-NLS-1$ + } + catch (Exception exc) { + // ignore exception + } + return defaultPool; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystemConfiguration#getTranslatedFilterTypeProperty(org.eclipse.rse.core.filters.ISystemFilter) + */ + public String getTranslatedFilterTypeProperty(ISystemFilter selectedFilter) { + String type = selectedFilter.getType(); + if (type.equals("all")) //$NON-NLS-1$ + return "testSubSystemFilter.all"; //$NON-NLS-1$ + return "testSubSystemFilter"; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.SubSystemConfiguration#supportsServerLaunchProperties(org.eclipse.rse.core.model.IHost) + */ + public boolean supportsServerLaunchProperties(IHost host) { + return false; + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConfigurationAdapter.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConfigurationAdapter.java new file mode 100644 index 00000000000..1d3d9452614 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConfigurationAdapter.java @@ -0,0 +1,25 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import org.eclipse.rse.ui.view.SubSystemConfigurationAdapter; + +/** + * Adapter for subsytsem configuration. + */ +public class TestSubSystemConfigurationAdapter extends SubSystemConfigurationAdapter { + + /** + * Constructor. + */ + public TestSubSystemConfigurationAdapter() { + super(); + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorService.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorService.java new file mode 100644 index 00000000000..21de3e85eb4 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorService.java @@ -0,0 +1,88 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.core.subsystems.AbstractConnectorService; + +public class TestSubSystemConnectorService extends AbstractConnectorService { + + private boolean connected = false; + + /** + * Constructor. + * + * @param host The RSE connection object. + */ + public TestSubSystemConnectorService(IHost host) { + super("TestSubSystemConnectorService", //$NON-NLS-1$ + "The connector Service for the TestSubSystem", //$NON-NLS-1$ + host, 0); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.IConnectorService#isConnected() + */ + public boolean isConnected() { + return connected; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#internalConnect(org.eclipse.core.runtime.IProgressMonitor) + */ + protected void internalConnect(IProgressMonitor monitor) throws Exception { + super.internalConnect(monitor); + connected = true; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#internalDisconnect(org.eclipse.core.runtime.IProgressMonitor) + */ + public void internalDisconnect(IProgressMonitor monitor) throws Exception { + super.internalDisconnect(monitor); + connected = false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsRemoteServerLaunching() + */ + public boolean supportsRemoteServerLaunching() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#hasRemoteServerLauncherProperties() + */ + public boolean hasRemoteServerLauncherProperties() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsServerLaunchProperties() + */ + public boolean supportsServerLaunchProperties() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsPassword() + */ + public boolean supportsPassword() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsUserId() + */ + public boolean supportsUserId() { + return false; + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorServiceManager.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorServiceManager.java new file mode 100644 index 00000000000..47be57bdd76 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorServiceManager.java @@ -0,0 +1,63 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.core.subsystems.AbstractConnectorServiceManager; +import org.eclipse.rse.core.subsystems.IConnectorService; +import org.eclipse.rse.core.subsystems.ISubSystem; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystem; + +/** + * Test subsystem connector service manager. Singleton! + */ +public class TestSubSystemConnectorServiceManager extends AbstractConnectorServiceManager { + + private static TestSubSystemConnectorServiceManager inst; + + /** + * Private Constructor. + */ + private TestSubSystemConnectorServiceManager() { + super(); + } + + /** + * Returns the test subsystem connector service manager instance. + * + * @return The singleton instance. + */ + public static TestSubSystemConnectorServiceManager getInstance() { + if (inst == null) + inst = new TestSubSystemConnectorServiceManager(); + return inst; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorServiceManager#createConnectorService(org.eclipse.rse.core.model.IHost) + */ + public IConnectorService createConnectorService(IHost host) { + return new TestSubSystemConnectorService(host); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorServiceManager#sharesSystem(org.eclipse.rse.core.subsystems.ISubSystem) + */ + public boolean sharesSystem(ISubSystem otherSubSystem) { + return (otherSubSystem instanceof ITestSubSystem); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractConnectorServiceManager#getSubSystemCommonInterface(org.eclipse.rse.core.subsystems.ISubSystem) + */ + public Class getSubSystemCommonInterface(ISubSystem subsystem) { + return ITestSubSystem.class; + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemNodeAdapter.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemNodeAdapter.java new file mode 100644 index 00000000000..dd55b4349c2 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemNodeAdapter.java @@ -0,0 +1,320 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.internal.testsubsystem; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.rse.core.SystemPerspectiveHelpers; +import org.eclipse.rse.tests.RSETestsPlugin; +import org.eclipse.rse.tests.testsubsystem.TestSubSystemAddAction; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemAddTarget; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNodeContainer; +import org.eclipse.rse.ui.SystemMenuManager; +import org.eclipse.rse.ui.view.AbstractSystemViewAdapter; +import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; +import org.eclipse.rse.ui.view.SystemView; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.views.properties.IPropertyDescriptor; + +/** + * Adapter for all nodes and container nodes. + */ +public class TestSubSystemNodeAdapter extends AbstractSystemViewAdapter + implements ISystemRemoteElementAdapter, ITestSubSystemAddTarget { + + /** + * Constructor. + */ + public TestSubSystemNodeAdapter() { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#addActions(org.eclipse.rse.ui.SystemMenuManager, org.eclipse.jface.viewers.IStructuredSelection, org.eclipse.swt.widgets.Shell, java.lang.String) + */ + public void addActions(SystemMenuManager menu, IStructuredSelection selection, Shell parent, String menuGroup) { + if (selection.size() == 1 && isTestSubSystemNodeContainer(selection.getFirstElement())) { + if (canAdd(selection.getFirstElement())) { + menu.add(menuGroup, new TestSubSystemAddAction("Add branch", true, getShell())); //$NON-NLS-1$ + menu.add(menuGroup, new TestSubSystemAddAction("Add leaf", false, getShell())); //$NON-NLS-1$ + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getImageDescriptor(java.lang.Object) + */ + public ImageDescriptor getImageDescriptor(Object element) { + if (isTestSubSystemNodeContainer(element)) { + return RSETestsPlugin.getDefault().getImageDescriptor("ICON_ID_BRANCH"); //$NON-NLS-1$ + } + else if (isTestSubSystemNode(element)) { + return RSETestsPlugin.getDefault().getImageDescriptor("ICON_ID_LEAF"); //$NON-NLS-1$ + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getText(java.lang.Object) + */ + public String getText(Object element) { + if (isTestSubSystemNode(element)) { + return ((ITestSubSystemNode)element).getName(); + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getAbsoluteName(java.lang.Object) + */ + public String getAbsoluteName(Object element) { + if (isTestSubSystemNode(element)) { + ITestSubSystemNode node = (ITestSubSystemNode) element; + String absName = node.getName(); + node = node.getParent(); + while (node != null) { + absName = node.getName() + "/" + absName; //$NON-NLS-1$ + node = node.getParent(); + } + return absName; + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getType(java.lang.Object) + */ + public String getType(Object element) { + if (isTestSubSystemNodeContainer(element)) + return "testSubSystemContainerNode"; //$NON-NLS-1$ + else if (isTestSubSystemNode(element)) + return "testSubSystemNode"; //$NON-NLS-1$ + else + return "unknown"; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getParent(java.lang.Object) + */ + public Object getParent(Object element) { + if (isTestSubSystemNode(element)) + return ((ITestSubSystemNode)element).getParent(); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#hasChildren(java.lang.Object) + */ + public boolean hasChildren(Object element) { + if (isTestSubSystemNodeContainer(element)) + return ((ITestSubSystemNodeContainer)element).hasChildNodes(); + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object) + */ + public Object[] getChildren(Object element) { + if (isTestSubSystemNodeContainer(element)) + return ((ITestSubSystemNodeContainer)element).getChildNodes(); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyDescriptors() + */ + protected IPropertyDescriptor[] internalGetPropertyDescriptors() { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyValue(java.lang.Object) + */ + protected Object internalGetPropertyValue(Object key) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getAbsoluteParentName(java.lang.Object) + */ + public String getAbsoluteParentName(Object element) { + if (isTestSubSystemNode(element)) + if (((ITestSubSystemNode)element).getParent() != null) + return ((ITestSubSystemNode)element).getParent().getName(); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getSubSystemConfigurationId(java.lang.Object) + */ + public String getSubSystemConfigurationId(Object element) { + return "testSubSystemConfigurationId"; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteTypeCategory(java.lang.Object) + */ + public String getRemoteTypeCategory(Object element) { + return "testCategory"; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteType(java.lang.Object) + */ + public String getRemoteType(Object element) { + return "testType"; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteSubType(java.lang.Object) + */ + public String getRemoteSubType(Object element) { + return "testSubType"; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#refreshRemoteObject(java.lang.Object, java.lang.Object) + */ + public boolean refreshRemoteObject(Object oldElement, Object newElement) { + ITestSubSystemNode oldNode = (ITestSubSystemNode) oldElement; + ITestSubSystemNode newNode = (ITestSubSystemNode) newElement; + newNode.setName(oldNode.getName()); + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParent(org.eclipse.swt.widgets.Shell, java.lang.Object) + */ + public Object getRemoteParent(Shell shell, Object element) throws Exception { + if (isTestSubSystemNode(element)) + return ((ITestSubSystemNode)element).getParent(); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#getRemoteParentNamesInUse(org.eclipse.swt.widgets.Shell, java.lang.Object) + */ + public String[] getRemoteParentNamesInUse(Shell shell, Object element) throws Exception { + return null; + + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.ISystemRemoteElementAdapter#supportsUserDefinedActions(java.lang.Object) + */ + public boolean supportsUserDefinedActions(Object object) { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#canDelete(java.lang.Object) + */ + public boolean canDelete(Object element) { + return isTestSubSystemNode(element); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#showDelete(java.lang.Object) + */ + public boolean showDelete(Object element) { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#doDelete(org.eclipse.swt.widgets.Shell, java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) + */ + public boolean doDelete(Shell shell, Object element, IProgressMonitor monitor) throws Exception { + if (isTestSubSystemNode(element)) { + ITestSubSystemNodeContainer parent = (ITestSubSystemNodeContainer)((ITestSubSystemNode)element).getParent(); + if (parent == null) { + parent = (ITestSubSystemNodeContainer)((ITestSubSystemNode)element).getSubSystem(); + } + if (parent != null && isTestSubSystemNodeContainer(parent)) + return parent.removeChildNode(((ITestSubSystemNode)element)); + } + return false; + } + + /* + * Returns true if the element is a node. + */ + private boolean isTestSubSystemNode(Object element) { + return element instanceof ITestSubSystemNode; + } + + /* + * Returns true if the element is a node container. + */ + private boolean isTestSubSystemNodeContainer(Object element) { + return element instanceof ITestSubSystemNodeContainer; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.internal.testsubsystem.actions.ITestSubSystemAddTarget#canAdd(java.lang.Object) + */ + public boolean canAdd(Object element) { + return isTestSubSystemNodeContainer(element); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.internal.testsubsystem.actions.ITestSubSystemAddTarget#doAdd(org.eclipse.swt.widgets.Shell, java.lang.Object, java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) + */ + public boolean doAdd(Shell shell, Object container, Object element, IProgressMonitor monitor) { + boolean added = false; + if (isTestSubSystemNodeContainer(container) && isTestSubSystemNode(element)) { + added = ((ITestSubSystemNodeContainer)container).addChildNode(((ITestSubSystemNode)element)); + if (added) { + SystemView view = SystemPerspectiveHelpers.findRSEView(); + if (view != null) { + view.expandSelected(); + view.refresh(container); + } + } + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.internal.testsubsystem.actions.ITestSubSystemAddTarget#showAdd(java.lang.Object) + */ + public boolean showAdd(Object element) { + return isTestSubSystemNodeContainer(element); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#canRename(java.lang.Object) + */ + public boolean canRename(Object element) { + return isTestSubSystemNode(element); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#doRename(org.eclipse.swt.widgets.Shell, java.lang.Object, java.lang.String) + */ + public boolean doRename(Shell shell, Object element, String name) throws Exception { + if (name != null && isTestSubSystemNode(element)) { + String oldName = ((ITestSubSystemNode)element).getName(); + if (oldName == null || !oldName.equals(name)) { + ((ITestSubSystemNode)element).setName(name); + return true; + } + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#showRename(java.lang.Object) + */ + public boolean showRename(Object element) { + return isTestSubSystemNode(element); + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemAddAction.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemAddAction.java new file mode 100644 index 00000000000..1f62dbf3da8 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemAddAction.java @@ -0,0 +1,80 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.rse.tests.RSETestsPlugin; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystem; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemAddTarget; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNodeContainer; +import org.eclipse.rse.ui.actions.SystemBaseAction; +import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; +import org.eclipse.swt.widgets.Shell; + +/** + * Add action for container nodes. + * This action can add branches or leafes. + */ +public class TestSubSystemAddAction extends SystemBaseAction { + + private boolean fAddContainer = false; + + /** + * Constructor. + * @param text The text of this action shwon in context menues. + * @param addContainer True if a container node should be added, + * False if a simple node should be added. + * @param shell The current shell. + */ + public TestSubSystemAddAction(String text, boolean addContainer, Shell shell) { + super(text, shell); + + fAddContainer = addContainer; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.action.Action#getImageDescriptor() + */ + public ImageDescriptor getImageDescriptor() { + return RSETestsPlugin.getDefault().getImageDescriptor(fAddContainer ? "ICON_ID_BRANCH" : "ICON_ID_LEAF"); //$NON-NLS-1$//$NON-NLS-2$ + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.actions.SystemBaseAction#updateSelection(org.eclipse.jface.viewers.IStructuredSelection) + */ + public boolean updateSelection(IStructuredSelection selection) { + return selection.size() == 1 && checkObjectType(selection.getFirstElement()); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.actions.SystemBaseAction#checkObjectType(java.lang.Object) + */ + public boolean checkObjectType(Object selectedObject) { + return selectedObject instanceof ITestSubSystemNodeContainer; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.ui.actions.SystemBaseAction#run() + */ + public void run() { + IStructuredSelection selection = getSelection(); + Object object = selection.getFirstElement(); + ISystemRemoteElementAdapter adapter = getRemoteAdapter(object); + if (adapter != null && adapter instanceof ITestSubSystemAddTarget && object instanceof ITestSubSystemNodeContainer) { + ITestSubSystemAddTarget addTarget = (ITestSubSystemAddTarget)adapter; + ITestSubSystemNodeContainer container = (ITestSubSystemNodeContainer)object; + String name = ((object instanceof ITestSubSystem) ? "" : adapter.getName(container) + ":") + container.getChildNodeCount(); //$NON-NLS-1$ //$NON-NLS-2$ + ITestSubSystemNode node = fAddContainer ? new TestSubSystemContainerNode(name) : new TestSubSystemNode(name + ";"); //$NON-NLS-1$ + addTarget.doAdd(getShell(), container, node, null); + } + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemContainerNode.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemContainerNode.java new file mode 100644 index 00000000000..83cefed7416 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemContainerNode.java @@ -0,0 +1,98 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem; + +import java.util.ArrayList; + +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNodeContainer; + + +/** + * A simple container node (branch). + */ +public class TestSubSystemContainerNode extends TestSubSystemNode + implements ITestSubSystemNode, ITestSubSystemNodeContainer { + + private ArrayList fChildren = new ArrayList(); + + /** + * Constructor. + * @param name The name of the conatiner node shown in the tree. + */ + public TestSubSystemContainerNode(String name) { + super(name); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#addChildNode(org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode) + */ + public boolean addChildNode(ITestSubSystemNode node) { + if (node != null && !fChildren.contains(node)) { + node.setSubSystem(getSubSystem()); + node.setParent(this); + fChildren.add(node); + return true; + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#removeChildNode(org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode) + */ + public boolean removeChildNode(ITestSubSystemNode node) { + if (node != null && fChildren.contains(node)) { + if (node instanceof ITestSubSystemNodeContainer) { + ((ITestSubSystemNodeContainer)node).removeAllChildNodes(); + } + fChildren.remove(node); + return true; + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#removeAllChildNodes() + */ + public boolean removeAllChildNodes() { + if (!fChildren.isEmpty()) { + ITestSubSystemNode[] childs = getChildNodes(); + for (int i = 0; i < childs.length; i++) { + if (childs[i] instanceof ITestSubSystemNodeContainer) { + ((ITestSubSystemNodeContainer)childs[i]).removeAllChildNodes(); + } + } + fChildren.clear(); + return true; + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#hasChildNodes() + */ + public boolean hasChildNodes() { + return !fChildren.isEmpty(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#getChildNodeCount() + */ + public int getChildNodeCount() { + return fChildren.size(); + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNodeContainer#getChildNodes() + */ + public ITestSubSystemNode[] getChildNodes() { + return (ITestSubSystemNode[])fChildren.toArray(new ITestSubSystemNode[fChildren.size()]); + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemNode.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemNode.java new file mode 100644 index 00000000000..1ce24bc6ed2 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/TestSubSystemNode.java @@ -0,0 +1,72 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem; + +import org.eclipse.rse.core.subsystems.AbstractResource; +import org.eclipse.rse.core.subsystems.ISubSystem; +import org.eclipse.rse.tests.testsubsystem.interfaces.ITestSubSystemNode; + +/** + * A simple node (leaf). + */ +public class TestSubSystemNode extends AbstractResource + implements ITestSubSystemNode { + + private String fName; + private ITestSubSystemNode fParent; + + /** + * Constructor. + * @param name The name for this node shown in the tree. + */ + public TestSubSystemNode(String name) { + super(); + fName = name; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode#getName() + */ + public String getName() { + return fName; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode#setName(java.lang.String) + */ + public void setName(String name) { + fName = name; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode#setParent(org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode) + */ + public void setParent(ITestSubSystemNode parent) { + fParent = parent; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.testsubsystem.ITestSubSystemNode#getParent() + */ + public ITestSubSystemNode getParent() { + return fParent; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.core.subsystems.AbstractResource#getSubSystem() + */ + public ISubSystem getSubSystem() { + ISubSystem subSystem = super.getSubSystem(); + if (subSystem == null && getParent() != null) { + subSystem = getParent().getSubSystem(); + } + return subSystem; + } +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystem.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystem.java new file mode 100644 index 00000000000..06837ea6d96 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystem.java @@ -0,0 +1,19 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem.interfaces; + +import org.eclipse.rse.core.subsystems.ISubSystem; + +/** + * Interface for the test subsystem. + */ +public interface ITestSubSystem extends ISubSystem, ITestSubSystemNodeContainer { + // only for internal use +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemAddTarget.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemAddTarget.java new file mode 100644 index 00000000000..02892af3385 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemAddTarget.java @@ -0,0 +1,43 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem.interfaces; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.swt.widgets.Shell; + +/** + * Interface for UI parts that support add actions. + */ +public interface ITestSubSystemAddTarget { + + /** + * Returns true if add action should be shown for the element. + * @param element Element for which add should be shown. + * @return True if add should be shown. + */ + public boolean showAdd(Object element); + + /** + * Returns true if add action should be enabled for the element. + * @param element Element for which add should be enabled. + * @return True if add should be enabled. + */ + public boolean canAdd(Object element); + + /** + * Add action of the element. + * @param shell The current shell. + * @param container The container to wich the element should be added. + * @param element The element to add to the container. + * @param monitor The progressmonitor if needed during the add operation. + * @return True, if the element was added to the container. + */ + public boolean doAdd(Shell shell, Object container, Object element, IProgressMonitor monitor); +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemConfiguration.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemConfiguration.java new file mode 100644 index 00000000000..83d8eff9364 --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemConfiguration.java @@ -0,0 +1,17 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem.interfaces; + +/** + * Interface for the test subsystem configuration. + */ +public interface ITestSubSystemConfiguration { + // only for internal use +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemNode.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemNode.java new file mode 100644 index 00000000000..daeeb35734b --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemNode.java @@ -0,0 +1,56 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem.interfaces; + +import org.eclipse.rse.core.subsystems.ISubSystem; + +/** + * Interface for all test subsystem nodes. + */ +public interface ITestSubSystemNode { + + /** + * Returns the name of this node shown in the tree. + * @return The name of the node. + */ + public String getName(); + + /** + * Set the name for this node. + * @param name The Name of this node. + */ + public void setName(String name); + + /** + * Set the subsystem this node belongs to. + * This value should be set automatically when adding this node to a subsystem or other node. + * @param subSystem The subsystem. + */ + public void setSubSystem(ISubSystem subSystem); + + /** + * Returns the subsystem this node belongs to. + * @return The subsystem. + */ + public ISubSystem getSubSystem(); + + /** + * Set the node container this node belongs to. + * This value should be set automatically when adding this node to a node container. + * @param parent The parent node container. + */ + public void setParent(ITestSubSystemNode parent); + + /** + * Returns the parent node this node belongs to. + * @return The parent node. + */ + public ITestSubSystemNode getParent(); +} diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemNodeContainer.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemNodeContainer.java new file mode 100644 index 00000000000..f10301ebc1a --- /dev/null +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/testsubsystem/interfaces/ITestSubSystemNodeContainer.java @@ -0,0 +1,56 @@ +/* ******************************************************************************* + * Copyright (c) 2006 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: + * Tobias Schwarz (Wind River) - initial contribution. + * *******************************************************************************/ +package org.eclipse.rse.tests.testsubsystem.interfaces; + +/** + * Interface for node container. + */ +public interface ITestSubSystemNodeContainer { + + /** + * Adds the node to the list of childs if not already in the list. + * @param node The node that should be added to the list of childs. + * @return True if the node was added. + */ + public boolean addChildNode(ITestSubSystemNode node); + + /** + * Removes the node from the list of childs. + * If the node is a node container, all children are removed recursively. + * @param node The node that should be removed from the list of childs. + * @return True if the node exists as a child and was removed. + */ + public boolean removeChildNode(ITestSubSystemNode node); + + /** + * Removes all children of this container. + * If a hild node is a node container, all children are removed recursively. + * @return True if children were removed. + */ + public boolean removeAllChildNodes(); + + /** + * Returns true if this container has children. + * @return True if this node has children. + */ + public boolean hasChildNodes(); + + /** + * Returns the number of children. + * @return The number of children. + */ + public int getChildNodeCount(); + + /** + * Returns an array of all children. + * @return Array of children. + */ + public ITestSubSystemNode[] getChildNodes(); +}