⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmloperate.java

📁 OBPM是一个开源
💻 JAVA
字号:
//Source file: D:\\BILLFLOW\\src\\billflow\\XMLOperate.java

//Source file: E:\\billflow\\src\\billflow\\XMLOperate.java

package cn.myapps.core.workflow.utility;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Stack;

import org.xml.sax.AttributeList;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

import cn.myapps.core.workflow.element.Element;
import cn.myapps.core.workflow.element.FlowDiagram;

public class XMLOperate implements org.xml.sax.DocumentHandler {
	private Stack _stk = null;

	private FlowDiagram _fdgm = null;

	private String elementname = "";

	private String elementvalue = "";

	// private Object object = null;
	/**
	 * @roseuid 3E0428DC0120
	 */
	public XMLOperate() {
		_fdgm = new FlowDiagram();
		_stk = new Stack();
	}

	/**
	 * In this Section , Do XML Parser. Parser XML Stream to Vector of <b>Node.
	 * 
	 * @param target
	 * @param data
	 * @throws org.xml.sax.SAXException
	 * @roseuid 3E0A6E190329
	 */
	public void processingInstruction(String target, String data)
			throws SAXException {

	}

	/**
	 * @param ch[]
	 * @param start
	 * @param length
	 * @throws org.xml.sax.SAXException
	 * @roseuid 3E0A6E190347
	 */
	public void ignorableWhitespace(final char ch[], final int start,
			final int length) throws SAXException {

	}

	/**
	 * @param locator
	 * @roseuid 3E0A6E19036F
	 */
	public void setDocumentLocator(final Locator locator) {

	}

	/**
	 * @roseuid 3E0A6E190383
	 */
	public void startDocument() {

	}

	/**
	 * @roseuid 3E0A6E19038D
	 */
	public void endDocument() {
		// _stk.clear();
	}

	/**
	 * This Method executed when a new XML Lable appear. It new a Node and Push
	 * it to Stack.
	 * 
	 * @param name
	 * @param attributes
	 * @roseuid 3E0A6E190397
	 */

	public void setFields(Class cls, Object obj, AttributeList attributes)
			throws Exception {
		// Set object Field value.
		for (int i = 0; i < attributes.getLength(); i++) {
			String fieldname = attributes.getName(i);
			String fieldval = attributes.getValue(i);

			// CommonUtil.printDebugInfo("fieldname->"+fieldname+"
			// fieldval->"+fieldval);

			Field field = null;
			try {
				// for(int j=0; j<cls.getFields().length; j++)
				// CommonUtil.printDebugInfo("Field"+j+"->"+cls.getFields()[j].getName());
				field = cls.getField(fieldname);
				if (Modifier.isFinal(field.getModifiers())) {
					continue;
				}
			} catch (Exception e) {
				continue;
			}
			Class type = field.getType();

			if (field != null) {
				if (type.equals(Long.TYPE)) { // Long
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setLong(obj, Long.valueOf(fieldval).longValue());
					continue;
				} else if (type.equals(Integer.TYPE)) { // Int
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setInt(obj, Integer.valueOf(fieldval).intValue());
					continue;
				} else if (type.equals(Short.TYPE)) { // Short
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setShort(obj, Short.valueOf(fieldval).shortValue());
					continue;
				} else if (type.equals(Double.TYPE)) { // Double
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field
							.setDouble(obj, Double.valueOf(fieldval)
									.doubleValue());
					continue;
				} else if (type.equals(Class.forName("java.lang.String"))) { // String
					// CommonUtil.printDebugInfo("fieldname->"+fieldname+"
					// fieldval->"+fieldval);
					if (obj instanceof FlowDiagram) {
						CommonUtil.printDebugInfo("fieldname->" + fieldname
								+ "   fieldval->" + fieldval);
					}
					fieldval = fieldval != null ? fieldval : "";
					field.set(obj, fieldval);
					continue;
				}

				else if (type.equals(Float.TYPE)) { // Float
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setFloat(obj, Float.valueOf(fieldval).floatValue());
					continue;
				}

				else if (type.equals(Boolean.TYPE)) { // Boolean
					fieldval = CommonUtil.isBooleanString(fieldval) ? fieldval
							: "false";
					field.setBoolean(obj, (new Boolean(fieldval))
							.booleanValue());
					continue;
				}

				else if (type.equals(Class.forName("java.sql.Date"))) { // Date
					java.sql.Date dt = CommonUtil.isValidDate(fieldval) ? CommonUtil
							.strToDate(fieldval)
							: new java.sql.Date(System.currentTimeMillis());
					field.set(obj, dt);
					continue;
				}

				else if (type.equals(Class.forName("java.util.Date"))) { // java.util.Date
					java.util.Date dt = CommonUtil.isValidDate(fieldval) ? CommonUtil
							.strToDate(fieldval)
							: new java.sql.Date(System.currentTimeMillis());
					field.set(obj, dt);
					continue;
				}
			}

		}
	}

	public void startElement(String name, AttributeList attributes) {
		try {
			if (name != null
					&& name.trim().toLowerCase().equals(
							this._fdgm.getClass().getName().toLowerCase())) {
				_stk.push(_fdgm);
				return;
			} else if (name.startsWith("cn.myapps.core.workflow.")) {
				Class cls = Class.forName(name);

				Class[] sign = new Class[1];

				sign[0] = this._fdgm.getClass();
				Constructor cnstr = cls.getConstructor(sign);

				Object[] params = new Object[1];
				params[0] = this._fdgm;

				Object obj = cnstr.newInstance(params);

				if (_stk.peek() != null) {
					if (_stk.peek() instanceof FlowDiagram) {
						((FlowDiagram) _stk.peek())
								.appendElement((Element) obj);
						_stk.push(obj);
					} else if (_stk.peek() instanceof Element) {
						((Element) _stk.peek()).appendElement((Element) obj);
						_stk.push(obj);
					}
				}
			}

			this.elementname = name;
			this.elementvalue = "";// 清空

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * @param ch[]
	 * @param start
	 * @param length
	 * @roseuid 3E0A6E1903B5
	 */
	public void characters(char ch[], int start, int length) {
		String fieldval = new String(ch, start, length);
		elementvalue += fieldval;
	}


	/**
	 * @param fieldval
	 * @param node
	 */
	private void setObjectFieldValue(String fieldname, String fieldval,
			Object node) {
		// String fieldval = new String(ch, start, length);
		try {
			Field field = node.getClass().getField(fieldname);
			Class type = field.getType();

			if (field != null) {
				if (type.equals(Long.TYPE)) { // Long
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setLong(node, Long.valueOf(fieldval).longValue());
				} else if (type.equals(Integer.TYPE)) { // Int
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setInt(node, Integer.valueOf(fieldval).intValue());
				} else if (type.equals(Short.TYPE)) { // Short
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setShort(node, Short.valueOf(fieldval).shortValue());
				} else if (type.equals(Double.TYPE)) { // Double
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setDouble(node, Double.valueOf(fieldval)
							.doubleValue());
				} else if (type.equals(Class.forName("java.lang.String"))) { // String
					fieldval = fieldval != null ? fieldval : "";
					field.set(node, fieldval);
				} else if (type.equals(Float.TYPE)) { // Float
					fieldval = CommonUtil.isNumberString(fieldval) ? fieldval
							: "0";
					field.setFloat(node, Float.valueOf(fieldval).floatValue());
				} else if (type.equals(Boolean.TYPE)) { // Boolean
					fieldval = CommonUtil.isBooleanString(fieldval) ? fieldval
							: "false";
					field.setBoolean(node, (new Boolean(fieldval))
							.booleanValue());
				} else if (type.equals(Class.forName("java.sql.Date"))) { // Date
					java.sql.Date dt = CommonUtil.isValidDate(fieldval) ? CommonUtil
							.strToDate(fieldval)
							: new java.sql.Date(System.currentTimeMillis());
					field.set(node, dt);
				}

				else if (type.equals(Class.forName("java.util.Date"))) { // java.util.Date
					java.util.Date dt = CommonUtil.isValidDate(fieldval) ? CommonUtil
							.strToDate(fieldval)
							: new java.sql.Date(System.currentTimeMillis());
					field.set(node, dt);
					// continue;
				}
			}
		} catch (Exception e) {

		}
	}

	/**
	 * @param name
	 * @roseuid 3E0A6E1903DD
	 */
	public void endElement(String name) {
		// setFieldValue(elementvalue);
		if (_stk != null && !_stk.isEmpty()) {
			if (name.startsWith("cn.myapps.core.workflow.")) {
				_stk.pop();
			}
			else {
				Object obj = _stk.peek();
				setObjectFieldValue(name, elementvalue, obj);
			}
		}

	}

	/**
	 * @param e
	 * @throws org.xml.sax.SAXException
	 * @roseuid 3E0A6E1A0009
	 */
	public void fatalError(SAXParseException e) throws SAXException {
		System.out.println("Error: " + e);
		throw e;
	}

	/**
	 * @return cn.myapps.core.workflow.FlowDiagram
	 * @roseuid 3E0A6E1A001D
	 */
	public FlowDiagram getResult() {
		return _fdgm;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -