costin 2002/11/12 22:25:32
Modified: modeler/src/java/org/apache/commons/modeler
AttributeInfo.java Registry.java
Log:
Few fixes.
Revision Changes Path
1.2 +31 -5
jakarta-commons/modeler/src/java/org/apache/commons/modeler/AttributeInfo.java
Index: AttributeInfo.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/AttributeInfo.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AttributeInfo.java 30 Apr 2002 20:58:51 -0000 1.1
+++ AttributeInfo.java 13 Nov 2002 06:25:32 -0000 1.2
@@ -67,6 +67,7 @@
import javax.management.Descriptor;
import javax.management.modelmbean.ModelMBeanAttributeInfo;
+import java.lang.reflect.Method;
/**
@@ -133,6 +134,8 @@
* The name of the property getter method, if non-standard.
*/
protected String getMethod = null;
+ protected Method getMethodObj = null;
+ protected Method setMethodObj = null;
public String getGetMethod() {
return (this.getMethod);
@@ -143,6 +146,21 @@
this.info = null;
}
+ public Method getGetMethodObj() {
+ return getMethodObj;
+ }
+
+ public void setGetMethodObj(Method getMethodObj) {
+ this.getMethodObj = getMethodObj;
+ }
+
+ public Method getSetMethodObj() {
+ return setMethodObj;
+ }
+
+ public void setSetMethodObj(Method setMethodObj) {
+ this.setMethodObj = setMethodObj;
+ }
/**
* Is this a boolean attribute with an "is" getter?
@@ -227,10 +245,18 @@
* corresponds to the attribute described by this instance.
*/
public ModelMBeanAttributeInfo createAttributeInfo() {
-
// Return our cached information (if any)
if (info != null)
return (info);
+ if((getMethodObj != null) || (setMethodObj != null) ) {
+ try {
+ info=new ModelMBeanAttributeInfo(getName(), getDescription(),
+ getMethodObj, setMethodObj);
+ return info;
+ } catch( Exception ex) {
+ ex.printStackTrace();
+ }
+ }
// Create and return a new information object
info = new ModelMBeanAttributeInfo
1.9 +59 -44
jakarta-commons/modeler/src/java/org/apache/commons/modeler/Registry.java
Index: Registry.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/Registry.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Registry.java 12 Nov 2002 22:49:58 -0000 1.8
+++ Registry.java 13 Nov 2002 06:25:32 -0000 1.9
@@ -98,7 +98,7 @@
* It is called from BaseRegistry
*/
protected Registry() {
-
+
super();
}
@@ -131,7 +131,7 @@
public void addManagedBean(ManagedBean bean) {
// called from digester
descriptors.put(bean.getName(), bean);
-
+
}
@@ -232,7 +232,7 @@
// XXX This should be decoupled - Registry should only deal with
// type info, and it may be nice to not depend directly on JMX.
-
+
/**
* Factory method to create (if necessary) and return our
* <code>MBeanServer</code> instance.
@@ -266,7 +266,7 @@
Registry registry = getRegistry();
registry.loadDescriptors( stream, "modeler" );
}
-
+
/**
* Load the registry from the XML input found in the specified input
* stream.
@@ -277,22 +277,22 @@
* @exception Exception if any parsing or processing error occurs
*/
public void loadDescriptors(InputStream stream, String type)
- throws Exception
+ throws Exception
{
long t1=System.currentTimeMillis();
// Create a digester to use for parsing
Registry registry = this;
-
+
Digester digester = new Digester();
digester.setNamespaceAware(false);
- digester.setValidating(false);
+ digester.setValidating(false);
URL url = registry.getClass().getResource
("/org/apache/commons/modeler/mbeans-descriptors.dtd");
digester.register
("-//Apache Software Foundation//DTD Model MBeans Configuration File",
url.toString());
-
+
// Push our registry object onto the stack
digester.push(registry);
@@ -486,9 +486,9 @@
}
// ------------ Implementation for non-declared introspection classes
-
- // createMBean == registerClass + registerMBean
+
+ // createMBean == registerClass + registerMBean
private boolean supportedType( Class ret ) {
return ret == String.class ||
@@ -498,39 +498,43 @@
ret == Long.TYPE ||
ret == java.io.File.class ||
ret == Boolean.class ||
- ret == Boolean.TYPE
- ;
+ ret == Boolean.TYPE
+ ;
}
- /** Process the methods and extract 'attributes', methods, etc
+ /** Process the methods and extract 'attributes', methods, etc
*
*/
- private void initMethods(Class realClass,
- Method methods[],
+ private void initMethods(Class realClass,
+ Method methods[],
Hashtable attMap, Hashtable getAttMap,
- Hashtable setAttMap, Hashtable invokeAttMap)
+ Hashtable setAttMap, Hashtable invokeAttMap)
{
for (int j = 0; j < methods.length; ++j) {
String name=methods[j].getName();
-
+
if( name.startsWith( "get" ) ) {
- if( methods[j].getParameterTypes().length != 0 ) {
+ Class params[]=methods[j].getParameterTypes();
+ if( params.length != 0 ) {
+ if( log.isDebugEnabled())
+ log.debug("Wrong param count " + name + " " +
params.length);
continue;
}
if( ! Modifier.isPublic( methods[j].getModifiers() ) ) {
- //log.debug("not public " + methods[j] );
+ if( log.isDebugEnabled())
+ log.debug("Not public " + methods[j] );
continue;
}
Class ret=methods[j].getReturnType();
if( ! supportedType( ret ) ) {
if( log.isDebugEnabled() )
- log.debug("Unsupported " + ret );
+ log.debug("Unsupported type " + methods[j] + " " + ret );
continue;
}
name=unCapitalize( name.substring(3));
getAttMap.put( name, methods[j] );
- // just a marker, we don't use the value
+ // just a marker, we don't use the value
attMap.put( name, methods[j] );
} else if( name.startsWith( "is" ) ) {
// not used in our code. Add later
@@ -538,12 +542,13 @@
} else if( name.startsWith( "set" ) ) {
Class params[]=methods[j].getParameterTypes();
if( params.length != 1 ) {
+ if( log.isDebugEnabled())
+ log.debug("Wrong param count " + name + " " +
params.length);
continue;
}
- if( ! Modifier.isPublic( methods[j].getModifiers() ) )
- continue;
- Class ret=params[0];
- if( ! supportedType( ret ) ) {
+ if( ! Modifier.isPublic( methods[j].getModifiers() ) ) {
+ if( log.isDebugEnabled())
+ log.debug("Not public " + name);
continue;
}
name=unCapitalize( name.substring(3));
@@ -568,45 +573,56 @@
* @todo Read (optional) descriptions from a .properties, generated
* from source
* @todo Deal with constructors
- *
+ *
*/
public ManagedBean createManagedBean(String domain, Class realClass, String
type) {
ManagedBean mbean= new ManagedBean();
-
+
Method methods[]=null;
-
+
Hashtable attMap=new Hashtable();
// key: attribute val: getter method
Hashtable getAttMap=new Hashtable();
// key: attribute val: setter method
Hashtable setAttMap=new Hashtable();
// key: operation val: invoke method
- Hashtable invokeAttMap=new Hashtable();
-
+ Hashtable invokeAttMap=new Hashtable();
+
methods = realClass.getMethods();
initMethods(realClass, methods, attMap, getAttMap, setAttMap, invokeAttMap
);
-
+
if( type==null) type=super.generateSeqName(domain, realClass);
try {
-
+
Enumeration en=attMap.keys();
while( en.hasMoreElements() ) {
String name=(String)en.nextElement();
AttributeInfo ai=new AttributeInfo();
ai.setName( name );
- Method m=(Method)getAttMap.get(name);
- if( m!=null )
- ai.setGetMethod( m.getName());
- m=(Method)setAttMap.get(name);
- if( m!=null )
- ai.setSetMethod( m.getName());
- ai.setDescription("Introspected attribute " + name );
-
+ Method gm=(Method)getAttMap.get(name);
+ if( gm!=null ) {
+ //ai.setGetMethodObj( gm );
+ ai.setGetMethod( gm.getName());
+ Class t=gm.getReturnType();
+ if( t!=null )
+ ai.setType( t.getName() );
+ }
+ Method sm=(Method)setAttMap.get(name);
+ if( sm!=null ) {
+ //ai.setSetMethodObj(sm);
+ Class t=sm.getParameterTypes()[0];
+ if( t!=null )
+ ai.setType( t.getName());
+ ai.setSetMethod( sm.getName());
+ }
+ ai.setDescription("Introspected attribute " + name);
+ if( log.isDebugEnabled()) log.debug("Introspected attribute " +
+ name + " " + gm + " " + sm);
mbean.addAttribute(ai);
}
-
+
en=invokeAttMap.keys();
while( en.hasMoreElements() ) {
String name=(String)en.nextElement();
@@ -638,7 +654,7 @@
}
}
-
+
// -------------------- Utils --------------------
private static String unCapitalize(String name) {
@@ -651,4 +667,3 @@
}
}
-
\ No newline at end of file
--
To unsubscribe, e-mail: <mailto:commons-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@;jakarta.apache.org>