package com.agilecontrol.nea.core.web.shell; import argparser.ArgParser; import argparser.StringHolder; import com.agilecontrol.nea.core.schema.Database; import com.agilecontrol.nea.core.schema.TableManagerLoader; import com.agilecontrol.nea.core.util.ConfigValues; import com.agilecontrol.nea.core.web.shell.AbstractShellCmd; import com.agilecontrol.nea.core.web.shell.Shell; import com.agilecontrol.nea.util.Configurations; import com.agilecontrol.nea.util.StringUtils; import com.agilecontrol.nea.util.Validator; import java.util.List; import org.json.JSONObject; @Shell( alias = "param", admin = true, help = "param -c [reload|get|set|rm|header] args
reload 重载参数,等同于reloadparam 命令
get [param] 将返回所有的名称匹配的参数,支持*号返回多值,没有*号表示全匹配
set [param]=[value] 单一值设置,注意这条命令不修改数据库,仅在当前schema的参数内存中生效
rm [param] 等同于set [param]=null
header [param]=[value] 作废,请访问header命令" ) public class Param extends AbstractShellCmd { private JSONObject reload() { Database.getInstance().reloadLocalConfig(); TableManagerLoader.publishParamLoadedMessage(Database.getInstance().getLocalThreadSchema()); JSONObject jo = new JSONObject(); jo.put("code", 0); jo.put("message", "Done"); return jo; } private JSONObject rm(String param) { Configurations conf = Database.getInstance().getConfig(this.userWeb.getDataSource()); conf.set(param, ""); JSONObject jo = new JSONObject(); jo.put("code", 0); jo.put("message", "set " + param + " to empty string"); return jo; } private JSONObject set(String param) { Configurations conf = Database.getInstance().getConfig(this.userWeb.getDataSource()); int idx = param.indexOf("="); if(idx <= 0) { return this.errorObj("Need a=b format when set param"); } else { String pn = param.substring(0, idx); String value = param.substring(idx + 1); if(Validator.isNull(value)) { value = ""; } conf.set(pn, value); JSONObject jo = new JSONObject(); jo.put("code", 0); jo.put("message", "Done"); return jo; } } private JSONObject get(String param) { String message; String jo; if(!param.contains("*")) { jo = ConfigValues.get(param); message = param + "=" + jo; } else { jo = param.replace('*', '%'); List headers = this.engine.doQueryList("select name from ad_param where name like ?", new Object[]{jo}, this.conn); StringBuilder sb = new StringBuilder(); sb.append(""); for(int i = 0; i < headers.size(); ++i) { String header = (String)headers.get(i); String value = ConfigValues.get(header); sb.append("").append(""); } sb.append("
").append(StringUtils.escapeHTMLTags(header, true)).append("").append(StringUtils.escapeHTMLTags(value, true)).append("
"); message = sb.toString(); } JSONObject var9 = new JSONObject(); var9.put("code", 0); var9.put("message", message); return var9; } protected JSONObject process(String args, JSONObject envObj) throws Exception { JSONObject jo = new JSONObject(); jo.put("code", 0); if(Validator.isNull(args)) { String arg = "Need -c parameter for command to execute"; jo.put("message", arg); jo.put("help", this.getHelp(this.userWeb.getLocale())); } else { String[] var11 = args.split(" "); StringHolder cmdHolder = new StringHolder(); ArgParser parser = new ArgParser(""); parser.addOption("-c %s #cmd name", cmdHolder); String query = null; String[] unmatched = parser.matchAllArgs(var11, 0, 0); if(unmatched != null) { query = unmatched[0]; for(int cmd = 1; cmd < unmatched.length; ++cmd) { query = query + " " + unmatched[cmd]; } } String var12 = cmdHolder.value; String param = query == null?"":query.trim(); if(Validator.isNull(var12)) { return this.errorObj("Please provide sub command using -c argument: " + args); } if("reload".equalsIgnoreCase(var12)) { jo = this.reload(); } else if("get".equalsIgnoreCase(var12)) { jo = this.get(param); } else if("set".equalsIgnoreCase(var12)) { jo = this.set(param); } else { if(!"rm".equalsIgnoreCase(var12)) { return this.errorObj("Invalid cmd: " + var12); } jo = this.rm(param); } } return jo; } }