package com.agilecontrol.nea.core.web.shell;
import argparser.ArgParser;
import argparser.BooleanHolder;
import com.agilecontrol.nea.core.schema.Column;
import com.agilecontrol.nea.core.schema.Table;
import com.agilecontrol.nea.core.schema.TableManager;
import com.agilecontrol.nea.core.web.shell.AbstractShellCmd;
import com.agilecontrol.nea.core.web.shell.Shell;
import com.agilecontrol.nea.util.NDSException;
import com.agilecontrol.nea.util.StringUtils;
import com.agilecontrol.nea.util.Validator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Locale;
import org.json.JSONObject;
@Shell(
alias = "desc",
admin = true,
help = "desc table [-all] 查看表的定义,table 可以是id,名称,描述或快捷码,列表不超过100行,-all 表示列出所有字段,否则列出非虚拟字段(按钮,分隔等就是虚拟字段)"
)
public class TableDesc extends AbstractShellCmd {
private int adTableId;
protected JSONObject process(String args, JSONObject envObj) throws Exception {
if(Validator.isNull(args)) {
throw new NDSException("@cmd-argument-error@: desc not found");
} else {
String[] arg = args.split(" ");
ArgParser parser = new ArgParser("");
BooleanHolder allHolder = new BooleanHolder();
parser.addOption("-all %v #all", allHolder);
String query = null;
String[] unmatched = parser.matchAllArgs(arg, 0, 0);
if(unmatched != null) {
query = unmatched[0];
for(int lst = 1; lst < unmatched.length; ++lst) {
query = query + " " + unmatched[lst];
}
}
ArrayList var20 = new ArrayList();
TableManager manager = TableManager.getInstance();
Table table = manager.findTable(query, false);
this.adTableId = manager.getTable("ad_table").getId();
JSONObject jo = new JSONObject();
jo.put("code", 0);
Locale locale = this.userWeb.getLocale();
Iterator tb;
if(table == null) {
int sb = 0;
String cnt = query.toUpperCase();
tb = manager.getAllTables().iterator();
while(tb.hasNext()) {
Object tb1 = tb.next();
table = (Table)tb1;
if(table.getName().contains(cnt) || table.getDescription(locale).contains(query) || table.getAliasName() != null && table.getAliasName().contains(cnt)) {
var20.add(table);
++sb;
if(sb >= 100) {
break;
}
}
}
} else {
var20.add(table);
}
if(var20.size() == 0) {
jo.put("message", "@object-not-found@:" + query);
} else {
StringBuilder var21;
int var22;
if(var20.size() == 1) {
table = (Table)var20.get(0);
var21 = new StringBuilder();
var22 = manager.getTable("ad_column").getId();
var21.append("").append("").append(table.getId()).append(" ").append(StringUtils.escapeHTMLTags(table.getDescription(locale), false)).append(" ").append(StringUtils.escapeHTMLTags(table.getName(), false)).append(table.getAliasName() == null?"":" " + StringUtils.escapeHTMLTags(table.getAliasName(), false)).append("").append(" DB Metadata").append(" Data List").append(" Edit").append("
");
var21.append("
");
Iterator var17 = table.getAllColumns().iterator();
while(var17.hasNext()) {
Column col = (Column)var17.next();
if(allHolder.value || !col.isVirtual()) {
String var23;
if(col.getId() == table.getAlternateKey().getId()) {
var23 = col.getName() + " (AK)";
} else {
var23 = col.getName();
}
var21.append("").append(var23).append("");
if(!col.isNullable()) {
var21.append(" *");
}
var21.append(" | ").append(col.getDescription(locale));
Table refTable = col.getReferenceTable();
if(refTable != null) {
var21.append(" -> " + refTable.getName().toUpperCase() + "");
}
var21.append(" | ").append(this.getInputBoxIndicator(col, "", locale)).append(" |
");
}
}
var21.append("
");
jo.put("message", var21.toString());
} else {
var21 = new StringBuilder();
var21.append("");
jo.put("message", var21.toString());
}
}
return jo;
}
}
private String getInputBoxIndicator(Column column, String inputBoxName, Locale locale) {
Table refTable = column.getReferenceTable();
int type = column.getType();
int maxLength = column.getLength();
String desc = null;
switch(type) {
case 0:
desc = "Number(" + maxLength + (column.getScale() > 0?"," + column.getScale():"") + ")";
break;
case 1:
desc = "DateTime";
break;
case 2:
desc = "String(" + maxLength + ")";
break;
case 3:
desc = "DateNumber";
break;
default:
desc = "N/A";
}
return desc;
}
}