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-- |
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 |
} |