diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/AbstractRSESystemType.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/AbstractRSESystemType.java
new file mode 100644
index 00000000000..41921552e32
--- /dev/null
+++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/AbstractRSESystemType.java
@@ -0,0 +1,179 @@
+/********************************************************************************
+ * Copyright (c) 2006, 2007 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
+ *
+ * Initial Contributors:
+ * The following IBM employees contributed to the Remote System Explorer
+ * component that contains this file: David McKnight, Kushal Munir,
+ * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
+ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
+ *
+ * Contributors:
+ * Uwe Stieber (Wind River) - Dynamic system type provider extension.
+ * Martin Oberhuber (Wind River) - [184095] Replace systemTypeName by IRSESystemType
+ * Martin Oberhuber (Wind River) - [186640] Add IRSESystemType.testProperty()
+ ********************************************************************************/
+package org.eclipse.rse.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.PlatformObject;
+import org.osgi.framework.Bundle;
+
+/**
+ * Abstract base class holding core functionality of a system type.
+ *
+ * Extenders must override {@link IRSESystemType#getSubsystemConfigurationIds()}
+ * according to their strategy of finding subsystem configuration id's that
+ * match their system type.
+ *
+ * Extenders may override any other method.
+ */
+public abstract class AbstractRSESystemType extends PlatformObject implements IRSESystemType {
+
+ protected String id = null;
+ protected String name = null;
+ protected String label = null;
+ protected String description = null;
+ protected Bundle definingBundle = null;
+ protected Map properties;
+
+ /**
+ * Default constructor.
+ * Only subclasses may call this if set the id, name, label,
+ * description and properties attributes themselves.
+ */
+ protected AbstractRSESystemType()
+ {
+ super();
+ }
+
+ /**
+ * Constructor for an object representing a system type.
+ * @param id unique id of this system type. Must be system unique.
+ * @param name a name of this system type to be used for internal checks.
+ * @param label a user-visible label of this system type.
+ * May be null
and falls back to the name in this case.
+ * @param description a user-visible description of this system type.
+ * May be null
and falls back to the label in this case.
+ */
+ public AbstractRSESystemType(String id, String name, String label, String description, Bundle definingBundle)
+ {
+ super();
+ this.id = id;
+ this.name = name;
+ this.label = label == null ? name : label;
+ this.description = description == null ? "" : description; //$NON-NLS-1$
+ this.definingBundle = definingBundle;
+ this.properties = new HashMap();
+ }
+
+ /**
+ * Checks whether two system types are the same.
+ *
+ * System types are considered the same if they have the same ID.
+ */
+ public boolean equals(Object obj) {
+ if (obj instanceof IRSESystemType) {
+ return id.equals( ((IRSESystemType)obj).getId() );
+ }
+ return false;
+ }
+
+ /**
+ * Returns the hashCode for this system type.
+ *
+ * The hashCode is the hashCode of its ID.
+ */
+ public int hashCode() {
+ return id.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#getId()
+ */
+ public String getId() {
+ return id;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#getLabel()
+ */
+ public String getLabel() {
+ // For default RSE system types, the UI label is equal to the
+ // name. Therefore, fallback to the name if the label is not
+ // explicitly set.
+ if (label == null) return getName();
+ return label;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#getName()
+ */
+ public String getName() {
+ return name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#getDescription()
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#getDefiningBundle()
+ */
+ public Bundle getDefiningBundle() {
+ return definingBundle;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#getProperty(java.lang.String)
+ */
+ public String getProperty(String key) {
+ return (String) (properties.get(key));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#getProperty(java.lang.String, boolean)
+ */
+ public boolean testProperty(String key, boolean defaultValue) {
+ Object val = properties.get(key);
+ if (val instanceof String) {
+ return Boolean.valueOf((String)val).booleanValue();
+ }
+ return defaultValue;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#isLocal()
+ */
+ public boolean isLocal() {
+ return IRSESystemType.SYSTEMTYPE_LOCAL_ID.equals(getId())
+ || testProperty(IRSESystemType.PROPERTY_IS_LOCAL, true);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.rse.core.IRSESystemType#isLocal()
+ */
+ public boolean isWindows() {
+ return IRSESystemType.SYSTEMTYPE_WINDOWS_ID.equals(getId())
+ || (isLocal() && System.getProperty("os.name").toLowerCase().startsWith("win")) //$NON-NLS-1$ //$NON-NLS-2$
+ || testProperty(IRSESystemType.PROPERTY_IS_WINDOWS, true);
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ return getLabel() + " (" + getId() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+}
\ No newline at end of file
diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSESystemType.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSESystemType.java
index e6ce8b7a5ad..28fba401f65 100644
--- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSESystemType.java
+++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/IRSESystemType.java
@@ -13,7 +13,7 @@
* Contributors:
* Uwe Stieber (Wind River) - Extended system type -> subsystemConfiguration association.
* Martin Oberhuber (Wind River) - [185098] Provide constants for all well-known system types
- * Martin Oberhuber (Wind River) - [186640] Add IRSESystemTyep.isLocal()
+ * Martin Oberhuber (Wind River) - [186640] Add IRSESystemType.testProperty()
********************************************************************************/
package org.eclipse.rse.core;
@@ -26,7 +26,7 @@ import org.osgi.framework.Bundle;
* These constants are kept in sync with definitions in plugin.xml.
*
* This interface is not intended to be implemented directly by clients.
- * Clients should extend the abstract base class {@link RSESystemType} instead.
+ * Clients should extend the abstract base class {@link AbstractRSESystemType} instead.
*/
public interface IRSESystemType extends IAdaptable {
@@ -147,6 +147,19 @@ public interface IRSESystemType extends IAdaptable {
/** Telnet Only system type, "org.eclipse.rse.systemtype.telnet". */
public static final String SYSTEMTYPE_TELNET_ONLY_ID = "org.eclipse.rse.systemtype.telnet"; //$NON-NLS-1$
+ /**
+ * System type Property Key (value: "isLocal") indicating whether
+ * a system type is declared in plugin.xml to refers to the local
+ * system.
+ * On a the local system, the following properties are expected:
+ *
true
if the Property is set on the system type and
+ * matches the expected value. Returns false
if the property
+ * is not set or does not match.
*/
- public boolean getProperty(String key, boolean defaultValue);
+ public boolean testProperty(String key, boolean expectedValue);
/**
* Tests whether the system type refers to the local system.
- * This is a shortcut for getId().equals(SYSTEMTYPE_LOCAL_ID)
+ * This is a shortcut for
+ * + * getId().equals(SYSTEMTYPE_LOCAL_ID) || + * || getProperty(PROPERTY_IS_LOCAL, false) + *+ * See {@link #PROPERTY_IS_LOCAL} for properties expected on + * a Local system. * Extenders (contributors of custom system types) may override. * @return true if the system type refers to the local system. */ @@ -227,9 +248,12 @@ public interface IRSESystemType extends IAdaptable { * Tests whether the system type refers to the Windows system. * This is a shortcut for *
- * getId().equals(SYSTEMTYPE_WINDOWS_ID) || - * isLocal() && System.getProperty("os.name").toLowerCase().startsWith("win") + * getId().equals(SYSTEMTYPE_WINDOWS_ID) + * || isLocal() && System.getProperty("os.name").toLowerCase().startsWith("win") + * || getProperty(PROPERTY_IS_WINDOWS, false) *+ * See {@link #PROPERTY_IS_WINDOWS} for properties expected on + * a Windows system. * Extenders (contributors of custom system types) may override. * @return true if the system type refers to a Windows system. */