blob: eb26d03648037ebe6c92220435762e5901d88b06 [file] [log] [blame]
package com.intellij.remotesdk;
import com.intellij.openapi.util.text.StringUtil;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* @author traff
*/
public class RemoteSdkDataHolder extends RemoteCredentialsHolder implements RemoteSdkData {
public static final String SSH_PREFIX = "ssh://";
private static final String HOST = "HOST";
private static final String PORT = "PORT";
private static final String ANONYMOUS = "ANONYMOUS";
private static final String USERNAME = "USERNAME";
private static final String PASSWORD = "PASSWORD";
private static final String USE_KEY_PAIR = "USE_KEY_PAIR";
private static final String PRIVATE_KEY_FILE = "PRIVATE_KEY_FILE";
private static final String KNOWN_HOSTS_FILE = "MY_KNOWN_HOSTS_FILE";
private static final String PASSPHRASE = "PASSPHRASE";
private static final String INTERPRETER_PATH = "INTERPRETER_PATH";
private static final String HELPERS_PATH = "HELPERS_PATH";
private static final String REMOTE_ROOTS = "REMOTE_ROOTS";
private static final String REMOTE_PATH = "REMOTE_PATH";
private static final String INITIALIZED = "INITIALIZED";
private String myInterpreterPath;
private String myHelpersPath;
private final String myHelpersDefaultDirName;
private boolean myHelpersVersionChecked = false;
private List<String> myRemoteRoots = new ArrayList<String>();
private boolean myInitialized;
public RemoteSdkDataHolder(@NotNull final String defaultDirName) {
myHelpersDefaultDirName = defaultDirName;
}
@Override
public String getInterpreterPath() {
return myInterpreterPath;
}
@Override
public void setInterpreterPath(String interpreterPath) {
myInterpreterPath = interpreterPath;
}
@Override
public String getFullInterpreterPath() {
return SSH_PREFIX + getUserName() + "@" + getHost() + ":" + getPort() + myInterpreterPath;
}
@Override
public String getHelpersPath() {
return myHelpersPath;
}
@Override
public void setHelpersPath(String helpersPath) {
myHelpersPath = helpersPath;
}
public String getDefaultHelpersName() {
return myHelpersDefaultDirName;
}
@Override
public void addRemoteRoot(String remoteRoot) {
myRemoteRoots.add(remoteRoot);
}
@Override
public void clearRemoteRoots() {
myRemoteRoots.clear();
}
@Override
public List<String> getRemoteRoots() {
return myRemoteRoots;
}
@Override
public void setRemoteRoots(List<String> remoteRoots) {
myRemoteRoots = remoteRoots;
}
@Override
public boolean isHelpersVersionChecked() {
return myHelpersVersionChecked;
}
@Override
public void setHelpersVersionChecked(boolean helpersVersionChecked) {
myHelpersVersionChecked = helpersVersionChecked;
}
@Override
public boolean isInitialized() {
return myInitialized;
}
@Override
public void setInitialized(boolean initialized) {
myInitialized = initialized;
}
public static boolean isRemoteSdk(@Nullable String path) {
if (path != null) {
return path.startsWith(SSH_PREFIX);
}
else {
return false;
}
}
public void loadRemoteSdkData(Element element) {
setHost(element.getAttributeValue(HOST));
setPort(StringUtil.parseInt(element.getAttributeValue(PORT), 22));
setAnonymous(StringUtil.parseBoolean(element.getAttributeValue(ANONYMOUS), false));
setSerializedUserName(element.getAttributeValue(USERNAME));
setSerializedPassword(element.getAttributeValue(PASSWORD));
setPrivateKeyFile(StringUtil.nullize(element.getAttributeValue(PRIVATE_KEY_FILE)));
setKnownHostsFile(StringUtil.nullize(element.getAttributeValue(KNOWN_HOSTS_FILE)));
setSerializedPassphrase(element.getAttributeValue(PASSPHRASE));
setUseKeyPair(StringUtil.parseBoolean(element.getAttributeValue(USE_KEY_PAIR), false));
setInterpreterPath(StringUtil.nullize(element.getAttributeValue(INTERPRETER_PATH)));
setHelpersPath(StringUtil.nullize(element.getAttributeValue(HELPERS_PATH)));
setRemoteRoots(loadStringsList(element, REMOTE_ROOTS, REMOTE_PATH));
setInitialized(StringUtil.parseBoolean(element.getAttributeValue(INITIALIZED), true));
}
protected static List<String> loadStringsList(Element element, String rootName, String attrName) {
final List<String> paths = new LinkedList<String>();
if (element != null) {
@NotNull final List list = element.getChildren(rootName);
for (Object o : list) {
paths.add(((Element)o).getAttribute(attrName).getValue());
}
}
return paths;
}
public void saveRemoteSdkData(Element rootElement) {
rootElement.setAttribute(HOST, StringUtil.notNullize(getHost()));
rootElement.setAttribute(PORT, Integer.toString(getPort()));
rootElement.setAttribute(ANONYMOUS, Boolean.toString(isAnonymous()));
rootElement.setAttribute(USERNAME, getSerializedUserName());
rootElement.setAttribute(PASSWORD, getSerializedPassword());
rootElement.setAttribute(PRIVATE_KEY_FILE, StringUtil.notNullize(getPrivateKeyFile()));
rootElement.setAttribute(KNOWN_HOSTS_FILE, StringUtil.notNullize(getKnownHostsFile()));
rootElement.setAttribute(PASSPHRASE, getSerializedPassphrase());
rootElement.setAttribute(USE_KEY_PAIR, Boolean.toString(isUseKeyPair()));
rootElement.setAttribute(INTERPRETER_PATH, StringUtil.notNullize(getInterpreterPath()));
rootElement.setAttribute(HELPERS_PATH, StringUtil.notNullize(getHelpersPath()));
rootElement.setAttribute(INITIALIZED, Boolean.toString(isInitialized()));
for (String remoteRoot : getRemoteRoots()) {
final Element child = new Element(REMOTE_ROOTS);
child.setAttribute(REMOTE_PATH, remoteRoot);
rootElement.addContent(child);
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RemoteSdkDataHolder holder = (RemoteSdkDataHolder)o;
if (isAnonymous() != holder.isAnonymous()) return false;
if (myHelpersVersionChecked != holder.myHelpersVersionChecked) return false;
if (getPort() != holder.getPort()) return false;
if (isStorePassphrase() != holder.isStorePassphrase()) return false;
if (isStorePassword() != holder.isStorePassword()) return false;
if (isUseKeyPair() != holder.isUseKeyPair()) return false;
if (getHost() != null ? !getHost().equals(holder.getHost()) : holder.getHost() != null) return false;
if (myInterpreterPath != null ? !myInterpreterPath.equals(holder.myInterpreterPath) : holder.myInterpreterPath != null) return false;
if (getKnownHostsFile() != null ? !getKnownHostsFile().equals(holder.getKnownHostsFile()) : holder.getKnownHostsFile() != null) {
return false;
}
if (getPassphrase() != null ? !getPassphrase().equals(holder.getPassphrase()) : holder.getPassphrase() != null) return false;
if (getPassword() != null ? !getPassword().equals(holder.getPassword()) : holder.getPassword() != null) return false;
if (getPrivateKeyFile() != null ? !getPrivateKeyFile().equals(holder.getPrivateKeyFile()) : holder.getPrivateKeyFile() != null) {
return false;
}
if (myHelpersPath != null
? !myHelpersPath.equals(holder.myHelpersPath)
: holder.myHelpersPath != null) {
return false;
}
if (myRemoteRoots != null ? !myRemoteRoots.equals(holder.myRemoteRoots) : holder.myRemoteRoots != null) return false;
if (getUserName() != null ? !getUserName().equals(holder.getUserName()) : holder.getUserName() != null) return false;
return true;
}
@Override
public int hashCode() {
int result = getHost() != null ? getHost().hashCode() : 0;
result = 31 * result + getPort();
result = 31 * result + (isAnonymous() ? 1 : 0);
result = 31 * result + (getUserName() != null ? getUserName().hashCode() : 0);
result = 31 * result + (getPassword() != null ? getPassword().hashCode() : 0);
result = 31 * result + (isUseKeyPair() ? 1 : 0);
result = 31 * result + (getPrivateKeyFile() != null ? getPrivateKeyFile().hashCode() : 0);
result = 31 * result + (getKnownHostsFile() != null ? getKnownHostsFile().hashCode() : 0);
result = 31 * result + (getPassphrase() != null ? getPassphrase().hashCode() : 0);
result = 31 * result + (isStorePassword() ? 1 : 0);
result = 31 * result + (isStorePassphrase() ? 1 : 0);
result = 31 * result + (myInterpreterPath != null ? myInterpreterPath.hashCode() : 0);
result = 31 * result + (myHelpersPath != null ? myHelpersPath.hashCode() : 0);
result = 31 * result + (myHelpersVersionChecked ? 1 : 0);
result = 31 * result + (myRemoteRoots != null ? myRemoteRoots.hashCode() : 0);
return result;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("RemoteSdkDataHolder");
sb.append("{getHost()='").append(getHost()).append('\'');
sb.append(", getPort()=").append(getPort());
sb.append(", isAnonymous()=").append(isAnonymous());
sb.append(", getUserName()='").append(getUserName()).append('\'');
sb.append(", myInterpreterPath='").append(myInterpreterPath).append('\'');
sb.append(", myHelpersPath='").append(myHelpersPath).append('\'');
sb.append('}');
return sb.toString();
}
}