Example usage for org.apache.ibatis.parsing XNode newXNode

List of usage examples for org.apache.ibatis.parsing XNode newXNode

Introduction

In this page you can find the example usage for org.apache.ibatis.parsing XNode newXNode.

Prototype

public XNode newXNode(Node node) 

Source Link

Usage

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);
    }
}