package org.atomnuke.cli.command.binding; import java.util.UUID; import org.atomnuke.atombus.config.model.Binding; import org.atomnuke.cli.CliConfigurationHandler; import org.atomnuke.cli.command.AbstractNukeCommand; import org.atomnuke.util.cli.command.result.CommandFailure; import org.atomnuke.util.cli.command.result.CommandResult; import org.atomnuke.util.cli.command.result.CommandSuccess; /** * * @author zinic */ public class AddBinding extends AbstractNukeCommand { private static final int SOURCE_ID = 0, SINK_ID = 1; public AddBinding(CliConfigurationHandler configurationHandler) { super(configurationHandler); } @Override public String getCommandToken() { return "add"; } @Override public String getCommandDescription() { return "Creates a binding between a target and a reciever."; } @Override public CommandResult perform(String[] arguments) throws Exception { if (arguments.length != 2) { return new CommandFailure("Creating a binding requires two arguments: <source-id> <sink-id>"); } final CliConfigurationHandler cfgHandler = getConfigHandler(); if (cfgHandler.findMessageSource(arguments[SOURCE_ID]) == null) { return new CommandFailure("Unable to locate a source with the id, \"" + arguments[SOURCE_ID] + "\" to bind to."); } if (cfgHandler.findMessageActor(arguments[SINK_ID]) == null) { return new CommandFailure("Unable to locate a message actor with the id, \"" + arguments[SINK_ID] + "\" for binding."); } for (Binding binding : cfgHandler.getBindings()) { if (binding.getSourceActor().equals(arguments[SOURCE_ID]) && binding.getSinkActor().equals(arguments[SINK_ID])) { return new CommandFailure("Binding already exists as binding, \"" + binding.getId() + "\""); } } final Binding newBinding = new Binding(); newBinding.setId(UUID.randomUUID().toString()); newBinding.setSourceActor(arguments[SOURCE_ID]); newBinding.setSinkActor(arguments[SINK_ID]); cfgHandler.getBindings().add(newBinding); cfgHandler.write(); return new CommandSuccess(); } }