darks.orm.core.config.sqlmap.SqlMapConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for darks.orm.core.config.sqlmap.SqlMapConfiguration.java

Source

/**
 * 
 * Copyright 2014 The Darks ORM Project (Liu lihua)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package darks.orm.core.config.sqlmap;

import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;

import darks.orm.core.data.tags.AbstractTag;
import darks.orm.core.data.xml.DDLData;
import darks.orm.core.data.xml.DMLData;
import darks.orm.core.data.xml.DMLData.DMLType;
import darks.orm.core.data.xml.DMLQueryData;
import darks.orm.core.data.xml.DMLUpdateData;
import darks.orm.exceptions.ConfigException;
import darks.orm.log.Logger;
import darks.orm.log.LoggerFactory;
import darks.orm.util.XmlHelper;

@SuppressWarnings("unchecked")
public class SqlMapConfiguration {

    private static final Logger log = LoggerFactory.getLogger(SqlMapConfiguration.class);

    private static final String DTD_PUBLIC_ID = "-//darks//DTD sqlmap 3.0//EN";

    private static final String CONFIG_DTD_PATH = "/darks/orm/core/config/sqlmap.dtd";

    private ConcurrentMap<String, DDLData> ddlMap = new ConcurrentHashMap<String, DDLData>();

    private ConcurrentMap<String, DMLData> dmlMap = new ConcurrentHashMap<String, DMLData>();

    private ConcurrentMap<String, AbstractTag> tagsMap = new ConcurrentHashMap<String, AbstractTag>();

    private List<String> sqlMapCfgs;

    private DDLConfigReader ddlReader;

    private DMLConfigReader dmlReader;

    private String catalog;

    private String schema;

    public SqlMapConfiguration() {
        ddlReader = new DDLConfigReader(this);
        dmlReader = new DMLConfigReader(this);
    }

    public SqlMapConfiguration(List<String> sqlMapCfgs) {
        this.sqlMapCfgs = sqlMapCfgs;
        ddlReader = new DDLConfigReader(this);
        dmlReader = new DMLConfigReader(this);
    }

    public void addDDLData(String id, DDLData ddlData) {
        ddlMap.put(id, ddlData);
    }

    public void addDMLData(String id, DMLData dmlData) {
        dmlMap.put(id, dmlData);
    }

    public void addTag(String id, AbstractTag tag) {
        tagsMap.put(id, tag);
    }

    public AbstractTag getTag(String id) {
        return tagsMap.get(id);
    }

    /**
     * Get {@linkplain darks.orm.core.data.xml.DMLData DMLData} by id
     * @param id DML data id
     */
    public DMLData getDMLData(String id) {
        if (dmlMap.containsKey(id)) {
            return dmlMap.get(id);
        }
        return null;
    }

    /**
     * Load sqlmap config files by path list
     * 
     * @param sqlMapCfgs Path list
     * @throws Exception
     */
    public void loadSqlMap(List<String> sqlMapCfgs) throws DocumentException {
        this.sqlMapCfgs = sqlMapCfgs;
        for (String sqlMapCfg : sqlMapCfgs) {
            loadSqlMap(sqlMapCfg);
        }
    }

    /**
     * Load sqlmap config file by path
     * 
     * @param sqlMapCfg sqlmap config file path
     * @throws DocumentException
     */
    public void loadSqlMap(String sqlMapCfg) throws DocumentException {
        if (!sqlMapCfg.startsWith("/"))
            sqlMapCfg = "/" + sqlMapCfg;
        InputStream cfgIns = getClass().getResourceAsStream(sqlMapCfg);
        if (cfgIns == null) {
            log.error("[SQLMAP]'" + sqlMapCfg + "' configuration file does not exists.");
            return;
        } else {
            log.debug("[SQLMAP]Load '" + sqlMapCfg + "' sqlmap configuration file");
        }
        Document doc = XmlHelper.getXMLDocument(DTD_PUBLIC_ID, CONFIG_DTD_PATH, cfgIns);
        if (doc == null) {
            throw new ConfigException("Fail to parse sqlmap config file. Cause invalid config file.");
        }
        Element root = doc.getRootElement();
        for (Iterator<Element> it = root.elementIterator(); it.hasNext();) {
            try {
                Element el = it.next();
                String name = el.getName().trim();
                if ("DDL".equalsIgnoreCase(name)) {
                    ddlReader.reader(el);
                } else if ("DML".equalsIgnoreCase(name)) {
                    dmlReader.reader(el);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * debug SQLMAP config info
     */
    public void outputSqlMapCfgInfo() {
        // DDL
        System.out.println("---<DDL>------------------------------");
        for (Entry<String, DDLData> entry : ddlMap.entrySet()) {
            String key = entry.getKey();
            DDLData ddlData = entry.getValue();
            System.out.println("Key:" + key + " Id:" + ddlData.getId() + " type:" + ddlData.getType() + " sql:"
                    + ddlData.getSql());
        }
        // DML
        System.out.println("---<DML>------------------------------");
        for (Entry<String, DMLData> entry : dmlMap.entrySet()) {
            String key = entry.getKey();
            DMLData dmlData = entry.getValue();
            System.out.println("Key:" + key + " Id:" + dmlData.getId() + " type:" + dmlData.getType() + " ");
            if (dmlData.getType() == DMLType.Query) {
                DMLQueryData qd = dmlData.getQueryData();
                System.out.println("alias:" + qd.getAlias() + " attr:" + qd.getAttribute() + " rettype:"
                        + qd.getResultType() + " qdType" + qd.getQueryDataType() + " qType" + qd.getQueryType());
                Map<String, String> map = qd.getSqls();
                for (Entry<String, String> ent : map.entrySet()) {
                    System.out.println("val:" + ent.getKey() + " sql:" + ent.getValue());
                }
            } else if (dmlData.getType() == DMLType.Update) {
                DMLUpdateData ud = dmlData.getUpdateData();
                System.out.println("sql:" + ud.getSql());
            }
            System.out.println("----------");
        }
    }

    public ConcurrentMap<String, DDLData> getDdlMap() {
        return ddlMap;
    }

    public void setDdlMap(ConcurrentMap<String, DDLData> ddlMap) {
        this.ddlMap = ddlMap;
    }

    public ConcurrentMap<String, DMLData> getDmlMap() {
        return dmlMap;
    }

    public void setDmlMap(ConcurrentMap<String, DMLData> dmlMap) {
        this.dmlMap = dmlMap;
    }

    public DDLConfigReader getDdlReader() {
        return ddlReader;
    }

    public void setDdlReader(DDLConfigReader ddlReader) {
        this.ddlReader = ddlReader;
    }

    public DMLConfigReader getDmlReader() {
        return dmlReader;
    }

    public void setDmlReader(DMLConfigReader dmlReader) {
        this.dmlReader = dmlReader;
    }

    public List<String> getSqlMapCfgs() {
        return sqlMapCfgs;
    }

    public void setSqlMapCfgs(List<String> sqlMapCfgs) {
        this.sqlMapCfgs = sqlMapCfgs;
    }

    public String getCatalog() {
        return catalog;
    }

    public void setCatalog(String catalog) {
        this.catalog = catalog;
    }

    public String getSchema() {
        return schema;
    }

    public void setSchema(String schema) {
        this.schema = schema;
    }

}