|
|
/*
|
|
|
* Copyright (C) 2011 The Libphonenumber Authors
|
|
|
*
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
* You may obtain a copy of the License at
|
|
|
*
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
*
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
* See the License for the specific language governing permissions and
|
|
|
* limitations under the License.
|
|
|
*/
|
|
|
|
|
|
package com.google.i18n.phonenumbers;
|
|
|
|
|
|
/**
|
|
|
* This class is designed to execute a requested command among a set of provided commands.
|
|
|
* The dispatching is performed according to the requested command name, which is provided as the
|
|
|
* first string of the 'args' array. The 'args' array also contains the command arguments available
|
|
|
* from position 1 to end. The verification of the arguments' consistency is under the
|
|
|
* responsibility of the command since the dispatcher can't be aware of its underlying goals.
|
|
|
*
|
|
|
* @see Command
|
|
|
* @author Philippe Liard
|
|
|
*/
|
|
|
public class CommandDispatcher {
|
|
|
// Command line arguments passed to the command which will be executed. Note that the first one is
|
|
|
// the name of the command.
|
|
|
private final String[] args;
|
|
|
// Supported commands by this dispatcher.
|
|
|
private final Command[] commands;
|
|
|
|
|
|
public CommandDispatcher(String[] args, Command[] commands) {
|
|
|
this.args = args;
|
|
|
this.commands = commands;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Executes the command named `args[0]` if any. If the requested command (in args[0]) is not
|
|
|
* supported, display a help message.
|
|
|
*
|
|
|
* <p> Note that the command name comparison is case sensitive.
|
|
|
*/
|
|
|
public boolean start() {
|
|
|
if (args.length != 0) {
|
|
|
String requestedCommand = args[0];
|
|
|
|
|
|
for (Command command : commands) {
|
|
|
if (command.getCommandName().equals(requestedCommand)) {
|
|
|
command.setArgs(args);
|
|
|
return command.start();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
displayUsage();
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Displays a message containing the list of the supported commands by this dispatcher.
|
|
|
*/
|
|
|
private void displayUsage() {
|
|
|
StringBuilder msg = new StringBuilder("Usage: java -jar /path/to/jar [ ");
|
|
|
int i = 0;
|
|
|
|
|
|
for (Command command : commands) {
|
|
|
msg.append(command.getCommandName());
|
|
|
if (i++ != commands.length - 1) {
|
|
|
msg.append(" | ");
|
|
|
}
|
|
|
}
|
|
|
msg.append(" ] args");
|
|
|
System.err.println(msg.toString());
|
|
|
}
|
|
|
}
|