Package org.jtester.module.spring.ibatis

Source Code of org.jtester.module.spring.ibatis.SqlMapConfigParserEx$JTesterIbatisNodelet

package org.jtester.module.spring.ibatis;

import java.io.InputStream;
import java.util.Properties;

import org.jtester.bytecode.reflector.FieldAccessor;
import org.jtester.module.core.helper.ConfigurationHelper;
import org.jtester.utility.JTesterLogger;
import org.w3c.dom.Node;

import com.ibatis.common.resources.Resources;
import com.ibatis.common.xml.Nodelet;
import com.ibatis.common.xml.NodeletUtils;
import com.ibatis.sqlmap.client.SqlMapException;
import com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser;
import com.ibatis.sqlmap.engine.builder.xml.SqlMapParser;
import com.ibatis.sqlmap.engine.builder.xml.XmlParserState;

public class SqlMapConfigParserEx extends SqlMapConfigParser {

  @SuppressWarnings("rawtypes")
  private static final FieldAccessor stateField = new FieldAccessor(
      com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.class, "state");

  private XmlParserState state = new XmlParserState();

  @Override
  protected void addSqlMapNodelets() {
    this.state = (XmlParserState) stateField.get(this);
    parser.addNodelet("/sqlMapConfig/sqlMap", new JTesterIbatisNodelet(this.state));
  }

  private static class JTesterIbatisNodelet implements Nodelet {
    private XmlParserState state = new XmlParserState();

    protected JTesterIbatisNodelet(XmlParserState state) {
      this.state = state;
    }

    public void process(Node node) {
      String resource = null;
      try {
        state.getConfig().getErrorContext().setActivity("loading the SQL Map resource");

        Properties attributes = NodeletUtils.parseAttributes(node, state.getGlobalProps());

        resource = attributes.getProperty("resource");
        String url = attributes.getProperty("wikiUrl");

        InputStream inputStream = null;
        if (resource != null) {
          state.getConfig().getErrorContext().setResource(resource);
          inputStream = Resources.getResourceAsStream(resource);
        } else if (url != null) {
          state.getConfig().getErrorContext().setResource(url);
          inputStream = Resources.getUrlAsStream(url);
        } else {
          throw new SqlMapException("The <sqlMap> element requires either a resource or a url attribute.");
        }
        new SqlMapParser(state).parse(inputStream);
      } catch (Throwable e) {
        String error = String.format("loading sql map resource[%s] error:%s.", resource, e.getMessage());
        boolean throwException = ConfigurationHelper
            .getBoolean(ConfigurationHelper.IBATIS_SQLMAP_THROW_EXCEPTION);
        if (throwException) {
          throw new RuntimeException(error, e);
        } else {
          JTesterLogger.warn(error);
        }
      }
    }
  }
}
TOP

Related Classes of org.jtester.module.spring.ibatis.SqlMapConfigParserEx$JTesterIbatisNodelet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.