| /******************************************************************************* |
| * 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); |
| } |
| } |
| } |