usr/src/java/rad/org/opensolaris/os/rad/ADRName.java
author Stephen Talley <stephen.talley@oracle.com>
Mon, 28 Mar 2011 10:53:34 -0400
changeset 685 767674b0a2fb
parent 604 20d9acfeb7fb
child 686 3ead80dd78ec
permissions -rw-r--r--
18094 s/StringBuffer/StringBuilder/g
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     1
/*
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     2
 * CDDL HEADER START
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     3
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     7
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    11
 * and limitations under the License.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    12
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    18
 *
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    19
 * CDDL HEADER END
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    20
 */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    21
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    22
/*
685
767674b0a2fb 18094 s/StringBuffer/StringBuilder/g
Stephen Talley <stephen.talley@oracle.com>
parents: 604
diff changeset
    23
 * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    24
 */
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    25
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    26
package org.opensolaris.os.rad;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    27
685
767674b0a2fb 18094 s/StringBuffer/StringBuilder/g
Stephen Talley <stephen.talley@oracle.com>
parents: 604
diff changeset
    28
import java.util.*;
767674b0a2fb 18094 s/StringBuffer/StringBuilder/g
Stephen Talley <stephen.talley@oracle.com>
parents: 604
diff changeset
    29
import java.util.logging.*;
767674b0a2fb 18094 s/StringBuffer/StringBuilder/g
Stephen Talley <stephen.talley@oracle.com>
parents: 604
diff changeset
    30
import javax.management.*;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    31
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    32
public class ADRName {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    33
    private String domain_;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    34
    private TreeMap<String, String> kvs_ = new TreeMap<String, String>();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    35
604
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
    36
    /* Wire-ordered keys to play jconsole's silly collation game */
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
    37
    private List<String> keys_ = new ArrayList<String>();
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
    38
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    39
    public ADRName(ObjectName on) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    40
	domain_ = on.getDomain();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    41
	Hashtable<String, String> keys = on.getKeyPropertyList();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    42
	for (Map.Entry<String, String> e : keys.entrySet()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    43
	    String value = e.getValue();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    44
	    try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    45
		value = ObjectName.unquote(value);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    46
	    } catch (IllegalArgumentException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    47
	    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    48
	    kvs_.put(e.getKey(), value);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    49
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    50
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    51
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    52
    public ADRName(String domain, String[] keys, String[] values) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    53
	domain_ = domain;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    54
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    55
	if (keys != null && values != null) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    56
	    if (keys.length != values.length)
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    57
		throw new IllegalArgumentException(
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    58
		    "Unequal number of keys and values");
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    59
	} else if (keys != null || values != null) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    60
	    throw new IllegalArgumentException(
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    61
		"Only one of keys and values specified");
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    62
	}
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    63
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    64
	for (int i = 0; i < keys.length; i++)
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    65
	    kvs_.put(keys[i], values[i]);
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    66
    }
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    67
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    68
    public ADRName(String str) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    69
	String[] pieces = str.split(":", 2);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    70
	domain_ = pieces[0];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    71
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    72
	if (pieces.length != 2)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    73
	    throw new IllegalArgumentException("No keys/values: " + str);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    74
	int pos, start = 0, dst = 0;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    75
	boolean inkey = true;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    76
	char[] c = pieces[1].toCharArray();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    77
	String key = null;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    78
	char[] scratch = new char[str.length()];
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    79
	for (pos = 0; pos < c.length; pos++) {
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    80
	    char ochar = c[pos];
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    81
	    if (ochar == ',') {
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    82
		if (pos == start || inkey)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    83
		    throw new IllegalArgumentException("Empty value: " + str);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    84
		kvs_.put(key, new String(scratch, 0, dst));
604
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
    85
		keys_.add(key);
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    86
		dst = 0;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    87
		inkey = true;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    88
		start = pos + 1;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    89
		continue;
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    90
	    } else if (ochar == '=') {
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    91
		if (pos == start || !inkey)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    92
		    throw new IllegalArgumentException("Empty key: " + str);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    93
		key = new String(scratch, 0, dst);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    94
		dst = 0;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    95
		inkey = false;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    96
		start = pos + 1;
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    97
		continue;
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
    98
	    } else if (ochar == '\\') {
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
    99
		if (++pos >= c.length)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   100
		    throw new IllegalArgumentException("Ends with \\: " + str);
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   101
		switch (c[pos]) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   102
		case 'S':
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   103
		    ochar = '\\';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   104
		    break;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   105
		case 'E':
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   106
		    ochar = '=';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   107
		    break;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   108
		case 'C':
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   109
		    ochar = ',';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   110
		    break;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   111
		default:
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   112
		    throw new IllegalArgumentException("Bad sequence: " +
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   113
			ochar + c[pos]);
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   114
		}
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   115
	    }
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   116
	    scratch[dst++] = ochar;
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   117
        }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   118
	if (pos == start || inkey)
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   119
	    throw new IllegalArgumentException("Empty value: " + str);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   120
	kvs_.put(key, new String(scratch, 0, dst));
