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("
").append(StringUtils.escapeHTMLTags(name, true)).append(" | "); } sb.append("
").append(StringUtils.escapeHTMLTags(v, true)).append(" | "); } sb.append("