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

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

Introduction

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

Prototype

public String getStringBody(String def) 

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;//from  ww  w.  j  ava  2 s .co  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());
                }
            }
        }
    }
}