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: + * + * @see #testProperty(String, boolean) + */ + public static final String PROPERTY_IS_LOCAL = "isLocal"; //$NON-NLS-1$ + /** * System type Property Key (value: "isWindows") indicating whether * a system type is declared in plugin.xml to refers to a Windows @@ -158,14 +171,14 @@ public interface IRSESystemType extends IAdaptable { *
  • Symbolic links are not supported
  • *
  • "cmd" is used as the default shell
  • * - * @see #getProperty(String, boolean) + * @see #testProperty(String, boolean) */ public static final String PROPERTY_IS_WINDOWS = "isWindows"; //$NON-NLS-1$ /** * System type Property Key (value: "isCaseSensitive") indicating * whether a given system type is in general case sensitive. - * @see #getProperty(String, boolean) + * @see #testProperty(String, boolean) */ public static final String PROPERTY_IS_CASE_SENSITIVE = "isCaseSensitive"; //$NON-NLS-1$ @@ -206,18 +219,26 @@ public interface IRSESystemType extends IAdaptable { public String getProperty(String key); /** - * Returns the boolean property of this system type with the given key. - * The default value is returned if there is no such key. + * Tests whether the given boolean property matches the expected value + * for this system type. * * @param key the name of the property to return - * @param defaultValue the default value to expect if the property is not set - * @return the boolean value associated with the given key or the specified default value + * @param expectedValue the expected boolean value of the property. + * @return 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. */