@Override protected void printHelp(CommandContext ctx) { ParsedCommandLine args = ctx.getParsedCommandLine(); try { if (helpProperties.isPresent(args)) { try { printProperties(ctx, getNodeProperties(ctx)); } catch (Exception e) { ctx.error("Failed to obtain the list or properties: " + e.getLocalizedMessage()); return; } return; } } catch (CommandFormatException e) { ctx.error(e.getLocalizedMessage()); return; } try { if (helpCommands.isPresent(args)) { printCommands(ctx); return; } } catch (CommandFormatException e) { ctx.error(e.getLocalizedMessage()); return; } final String operationName = operation.getValue(args); if (operationName == null) { printNodeDescription(ctx); return; } try { ModelNode result = getOperationDescription(ctx, operationName); if (!result.hasDefined(Util.DESCRIPTION)) { ctx.error("Operation description is not available."); return; } final StringBuilder buf = new StringBuilder(); buf.append("\nDESCRIPTION:\n\n"); buf.append(result.get(Util.DESCRIPTION).asString()); ctx.printLine(buf.toString()); if (result.hasDefined(Util.REQUEST_PROPERTIES)) { printProperties(ctx, result.get(Util.REQUEST_PROPERTIES).asPropertyList()); } else { printProperties(ctx, Collections.<Property>emptyList()); } } catch (Exception e) { } }
protected StringBuilder formatResponse( CommandContext ctx, ModelNode opResponse, boolean composite, StringBuilder buf) { if (!opResponse.hasDefined(Util.RESULT)) { return null; } final ModelNode result = opResponse.get(Util.RESULT); if (composite) { final Set<String> keys; try { keys = result.keys(); } catch (Exception e) { ctx.error("Failed to get step results from a composite operation response " + opResponse); e.printStackTrace(); return null; } for (String key : keys) { final ModelNode stepResponse = result.get(key); buf = formatResponse( ctx, stepResponse, false, buf); // TODO nested composite ops aren't expected for now } } else { final ModelNodeFormatter formatter = ModelNodeFormatter.Factory.forType(result.getType()); if (buf == null) { buf = new StringBuilder(); } formatter.format(buf, 0, result); } return buf; }
@Override protected void handleResponse(CommandContext ctx, ModelNode opResponse, boolean composite) { // System.out.println(opResponse); if (!Util.isSuccess(opResponse)) { ctx.error(Util.getFailureDescription(opResponse)); return; } final StringBuilder buf = formatResponse(ctx, opResponse, composite, null); if (buf != null) { ctx.printLine(buf.toString()); } }
protected ModelNode initRequest(CommandContext ctx) { ModelNode request = new ModelNode(); ModelNode address = request.get(Util.ADDRESS); if (isDependsOnProfile() && ctx.isDomainMode()) { final String profileName = profile.getValue(ctx.getParsedCommandLine()); if (profileName == null) { ctx.error("--profile argument is required to get the node description."); return null; } address.add(Util.PROFILE, profileName); } for (OperationRequestAddress.Node node : getRequiredAddress()) { address.add(node.getType(), node.getName()); } address.add(getRequiredType(), "?"); return request; }
protected void printCommands(CommandContext ctx) { ModelNode request = initRequest(ctx); if (request == null) { return; } request.get(Util.OPERATION).set(Util.READ_OPERATION_NAMES); try { ModelNode result = ctx.getModelControllerClient().execute(request); if (!result.hasDefined(Util.RESULT)) { ctx.error("Operation names aren't available."); return; } final List<String> list = Util.getList(result); list.removeAll(this.excludeOps); list.add( "To read the description of a specific command execute '" + this.commandName + " command_name --help'."); for (String name : list) { ctx.printLine(name); } } catch (Exception e) { } }
protected void printNodeDescription(CommandContext ctx) { final StringBuilder buf = new StringBuilder(); buf.append("\nSYNOPSIS\n\n"); buf.append(commandName).append(" --help [--properties | --commands] |\n"); for (int i = 0; i <= commandName.length(); ++i) { buf.append(' '); } buf.append(name.getFullName()) .append("=<value> --<property>=<value> (--<property>=<value>)* |\n"); for (int i = 0; i <= commandName.length(); ++i) { buf.append(' '); } buf.append("<command> ").append(name.getFullName()).append("=<value> (--<parameter>=<value>)*"); buf.append("\n\nDESCRIPTION\n\n"); buf.append("The command is used to manage resources of type " + this.nodeType + "."); buf.append("\n\nRESOURCE DESCRIPTION\n\n"); if (isDependsOnProfile() && ctx.isDomainMode() && profile.getValue(ctx.getParsedCommandLine()) == null) { buf.append("(Execute '"); buf.append(commandName) .append(" --profile=<profile_name> --help' to include the resource description here.)"); } else { ModelNode request = initRequest(ctx); if (request == null) { return; } request.get(Util.OPERATION).set(Util.READ_RESOURCE_DESCRIPTION); ModelNode result = null; try { result = ctx.getModelControllerClient().execute(request); if (!result.hasDefined(Util.RESULT)) { ctx.error("Node description is not available."); return; } result = result.get(Util.RESULT); if (!result.hasDefined(Util.DESCRIPTION)) { ctx.error("Node description is not available."); return; } } catch (Exception e) { } if (result != null) { buf.append(result.get(Util.DESCRIPTION).asString()); } else { buf.append( "N/A. Please, open a jira issue at https://issues.jboss.org/browse/AS7 to get this fixed. Thanks!"); } } buf.append("\n\nARGUMENTS\n"); buf.append("\n--help - prints this content."); buf.append( "\n--help --properties - prints the list of the resource properties including their access-type"); buf.append("\n (read/write/metric), value type, and the description."); buf.append( "\n--help --commands - prints the list of the commands available for the resource."); buf.append( "\n To get the complete description of a specific command (including its parameters,"); buf.append("\n their types and descriptions), execute ") .append(commandName) .append(" <command> --help."); buf.append("\n\n").append(name.getFullName()).append(" - "); if (idProperty == null) { buf.append("is the name of the resource that completes the path ") .append(nodeType) .append(" and \n"); } else { buf.append("corresponds to a property of the resourse which \n"); } for (int i = 0; i < name.getFullName().length() + 5; ++i) { buf.append(' '); } buf.append("is used to identify the resourse against which the command should be executed."); buf.append("\n\n<property> - property name of the resourse whose value should be updated."); buf.append( "\n For a complete list of available property names, their types and descriptions,"); buf.append("\n execute ").append(commandName).append(" --help --properties."); buf.append( "\n\n<command> - command name provided by the resourse. For a complete list of available commands,"); buf.append("\n execute ").append(commandName).append(" --help --commands."); buf.append("\n\n<parameter> - parameter name of the <command> provided by the resourse."); buf.append( "\n For a complete list of available parameter names of a specific <command>,"); buf.append("\n their types and descriptions, execute ") .append(commandName) .append(" <command> --help."); ctx.printLine(buf.toString()); }