// import fs from "fs"; // import {match} from "assert"; // import convert, {ElementCompact} from "xml-js"; // import {logger} from "../logger/Logger"; // import Singleton from "../patterns/Singleton"; // import Bean from "../decorators/Bean"; // // type BIND_TYPE = "TEXT"|"VALUE"|"FUNCTION"|"UTIL"; // // export interface QUERY_MAP{ // [key:string]:string // } // // @Bean() // export default class QueryMapper extends Singleton{ // public queryMap:QUERY_MAP = {}; // // public loadSync(path:string){ // const rootPath:string = path; // const that = this; // const filelist:string[] = fs.readdirSync(rootPath); // if (filelist) { // filelist.forEach(fileName=>{ // const filePath:string = rootPath+"/"+fileName; // if(fileName.lastIndexOf(".xml") > -1){ // const content:string = fs.readFileSync(filePath, "utf-8"); // const xmlToJson:ElementCompact = convert.xml2js(content, {compact: true}); // if(xmlToJson.mapper._attributes != null){ // const namespace:string | number | undefined = xmlToJson.mapper._attributes.namespace; // if(Array.isArray(xmlToJson.mapper.query)){ // for (let i = 0; i < xmlToJson.mapper.query.length; i++) { // const row = xmlToJson.mapper.query[i]; // that.queryMap[namespace+"."+row._attributes.id] = row._text; // } // }else if(!Array.isArray(xmlToJson.mapper.query)){ // that.queryMap[namespace+"."+xmlToJson.mapper.query._attributes.id] = xmlToJson.mapper.query._text; // } // } // } // logger.info("load query:", filelist); // }) // } // }; // // public load(path:string){ // const rootPath:string = path; // const that = this; // fs.readdir(rootPath, function(error, filelist){ // filelist.forEach(fileName => { // const filePath:string = rootPath+"/"+fileName; // if(fileName.lastIndexOf(".xml") > -1){ // fs.readFile(filePath, "utf-8", function(err, content){ // const xmlToJson:ElementCompact = convert.xml2js(content, {compact: true}); // if(xmlToJson.mapper._attributes != null){ // const namespace:string | number | undefined = xmlToJson.mapper._attributes.namespace; // if(Array.isArray(xmlToJson.mapper.query)){ // for (let i = 0; i < xmlToJson.mapper.query.length; i++) { // const row = xmlToJson.mapper.query[i]; // that.queryMap[namespace+"."+row._attributes.id] = row._text; // } // }else if(!Array.isArray(xmlToJson.mapper.query)){ // that.queryMap[namespace+"."+xmlToJson.mapper.query._attributes.id] = xmlToJson.mapper.query._text; // } // } // }); // } // }); // logger.info("load query:", filelist); // }) // }; // // public getQuery(id:string):string{ // if(this.queryMap[id] != null){ // return this.queryMap[id]; // }else{ // logger.error(id+" query 가 존재하지 않습니다."); // } // return ""; // }; // // public replaceValue(type:BIND_TYPE, query:string, param?:any, dynamicCondition?:Function){ // let newQuery = ""; // if(type == "VALUE"){ // let matched = query.match(/#{.*}/gi); // if(matched != null && matched.length > 0){ // const regexp:RegExp = RegExp("#{.*}","g"); // let lastIndex:number = 0; // let match:RegExpExecArray|null; // while ((match = regexp.exec(query)) !== null) { // const key = match[0].replace(/#{/gi, "").replace(/}/gi, ""); // let val:string = ""; // if (param) { // val = param[key]; // if(val == null) { // val = ""; // } // } // newQuery += query.substring(lastIndex, match.index); // newQuery += "'"+val+"'"; // lastIndex = regexp.lastIndex; // // } // if(lastIndex > 0 && lastIndex < query.length){ // newQuery += query.substring(lastIndex, query.length); // } // }else{ // newQuery = query; // } // }else if(type == "TEXT"){ // //${param_key} 부분의 컬럼 mapping // let matched = query.match(/${.*}/gi); // if(matched != null && matched.length > 0){ // const regexp:RegExp = RegExp("${.*}","g"); // let lastIndex:number = 0; // let match:RegExpExecArray|null; // while ((match = regexp.exec(query)) !== null) { // const key = match[0].replace(/${/gi, "").replace(/}/gi, ""); // let val:string = ""; // if (param) { // val = param[key]; // if(val == null) { // val = ""; // } // } // newQuery += query.substring(lastIndex, match.index); // newQuery += val; // lastIndex = regexp.lastIndex; // } // if(lastIndex > 0 && lastIndex < query.length){ // newQuery += query.substring(lastIndex, query.length); // } // }else{ // newQuery = query; // } // }else if (type == "FUNCTION") { // let matched = query.match(/@\[(.|\n|\r|\t)*?\]@/gi); // if(matched != null && matched.length > 0){ // newQuery = query.substring(0, query.indexOf("@")); // const regexp:RegExp = RegExp(/@\[(.|\n|\r|\t)*?\]@/,"g"); // let i:number = 0; // let lastIndex:number = 0; // let match:RegExpExecArray|null; // while ((match = regexp.exec(query)) !== null) { // const dynamicTarget:string = query.substring(match.index+2, regexp.lastIndex-2); // if(dynamicCondition != null){ // const dynamicTargetResult:string = dynamicCondition(i, dynamicTarget); // if (dynamicTargetResult) { // newQuery += dynamicTargetResult+" "; // } // } // lastIndex = regexp.lastIndex; // i++; // } // if(lastIndex > 0 && lastIndex < query.length){ // newQuery += query.substring(lastIndex, query.length); // } // }else{ // newQuery = query; // } // }else if (type == "UTIL") { // const util = this.getUtil(param); // let matched = query.match(/@(.|\n|\r|\t)*?\]@/gi); // if(matched != null && matched.length > 0){ // newQuery = query.substring(0, query.indexOf("@")); // const regexp = RegExp(/@(.|\n|\r|\t)*?\]@/,"g"); // let i:number = 0; // let lastIndex:number = 0; // let match:RegExpExecArray|null; // while ((match = regexp.exec(query)) !== null) { // const qPart = query.substring(match.index, match.index+1+match[0].length); // const func = qPart.substring(1, qPart.indexOf("[")); // if(func != null && func != ""){ // if(eval("util."+func)){ // newQuery += qPart.substring(qPart.indexOf("[")+1, match[0].length-2)+" "; // } // } // lastIndex = regexp.lastIndex; // i++; // } // if(lastIndex > 0 && lastIndex < query.length){ // newQuery += query.substring(lastIndex, query.length); // } // }else{ // newQuery = query; // } // } // return newQuery; // } // // public getMappedQuery(id:string, param?:any, dynamicCondition?:Function):string{ // let query:string = this.getQuery(id); // if(query != null && query != ""){ // //${GROUP_CODE} 부분의 컬럼 mapping // query = this.replaceValue("TEXT", query, param, dynamicCondition); // //#{GROUP_CODE} 부분의 컬럼 mapping // query = this.replaceValue("VALUE", query, param, dynamicCondition); // //@[AND GROUP_CODE = #{GROUP_CODE}}]@ 부분의 컬럼 mapping // query = this.replaceValue("FUNCTION", query, param, dynamicCondition); // //@isnotnull('GROUP_CODE')[AND GROUP_CODE = #{GROUP_CODE}}]@ 부분의 컬럼 mapping // query = this.replaceValue("UTIL", query, param, dynamicCondition); // return query; // } // return ""; // }; // // public getUtil(param:any){ // return (function(p:any){ // return { // isnull:(key:string)=>{ // if(p[key] != null && p[key] != ""){ // return false; // } // return true; // }, // isnotnull:(key:string)=>{ // if(p[key] != null && p[key] != ""){ // return true; // } // return false; // }, // test:()=>{ // if (arguments && arguments.length > 1) { // const key:string = arguments[0]; // for (let i = 1; i < arguments.length; i++) { // const val: string = arguments[i]; // if(p[key] == val){ // return true; // } // } // } // return false; // } // }; // })(param); // }; // } //