blob: 2cb8de9a8e772c8f0950970945209e1914aa7c43 [file] [log] [blame]
/**
* Copyright (c) 2006 IBM Corporation.
* 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:
* IBM Corporation - Initial Implementation
*
*/
package org.eclipse.ptp.remotetools.environment.generichost.core;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ptp.remotetools.RemotetoolsPlugin;
import org.eclipse.ptp.remotetools.environment.generichost.Activator;
import org.eclipse.ptp.remotetools.environment.generichost.conf.AttributeNames;
import org.eclipse.ptp.remotetools.environment.generichost.conf.DefaultValues;
import org.eclipse.ptp.remotetools.utils.verification.ControlAttributes;
import org.eclipse.ptp.remotetools.utils.verification.IllegalAttributeException;
/**
* Defines rules to build the target configuration from an attribute hash map.
*
* @author Daniel Felix Ferber
* @since 1.4
*/
public class ConfigFactory {
private ControlAttributes attributes = null;
private static final String PREFIX = "org.eclipse.ptp.remotetools.environment.generichost"; //$NON-NLS-1$
public static final String ATTR_LOCALHOST_SELECTION = PREFIX + ".localhost-selection"; //$NON-NLS-1$
public static final String ATTR_LOGIN_USERNAME = PREFIX + ".login-username"; //$NON-NLS-1$
public static final String ATTR_LOGIN_PASSWORD = PREFIX + ".login-password"; //$NON-NLS-1$
public static final String ATTR_CONNECTION_ADDRESS = PREFIX + ".connection-address"; //$NON-NLS-1$
public static final String ATTR_CONNECTION_PORT = PREFIX + ".connection-port"; //$NON-NLS-1$
public static final String ATTR_KEY_PATH = PREFIX + ".key-path"; //$NON-NLS-1$
public static final String ATTR_KEY_PASSPHRASE = PREFIX + ".key-passphrase"; //$NON-NLS-1$
public static final String ATTR_IS_PASSWORD_AUTH = PREFIX + ".is-passwd-auth"; //$NON-NLS-1$
public static final String ATTR_CONNECTION_TIMEOUT = PREFIX + ".connection-timeout"; //$NON-NLS-1$
public static final String ATTR_CIPHER_TYPE = PREFIX + ".cipher-type"; //$NON-NLS-1$
public final static String[] KEY_ARRAY = { ATTR_LOCALHOST_SELECTION, ATTR_LOGIN_USERNAME, ATTR_CONNECTION_PORT,
ATTR_CONNECTION_ADDRESS, ATTR_KEY_PATH, ATTR_IS_PASSWORD_AUTH, ATTR_CONNECTION_TIMEOUT, ATTR_CIPHER_TYPE };
public final static String[] KEY_CIPHERED_ARRAY = { ATTR_KEY_PASSPHRASE, ATTR_LOGIN_PASSWORD };
public ConfigFactory() {
this(null);
}
/**
* @since 5.0
*/
public ConfigFactory(ControlAttributes attrs) {
if (attrs != null) {
attributes = attrs;
} else {
attributes = new ControlAttributes();
}
createDefaultMap();
if (attrs == null) {
createCurrentMapFromPreferences();
}
}
public ControlAttributes getAttributes() {
return attributes;
}
private void createDefaultMap() {
attributes.setDefaultString(ATTR_LOCALHOST_SELECTION, DefaultValues.LOCALHOST_SELECTION);
attributes.setDefaultString(ATTR_LOGIN_USERNAME, DefaultValues.LOGIN_USERNAME);
attributes.setDefaultString(ATTR_LOGIN_PASSWORD, DefaultValues.LOGIN_PASSWORD);
attributes.setDefaultString(ATTR_CONNECTION_PORT, DefaultValues.CONNECTION_PORT);
attributes.setDefaultString(ATTR_CONNECTION_ADDRESS, DefaultValues.CONNECTION_ADDRESS);
attributes.setDefaultString(ATTR_KEY_PATH, DefaultValues.KEY_PATH);
attributes.setDefaultString(ATTR_KEY_PASSPHRASE, DefaultValues.KEY_PASSPHRASE);
attributes.setDefaultString(ATTR_IS_PASSWORD_AUTH, DefaultValues.IS_PASSWORD_AUTH);
attributes.setDefaultString(ATTR_CONNECTION_TIMEOUT, DefaultValues.CONNECTION_TIMEOUT);
attributes.setDefaultString(ATTR_CIPHER_TYPE, RemotetoolsPlugin.CIPHER_DEFAULT);
}
private void createCurrentMapFromPreferences() {
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
attributes.setString(ATTR_LOGIN_USERNAME, store.getString(ATTR_LOGIN_USERNAME));
attributes.setString(ATTR_CONNECTION_ADDRESS, store.getString(ATTR_CONNECTION_ADDRESS));
attributes.setString(ATTR_CONNECTION_PORT, store.getString(ATTR_CONNECTION_PORT));
}
public TargetConfig createTargetConfig() throws CoreException {
try {
attributes.verifyInt(AttributeNames.CONNECTION_PORT, ATTR_CONNECTION_PORT);
attributes.verifyInt(AttributeNames.CONNECTION_TIMEOUT, ATTR_CONNECTION_TIMEOUT);
if (attributes.getBoolean(ATTR_LOCALHOST_SELECTION)) {
attributes.setString(ATTR_CONNECTION_ADDRESS, "localhost"); //$NON-NLS-1$
}
return new TargetConfig(attributes);
} catch (IllegalAttributeException e) {
throw new CoreException(new Status(Status.ERROR, Activator.getDefault().getBundle().getSymbolicName(), 0,
e.getMessage(), e));
}
}
}