001package gudusoft.gsqlparser.sqlenv.parser; 002 003import gudusoft.gsqlparser.EDbVendor; 004import gudusoft.gsqlparser.sqlenv.TSQLEnv; 005import gudusoft.gsqlparser.sqlenv.parser.grabit.GrabitSQLEnv; 006import gudusoft.gsqlparser.sqlenv.parser.grabit.MultipleGrabitSQLEnv; 007import gudusoft.gsqlparser.sqlenv.parser.sqldep.MultipleSQLDepSQLEnv; 008import gudusoft.gsqlparser.sqlenv.parser.sqldep.SQLDepSQLEnv; 009import gudusoft.gsqlparser.sqlenv.parser.sqlflow.SqlflowSQLEnv; 010import gudusoft.gsqlparser.util.SQLUtil; 011import gudusoft.gsqlparser.util.json.JSON; 012 013import java.util.ArrayList; 014import java.util.List; 015import java.util.Map; 016import java.util.logging.Level; 017import java.util.logging.Logger; 018 019@SuppressWarnings("rawtypes") 020public class TJSONSQLEnvParser implements TSQLEnvParser { 021 022 private String defaultServer; 023 private String defaultDatabase; 024 private String defaultSchema; 025 026 public TJSONSQLEnvParser(String defaultServer, String defaultDatabase, String defaultSchema) { 027 this.defaultServer = defaultServer; 028 this.defaultDatabase = defaultDatabase; 029 this.defaultSchema = defaultSchema; 030 } 031 032 public TSQLEnv[] parseSQLEnv(EDbVendor vendor, String sql) { 033 if (SQLUtil.isEmpty(sql)) 034 return null; 035 036 String trimSQL = sql.trim(); 037 if (trimSQL.startsWith("{") && trimSQL.endsWith("}")) { 038 return getJSONSQLEnv(vendor, trimSQL); 039 } 040 041 if (trimSQL.startsWith("[") && trimSQL.endsWith("]")) { 042 return getMultipleJSONSQLEnv(vendor, trimSQL); 043 } 044 045 return null; 046 } 047 048 private TSQLEnv[] getMultipleJSONSQLEnv(EDbVendor vendor, String trimSQL) { 049 try { 050 List json = (List) JSON.parseObject(trimSQL); 051 if (trimSQL.indexOf("createdBy") != -1) { 052 if (trimSQL.toLowerCase().indexOf("sqldep") != -1) { 053 return new TSQLEnv[] { new MultipleSQLDepSQLEnv(defaultServer, defaultDatabase, defaultSchema, vendor, json) }; 054 } 055 if (trimSQL.toLowerCase().indexOf("grabit") != -1) { 056 return new TSQLEnv[] { new MultipleGrabitSQLEnv(defaultServer, defaultDatabase, defaultSchema, vendor, json) }; 057 } 058 } 059 } catch (Exception e) { 060 Logger.getLogger(TJSONSQLEnvParser.class.getName()).log(Level.WARNING, "Parse json failed.", e); 061 } 062 return null; 063 } 064 065 private TSQLEnv[] getJSONSQLEnv(EDbVendor vendor, String trimSQL) { 066 try { 067 Map json = (Map) JSON.parseObject(trimSQL); 068 if (json.containsKey("createdBy")) { 069 String createdBy = (String) json.get("createdBy"); 070 if (createdBy.toLowerCase().indexOf("sqldep") != -1) { 071 return new TSQLEnv[] { new SQLDepSQLEnv(defaultServer, defaultDatabase, defaultSchema, vendor, json) }; 072 } 073 if (createdBy.toLowerCase().indexOf("grabit") != -1) { 074 return new TSQLEnv[] { new GrabitSQLEnv(defaultServer, defaultDatabase, defaultSchema, vendor, json) }; 075 } 076 if (createdBy.toLowerCase().indexOf("sqlflow") != -1) { 077 List servers = (List) json.get("servers"); 078 if(servers == null) 079 return null; 080 List<TSQLEnv> sqlEnvs = new ArrayList<TSQLEnv>(); 081 for (int i = 0; i < servers.size(); i++) { 082 Map server = (Map) servers.get(i); 083 String dbVendor = (String) server.get("dbVendor"); 084 if (SQLUtil.isEmpty(dbVendor)) { 085 sqlEnvs.add(new SqlflowSQLEnv(defaultServer, defaultDatabase, defaultSchema, vendor, server)); 086 } else { 087 sqlEnvs.add(new SqlflowSQLEnv(defaultServer, defaultDatabase, defaultSchema, EDbVendor.valueOf(dbVendor), server)); 088 } 089 } 090 return sqlEnvs.toArray(new TSQLEnv[0]); 091 } 092 } 093 } catch (Exception e) { 094 Logger.getLogger(TJSONSQLEnvParser.class.getName()).log(Level.WARNING, "Parse json failed.", e); 095 } 096 return null; 097 } 098}