blob: da30079fd1ceff6733a15064b848e3cd0bb83c64 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdi.internal.connect;
import java.io.IOException;
import java.util.List;
import org.eclipse.jdi.Bootstrap;
import org.eclipse.jdi.internal.VirtualMachineImpl;
import org.eclipse.jdi.internal.VirtualMachineManagerImpl;
import com.sun.jdi.VirtualMachine;
import com.sun.jdi.connect.Connector;
import com.sun.jdi.connect.Transport;
import com.sun.jdi.connect.spi.Connection;
/**
* this class implements the corresponding interfaces
* declared by the JDI specification. See the com.sun.jdi package
* for more information.
*
*/
public abstract class ConnectorImpl implements Connector {
/** Virtual machine manager that created this connector. */
private VirtualMachineManagerImpl fVirtualMachineManager;
/** Transport that is used for communication. */
protected Transport fTransport;
/** Virtual Machine that is connected. */
protected VirtualMachineImpl fVirtualMachine;
/**
* Creates a new Connector.
*/
public ConnectorImpl(VirtualMachineManagerImpl virtualMachineManager) {
fVirtualMachineManager = virtualMachineManager;
}
/**
* @return Returns Virtual Machine Manager.
*/
public VirtualMachineManagerImpl virtualMachineManager() {
return fVirtualMachineManager;
}
/**
* @return Returns Virtual Machine Manager.
*/
public VirtualMachineImpl virtualMachine() {
return fVirtualMachine;
}
/**
* @return Returns a human-readable description of this connector and its purpose.
*/
public abstract String description();
/**
* @return Returns a short identifier for the connector.
*/
public abstract String name();
/**
* Assigns Transport.
*/
/*package*/ void setTransport(Transport transport) {
fTransport = transport;
}
/**
* @return Returns the transport mechanism used by this connector to establish connections with a target VM.
*/
public Transport transport() {
return fTransport;
}
/**
* Closes connection with Virtual Machine.
*/
/*package*/ synchronized void close() {
virtualMachineManager().removeConnectedVM(fVirtualMachine);
}
/**
* @return Returns a connected Virtual Machine.
*/
protected VirtualMachine establishedConnection(Connection connection) throws IOException {
fVirtualMachine = (VirtualMachineImpl) Bootstrap.virtualMachineManager().createVirtualMachine(connection);
return fVirtualMachine;
}
/**
* Argument class for arguments that are used to establish a connection.
*/
public abstract class ArgumentImpl implements com.sun.jdi.connect.Connector.Argument {
private String fName;
private String fDescription;
private String fLabel;
private boolean fMustSpecify;
protected ArgumentImpl(String name, String description, String label, boolean mustSpecify) {
fName = name;
fLabel = label;
fDescription = description;
fMustSpecify = mustSpecify;
}
public String name() {
return fName;
}
public String description() {
return fDescription;
}
public String label() {
return fLabel;
}
public boolean mustSpecify() {
return fMustSpecify;
}
public abstract String value();
public abstract void setValue(String value);
public abstract boolean isValid(String value);
public abstract String toString();
}
public class StringArgumentImpl extends ArgumentImpl implements com.sun.jdi.connect.Connector.StringArgument {
private static final long serialVersionUID = 6009335074727417445L;
private String fValue;
protected StringArgumentImpl(String name, String description, String label, boolean mustSpecify) {
super(name, description, label, mustSpecify);
}
public String value() {
return fValue;
}
public void setValue(String value) {
fValue = value;
}
public boolean isValid(String value) {
return true;
}
public String toString() {
return fValue;
}
}
public class IntegerArgumentImpl extends ArgumentImpl implements com.sun.jdi.connect.Connector.IntegerArgument {
private static final long serialVersionUID = 6009335074727417445L;
private Integer fValue;
private int fMin;
private int fMax;
protected IntegerArgumentImpl(String name, String description, String label, boolean mustSpecify, int min, int max) {
super(name, description, label, mustSpecify);
fMin = min;
fMax = max;
}
public String value() {
return fValue.toString();
}
public void setValue(String value) {
fValue = new Integer(value);
}
public boolean isValid(String value) {
Integer val;
try {
val = new Integer(value);
} catch (NumberFormatException e) {
return false;
}
return isValid(val.intValue());
}
public String toString() {
return value();
}
public int intValue() {
return fValue.intValue();
}
public void setValue(int value) {
fValue = new Integer(value);
}
public int min() {
return fMin;
}
public int max() {
return fMax;
}
public boolean isValid(int value) {
return fMin <= value && value <= fMax;
}
public String stringValueOf(int value) {
return new Integer(value).toString();
}
}
public class BooleanArgumentImpl extends ArgumentImpl implements com.sun.jdi.connect.Connector.BooleanArgument {
private static final long serialVersionUID = 6009335074727417445L;
private Boolean fValue;
protected BooleanArgumentImpl(String name, String description, String label, boolean mustSpecify) {
super(name, description, label, mustSpecify);
}
public String value() {
return fValue.toString();
}
public void setValue(String value) {
fValue = new Boolean(value);
}
public boolean isValid(String value) {
return true;
}
public String toString() {
return value();
}
public boolean booleanValue() {
return fValue.booleanValue();
}
public void setValue(boolean value) {
fValue = new Boolean(value);
}
public String stringValueOf(boolean value) {
return new Boolean(value).toString();
}
}
public class SelectedArgumentImpl extends StringArgumentImpl implements com.sun.jdi.connect.Connector.SelectedArgument {
private static final long serialVersionUID = 6009335074727417445L;
private List fChoices;
protected SelectedArgumentImpl(String name, String description, String label, boolean mustSpecify, List choices) {
super(name, description, label, mustSpecify);
fChoices = choices;
}
public List choices() {
return fChoices;
}
public boolean isValid(java.lang.String value) {
return fChoices.contains(value);
}
}
}