From 8317fc23f9907fdb0bc8d8bd4360b3000697c83d Mon Sep 17 00:00:00 2001 From: David McKnight Date: Tue, 11 Jan 2011 14:54:48 +0000 Subject: [PATCH] [301075] Host copy doesn't copy contained property sets --- .../internal/core/model/SystemHostPool.java | 49 +++++++++-------- .../connection/IRSEConnectionManager.java | 21 ++++++++ .../connection/RSEConnectionTestCase.java | 52 +++++++++++++++++++ .../tests/internal/RSEConnectionManager.java | 35 +++++++++++++ 4 files changed, 132 insertions(+), 25 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemHostPool.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemHostPool.java index ae7a66bb776..415eafb24c3 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemHostPool.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemHostPool.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2011 IBM Corporation and others. All rights reserved. + * Copyright (c) 2002, 2008 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 @@ -21,8 +21,8 @@ * David Dykstal (IBM) - [176577] wrong enablement of "Move up/down" in connection context menu * Martin Oberhuber (Wind River) - [206742] Make SystemHostPool thread-safe * David Dykstal (IBM) - [210537] removed exception signaling from this class to match the interface - * Tom Hochstein (freescale) - [325923] Host copy doesn't copy contained property sets - ********************************************************************************/ + * Tom Hochstein (Freescale) - [301075] Host copy doesn't copy contained property sets +********************************************************************************/ package org.eclipse.rse.internal.core.model; import java.util.ArrayList; @@ -40,6 +40,7 @@ import org.eclipse.rse.core.model.Host; import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.IProperty; import org.eclipse.rse.core.model.IPropertySet; +import org.eclipse.rse.core.model.IPropertySetContainer; import org.eclipse.rse.core.model.IRSEPersistableContainer; import org.eclipse.rse.core.model.ISystemHostPool; import org.eclipse.rse.core.model.ISystemProfile; @@ -398,7 +399,6 @@ public class SystemHostPool extends RSEModelObject implements ISystemHostPool } - /* * (non-Javadoc) * @see org.eclipse.rse.core.model.ISystemHostPool#cloneHost(org.eclipse.rse.core.model.ISystemHostPool, org.eclipse.rse.core.model.IHost, java.lang.String) @@ -408,35 +408,34 @@ public class SystemHostPool extends RSEModelObject implements ISystemHostPool IHost copy = targetPool.createHost(conn.getSystemType(), aliasName, conn.getHostName(), conn.getDescription(), conn.getLocalDefaultUserId(), IRSEUserIdConstants.USERID_LOCATION_HOST); - + // Copy all properties as well. - clonePropertySets(copy, conn.getPropertySets()); + clonePropertySets(copy, conn.getPropertySets()); return copy; } /** - * Make copies of a list of property sets and add them to the specified host. + * Make copies of a list of property sets and add them to the specified container. * Each property set may contain its own list of property sets, so the * method is recursive. - * @param copy - * @param fromSets + * @param container + * @param propertySets */ - private static void clonePropertySets(IHost copy, IPropertySet[] fromSets) { - if (fromSets == null) { - return; - } - for (int i = 0, n = fromSets.length; i < n; ++i) { - IPropertySet fromSet = fromSets[i]; - IPropertySet copySet = copy.createPropertySet(fromSet.getName(), fromSet.getDescription()); - String[] fromKeys = fromSet.getPropertyKeys(); - for (int i2 = 0, n2 = fromKeys.length; i2 < n2; ++i2) { - IProperty fromProperty = fromSet.getProperty(fromKeys[i2]); - copySet.addProperty(fromProperty.getKey(), fromProperty.getValue(), fromProperty.getType()); - } - clonePropertySets(copy, fromSet.getPropertySets()); - } - } - + private static void clonePropertySets(IPropertySetContainer container, IPropertySet[] propertySets) { + if (propertySets == null) { + return; + } + for (int i = 0, n = propertySets.length; i < n; ++i) { + IPropertySet fromSet = propertySets[i]; + IPropertySet copySet = container.createPropertySet(fromSet.getName(), fromSet.getDescription()); + String[] fromKeys = fromSet.getPropertyKeys(); + for (int i2 = 0, n2 = fromKeys.length; i2 < n2; ++i2) { + IProperty fromProperty = fromSet.getProperty(fromKeys[i2]); + copySet.addProperty(fromProperty.getKey(), fromProperty.getValue(), fromProperty.getType()); + } + clonePropertySets(copySet, fromSet.getPropertySets()); + } + } /* * (non-Javadoc) diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/IRSEConnectionManager.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/IRSEConnectionManager.java index 98b5a21d368..05b976dc8a1 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/IRSEConnectionManager.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/IRSEConnectionManager.java @@ -7,6 +7,7 @@ * * Contributors: * Uwe Stieber (Wind River) - initial API and implementation + * Tom Hochstein (Freescale) - [301075] Host copy doesn't copy contained property sets *******************************************************************************/ package org.eclipse.rse.tests.core.connection; @@ -60,6 +61,26 @@ public interface IRSEConnectionManager { */ public IRSEConnectionProperties loadConnectionProperties(Properties properties, boolean allowDefaults); + /** + * Finds the connection given by the specified name/label from the specified + * system profile. The method will do nothing if either the system profile or + * the connection does not exist. + * + * @param profileName The system profile to look for the connection. Must be not null. + * @param name The name of the connection to find. Must be not null. + * @return The found connection, or null if failed. + */ + public IHost findConnection(String profileName, String name); + + /** + * Copies the connection. + * + * @param connection The connection to copy. Must be not null. + * @param copyName The name of the new connection. Must be not null. + * @return The copied connection, or null if failed. + */ + public IHost copyConnection(IHost connection, String copyName); + /** * Removes the connection given by the specified name/label from the specified * system profile. The method will do nothing if either the system profile or diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/RSEConnectionTestCase.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/RSEConnectionTestCase.java index 8c0973d64be..de80f6c09dd 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/RSEConnectionTestCase.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/core/connection/RSEConnectionTestCase.java @@ -12,6 +12,7 @@ * David McKnight (IBM) - [186363] get rid of obsolete calls to SubSystem.connect() * Martin Oberhuber (Wind River) - organize, enable and tag test cases * Martin Oberhuber (Wind River) - [247908] extract testBug255023 + * Tom Hochstein (Freescale) - [301075] Host copy doesn't copy contained property sets ********************************************************************************/ package org.eclipse.rse.tests.core.connection; @@ -20,6 +21,8 @@ import java.util.Properties; import org.eclipse.rse.core.IRSESystemType; import org.eclipse.rse.core.RSECorePlugin; import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.core.model.IProperty; +import org.eclipse.rse.core.model.IPropertySet; import org.eclipse.rse.core.model.ISystemProfile; import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.subsystems.ISubSystem; @@ -103,6 +106,55 @@ public class RSEConnectionTestCase extends RSEBaseConnectionTestCase { } + /** + * Test copy of connections + */ + public void testConnectionCopy() { + //-test-author-:DavidDykstal + if (isTestDisabled()) + return; + + String profileName = "TestProfile"; //$NON-NLS-1$ + + String name = "TestHost1"; //$NON-NLS-1$ + String copyName = "TestHost1Copy"; //$NON-NLS-1$ + IHost connection = getConnectionManager().findConnection(profileName, name); + assertNotNull("Failed to find source connection " + name, connection); //$NON-NLS-1$ + + String setName = "Test Property Set Level 1"; //$NON-NLS-1$ + String propertyName = "Test Property Level 1"; //$NON-NLS-1$ + String propertyValue = "Level 1"; //$NON-NLS-1$ + IPropertySet ps = connection.createPropertySet(setName); + assertNotNull("Failed to create property set " + setName, ps); //$NON-NLS-1$ + IProperty p = ps.addProperty(propertyName, propertyValue); + assertNotNull("Failed to create property " + propertyName, p); //$NON-NLS-1$ + assertEquals("Failed to set value for property " + propertyName, propertyValue, p.getValue()); //$NON-NLS-1$ + + String setName2 = "Test Property Set Level 2"; //$NON-NLS-1$ + String propertyName2 = "Test Property Level 2"; //$NON-NLS-1$ + String propertyValue2 = "Level 2"; //$NON-NLS-1$ + ps = ps.createPropertySet(setName2); + assertNotNull("Failed to create property set " + setName2, ps); //$NON-NLS-1$ + p = ps.addProperty(propertyName2, propertyValue2); + assertNotNull("Failed to create property " + propertyName2, p); //$NON-NLS-1$ + assertEquals("Failed to set value for property " + propertyName2, propertyValue2, p.getValue()); //$NON-NLS-1$ + + IHost copy = getConnectionManager().copyConnection(connection, copyName); + assertNotNull("Failed to copy connection " + name, copy); //$NON-NLS-1$ + + ps = copy.getPropertySet(setName); + assertNotNull("Failed to copy property set " + setName, ps); //$NON-NLS-1$ + p = ps.getProperty(propertyName); + assertNotNull("Failed to copy property " + propertyName, p); //$NON-NLS-1$ + assertEquals("Failed to copy value for property " + propertyName, propertyValue, p.getValue()); //$NON-NLS-1$ + + ps = ps.getPropertySet(setName2); + assertNotNull("Failed to copy property set " + setName2, ps); //$NON-NLS-1$ + p = ps.getProperty(propertyName2); + assertNotNull("Failed to copy property " + propertyName2, p); //$NON-NLS-1$ + assertEquals("Failed to copy value for property " + propertyName2, propertyValue2, p.getValue()); //$NON-NLS-1$ + } + /** * Test removal of connections */ diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/RSEConnectionManager.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/RSEConnectionManager.java index 82f336470b9..f4e4c912fd5 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/RSEConnectionManager.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/RSEConnectionManager.java @@ -17,6 +17,7 @@ * Martin Oberhuber (Wind River) - [219086] flush event queue to shield tests from each other * David Dykstal (IBM) - [210474] Deny save password function missing * Martin Oberhuber (Wind River) - Support REXEC launch type for dstore + * Tom Hochstein (Freescale) - [301075] Host copy doesn't copy contained property sets *******************************************************************************/ package org.eclipse.rse.tests.internal; @@ -168,6 +169,40 @@ public class RSEConnectionManager implements IRSEConnectionManager { return resultProperties != null ? new RSEConnectionProperties(resultProperties) : (IRSEConnectionProperties)null; } + /* (non-Javadoc) + * @see org.eclipse.rse.tests.core.connection.IRSEConnectionManager#copyConnection(java.lang.String, java.lang.String, java.lang.String) + */ + public IHost findConnection(String profileName, String name) { + assert profileName != null && name != null; + + ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry(); + Assert.assertNotNull("FAILED(findConnection): RSE system registry unavailable!", systemRegistry); //$NON-NLS-1$ + + ISystemProfile profile = systemRegistry.getSystemProfile(profileName); + if (profile != null) { + return systemRegistry.getHost(profile, name); + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.rse.tests.core.connection.IRSEConnectionManager#copyConnection(java.lang.String, java.lang.String, java.lang.String) + */ + public IHost copyConnection(IHost connection, String copyName) { + assert connection != null; + + ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry(); + Assert.assertNotNull("FAILED(copyConnection): RSE system registry unavailable!", systemRegistry); //$NON-NLS-1$ + + try { + return systemRegistry.copyHost(connection, connection.getSystemProfile(), copyName, null); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + /** * Delete a host given its name and the name of its profile. If the host is not found then * do nothing.