📄 hibernatemappingscanner.java
字号:
/* * File: HibernateMappingScanner.java * Generated from: hibernate-mapping-2.0.dtd * Date: 2003年7月29日 下午5:15 * */package com.tanghan.plugin.hibernate.editor.config;import java.util.HashMap;import java.util.List;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import com.tanghan.plugin.hibernate.editor.elements.ElementAttribute;import com.tanghan.plugin.hibernate.editor.elements.HibernateElementAttributes;import com.tanghan.plugin.hibernate.editor.elements.HibernateTreeObject;import com.tanghan.plugin.hibernate.editor.elements.HibernateTreeParent;/** * This is a scanner of DOM tree. * * Example: * <pre> * javax.xml.parsers.DocumentBuilderFactory builderFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); * javax.xml.parsers.DocumentBuilder builder = builderFactory.newDocumentBuilder(); * org.w3c.dom.Document document = builder.parse (new org.xml.sax.InputSource (???)); * <font color="blue">HibernateMappingScanner scanner = new HibernateMappingScanner (document);</font> * <font color="blue">scanner.visitDocument();</font> * </pre> * @author Jerry Tang * @version v0.1.0 * @copyright (C) 2003 Tanghan Studio * * @see org.w3c.dom.Document * @see org.w3c.dom.Element * @see org.w3c.dom.NamedNodeMap * */public class HibernateMappingScanner { private static HashMap hmAllAttributes = new HashMap(); private static HashMap hmAllChildElements = new HashMap(); // HibernateTreeParent treeRoot;// private static Logger log =// Log.getInstanse().getLogger(HibernateCFTreeSection.class); private List getAllAttributes(String key){ synchronized(hmAllAttributes){ if(hmAllAttributes.containsKey(key)){ return (List)hmAllAttributes.get(key); } return null; } } private synchronized void addAllAttributes(String key,List allAttributes){ synchronized(hmAllAttributes){ hmAllAttributes.put(key,allAttributes); } } private synchronized List getAllChildElements(String key){ synchronized(hmAllChildElements){ if(hmAllChildElements.containsKey(key)){ return (List)hmAllChildElements.get(key); } return null; } } private synchronized void addAllChildElements(String key,List allChildElement){ synchronized(hmAllChildElements){ hmAllChildElements.put(key,allChildElement); } } /** Create new HibernateMappingScanner with org.w3c.dom.Document. */ public HibernateMappingScanner() { } /**遍历当前元素,得到相应的信息 * @param elem 当前元素, 不能为空 * */ public void visitDocument(Node node, HibernateTreeParent treeRoot) { if(node==null) return; Element element = null; if(node instanceof Document){ element = ((Document)node).getDocumentElement(); }else if(node instanceof Element){ element = (Element)node; }else{ return; } if ((element != null)&& element.getTagName().equals("hibernate-mapping")) { visitElement_hibernate_mapping(element, treeRoot); } if ((element != null) && element.getTagName().equals("import")) { visitElement_import(element, treeRoot); } if ((element != null) && element.getTagName().equals("class")) { visitElement_class(element, treeRoot); } if ((element != null) && element.getTagName().equals("id")) { visitElement_id(element, treeRoot); } if ((element != null) && element.getTagName().equals("composite-id")) { visitElement_composite_id(element, treeRoot); } if ((element != null) && element.getTagName().equals("discriminator")) { visitElement_discriminator(element, treeRoot); } if ((element != null) && element.getTagName().equals("version")) { visitElement_version(element, treeRoot); } if ((element != null) && element.getTagName().equals("timestamp")) { visitElement_timestamp(element, treeRoot); } if ((element != null) && element.getTagName().equals("subclass")) { visitElement_subclass(element, treeRoot); } if ((element != null) && element.getTagName().equals("joined-subclass")) { visitElement_joined_subclass(element, treeRoot); } if ((element != null) && element.getTagName().equals("property")) { visitElement_property(element, treeRoot); } if ((element != null) && element.getTagName().equals("many-to-one")) { visitElement_many_to_one(element, treeRoot); } if ((element != null) && element.getTagName().equals("one-to-one")) { visitElement_one_to_one(element, treeRoot); } if ((element != null) && element.getTagName().equals("key-property")) { visitElement_key_property(element, treeRoot); } if ((element != null) && element.getTagName().equals("key-many-to-one")) { visitElement_key_many_to_one(element, treeRoot); } if ((element != null) && element.getTagName().equals("any")) { visitElement_any(element, treeRoot); } if ((element != null) && element.getTagName().equals("component")) { visitElement_component(element, treeRoot); } if ((element != null) && element.getTagName().equals("dynabean")) { visitElement_dynabean(element, treeRoot); } if ((element != null) && element.getTagName().equals("parent")) { visitElement_parent(element, treeRoot); } if ((element != null) && element.getTagName().equals("map")) { visitElement_map(element, treeRoot); } if ((element != null) && element.getTagName().equals("set")) { visitElement_set(element, treeRoot); } if ((element != null) && element.getTagName().equals("bag")) { visitElement_bag(element, treeRoot); } if ((element != null) && element.getTagName().equals("idbag")) { visitElement_idbag(element, treeRoot); } if ((element != null) && element.getTagName().equals("list")) { visitElement_list(element, treeRoot); } if ((element != null) && element.getTagName().equals("array")) { visitElement_array(element, treeRoot); } if ((element != null) && element.getTagName().equals("primitive-array")) { visitElement_primitive_array(element, treeRoot); } if ((element != null) && element.getTagName().equals("element")) { visitElement_element(element, treeRoot); } if ((element != null) && element.getTagName().equals("one-to-many")) { visitElement_one_to_many(element, treeRoot); } if ((element != null) && element.getTagName().equals("many-to-many")) { visitElement_many_to_many(element, treeRoot); } if ((element != null) && element.getTagName().equals("composite-element")) { visitElement_composite_element(element, treeRoot); } if ((element != null) && element.getTagName().equals("nested-composite-element")) { visitElement_nested_composite_element(element, treeRoot); } if ((element != null) && element.getTagName().equals("key")) { visitElement_key(element, treeRoot); } if ((element != null) && element.getTagName().equals("index")) { visitElement_index(element, treeRoot); } if ((element != null) && element.getTagName().equals("index-many-to-many")) { visitElement_index_many_to_many(element, treeRoot); } if ((element != null) && element.getTagName().equals("composite-index")) { visitElement_composite_index(element, treeRoot); } if ((element != null) && element.getTagName().equals("many-to-any")) { visitElement_many_to_any(element, treeRoot); } if ((element != null) && element.getTagName().equals("index-many-to-any")) { visitElement_index_many_to_any(element, treeRoot); } if ((element != null) && element.getTagName().equals("collection-id")) { visitElement_collection_id(element, treeRoot); } if ((element != null) && element.getTagName().equals("generator")) { visitElement_generator(element, treeRoot); } if ((element != null) && element.getTagName().equals("param")) { visitElement_param(element, treeRoot); } if ((element != null) && element.getTagName().equals("column")) { visitElement_column(element, treeRoot); } if ((element != null) && element.getTagName().equals("jcs-cache")) { visitElement_jcs_cache(element, treeRoot); } if ((element != null) && element.getTagName().equals("query")) { visitElement_query(element, treeRoot); } if ((element != null) && element.getTagName().equals("meta")) { visitElement_meta(element, treeRoot); } } /** Scan through org.w3c.dom.Element named hibernate-mapping. */ void visitElement_hibernate_mapping( org.w3c.dom.Element element, HibernateTreeParent root) { // <hibernate-mapping> HibernateElementAttributes attr = new HibernateElementAttributes(element); if(getAllAttributes("hibernate-mapping")!=null){ attr.setAllAttributes(getAllAttributes("hibernate-mapping")); }else{ //增加改element所有可能存在的属性 ElementAttribute elemAtrr = new ElementAttribute("schema",ElementAttribute.STRING); attr.addAttribute(elemAtrr); elemAtrr = new ElementAttribute("default-cascade",ElementAttribute.ENUM); elemAtrr.setEnumData(new String[]{"none","save-update","all" }); elemAtrr.setDefaultData("none"); attr.addAttribute(elemAtrr); elemAtrr = new ElementAttribute("auto-import",ElementAttribute.BOOLEAN); attr.addAttribute(elemAtrr); addAllAttributes("hibernate-mapping",attr.getAllAttributes()); } if(this.getAllChildElements("hibernate-mapping")!=null){ attr.setAllChildElement(getAllChildElements("hibernate-mapping")); }else{ attr.addChildElement("import"); attr.addChildElement("class"); attr.addChildElement("query"); attr.addChildElement("meta"); addAllChildElements("hibernate-mapping",attr.getAllChildElement()); } dealRootObject(attr,root,"hibernate-mapping",HibernateTreeObject.HIBERNATE_MAPPING_ROOT,null); org.w3c.dom.NodeList nodes = element.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { org.w3c.dom.Node node = nodes.item(i); switch (node.getNodeType()) { case org.w3c.dom.Node.ELEMENT_NODE : org.w3c.dom.Element nodeElement = (org.w3c.dom.Element) node; if (nodeElement.getTagName().equals("import")) { visitElement_import(nodeElement, root); } if (nodeElement.getTagName().equals("class")) { visitElement_class(nodeElement, root); } if (nodeElement.getTagName().equals("query")) { visitElement_query(nodeElement, root); } if (nodeElement.getTagName().equals("meta")) { visitElement_meta(nodeElement, root); } break; } } } /** 根据要求处理得到的对象 * @param attribute 属性名称 可以为空 * */ void dealRootObject(HibernateElementAttributes heAttr,HibernateTreeParent root,String prefix,int type,String attribute) { root.setObject(heAttr); // element.getValue(); org.w3c.dom.NamedNodeMap attrs = heAttr.getElement().getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { org.w3c.dom.Attr attr = (org.w3c.dom.Attr)attrs.item(i); for(int j=0;j<heAttr.getAllAttributes().size();j++){ ElementAttribute elemAttr = (ElementAttribute)heAttr.getAllAttributes().get(j); if (attr.getName().equals(elemAttr.getAttributeName())) { heAttr.addCurrentAttributes(elemAttr.getAttributeName(),attr.getValue()); } } } root.setDefalutAttribute(attribute); /* if(attribute!=null){ String value = heAttr.getElement().getAttribute(attribute); if (value != null) { root.setName(prefix+":" + value); } }*/ } /** 根据要求处理得到的对象 * @param attribute 属性名称 可以为空 * */ HibernateTreeParent dealObject(HibernateElementAttributes heAttr,HibernateTreeParent root,String prefix,int type,String attribute) { HibernateTreeParent obj = new HibernateTreeParent(prefix,heAttr,type); root.addChild(obj); // element.getValue(); org.w3c.dom.NamedNodeMap attrs = heAttr.getElement().getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { org.w3c.dom.Attr attr = (org.w3c.dom.Attr)attrs.item(i); for(int j=0;j<heAttr.getAllAttributes().size();j++){ ElementAttribute elemAttr = (ElementAttribute)heAttr.getAllAttributes().get(j); if (attr.getName().equals(elemAttr.getAttributeName())) { heAttr.addCurrentAttributes(elemAttr.getAttributeName(),attr.getValue()); } } } obj.setDefalutAttribute(attribute); /* if(attribute!=null){ String value = heAttr.getElement().getAttribute(attribute); if (value != null) { obj.setName(prefix+":" + value); } }*/ return obj ; } /** Scan through org.w3c.dom.Element named import. */ void visitElement_import(org.w3c.dom.Element element,HibernateTreeParent root) { // <import> HibernateElementAttributes attr = new HibernateElementAttributes(element); if(getAllAttributes("import")!=null){ attr.setAllAttributes(getAllAttributes("import")); }else{ //增加改element所有可能存在的属性 ElementAttribute elemAtrr = new ElementAttribute("class",ElementAttribute.STRING); elemAtrr.setRequired(true); attr.addAttribute(elemAtrr); elemAtrr = new ElementAttribute("rename",ElementAttribute.STRING); elemAtrr.setRequired(true); attr.addAttribute(elemAtrr); addAllAttributes("import",attr.getAllAttributes()); } HibernateTreeParent importObj =dealObject(attr,root,"import",HibernateTreeObject.HIBERNATE_IMPORT,"class"); } /** Scan through org.w3c.dom.Element named class. */ void visitElement_class( org.w3c.dom.Element element,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -