package org.atomnuke.cli.command.param; import java.util.Iterator; import org.atomnuke.atombus.config.model.MessageActor; import org.atomnuke.atombus.config.model.Parameter; import org.atomnuke.atombus.config.model.Parameters; import org.atomnuke.cli.CliConfigurationHandler; import org.atomnuke.util.cli.command.AbstractCommandList; import org.atomnuke.util.cli.command.result.CommandFailure; import org.atomnuke.util.cli.command.result.CommandResult; import org.atomnuke.util.cli.command.result.CommandSuccess; import org.atomnuke.util.config.ConfigurationException; /** * * @author zinic */ public class ParamsCommand extends AbstractCommandList { public ParamsCommand(CliConfigurationHandler cfgHandler) { super(cfgHandler); } @Override public CommandResult perform(String[] arguments) throws Exception { if (arguments.length == 1) { return listParameters(arguments[0]); } else if (arguments.length == 3 && "rm".equals(arguments[1])) { return removeParameter(arguments[0], arguments[2]); } else if (arguments.length == 4 && "set".equals(arguments[1])) { return setParameter(arguments[0], arguments[2], arguments[3]); } return new CommandFailure("Usage: <id> [set|rm] <param-name> <param-value>"); } private Parameters findParametersFor(String actorId) throws ConfigurationException { final MessageActor messageActor = getConfigHandler().findMessageActor(actorId); if (messageActor != null) { Parameters params = messageActor.getParameters(); if (params == null) { params = new Parameters(); messageActor.setParameters(params); } return params; } return null; } @Override public String getCommandToken() { return "params"; } @Override public String getCommandDescription() { return "Sets configuration parameters for sources, sinks and eventlets."; } private CommandResult removeParameter(String actorId, String parameterId) throws ConfigurationException, IllegalArgumentException { final Parameters params = findParametersFor(actorId); if (params == null) { throw new IllegalArgumentException("No message actor defined with name: " + actorId); } for (Iterator<Parameter> paramItr = params.getParam().iterator(); paramItr.hasNext();) { if (paramItr.next().getName().equals(parameterId)) { paramItr.remove(); } } getConfigHandler().write(); return new CommandSuccess(); } private CommandResult setParameter(String actorId, String parmeterId, String parameterValue) throws ConfigurationException { final Parameters params = findParametersFor(actorId); boolean updated = false; for (Parameter param : params.getParam()) { if (param.getName().equals(parmeterId)) { param.setValue(parameterValue); updated = true; } } if (!updated) { final Parameter paramToAdd = new Parameter(); paramToAdd.setName(parmeterId); paramToAdd.setValue(parameterValue); params.getParam().add(paramToAdd); } getConfigHandler().write(); return new CommandSuccess(); } private CommandResult listParameters(String actorId) throws ConfigurationException, IllegalArgumentException { final Parameters params = findParametersFor(actorId); if (params != null) { final StringBuilder msg = new StringBuilder(); for (Parameter param : params.getParam()) { msg.append("Parameter: name=\"").append(param.getName()).append("\" value=\"").append(param.getValue()).append("\"\n"); } return new CommandSuccess(msg.toString()); } else { throw new IllegalArgumentException("No message actor defined with name: " + actorId); } } }