if (Util.isSuccess(resourceOutcome)) {
if (resourceOutcome.hasDefined(Util.RESULT)) {
final ModelNode resourceResult = resourceOutcome.get(Util.RESULT);
final List<Property> props = resourceResult.asPropertyList();
if (!props.isEmpty()) {
final SimpleTable attrTable;
if (attrDescriptions == null) {
attrTable = null;
} else {
if (additionalProps != null) {
String[] headers = new String[3 + additionalProps.length];
headers[0] = "ATTRIBUTE";
headers[1] = "VALUE";
headers[2] = "TYPE";
int i = 3;
for (String additional : additionalProps) {
headers[i++] = additional.toUpperCase(Locale.ENGLISH);
}
attrTable = new SimpleTable(headers);
} else {
attrTable = new SimpleTable(new String[] { "ATTRIBUTE", "VALUE", "TYPE" });
}
}
SimpleTable childrenTable = childDescriptions == null ? null : new SimpleTable(new String[] { "CHILD", "MIN-OCCURS", "MAX-OCCURS" });
if (typeNames == null && attrTable == null && childrenTable == null) {
typeNames = new ArrayList<String>();
}
for (Property prop : props) {
final StringBuilder buf = new StringBuilder();
if (typeNames == null || !typeNames.contains(prop.getName())) {
if (attrDescriptions == null) {
buf.append(prop.getName());
buf.append('=');
buf.append(prop.getValue().asString());
// TODO the value should be formatted nicer but the current
// formatter uses new lines for complex value which doesn't work here
// final ModelNode value = prop.getValue();
// ModelNodeFormatter.Factory.forType(value.getType()).format(buf, 0, value);
typeNames.add(buf.toString());
buf.setLength(0);
} else {
final String[] line = new String[attrTable.columnsTotal()];
line[0] = prop.getName();
line[1] = prop.getValue().asString();
if (attrDescriptions.hasDefined(prop.getName())) {
final ModelNode attrDescr = attrDescriptions.get(prop.getName());
line[2] = getAsString(attrDescr, Util.TYPE);
if (additionalProps != null) {
int i = 3;
for (String additional : additionalProps) {
line[i++] = getAsString(attrDescr, additional);
}
}
} else {
for (int i = 2; i < line.length; ++i) {
line[i] = "n/a";
}
}
attrTable.addLine(line);
}
} else if (childDescriptions != null) {
if (childDescriptions.hasDefined(prop.getName())) {
final ModelNode childDescr = childDescriptions.get(prop.getName());
final Integer maxOccurs = getAsInteger(childDescr, Util.MAX_OCCURS);
childrenTable.addLine(new String[] {prop.getName(), getAsString(childDescr, Util.MIN_OCCURS), maxOccurs == null ? "n/a"
: (maxOccurs == Integer.MAX_VALUE ? "unbounded" : maxOccurs.toString()) });
} else {
childrenTable.addLine(new String[] {prop.getName(), "n/a", "n/a" });
}
}
}
StringBuilder buf = null;
if (attrTable != null && !attrTable.isEmpty()) {
buf = new StringBuilder();
attrTable.append(buf, true);
}
if (childrenTable != null
&& !childrenTable.isEmpty()) {
if (buf == null) {
buf = new StringBuilder();
} else {
buf.append("\n\n");
}
childrenTable.append(buf, true);
}
if (buf != null) {
ctx.printLine(buf.toString());
}
}