001package com.killcoding.jsplus; 002 003import java.io.File; 004import com.killcoding.tool.CommonTools; 005import com.killcoding.datasource.DriverDataSource; 006import java.util.Map; 007import java.util.HashMap; 008import com.killcoding.tool.FileTools; 009import java.io.StringReader; 010import java.nio.file.Path; 011import java.nio.file.Files; 012import com.killcoding.cache.CacheArray; 013import java.util.Scanner; 014import java.nio.file.Paths; 015import com.killcoding.tool.ConfigProperties; 016import com.killcoding.jsplus.GhostConsole; 017 018public final class Main { 019 020 private static ScriptConsole mainConsole = null; 021 022 private static char[] password = null; 023 private static String command = null; 024 private static StringBuffer commands = null; 025 private static boolean isEnd = false; 026 private static boolean isCancel = false; 027 028 public Main(){ 029 super(); 030 } 031 032 public static void main(String[] args){ 033 appMain(args); 034 } 035 036 public static void appMain(String[] args) { 037 Map<String, Object> params = ScriptConsole.parseArgs(args); 038 if (params == null) { 039 params = new HashMap<String, Object>(); 040 } 041 042 String env = (String) params.get("Env"); 043 044 if(env.toUpperCase().equals("GHOST")) { 045 ScriptConsole ghostScriptConsole = new ScriptConsole(); 046 ghostScriptConsole.setUseScriptEnv(); 047 String ghostName = (String)params.get("GhostName"); 048 if(CommonTools.isBlank(ghostName)){ 049 ghostName = "DefaultGhost"; 050 } 051 mainConsole = new GhostConsole(ghostScriptConsole,ghostName); 052 mainConsole.setUseGhostEnv(); 053 } 054 055 if(env.toUpperCase().equals("JDBC")) { 056 mainConsole = new JdbcConsole(); 057 mainConsole.setUseJdbcEnv(); 058 } 059 060 if(env.toUpperCase().equals("CMD")) { 061 mainConsole = new CmdConsole(); 062 mainConsole.setUseCmdEnv(); 063 } 064 065 if(env.toUpperCase().equals("SCRIPT")) { 066 mainConsole = new ScriptConsole(); 067 mainConsole.setUseScriptEnv(); 068 } 069 070 if(mainConsole == null) { 071 System.out.println(String.format("Invalid Env '%s'.",env)); 072 System.exit(1); 073 } 074 075 int connectHashCode = mainConsole.hashCode(); 076 077 System.out.println("New Console: " + connectHashCode); 078 079 ScriptConsole.CONNECT_CONSOLES.put(connectHashCode,mainConsole); 080 mainConsole.connect(connectHashCode); 081 082 if (params.containsKey("help")) { 083 System.out.println(mainConsole.help()); 084 System.exit(0); 085 } 086 if (params.containsKey("version")) { 087 System.out.println(mainConsole.version()); 088 System.exit(0); 089 } 090 if (params.containsKey("exit")) { 091 System.out.println(ScriptConsole.exit()); 092 System.exit(0); 093 } 094 095 File datasourceConfigFile = new File(ScriptConsole.getJsPlusPath() + "/config/DataSource.properties"); 096 if(!datasourceConfigFile.exists()){ 097 datasourceConfigFile = new File(ScriptConsole.getJsPlusPath() + "/config/Datasource.properties"); 098 } 099 100 if (datasourceConfigFile.exists()) { 101 try { 102 mainConsole.datasourceVariables.load(datasourceConfigFile); 103 } catch (Exception e) { 104 e.printStackTrace(); 105 System.err.println(ScriptConsole.error(e)); 106 } 107 } 108 109 if (params != null) { 110 mainConsole.consoleVariables.putAllAndReturnSlef(params); 111 mainConsole.consoleVariables.putAndReturnSlef("Task", params.get("Task")); 112 if (params.get("TaskTimer") != null) { 113 mainConsole.consoleVariables.putAndReturnSlef("TaskTimer", params.get("TaskTimer")); 114 } 115 if (mainConsole.consoleVariables.containsKey("CacheArrayInitPool")) { 116 CacheArray.initPool(mainConsole.consoleVariables.getInteger("CacheArrayInitPool",100)); 117 } 118 } 119 120 mainConsole.checkHistory(); 121 122 commands = new StringBuffer(); 123 String line = null; 124 Scanner scanner = new Scanner(System.in); 125 String scriptEngine = (String) params.get("ScriptEngine"); 126 127 if (CommonTools.isBlank(scriptEngine)) { 128 scriptEngine = "nashorn"; 129 } 130 131 mainConsole.consoleVariables.putAndReturnSlef("ScriptEngine", scriptEngine); 132 133 boolean havaTask = !CommonTools.isBlank(mainConsole.consoleVariables.getString("Task")); 134 135 if (mainConsole.isUseJdbcEnv() && havaTask) { 136 if (!mainConsole.open()) { 137 System.exit(1); 138 } 139 mainConsole.consoleVariables.putAndReturnSlef("CommandEnd", ";"); 140 System.out.println("Changed CommandEnd to ';'"); 141 mainConsole.taskExecute(); 142 } 143 144 if (mainConsole.isUseCmdEnv()) { 145 mainConsole.consoleVariables.putAndReturnSlef("CommandEnd", "/"); 146 System.out.println("Changed CommandEnd to '/'"); 147 148 if(havaTask) 149 mainConsole.taskExecute(); 150 } 151 152 if (mainConsole.isUseScriptEnv()) { 153 mainConsole.consoleVariables.putAndReturnSlef("CommandEnd", "/"); 154 System.out.println("Changed CommandEnd to '/'"); 155 try { 156 boolean allowAllAccess = true; 157 boolean havaAllowAllAccess = params.containsKey("AllowAllAccess"); 158 if(havaAllowAllAccess){ 159 allowAllAccess = Boolean.parseBoolean(params.get("AllowAllAccess") +""); 160 } 161 mainConsole.initScriptEngineManager(allowAllAccess); 162 if (havaTask) { 163 mainConsole.taskExecute(); 164 } 165 } catch (Exception e) { 166 e.printStackTrace(); 167 System.err.println(ScriptConsole.error(e)); 168 } 169 } 170 171 if (mainConsole.isUseGhostEnv()) { 172 mainConsole.consoleVariables.putAndReturnSlef("CommandEnd", "/"); 173 System.out.println("Changed CommandEnd to '/'"); 174 try { 175 if (havaTask) { 176 mainConsole.taskExecute(); 177 } 178 } catch (Exception e) { 179 e.printStackTrace(); 180 System.err.println(ScriptConsole.error(e)); 181 } 182 } 183 184 if (mainConsole.isUseJdbcEnv() && !mainConsole.datasourceVariables.containsKey("DriverJar")){ 185 System.out.print("DriverJar? "); 186 } 187 188 try{ 189 while ((line = scanner.nextLine()) != null) { 190 191 ScriptConsole newConsole = mainConsole.getConsole(); 192 if(newConsole.hashCode() != mainConsole.hashCode()){ 193 mainConsole = newConsole; 194 System.out.print(String.format("%s>",mainConsole.getDisplayEngineName())); 195 } 196 if (mainConsole.isUseJdbcEnv()) { 197 198 if (env.toUpperCase().equals("SCRIPT") 199 && !mainConsole.datasourceVariables.containsKey("DriverJar")) { 200 env = "jdbc"; 201 System.out.print("DriverJar? "); 202 continue; 203 } 204 if (!mainConsole.datasourceVariables.containsKey("DriverJar")) { 205 String driverJar = line; 206 if (driverJar == null) { 207 System.out.print("DriverJar? "); 208 continue; 209 } 210 mainConsole.datasourceVariables.putAndReturnSlef("DriverJar", driverJar); 211 if (!mainConsole.datasourceVariables.containsKey("Driver")) { 212 System.out.print("Driver? "); 213 continue; 214 } 215 } 216 217 if (!mainConsole.datasourceVariables.containsKey("Driver")) { 218 String driver = line; 219 if (CommonTools.isBlank(driver)) { 220 System.out.print("Driver? "); 221 continue; 222 } 223 mainConsole.datasourceVariables.putAndReturnSlef("Driver", driver); 224 if (!mainConsole.datasourceVariables.containsKey("Url")) { 225 System.out.print("Url? "); 226 continue; 227 } 228 } 229 230 if (!mainConsole.datasourceVariables.containsKey("Url")) { 231 String url = line; 232 if (CommonTools.isBlank(url)) { 233 System.out.print("Url? "); 234 continue; 235 } 236 mainConsole.datasourceVariables.putAndReturnSlef("Url", url); 237 if (!mainConsole.datasourceVariables.containsKey("Username")) { 238 System.out.print("Username? "); 239 continue; 240 } 241 } 242 243 if (!mainConsole.datasourceVariables.containsKey("Username")) { 244 String username = line; 245 if (CommonTools.isBlank(username)) { 246 System.out.print("Username? "); 247 continue; 248 } 249 mainConsole.datasourceVariables.putAndReturnSlef("Username", username); 250 if (!mainConsole.datasourceVariables.containsKey("Password")) { 251 password = System.console().readPassword("Password?"); 252 String passwordText = scanner.nextLine(); 253 if (passwordText != null) { 254 passwordText = passwordText.trim(); 255 } 256 if (password != null && password.length > 0) { 257 mainConsole.datasourceVariables.putAndReturnSlef("Password", 258 new String(password).trim()); 259 } else if (passwordText.length() > 0) { 260 mainConsole.datasourceVariables.putAndReturnSlef("Password", passwordText); 261 } 262 continue; 263 } 264 } 265 266 if (!mainConsole.datasourceVariables.containsKey("Password")) { 267 if (password == null || password.length == 0) { 268 password = System.console().readPassword("Password?"); 269 String passwordText = scanner.nextLine(); 270 if (passwordText != null) { 271 passwordText = passwordText.trim(); 272 } 273 if (password != null && password.length > 0) { 274 mainConsole.datasourceVariables.putAndReturnSlef("Password", 275 new String(password).trim()); 276 } else if (passwordText.length() > 0) { 277 mainConsole.datasourceVariables.putAndReturnSlef("Password", passwordText); 278 } 279 continue; 280 } 281 } 282 283 if (!mainConsole.datasourceVariables.containsKey("Password") && password != null) { 284 mainConsole.datasourceVariables.putAndReturnSlef("Password", new String(password)); 285 } 286 287 if (mainConsole.firstOpen) { 288 if (env.toUpperCase().equals("JDBC") && !mainConsole.open()) { 289 System.exit(1); 290 } 291 } 292 293 } 294 295 if (command == null && !isEnd && !isCancel) { 296 System.out.print(String.format("%s> ",mainConsole.getDisplayEngineName())); 297 } 298 299 command = line; 300 isCancel = mainConsole.isCommandCancel(command); 301 if (isCancel) { 302 commands = new StringBuffer(); 303 command = null; 304 System.out.println("Canceled"); 305 System.out.print(String.format("%s> ",mainConsole.getDisplayEngineName())); 306 } else { 307 String commandCancel = mainConsole.consoleVariables.getString("CommandCancel", 308 mainConsole.DEFAULT_CommandCancel); 309 isEnd = mainConsole.isCommandEnd(command); 310 commands.append(command); 311 commands.append(" "); 312 if (isEnd) { 313 if (mainConsole.isUseScriptEnv()) { 314 mainConsole.executeViaScript(commands.toString()); 315 } else if (mainConsole.isUseJdbcEnv()){ 316 mainConsole.executeViaJdbc(true, commands.toString()); 317 } else if (mainConsole.isUseCmdEnv()) { 318 mainConsole.executeViaCmd(true,commands.toString()); 319 } else if (mainConsole.isUseGhostEnv()) { 320 mainConsole.executeViaGhost(true,commands.toString()); 321 } 322 System.out.print(String.format("%s> ",mainConsole.getDisplayEngineName())); 323 commands = new StringBuffer(); 324 command = null; 325 } 326 } 327 continue; 328 } 329 }catch(Exception e){ 330 System.err.println("Current scanner exit."); 331 } 332 } 333}