blob: 69e5f0eeb5319292c70951b77653d99431f905d1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2015 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
*
* Contributors:
* IBM Corporation - initial API and implementation
* Ivan Popov - Bug 184211: JDI connectors throw NullPointerException if used separately
* from Eclipse
*******************************************************************************/
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.
*/
@Override
public abstract String description();
/**
* @return Returns a short identifier for the connector.
*/
@Override
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.
*/
@Override
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 {
/**
* Serial version id.
*/
private static final long serialVersionUID = 8850533280769854833L;
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;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.Argument#name()
*/
@Override
public String name() {
return fName;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.Argument#description()
*/
@Override
public String description() {
return fDescription;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.Argument#label()
*/
@Override
public String label() {
return fLabel;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.Argument#mustSpecify()
*/
@Override
public boolean mustSpecify() {
return fMustSpecify;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.Argument#value()
*/
@Override
public abstract String value();
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.Argument#setValue(java.lang.String)
*/
@Override
public abstract void setValue(String value);
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.Argument#isValid(java.lang.String)
*/
@Override
public abstract boolean isValid(String value);
@Override
public abstract String toString();
}
public class StringArgumentImpl extends ArgumentImpl implements 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);
}
@Override
public String value() {
return fValue;
}
@Override
public void setValue(String value) {
fValue = value;
}
@Override
public boolean isValid(String value) {
return true;
}
@Override
public String toString() {
return fValue;
}
}
public class IntegerArgumentImpl extends ArgumentImpl implements 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;
}
@Override
public String value() {
return (fValue == null) ? null : fValue.toString();
}
@Override
public void setValue(String value) {
fValue = new Integer(value);
}
@Override
public boolean isValid(String value) {
Integer val;
try {
val = new Integer(value);
} catch (NumberFormatException e) {
return false;
}
return isValid(val.intValue());
}
@Override
public String toString() {
return value();
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.IntegerArgument#intValue()
*/
@Override
public int intValue() {
return fValue.intValue();
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.IntegerArgument#setValue(int)
*/
@Override
public void setValue(int value) {
fValue = new Integer(value);
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.IntegerArgument#min()
*/
@Override
public int min() {
return fMin;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.IntegerArgument#max()
*/
@Override
public int max() {
return fMax;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.IntegerArgument#isValid(int)
*/
@Override
public boolean isValid(int value) {
return fMin <= value && value <= fMax;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.IntegerArgument#stringValueOf(int)
*/
@Override
public String stringValueOf(int value) {
return new Integer(value).toString();
}
}
public class BooleanArgumentImpl extends ArgumentImpl implements 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);
}
@Override
public String value() {
return (fValue == null) ? null : fValue.toString();
}
@Override
public void setValue(String value) {
fValue = Boolean.valueOf(value);
}
@Override
public boolean isValid(String value) {
return true;
}
@Override
public String toString() {
return value();
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.BooleanArgument#booleanValue()
*/
@Override
public boolean booleanValue() {
return fValue.booleanValue();
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.BooleanArgument#setValue(boolean)
*/
@Override
public void setValue(boolean value) {
fValue = Boolean.valueOf(value);
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.BooleanArgument#stringValueOf(boolean)
*/
@Override
public String stringValueOf(boolean value) {
return Boolean.valueOf(value).toString();
}
}
public class SelectedArgumentImpl extends StringArgumentImpl implements SelectedArgument {
private static final long serialVersionUID = 6009335074727417445L;
private List<String> fChoices;
protected SelectedArgumentImpl(String name, String description,
String label, boolean mustSpecify, List<String> choices) {
super(name, description, label, mustSpecify);
fChoices = choices;
}
/* (non-Javadoc)
* @see com.sun.jdi.connect.Connector.SelectedArgument#choices()
*/
@Override
public List<String> choices() {
return fChoices;
}
@Override
public boolean isValid(String value) {
return fChoices.contains(value);
}
}
}