List of usage examples for org.apache.ibatis.parsing XNode newXNode
public XNode newXNode(Node node)
From source file:com.ibatis.sqlmap.engine.builder.DynamicSqlSource.java
License:Apache License
private void parseDynamicTags(XNode node, DynamicParent dynamic, boolean postParseRequired) { NodeList children = node.getNode().getChildNodes(); for (int i = 0; i < children.getLength(); i++) { XNode child = node.newXNode(children.item(i)); String nodeName = child.getNode().getNodeName(); if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) { String data = child.getStringBody(""); SqlText sqlText;// w w w. java2 s . c o m if (postParseRequired) { sqlText = new SqlText(); sqlText.setPostParseRequired(postParseRequired); sqlText.setText(data); } else { InlineParameterMapParser inlineParameterMapParser = new InlineParameterMapParser(configuration); sqlText = inlineParameterMapParser.parseInlineParameterMap(data); sqlText.setPostParseRequired(postParseRequired); } dynamic.addChild(sqlText); } else if ("include".equals(nodeName)) { String refid = child.getStringAttribute("refid"); XNode includeNode = configParser.getSqlFragment(refid); if (includeNode == null) { String nsrefid = mapParser.applyNamespace(refid); includeNode = configParser.getSqlFragment(nsrefid); if (includeNode == null) { throw new RuntimeException( "Could not find SQL statement to include with refid '" + refid + "'"); } } parseDynamicTags(includeNode, dynamic, postParseRequired); } else { SqlTagHandler handler = SqlTagHandlerFactory.getSqlTagHandler(nodeName); if (handler != null) { SqlTag tag = new SqlTag(); tag.setName(nodeName); tag.setHandler(handler); tag.setPrependAttr(child.getStringAttribute("prepend")); tag.setPropertyAttr(child.getStringAttribute("property")); tag.setRemoveFirstPrepend(child.getStringAttribute("removeFirstPrepend")); tag.setOpenAttr(child.getStringAttribute("open")); tag.setCloseAttr(child.getStringAttribute("close")); tag.setComparePropertyAttr(child.getStringAttribute("compareProperty")); tag.setCompareValueAttr(child.getStringAttribute("compareValue")); tag.setConjunctionAttr(child.getStringAttribute("conjunction")); if (handler instanceof IterateTagHandler && (tag.getPropertyAttr() == null || "".equals(tag.getPropertyAttr()))) { tag.setPropertyAttr("_collection"); } // an iterate ancestor requires a post parse if (dynamic instanceof SqlTag) { SqlTag parentSqlTag = (SqlTag) dynamic; if (parentSqlTag.isPostParseRequired() || tag.getHandler() instanceof IterateTagHandler) { tag.setPostParseRequired(true); } } else if (dynamic instanceof DynamicSql) { if (tag.getHandler() instanceof IterateTagHandler) { tag.setPostParseRequired(true); } } dynamic.addChild(tag); if (child.getNode().hasChildNodes()) { parseDynamicTags(child, tag, tag.isPostParseRequired()); } } } } }
From source file:com.ibatis.sqlmap.engine.builder.SimpleSqlSource.java
License:Apache License
private void parseNodes(XNode node) { StringBuilder sqlBuffer = new StringBuilder(sql); NodeList children = node.getNode().getChildNodes(); for (int i = 0; i < children.getLength(); i++) { XNode child = node.newXNode(children.item(i)); String nodeName = child.getNode().getNodeName(); if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) { String data = child.getStringBody(); InlineParameterMapParser inlineParameterMapParser = new InlineParameterMapParser(configuration); SqlText sqlText = inlineParameterMapParser.parseInlineParameterMap(data); sqlText.setPostParseRequired(false); parameterMappings.addAll(sqlText.getParameterMappings()); sqlBuffer.append(sqlText.getText()); } else if ("include".equals(nodeName)) { String refid = child.getStringAttribute("refid"); XNode includeNode = configParser.getSqlFragment(refid); if (includeNode == null) { String nsrefid = mapParser.applyNamespace(refid); includeNode = configParser.getSqlFragment(nsrefid); if (includeNode == null) { throw new RuntimeException( "Could not find SQL statement to include with refid '" + refid + "'"); }//from w ww. j ava2s. c o m } parseNodes(includeNode); } } sql = sqlBuffer.toString(); }
From source file:com.ibatis.sqlmap.engine.builder.SqlSourceFactory.java
License:Apache License
private boolean isDynamic(XNode node, boolean isDynamic) { NodeList children = node.getNode().getChildNodes(); for (int i = 0; i < children.getLength(); i++) { XNode child = node.newXNode(children.item(i)); String nodeName = child.getNode().getNodeName(); if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) { } else if ("include".equals(nodeName)) { String refid = child.getStringAttribute("refid"); XNode includeNode = configParser.getSqlFragment(refid); if (includeNode == null) { String nsrefid = mapParser.applyNamespace(refid); includeNode = configParser.getSqlFragment(nsrefid); if (includeNode == null) { throw new RuntimeException( "Could not find SQL statement to include with refid '" + refid + "'"); }// w w w .java2 s . c o m } isDynamic = isDynamic(includeNode, isDynamic); } else { SqlTagHandler handler = SqlTagHandlerFactory.getSqlTagHandler(nodeName); if (handler != null) { isDynamic = true; } } } return isDynamic; }
From source file:com.ibatis.sqlmap.engine.builder.XmlSqlStatementParser.java
License:Apache License
private void findAndParseSelectKey(String parentId, XNode context) { try {/*from ww w .j av a2 s .co m*/ boolean runStatementFirst = false; NodeList children = context.getNode().getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); if (child.getNodeType() == Node.CDATA_SECTION_NODE || child.getNodeType() == Node.TEXT_NODE) { String data = ((CharacterData) child).getData(); if (data.trim().length() > 0) { runStatementFirst = true; } } else if (child.getNodeType() == Node.ELEMENT_NODE && "selectKey".equals(child.getNodeName())) { buildSelectKeyStatement(parentId, context.newXNode(child), runStatementFirst); break; } } } catch (ClassNotFoundException e) { throw new RuntimeException("Error loading result class. Cause: " + e, e); } }