15f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/*
25f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
35f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
45f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * this work for additional information regarding copyright ownership.
55f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
65f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * (the "License"); you may not use this file except in compliance with
75f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * the License.  You may obtain a copy of the License at
85f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
95f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  Unless required by applicable law or agreed to in writing, software
125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  See the License for the specific language governing permissions and
165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *  limitations under the License.
175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * @author Vitaly A. Provodin
215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * Created on 26.01.2005
255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespackage org.apache.harmony.jpda.tests.framework;
275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughesimport java.util.HashMap;
295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes/**
315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * This class provides access to options for running JPDA tests.
325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <p>
335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The settings are presented as a set of getters and setters for test options,
345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * which can be implemented in different ways. In this implementation test
355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * options are implemented via VM system properties, which can be specified
365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * using option '-D' in VM command line.
375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <p>
385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * The following options are currently recognized:
395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <ul>
405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeJavaHome</code>
415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - path to Java bundle to run debuggee on
425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeJavaExec</code>
435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - name of Java executable to run debuggee on
445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeJavaPath</code>
455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - full path to Java executable to run debuggee on
465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeAgentName</code>
475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - name of agent native library
485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeAgentExtraOptions</code>
495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - extra options for agent
505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeClassName</code>
515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - full name of class to run debuggee with
525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeVMExtraOptions</code>
535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - extra options to run debuggee with
545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.debuggeeSuspend</code>
555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - debuggee suspend mode ("y"|"n")
565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.transportWrapperClass</code>
575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - class name of TransportWrapper implementation
585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.transportAddress</code>
595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - address for JDWP connection
605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.connectorKind</code>
615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - type of JDWP connection (attach or listen)
625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.syncPort</code>
635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - port number for sync connection
645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.timeout</code>
655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - timeout used in JPDA tests
665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.waitingTime</code>
675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - timeout for waiting events
685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * </ul>
695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * <li><code>jpda.settings.verbose</code>
705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *   - flag that disables (default) or enables writing messages to the log
715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * </ul>
725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes * All options have default values, if they are not specified.
735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes *
745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes */
755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughespublic class TestOptions {
765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /** Default timeout value for various operations. */
785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final int DEFAULT_TIMEOUT = 1 * 60 * 1000; // 1 minute
795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /** Default time interval for waiting for various events. */
815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final int DEFAULT_WAITING_TIME = DEFAULT_TIMEOUT;
825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /** Default static address for transport connection. */
845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final String DEFAULT_ATTACHING_ADDRESS = "127.0.0.1:9898";
855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /** Default port number for sync connection. */
875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final String DEFAULT_STATIC_SYNC_PORT = "9797";
885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /** Default port number for sync connection. */
905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final int DEFAULT_SYNC_PORT = 0;
915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /** Default class name for transport wrapper. */
935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final String DEFAULT_TRANSPORT_WRAPPER
945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        = "org.apache.harmony.jpda.tests.framework.jdwp.SocketTransportWrapper";
955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /** Default aclass name for debuggee application. */
975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public static final String DEFAULT_DEBUGGEE_CLASS_NAME
985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        = "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    // current waiting time value (negative means using default value)
1015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private long waitingTime = -1;
1025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    // current timeout value (negative means using default value)
1045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private long timeout = -1;
1055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    // internally set property values
1075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    private HashMap internalProperties = new HashMap();
1085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Constructs an instance of this class.
1115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public TestOptions() {
1135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        super();
1145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns path to Java bundle to run debuggee on.
1185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeJavaHome" or system property
1205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *         "java.home" by default.
1215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeJavaHome() {
1235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeJavaHome", getProperty("java.home", null));
1245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns name of Java executable to run debuggee on.
1285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeJavaExec" or "java" by default.
1305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeJavaExec() {
1325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeJavaExec", "java");
1335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns full path to Java executable to run debuggee on.
1375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeJavaPath" or construct path from
1395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *         getDebuggeeJavaHome() and getDebuggeeJavaExec() by default.
1405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeJavaPath() {
1425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeJavaPath",
1435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                getDebuggeeJavaHome() + "/bin/" + getDebuggeeJavaExec());
1445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns class name of TransportWrapper implementation.
1485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.transportWrapperClass" or
1505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *         DEFAULT_TRANSPORT_WRAPPER by default.
1515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getTransportWrapperClassName() {
1535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.transportWrapperClass",
1545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                DEFAULT_TRANSPORT_WRAPPER);
1555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns address for JDWP connection or null for dynamic address.
1595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.transportAddress" or null by default.
1615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getTransportAddress() {
1635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.transportAddress", null);
1645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets address to attach to debuggee.
1685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param address to attach
1705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setTransportAddress(String address) {
1725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setProperty("jpda.settings.transportAddress", address);
1735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns name of JDWP agent library.
1775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeAgentName" or "jdwp" by default
1795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeAgentName() {
1815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeAgentName", "jdwp");
1825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns string with extra options for agent.
1865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeAgentExtraOptions" or "" by default
1885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
1895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeAgentExtraOptions() {
1905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeAgentExtraOptions", "");
1915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
1925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
1935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
1945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns string with all options for agent including specified connection
1955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * address.
1965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
1975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param address - address to attach
1985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param isDebuggerListen - true if debugger is listening for connection
1995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return string with all agent options
2015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeAgentOptions(String address, boolean isDebuggerListen) {
2035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String serv;
2045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (isDebuggerListen) {
2055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            serv = "n";
2065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } else {
2075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            serv = "y";
2085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        // add ',' to agent extra options if required
2115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String agentExtraOptions = getDebuggeeAgentExtraOptions();
2125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (agentExtraOptions.length() > 0 && agentExtraOptions.charAt(0) != ',') {
2135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            agentExtraOptions = "," + agentExtraOptions;
2145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
2155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeAgentOptions",
2175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                "transport=dt_socket,address=" + address + ",server=" + serv
2185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                + ",suspend=" + getDebuggeeSuspend() + agentExtraOptions);
2195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns string with all options for agent including specified connection
2235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * address (only for debugger in listening mode). It just calls
2245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <ul>
2255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * <li><code>getDebuggeeAgentOptions(address, true)</code></li>
2265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * </ul>
2275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @deprecated This method is used as workaround for old tests and will be removed soon.
2295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param address - address to attach
2315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return string with all agent options
2335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeAgentOptions(String address) {
2355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getDebuggeeAgentOptions(address, true);
2365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns VM classpath value to run debuggee with.
2405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return system property "java.class.path" by default.
2425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeClassPath() {
2445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("java.class.path", null);
2455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns full name of the class to start debuggee with.
2495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeClassName" or
2515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *         "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld" by default
2525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeClassName() {
2545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeClassName", DEFAULT_DEBUGGEE_CLASS_NAME);
2555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets full name of the class to start debuggee with.
2595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param className
2615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            full class name
2625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setDebuggeeClassName(String className) {
2645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setProperty("jpda.settings.debuggeeClassName", className);
2655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns string with extra options to start debuggee with.
2695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeVMExtraOptions" or "" by default
2715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeVMExtraOptions() {
2735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String extOpts = getProperty("jpda.settings.debuggeeVMExtraOptions", "");
2745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        extOpts = extOpts + " -Djpda.settings.verbose=" + isVerbose();
2755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return extOpts;
2765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns debuggee suspend mode ("y"|"n").
2805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeSuspend" or "y" by default
2825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeSuspend() {
2845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeSuspend", "y");
2855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns debuggee suspend mode ("y"|"n").
2895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
2905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param mode
2915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            suspend mode
2925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
2935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setDebuggeeSuspend(String mode) {
2945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setProperty("jpda.settings.debuggeeSuspend", mode);
2955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
2965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
2975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
2985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Checks if debuggee is launched in suspend mode.
2995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return true if debuggee is launched in suspend mode
3015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isDebuggeeSuspend() {
3035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getDebuggeeSuspend().equals("y");
3045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns string representation of TCP/IP port for synchronization channel.
3085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return string with port number or null
3105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getSyncPortString() {
3125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.syncPort", null);
3135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns type of connection with debuggee.
3175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return system property "jpda.settings.connectorKind" or "listen" by default.
3195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getConnectorKind() {
3215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.connectorKind", "listen");
3225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Checks if attach connection with debuggee.
3265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return true, if attach connection, false otherwise.
3285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isAttachConnectorKind() {
3305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return ((getConnectorKind()).equals("attach"));
3315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Checks if listen connection with debuggee.
3365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return true, if listen connection, false otherwise.
3385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isListenConnectorKind() {
3405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return (getConnectorKind().equals("listen"));
3415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets connectorKind to attach to debuggee.
3455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setAttachConnectorKind() {
3475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setConnectorKind("attach");
3485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets connectorKind to listen connection from debuggee.
3525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setListenConnectorKind() {
3545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setConnectorKind("listen");
3555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets kind of connector (attach or listen).
3595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setConnectorKind(String kind) {
3615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        setProperty("jpda.settings.connectorKind", kind);
3625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns kind of launching debuggee VM, which can be "auto" or "manual".
3665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.debuggeeLaunchKind" or "auto" by default.
3685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public String getDebuggeeLaunchKind() {
3705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return getProperty("jpda.settings.debuggeeLaunchKind", "auto");
3715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns TCP/IP port for synchronization channel.
3755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return string with port number or null
3775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public int getSyncPortNumber() {
3795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String buf = getSyncPortString();
3805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (buf == null) {
3815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return DEFAULT_SYNC_PORT;
3825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        try {
3855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return Integer.parseInt(buf);
3865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        } catch (NumberFormatException e) {
3875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException(e);
3885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
3895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
3905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
3915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
3925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns timeout for JPDA tests in milliseconds.
3935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
3945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return option "jpda.settings.timeout" or DEFAULT_TIMEOUT by default.
3955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
3965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getTimeout() {
3975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (timeout < 0) {
3985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            timeout = DEFAULT_TIMEOUT;
3995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            String buf = getProperty("jpda.settings.timeout", null);
4005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (buf != null) {
4015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                try {
4025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    timeout = Long.parseLong(buf);
4035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                } catch (NumberFormatException e) {
4045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    throw new TestErrorException(e);
4055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                }
4065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
4075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4085f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return timeout;
4095f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4105f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4115f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4125f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets timeout for JPDA tests in milliseconds.
4135f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4145f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param timeout
4155f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            timeout to be set
4165f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4175f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setTimeout(long timeout) {
4185f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (timeout < 0) {
4195f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            throw new TestErrorException("Cannot set negative timeout value: "
4205f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    + timeout);
4215f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4225f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.timeout = timeout;
4235f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4245f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4255f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4265f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns waiting time for events in milliseconds.
4275f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4285f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return waiting time
4295f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4305f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public long getWaitingTime() {
4315f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (waitingTime < 0) {
4325f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            waitingTime = DEFAULT_WAITING_TIME;
4335f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            String buf = getProperty("jpda.settings.waitingTime", null);
4345f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            if (buf != null) {
4355f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                try {
4365f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    waitingTime = Long.parseLong(buf);
4375f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                } catch (NumberFormatException e) {
4385f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                    throw new TestErrorException(e);
4395f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes                }
4405f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            }
4415f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4425f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return waitingTime;
4435f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4445f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4455f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4465f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets waiting time for events in milliseconds.
4475f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4485f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param waitingTime
4495f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *            waiting time to be set
4505f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4515f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public void setWaitingTime(long waitingTime) {
4525f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        this.waitingTime = waitingTime;
4535f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4545f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4555f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4565f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns whether print to log is enabled.
4575f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4585f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return false (default) if log is disabled or true otherwise.
4595f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4605f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    public boolean isVerbose() {
4615f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return isTrue(getProperty("jpda.settings.verbose", "true"));
4625f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4635f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4645f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4655f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Converts text to boolean.
4665f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4675f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param str string representing boolean value
4685f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return boolean
4695f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4705f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    static public boolean isTrue(String str) {
4715f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return str != null && (
4725f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            str.equalsIgnoreCase("true") ||
4735f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            str.equalsIgnoreCase("yes") ||
4745f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            str.equalsIgnoreCase("on") ||
4755f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            str.equals("1"));
4765f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4775f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4785f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4795f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Returns value of given property if it was set internally or specified in system properties.
4805f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4815f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param name
4825f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *           property name
4835f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param defaultValue
4845f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *           default value for given property
4855f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @return string value of given property or default value if no such property found
4865f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
4875f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected String getProperty(String name, String defaultValue) {
4885f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        String value = (String)internalProperties.get(name);
4895f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        if (value != null) {
4905f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes            return value;
4915f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        }
4925f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        return System.getProperty(name, defaultValue);
4935f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
4945f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
4955f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    /**
4965f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * Sets internal value of given property to override corresponding system property.
4975f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *
4985f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param name
4995f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *           proparty name
5005f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     * @param value
5015f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     *           value for given property
5025f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes     */
5035f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    protected void setProperty(String name, String value) {
5045f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes        internalProperties.put(name, value);
5055f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes    }
5065f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes
5075f0a23683aa603d8c50b6dd071a565821b76067bElliott Hughes}
508