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(""); } } 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("
"); jo.put("message", var21.toString()); } else { var21 = new StringBuilder(); var21.append(""); var22 = 0; tb = var20.iterator(); while(tb.hasNext()) { Table var24 = (Table)tb.next(); var21.append(""); ++var22; if(var22 == 100) { break; } } var21.append("
ListColumnsDefinitionAlias
"); if(var24.isMenuObject()) { var21.append("").append(var24.getId()).append(""); } else { var21.append(var24.getId()); } var21.append("").append(var24.getDescription(locale)).append("").append(var24.getName()).append("").append(var24.getAliasName() == null?"":var24.getAliasName()).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; } }