/************************************************************************************* * Copyright (c) 2008-2011 Red Hat, Inc. 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: * JBoss by Red Hat - Initial implementation. ************************************************************************************/ package org.jboss.tools.common.jdt.debug; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * * @author snjeza * */ public class VmModel { private String pid; private String port; private String transport; private String jvmArgs; private String mainClass; private String mainArgs; private Map<String, String> args; private String jdwpArgs; private String displayName; public String getJvmArgs() { return jvmArgs; } public void setJvmArgs(String jvmArgs) { this.jvmArgs = jvmArgs; args = getArguments(jvmArgs); jdwpArgs = getJdwpArg(args); } public String getMainClass() { return mainClass; } public void setMainClass(String mainClass) { this.mainClass = mainClass; } public String getMainArgs() { return mainArgs; } public void setMainArgs(String mainArgs) { this.mainArgs = mainArgs; } private Map<String, String> getArguments(String args) { Map<String, String> arguments = new HashMap<String, String>(); for (String argument : args.split(" ")) { //$NON-NLS-1$ if (argument.length() == 0) { continue; } String[] nameValue = argument.split("=", 2); //$NON-NLS-1$ if (nameValue.length == 1) { arguments.put(nameValue[0], nameValue[0]); } else { arguments.put(nameValue[0], nameValue[1]); } } return arguments; } private String getJdwpArg(Map<String, String> arguments) { String jdwpArg = arguments.get("-agentlib:jdwp"); //$NON-NLS-1$ if(jdwpArg == null ) { // Iterate through args to find one that starts with -Xrunjdwp: Iterator<String> it = arguments.keySet().iterator(); String iNext = null; while(it.hasNext()) { iNext = it.next(); if( iNext.startsWith("-Xrunjdwp:")) { //$NON-NLS-1$ // arguments has a k/v map that looks like this: // -Xrunjdwp:server -> y,transport=dt_socket,address=4000,suspend=n // so return server=y,transport=dt_socket,address=4000,suspend=n String[] keySegments = iNext.split(":"); if( keySegments.length > 1 ) { String ret = keySegments[1] + "=" + arguments.get(iNext); return ret; } } } } return jdwpArg; } @Deprecated // Vague name public String getPort() { return getDebugPort(); } public String getDebugPort() { if (this.port != null) { return this.port; } if (jdwpArgs == null) { return null; } for (String argument : jdwpArgs.split(",")) { //$NON-NLS-1$ String[] nameValue = argument.split("=", 2); //$NON-NLS-1$ if (nameValue.length == 2) { if ("address".equals(nameValue[0])) { //$NON-NLS-1$ String address = nameValue[1]; if (address == null) { continue; } String[] addresses = address.split(":", 2); //$NON-NLS-1$ if (addresses.length == 1) { port = addresses[0]; return port; } else { port = addresses[1]; return port; } } } } return null; } public String getTransport() { if (this.transport != null) { return this.transport; } if (jdwpArgs == null) { return null; } for (String argument : jdwpArgs.split(",")) { //$NON-NLS-1$ String[] nameValue = argument.split("=", 2); //$NON-NLS-1$ if (nameValue.length == 2) { if ("transport".equals(nameValue[0])) { //$NON-NLS-1$ this.transport = nameValue[1]; return transport; } } if (nameValue.length == 1) { if (RemoteDebugActivator.DT_SOCKET.equals(nameValue[0])) { this.transport = nameValue[0]; return transport; } } } return null; } public String getDisplayName() { if (displayName == null) { StringBuffer buffer = new StringBuffer(); if (getMainClass() != null) { buffer.append(mainClass); // if (mainArgs != null) { // if (buffer.length() > 0) { // buffer.append(" "); // } // buffer.append(mainArgs); // } if (pid != null) { if (buffer.length() > 0) { buffer.append(",pid="); //$NON-NLS-1$ } buffer.append(pid); } String port = getPort(); if (port != null) { if (buffer.length() > 0) { buffer.append(",port="); //$NON-NLS-1$ } buffer.append(port); } } if (buffer.length() > 0) { displayName = buffer.toString(); } } return displayName; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } @Deprecated // Vague name public void setPort(String port) { setDebugPort(port); } public void setDebugPort(String port) { this.port = port; } public void setTransport(String transport) { this.transport = transport; } @Override public String toString() { return "VmModel [pid=" + pid + ", port=" + port + ", transport=" + transport + ", jvmArgs=" + jvmArgs + ", mainClass=" + mainClass + ", mainArgs=" + mainArgs + ", args=" + args + ", jdwpArgs=" + jdwpArgs + ", displayName=" + displayName + "]"; } }