📄 genericvalidatingpackager.java
字号:
String size = atts.getValue("length"); String pad = atts.getValue("pad"); Class c = Class.forName(type); ISOFieldPackager f; f = (ISOFieldPackager) c.newInstance(); f.setDescription(name); f.setLength(Integer.parseInt(size)); f.setPad(new Boolean(pad).booleanValue()); // Insert this new isofield into the Hashtable // on the top of the stack using the fieldID as the key Hashtable ht = (Hashtable) fieldStack.peek(); ht.put(new Integer(fldID), f); } if ( localName.equals( "isofieldvalidator" ) ){ String type = atts.getValue( "class" ); String breakOnError = atts.getValue( "break-on-error" ); String minLen = atts.getValue( "minlen" ); String maxLen = atts.getValue( "maxlen" ); Class c = Class.forName( type ); ISOFieldValidator v = (ISOFieldValidator)c.newInstance(); if ( breakOnError != null ) v.setBreakOnError( Boolean.valueOf( breakOnError ).booleanValue() ); if ( minLen != null ) v.setMinLength( Integer.parseInt( minLen ) ); if ( maxLen != null ) v.setMaxLength( Integer.parseInt( maxLen ) ); v.setFieldId( Integer.parseInt(fldID) ); /** insert validator on stack waiting for properties **/ validatorStack.push( v ); validatorStack.push( new Properties() ); } if ( localName.equals( "property" ) ){ ((Properties)validatorStack.peek()).setProperty( atts.getValue( "name" ), atts.getValue( "value" ) ); } if ( localName.equals( "isovalidator" ) ){ String type = atts.getValue( "class" ); String breakOnError = atts.getValue( "break-on-error" ); Class c = Class.forName( type ); ISOBaseValidator v = (ISOBaseValidator)c.newInstance(); if ( breakOnError != null ) v.setBreakOnError( Boolean.valueOf( breakOnError ).booleanValue() ); /** insert validator on stack waiting for properties **/ validatorStack.push( v ); validatorStack.push( new Properties() ); } if ( localName.equals("isofieldpackager") ) { String id = atts.getValue("id"); String type = atts.getValue("class"); String name = atts.getValue("name"); String size = atts.getValue("length"); String pad = atts.getValue("pad");/*For a isofield packager node push the following fieldsonto the stack.1) an Integer indicating the field ID2) an instance of the specified ISOFieldPackager class3) an instance of the specified ISOBasePackager (msgPackager) class4) a Hashtable to collect the subfields*/ String packager = atts.getValue("packager"); fieldStack.push(new Integer(id)); ISOFieldPackager f; f = (ISOFieldPackager) Class.forName(type).newInstance(); f.setDescription(name); f.setLength(Integer.parseInt(size)); f.setPad(new Boolean(pad).booleanValue()); fieldStack.push(f); ISOBasePackager p; p = (ISOBasePackager) Class.forName(packager).newInstance(); if (p instanceof GenericValidatingPackager){ GenericValidatingPackager gp = (GenericValidatingPackager) p; gp.setGenericPackagerParams (atts); } fieldStack.push(p); String validator = atts.getValue( "validator" ); ISOBaseValidatingPackager v; v = (ISOBaseValidatingPackager) Class.forName(validator).newInstance(); validatorStack.push( v ); Hashtable hash = new Hashtable(); hash.put( new Integer( VALIDATOR_INDEX ), new Vector() ); validatorStack.push( hash ); fieldStack.push( new Hashtable() ); } } catch (Exception ex){ throw new SAXException(ex); } } /** * Convert the ISOFieldPackagers in the Hashtable * to an array of ISOFieldPackagers */ private ISOFieldPackager[] makeFieldPackArray(Hashtable tab){ int maxField = 0; // First find the largest field number in the Hashtable for (Enumeration e=tab.keys(); e.hasMoreElements(); ){ int n = ((Integer)e.nextElement()).intValue(); if (n > maxField) maxField = n; } // Create the array ISOFieldPackager fld[] = new ISOFieldPackager[maxField+1]; // Populate it for (Enumeration e=tab.keys(); e.hasMoreElements(); ){ Integer key = (Integer) e.nextElement(); fld[key.intValue()] = (ISOFieldPackager)tab.get(key); } return fld; } public void endElement(String namespaceURI, String localName, String qName) { if (localName.equals("isopackager")){ Hashtable tab = (Hashtable)fieldStack.pop(); setFieldPackager( makeFieldPackArray(tab) ); tab = (Hashtable)validatorStack.pop(); setFieldValidator ( makeFieldValidatorArray( tab )); setMsgValidator( makeMsgValidatorArray( tab ) ); } if ( localName.equals( "isofieldvalidator" ) ){ /** pop properties **/ Properties p = (Properties)validatorStack.pop(); SimpleConfiguration cfg = null; if ( !p.entrySet().isEmpty() ) cfg = new SimpleConfiguration( p ); /** pop validator and add it to the hash **/ ISOFieldValidator f = (ISOFieldValidator)validatorStack.pop(); if ( cfg != null ){ try { f.setConfiguration( cfg ); } catch (ConfigurationException ex) { ex.printStackTrace( ); } } ((Hashtable)validatorStack.peek()).put( new Integer(fldID), f ); } if ( localName.equals( "isovalidator" ) ){ /** pop properties **/ Properties p = (Properties)validatorStack.pop(); SimpleConfiguration cfg = null; if ( !p.entrySet().isEmpty() ) cfg = new SimpleConfiguration( p ); /** pop validator and add it to the hash **/ ISOBaseValidator v = (ISOBaseValidator)validatorStack.pop(); if ( cfg != null ){ try { v.setConfiguration( cfg ); } catch (ConfigurationException ex) { ex.printStackTrace( ); } } /** add validator to the has **/ ((Vector)((Hashtable)validatorStack.peek()).get( new Integer(VALIDATOR_INDEX) )).addElement( v ); } if (localName.equals("isofieldpackager")){ // Pop the 4 entries off the stack in the correct order Hashtable tab = (Hashtable)fieldStack.pop(); ISOBasePackager msgPackager = (ISOBasePackager) fieldStack.pop(); msgPackager.setFieldPackager (makeFieldArray(tab)); msgPackager.setLogger (getLogger(), "Generic Packager"); ISOFieldPackager fieldPackager = (ISOFieldPackager) fieldStack.pop(); Integer fno = (Integer) fieldStack.pop(); // Create the ISOMsgField packager with the retrieved msg and field Packagers ISOMsgFieldPackager mfp = new ISOMsgFieldPackager(fieldPackager, msgPackager); // Add the newly created ISOMsgField packager to the // lower level field stack tab=(Hashtable)fieldStack.peek(); tab.put(fno, mfp); Hashtable val = (Hashtable)validatorStack.pop(); ISOBaseValidatingPackager v = (ISOBaseValidatingPackager) validatorStack.pop(); v.setFieldValidator( makeFieldValidatorArray ( val ) ); v.setMsgValidator( makeMsgValidatorArray ( val ) ); ISOMsgFieldValidator mfv = new ISOMsgFieldValidator ( fieldPackager.getDescription(), v ); mfv.setFieldId( fno.intValue() ); v.setLogger (getLogger(), "Generic validating Packager"); tab=(Hashtable)validatorStack.peek(); tab.put(fno, mfv); } } ISOFieldValidator[] makeFieldValidatorArray ( Hashtable tab ){ // Create the array ISOFieldValidator fvlds[] = new ISOFieldValidator[tab.keySet().size()]; // Populate it int ind = 0; for (Enumeration e=tab.keys(); e.hasMoreElements(); ){ Integer key = (Integer) e.nextElement(); if ( key.intValue() != VALIDATOR_INDEX ){ fvlds[ind] = (ISOFieldValidator)tab.get(key); ind ++; } } return fvlds; } ISOBaseValidator[] makeMsgValidatorArray ( Hashtable tab ){ // First find the count Vector v = (Vector)tab.get( new Integer( VALIDATOR_INDEX ) ); if ( v==null || v.size() <= 0 ) return null; ISOBaseValidator[] r = new ISOBaseValidator[v.size()]; for (int i = 0; i < v.size(); i++) r[i] = (ISOBaseValidator)v.elementAt( i ); return r; } // ErrorHandler Methods public void error (SAXParseException ex) throws SAXException { throw ex; } public void fatalError (SAXParseException ex) throws SAXException { throw ex; } final int VALIDATOR_INDEX = -3 ; private Stack fieldStack, validatorStack; private String fldID; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -