You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jb...@apache.org on 2005/02/24 23:21:14 UTC
svn commit: r155261 - in geronimo/trunk/modules/kernel/src:
java/org/apache/geronimo/gbean/GBeanName.java
test/org/apache/geronimo/gbean/GBeanNameTest.java
Author: jboynes
Date: Thu Feb 24 14:21:12 2005
New Revision: 155261
URL: http://svn.apache.org/viewcvs?view=rev&rev=155261
Log:
Added method to String format name with keys in a specified order
Changed (String,Map) constructor to generate name in iteration order
Modified:
geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanName.java
geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanNameTest.java
Modified: geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanName.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanName.java?view=diff&r1=155260&r2=155261
==============================================================================
--- geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanName.java (original)
+++ geronimo/trunk/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanName.java Thu Feb 24 14:21:12 2005
@@ -18,6 +18,7 @@
import java.io.Serializable;
import java.util.Arrays;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
@@ -50,10 +51,10 @@
/**
* Construct a GBeanName by combining a domain with explicit properties.
- * The string representation of this name is generated by combining the properties in sorted order.
+ * The string representation of this name is generated by combining the properties in iteration order.
*
* @param domain the domain
- * @param props the properties used to qualify this name; a Map<String,String>
+ * @param props the properties used to qualify this name; a Map<String,String>
*/
public GBeanName(String domain, Map props) {
if (domain == null) {
@@ -65,12 +66,26 @@
}
this.domain = domain;
this.props = new HashMap(props);
- this.name = sortName(domain, props);
+ this.name = buildName(domain, props);
this.hashCode = domain.hashCode() + 37 * props.hashCode();
}
+ private static String buildName(String domain, Map props) {
+ StringBuffer buf = new StringBuffer(128);
+ buf.append(domain).append(':');
+ Iterator i = props.entrySet().iterator();
+ Map.Entry entry = (Map.Entry) i.next();
+ buf.append(entry.getKey()).append('=').append(entry.getValue());
+ while (i.hasNext()) {
+ entry = (Map.Entry) i.next();
+ buf.append(',').append(entry.getKey()).append('=').append(entry.getValue());
+ }
+ return buf.toString();
+ }
+
/**
* Construct a GBeanName by parsing a string.
+ *
* @param name the name to parse
*/
public GBeanName(String name) {
@@ -105,19 +120,6 @@
return props;
}
- private static String sortName(String domain, Map props) {
- String[] names = (String[]) props.keySet().toArray(new String[props.size()]);
- Arrays.sort(names);
- StringBuffer buf = new StringBuffer(128);
- buf.append(domain).append(':');
- buf.append(names[0]).append('=').append(props.get(names[0]));
- for (int i = 1; i < names.length; i++) {
- String name = names[i];
- buf.append(',').append(name).append('=').append(props.get(name));
- }
- return buf.toString();
- }
-
/**
* Determine if this name matches the supplied pattern.
* This performs a fast but simplistic pattern match which is true if:
@@ -129,7 +131,7 @@
* and always match; in other words GBeanName.match(null, new Properties()) will
* always evaluate to true.
*
- * @param domain the domain to match
+ * @param domain the domain to match
* @param pattern the set properties to match; a Map<String,String>
* @return true if this instance matches the pattern
*/
@@ -156,6 +158,7 @@
* Test for equality.
* This instance will be equal if the supplied object is a GBeanName with
* equal domain and properties.
+ *
* @param obj
* @return
*/
@@ -173,12 +176,35 @@
/**
* Return a human readable version of this GBeanName. If the instance was created
* by parsing a String, this will be the supplied value; it it was created by
- * supplying properties, the name will contain properties in sorted order.
+ * supplying properties, the name will contain properties in an unspecified order.
*
* @return a readable name
*/
public String toString() {
return name;
+ }
+
+ /**
+ * Return a String representation of ths GBeanName.
+ * The format will be <domain> ':' <key> '=' <value> ( ',' <key> '=' <value> )*
+ * Keys are appended in the order determined by the supplied Comparator.
+ *
+ * @param keySorter the Comparator to use to order the keys.
+ * @return a String representation of this GBean
+ */
+ public String toString(Comparator keySorter) {
+ String[] keyList = (String[]) props.keySet().toArray(new String[props.keySet().size()]);
+ Arrays.sort(keyList, keySorter);
+
+ StringBuffer buf = new StringBuffer(128);
+ buf.append(domain).append(':');
+ String key = keyList[0];
+ buf.append(key).append('=').append(props.get(key));
+ for (int i = 1; i < keyList.length; i++) {
+ key = keyList[i];
+ buf.append(',').append(key).append('=').append(props.get(key));
+ }
+ return buf.toString();
}
private Object readResolve() {
Modified: geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanNameTest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanNameTest.java?view=diff&r1=155260&r2=155261
==============================================================================
--- geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanNameTest.java (original)
+++ geronimo/trunk/modules/kernel/src/test/org/apache/geronimo/gbean/GBeanNameTest.java Thu Feb 24 14:21:12 2005
@@ -19,6 +19,9 @@
import java.util.Properties;
import java.util.HashSet;
import java.util.Set;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Comparator;
import java.rmi.MarshalledObject;
import junit.framework.TestCase;
@@ -31,6 +34,7 @@
public void testPropertyConstruction() {
String domain = "testDomain";
+ Map props = new LinkedHashMap();
props.put("prop1", "value1");
props.put("prop2", "value2");
GBeanName name = new GBeanName(domain, props);
@@ -63,6 +67,20 @@
assertTrue(name.matches("testDomain", props));
props.setProperty("prop3", "value3");
assertFalse(name.matches("testDomain", props));
+ }
+
+ public void testStringForms() {
+ GBeanName name = new GBeanName("testDomain:prop2=value2,prop3=value3,prop1=value1");
+ assertEquals("testDomain:prop1=value1,prop2=value2,prop3=value3", name.toString(new Comparator() {
+ public int compare(Object o1, Object o2) {
+ return ((String)o1).compareTo(o2);
+ }
+ }));
+ assertEquals("testDomain:prop3=value3,prop2=value2,prop1=value1", name.toString(new Comparator() {
+ public int compare(Object o1, Object o2) {
+ return - ((String)o1).compareTo(o2);
+ }
+ }));
}
public void testInvalidNames() {