|
Glassfish example source code file (AttributeListUtils.java)
The Glassfish AttributeListUtils.java source code
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
/*
* Indentation Information:
* 0. Please (try to) preserve these settings.
* 1. Tabs are preferred over spaces.
* 2. In vi/vim -
* :set tabstop=4 :set shiftwidth=4 :set softtabstop=4
* 3. In S1 Studio -
* 1. Tools->Options->Editor Settings->Java Editor->Tab Size = 4
* 2. Tools->Options->Indentation Engines->Java Indentation Engine->Expand Tabs to Spaces = False.
* 3. Tools->Options->Indentation Engines->Java Indentation Engine->Number of Spaces per Tab = 4.
*/
package com.sun.enterprise.admin.util.jmx;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import javax.management.AttributeList;
import javax.management.Attribute;
import java.util.StringTokenizer;
/** A class that has some useful utility methods to deal with
* <ul>
* <li> Jmx Attributes
* <li> Jmx AttributeLists.
* </ul>
* It is expected to enhance this class with more utility methods.
* @author Kedar.Mhaswade@Sun.Com
* @since Sun Java System Application Server 8
*/
public class AttributeListUtils {
private AttributeListUtils() {
//disallow
}
/** Checks whether this list contains a JMX {@link Attribute} with given name. Note that
* this method will return true if there is at least one attribute with given name.
* @param al an instance of {@link AttributeList}
* @param name a String representing the name of the attribute. The name may not be null.
* @return true if there is at least one attribute in the list with given name,
* false otherwise
* @throws IllegalArgumentException if the attribute list or name is null
*/
public static final boolean containsNamedAttribute(final AttributeList al,
final String name) {
if (al == null || name == null)
throw new IllegalArgumentException ("null arg");
boolean contains = false;
final Iterator it = al.iterator();
while (it.hasNext()) {
final Attribute at = (Attribute) it.next();
if (name.equals(at.getName())) { //attribute name may not be null - guaranteed
contains = true;
break;
}
}
return ( contains );
}
/** Checks whether an attribute with the name same as that of the given
* attribute exists in this list. The given name may not be null.
* @param al an instance of {@link AttributeList}
* @param a an Attribute with a name and a value
* @return true if there exists at least one attribute with same name, false
* otherwise
* @throws IllegalArgumentException if the attribute list or name is null
*/
public static final boolean containsNamedAttribute(final AttributeList al,
final Attribute a) {
if (al == null || a == null)
throw new IllegalArgumentException ("null arg");
return ( containsNamedAttribute(al, a.getName()) );
}
/** Returns the given list as a map of attributes, keyed on the names of the attribute
* in the list. The passed argument may not be null. The mappings are between
* the names of attributes and attributes themselves.
* @param al the list of attributes that need to be mapped
* @return an instance of {@link Map}
* @throws IllegalArgumentException if the argument is null
*/
public static final Map asNameMap(final AttributeList al) {
if (al == null) {
throw new IllegalArgumentException ("null arg");
}
final Map m = new HashMap();
final Iterator it = al.iterator();
while (it.hasNext()) {
final Attribute a = (Attribute) it.next();
m.put(a.getName(), a);
}
return ( m );
}
/** JMX 1.2 specification had a weird limitation that a Dynamic MBean
* may not have an attribute whose name is <b> not a valid Java
* identifier <b>. This method is a utility method to convert the any
* arbitrary name into a String that can be a valid JMX 1.2 attribute.
* Every character in the string passed that is neither a Character.isJavaIdentifierStart
* nor a Character.isJavaIdentifierPart is replace with a valid character
* '_'.
* @param name a String that represents any non null name
* @return a String that represents a name valid for a JMX 1.2 MBean.
* @throws IllegalArgumentException if the parameter is null or is of zero length
*/
public static final String toJmx12Attribute(final String name) {
if (name == null || name.length() == 0)
throw new IllegalArgumentException ("invalid arg");
final char rc = '_';
assert (Character.isJavaIdentifierStart(rc) && Character.isJavaIdentifierPart(rc));
final char[] chars = new char[name.length()];
name.getChars(0, name.length(), chars, 0);
if (! Character.isJavaIdentifierStart(chars[0])) {
chars[0] = rc;
}
for (int i = 1 ; i < name.length() ; i++) { //note the index
if (! Character.isJavaIdentifierPart(chars[i])) {
chars[i] = rc;
}
}
return ( new String(chars) );
}
/** Returns a String representation of an attribute list such that:
* <ul>
* <li> Each attribute is a name and value separated by a ','. toString() on the value is called.
* <li> Each pair is separated by a new line character '\n'.
* </ul>
* @param al the list of attributes - may be null, in which case an empty String is returned.
* @return a String representing the parameter passed
*/
public static final String toString(final AttributeList al) {
final StringBuffer sb = new StringBuffer();
final char SEP = ',';
final char NL = '\n';
if (al != null) {
final Iterator it = al.iterator();
while (it.hasNext()) {
final Attribute a = (Attribute) it.next();
sb.append(a.getName()).append(SEP).append(a.getValue().toString()).append(NL);
}
}
return (sb.toString());
}
public static String dash2CamelCase(String dashed) {
/* This algorithm is obviously not accurate, as I have not written
* a generic parser/lexical analyzer, nor have I written a BNF. All it
* does is it converts Strings like abc-def-ghi to AbcDefGhi. A hyphen, if followed
* by an alphabet, will be removed and the alphabet is capitalized. No more
* complications. The passed String is converted into lower case by default.
*/
if (dashed == null)
throw new IllegalArgumentException ("Null Arg");
dashed = dashed.toLowerCase();
final ArrayList list = new ArrayList();
final StringTokenizer tz = new StringTokenizer(dashed, "-");
while (tz.hasMoreTokens()) {
list.add(tz.nextToken());
}
final String[] tmp = new String[list.size()];
final String[] strings = getCamelCaseArray((String[])list.toArray(tmp));
return ( strings2String(strings) );
}
private static String[] getCamelCaseArray(final String[] from) {
final String[] humps = new String[from.length];
for (int i = 0 ; i < from.length ; i++) {
final StringBuffer sb = new StringBuffer(from[i]);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
humps[i] = sb.toString();
}
return ( humps );
}
private static String strings2String(final String[] a) {
final StringBuffer sb = new StringBuffer();
for (int i = 0 ; i < a.length ; i++) {
sb.append(a[i]);
}
return ( sb.toString() );
}
}
Other Glassfish examples (source code examples)Here is a short list of links related to this Glassfish AttributeListUtils.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.