package com.agilecontrol.nea.core.web.shell; import com.agilecontrol.nea.core.control.web.UserWebImpl; import com.agilecontrol.nea.core.schema.Database; import com.agilecontrol.nea.core.util.MessagesHolder; import com.agilecontrol.nea.core.web.shell.AbstractShellCmd; import com.agilecontrol.nea.core.web.shell.Shell; import com.agilecontrol.nea.util.StringUtils; import com.agilecontrol.nea.util.Tools; import com.agilecontrol.nea.util.Validator; import org.json.JSONArray; import org.json.JSONObject; @Shell( alias = "db", admin = false, help = "db [schema] 切换schema或列出当前可用schema。切换schema时支持使用ID,KEY或NAME,新增时推荐请使用以下格式user@192.168.1.7:1521/orcl,与主库同服务器可省略@后面的内容" ) public class Db extends AbstractShellCmd { protected JSONObject process(String args, JSONObject envObj) throws Exception { JSONObject jo = new JSONObject(); jo.put("code", 0); String dataSourceName = null; if(Validator.isNull(args)) { dataSourceName = this.userWeb.getDataSource(); String vals = this.listLoadedSchemas(dataSourceName, this.userWeb); jo.put("message", vals); } else { String[] vals1 = args.split(" "); String schema = vals1[0].trim().toLowerCase(); if(Validator.isNumber(schema)) { int exists = Tools.getInt(schema, -1); schema = Database.getInstance().findSchema(exists); if(schema == null) { return this.errorObj("Invalid schema index:" + exists); } } boolean exists1 = Database.getInstance().exists(schema); if(!exists1 && !this.isAdmin(this.userWeb)) { return this.errorObj("Only admin or root can add new schema:" + schema); } String schemaKey = Database.getInstance().validateSchema(schema); if(schemaKey == null) { return this.errorObj("Not valid schema:" + schema); } String oldSchema = this.userWeb.getDataSource(); try { this.userWeb.setDataSource(schemaKey); Database.getInstance().getTableManager(schemaKey, true); schemaKey = Database.getInstance().validateSchema(schemaKey); this.userWeb.setDataSource(schemaKey); jo.put("message", "Set schema to " + schemaKey); jo.put("refresh", true); } catch (Throwable var11) { this.userWeb.setDataSource(oldSchema); return this.errorObj(var11.getMessage()); } } return jo; } private String listLoadedSchemas(String userSchema, UserWebImpl userWeb) throws Exception { StringBuilder sb = new StringBuilder(); JSONArray schemas = Database.getInstance().getSchemas(); String[] headers = new String[]{"ID", "NAME", "KEY", "DESC"}; sb.append(""); String[] i = headers; int obj = headers.length; String name; for(int key = 0; key < obj; ++key) { name = i[key]; sb.append(""); } sb.append(""); for(int var15 = 0; var15 < schemas.length(); ++var15) { JSONObject var16 = schemas.getJSONObject(var15); String var17 = var16.getString("key"); name = var16.getString("name"); String[] values = new String[]{String.valueOf(var16.getInt("id")), name, var17, MessagesHolder.getInstance().translateMessage(var16.optString("desc"), userWeb.getLocale())}; if(name.equalsIgnoreCase(userSchema) || var17.equalsIgnoreCase(userSchema)) { values[0] = values[0] + " (use)"; } sb.append(""); String[] var11 = values; int var12 = values.length; for(int var13 = 0; var13 < var12; ++var13) { String v = var11[var13]; sb.append(""); } sb.append(""); } sb.append("
").append(StringUtils.escapeHTMLTags(name, true)).append("
").append(StringUtils.escapeHTMLTags(v, true)).append("
"); return sb.toString(); } }