604
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   121
	keys_.add(key);
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   122
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   123
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   124
    public ObjectName toObjectName() throws MalformedObjectNameException {
604
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   125
	/*
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   126
	 * In theory, ObjectName keys are unordered.  In practice, their
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   127
	 * order is used as a hint to improve the appearance of jconsole.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   128
	 * Discordant as this is, the end result is actually pretty nice.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   129
	 *
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   130
	 * Unfortunately, the only ObjectName constructor that chooses
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   131
	 * practice over theory is the one that takes the string form, so
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   132
	 * below we cons up a String so that ObjectName(String) can then
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   133
	 * immediately undo our work and parse it.
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   134
	 */
685
767674b0a2fb 18094 s/StringBuffer/StringBuilder/g
Stephen Talley <stephen.talley@oracle.com>
parents: 604
diff changeset
   135
	StringBuilder sb = new StringBuilder(domain_).append(':');
604
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   136
	boolean first = true;
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   137
	for (String key : keys_) {
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   138
	    if (first)
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   139
		first = false;
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   140
	    else
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   141
		sb.append(',');
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   142
	    sb.append(key).append('=').append(ObjectName.quote(kvs_.get(key)));
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   143
	}
20d9acfeb7fb 17421 name key order preservation
David Powell <david.e.powell@oracle.com>
parents: 573
diff changeset
   144
	return (new ObjectName(sb.toString()));
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   145
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   146
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   147
    @Override
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   148
    public String toString() {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   149
	StringBuilder sb = new StringBuilder();
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   150
	sb.append(domain_);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   151
	char sep = ':';
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   152
	for (Map.Entry<String, String> e : kvs_.entrySet()) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   153
	    sb.append(sep);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   154
	    quote(sb, e.getKey());
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   155
	    sb.append('=');
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   156
	    quote(sb, e.getValue());
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   157
	    sep = ',';
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   158
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   159
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   160
	return (sb.toString());
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   161
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   162
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   163
    @Override
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   164
    public boolean equals(Object o) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   165
	if (!(o instanceof ADRName))
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   166
	    return false;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   167
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   168
	ADRName a = (ADRName)o;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   169
	return domain_.equals(a.domain_) && kvs_.equals(a.kvs_);
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   170
    }
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   171
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   172
    @Override
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   173
    public int hashCode() {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   174
	int hash = 7;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   175
	hash = 53 * hash + (domain_ != null ? domain_.hashCode() : 0);
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   176
	hash = 53 * hash + (kvs_ != null ? kvs_.hashCode() : 0);
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   177
	return hash;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   178
    }
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   179
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   180
    private static void quote(StringBuilder sb, String s) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   181
	char[] sarray = s.toCharArray();
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   182
	char[] c = new char[s.length() * 2];
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   183
	int to, from;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   184
	for (to = 0, from = 0; from < sarray.length; from++) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   185
	    char ochar = sarray[from];
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   186
	    switch (ochar) {
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   187
	    case '\\':
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   188
		ochar = 'S';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   189
		c[to++] = '\\';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   190
		break;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   191
	    case '=':
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   192
		ochar = 'E';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   193
		c[to++] = '\\';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   194
		break;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   195
	    case ',':
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   196
		ochar = 'C';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   197
		c[to++] = '\\';
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   198
		break;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   199
	    }
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   200
	    c[to++] = ochar;
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   201
	}
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   202
	sb.append(c, 0, to);
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   203
    }
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   204
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   205
    public static void main(String[] argv) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   206
	ADRName n = new ADRName("foo.bar:name=value");
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   207
	System.out.println("Name: " + n);
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   208
	try {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   209
	    System.out.println("ObjectName: " + n.toObjectName().toString());
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   210
	    System.out.println("UnObjectName: " +
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   211
		new ADRName(n.toObjectName()));
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   212
	} catch (MalformedObjectNameException ex) {
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   213
	    Logger.getLogger(ADRName.class.getName()).log(
573
f0add9469f92 17058 support removing objects
David Powell <david.e.powell@oracle.com>
parents: 516
diff changeset
   214
		Level.SEVERE, null, ex);
516
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   215
	}
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   216
    }
96029ce1545c 16312 generate, use numerical handles for server objects
David Powell <david.e.powell@oracle.com>
parents:
diff changeset
   217
}