X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fxml%2FXmlConfigurator.java;h=101d65943562fca5c2b8fdce77d729d6b2582a85;hb=baf56cc3d324ffa8715509e559bbe049739f32f3;hp=4b084873973da571a96caa36980c2859254a08eb;hpb=5f4cb1941d49eb2085964e66fb9125d81a3ad29e;p=mir.git diff --git a/source/mir/xml/XmlConfigurator.java b/source/mir/xml/XmlConfigurator.java index 4b084873..101d6594 100755 --- a/source/mir/xml/XmlConfigurator.java +++ b/source/mir/xml/XmlConfigurator.java @@ -23,6 +23,9 @@ import mir.misc.Location; * classes as well as the inclusion of a method to * add parameters (nested tags) that are required. * (the addRequired method) in the config file. + * that part is from tomcat. + * + * much code is stolen from ant ProjectHelper.java. * * @author -mh * @version 2001.10.21 @@ -45,6 +48,15 @@ public class XmlConfigurator { boolean matched[] = new boolean[256]; int matchedCount=0; + XmlMatch mustComeFirstMatch[]=new XmlMatch[256]; //maximum amount of rules + int comeFirstMatchCount=0; + + Property comesFirstArr[]=new Property[128]; + int comesFirstCount=0; + + Property propertyArr[]=new Property[128]; + int propertyCount=0; + private static XmlConfigurator instance = new XmlConfigurator(); public static XmlConfigurator getInstance() { return instance; } @@ -97,7 +109,18 @@ public class XmlConfigurator { throw new ConfigException("Error parsing config file, missing required element: "+requiredXmlMatch[i].toString()); } } - } + try { + for(int i=0; i 1 ) ex1.printStackTrace(); - } catch (IllegalAccessException iae) { - throw new Exception("IllegalAccessException for " + classN.getName() + " " + name + "=" + value +")" ); - //if( ctx.getDebug() > 1 ) iae.printStackTrace(); - } catch (InvocationTargetException ie) { - throw new Exception("InvocationTargetException for " + classN.getName() + " " + name + "=" + value +")" ); - //if( ctx.getDebug() > 1 ) ie.printStackTrace(); + try { + Method methods[]=classN.getMethods(); + Method setPropertyMethod=null; + + // First, the ideal case - a setFoo( String ) method + for( int i=0; i< methods.length; i++ ) { + Class paramT[]=methods[i].getParameterTypes(); + if( setter.equals( methods[i].getName() ) && + paramT.length == 1 && + "java.lang.String".equals( paramT[0].getName())) { + + methods[i].invoke( null, new Object[] { value } ); + return; + } + } //end for + + // Try a setFoo ( int ), (float) or ( boolean ) + for( int i=0; i< methods.length; i++ ) { + boolean ok=true; + if( setter.equals( methods[i].getName() ) && + methods[i].getParameterTypes().length == 1) { + + // match - find the type and invoke it + Class paramType=methods[i].getParameterTypes()[0]; + Object params[]=new Object[1]; + if ("java.lang.Integer".equals( paramType.getName()) || + "int".equals( paramType.getName())) { + try { + params[0]=new Integer(value); + } catch( NumberFormatException ex ) {ok=false;} + } else if ("java.lang.Float".equals( paramType.getName()) || + "float".equals( paramType.getName())) { + try { + params[0]=new Float(value); + } catch( NumberFormatException ex ) {ok=false;} + } else if ("java.lang.Boolean".equals( paramType.getName()) || + "boolean".equals( paramType.getName())) { + params[0]=new Boolean(value); + } else { + throw new Exception("Unknown type " + paramType.getName() + "for property \""+name+"\"with value \""+value+"\""); + } + + if( ok ) { + System.out.println("XXX: " + methods[i] + " " + classN + " " + params[0] ); + methods[i].invoke( null, params ); + return; + } //end if + } //end if setter + } //end for + + //if we got this far it means we were not successful in setting the + //property + throw new Exception("Count not find method \""+setter+"\" in Class \""+classN.getName()+"\" in order to set property \""+name+"\""); + + } catch( SecurityException ex1 ) { + throw new Exception("SecurityException for " + classN.getName() + " " + name + "=" + value +")" ); + //if( ctx.getDebug() > 1 ) ex1.printStackTrace(); + } catch (IllegalAccessException iae) { + throw new Exception("IllegalAccessException for " + classN.getName() + " " + name + "=" + value +")" ); + //if( ctx.getDebug() > 1 ) iae.printStackTrace(); + } catch (InvocationTargetException ie) { + throw new Exception("InvocationTargetException for " + classN.getName() + " " + name + "=" + value +")" ); + //if( ctx.getDebug() > 1 ) ie.printStackTrace(); + } } }