Inital commit
This commit is contained in:
@@ -0,0 +1,316 @@
|
||||
/* Copyright (c) 2006 Google Inc.
|
||||
*
|
||||
* 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 sample.gbase.cmdline;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* Creates and initializes commands given command-line
|
||||
* arguments.
|
||||
*
|
||||
* This class is totally useless if you want to understand
|
||||
* how the API works. All it does is parse command-line
|
||||
* arguments and call some setters on the different <code>*Command</code>
|
||||
* objects. Have a look at the <code>*Command</code> classes instead.
|
||||
*/
|
||||
class CommandFactory {
|
||||
|
||||
/**
|
||||
* All commands available in this system, for producing error messages.
|
||||
*/
|
||||
private static final String ALL_COMMANDS =
|
||||
"query, get, update, insert, delete, batch";
|
||||
|
||||
/**
|
||||
* Creates a {@link Command} object and initializes it using
|
||||
* command-line arguments.
|
||||
*
|
||||
* @param args command-line arguments
|
||||
* @return a new Command object, properly initialized and ready to use
|
||||
*/
|
||||
public static Command createCommand(String[] args) {
|
||||
if (args.length == 0) {
|
||||
throw error("Please give first the command you want to run (" +
|
||||
ALL_COMMANDS + ") then the parameters for that " +
|
||||
"command.");
|
||||
}
|
||||
|
||||
String commandName = args[0];
|
||||
if ("query".equals(commandName)) {
|
||||
return createQueryCommand(args);
|
||||
} else if("insert".equals(commandName)) {
|
||||
return createInsertCommand(args);
|
||||
} else if("update".equals(commandName)) {
|
||||
return createUpdateCommand(args);
|
||||
} else if("delete".equals(commandName)) {
|
||||
return createDeleteCommand(args);
|
||||
} else if("get".equals(commandName)) {
|
||||
return createGetCommand(args);
|
||||
} else if("batch".equals(commandName)) {
|
||||
return createBatchCommand(args);
|
||||
} else if("query-media".equals(commandName)) {
|
||||
return createQueryMediaCommand(args);
|
||||
} else if("insert-media".equals(commandName)) {
|
||||
return createInsertMediaCommand(args);
|
||||
} else if("update-media".equals(commandName)) {
|
||||
return createUpdateMediaCommand(args);
|
||||
} else if("delete-media".equals(commandName)) {
|
||||
return createDeleteMediaCommand(args);
|
||||
} else if("get-media".equals(commandName)) {
|
||||
return createGetMediaCommand(args);
|
||||
} else {
|
||||
throw error("Unknown command: " + commandName +
|
||||
". Available commands: " + ALL_COMMANDS);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link QueryCommand}.
|
||||
*/
|
||||
private static Command createQueryCommand(String[] args) {
|
||||
QueryCommand command = new QueryCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
if (args.length == 1) {
|
||||
command.setQuery(args[0]);
|
||||
} else if (args.length > 1) {
|
||||
throw error("Expected at most one query argument, got " + args.length);
|
||||
}
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link InsertCommand}.
|
||||
*/
|
||||
private static Command createInsertCommand(String[] args) {
|
||||
InsertCommand command = new InsertCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
expectNoMoreArguments(args);
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link BatchCommand}.
|
||||
*/
|
||||
private static Command createBatchCommand(String[] args) {
|
||||
BatchCommand command = new BatchCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
expectNoMoreArguments(args);
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link UpdateCommand}.
|
||||
*/
|
||||
private static Command createUpdateCommand(String[] args) {
|
||||
UpdateCommand command = new UpdateCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
command.setItemId(getItemId(args));
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link DeleteCommand}.
|
||||
*/
|
||||
private static Command createDeleteCommand(String[] args) {
|
||||
DeleteCommand command = new DeleteCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
command.setItemId(getItemId(args));
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link GetCommand).
|
||||
*/
|
||||
private static Command createGetCommand(String[] args) {
|
||||
GetCommand command = new GetCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
command.setItemId(getItemId(args));
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link QueryMediaCommand}.
|
||||
*/
|
||||
private static Command createQueryMediaCommand(String[] args) {
|
||||
QueryMediaCommand command = new QueryMediaCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
if (args.length == 1) {
|
||||
command.setItemMediaUrl(args[0]);
|
||||
} else {
|
||||
throw error("Expected [item_media_feed_url], got " + Arrays.toString(args));
|
||||
}
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link InsertMediaCommand}.
|
||||
*/
|
||||
private static Command createInsertMediaCommand(String[] args) {
|
||||
InsertMediaCommand command = new InsertMediaCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
if (args.length < 3 || args.length > 4) {
|
||||
throw error("Expected four arguments: [item_media_feed_url attachment_path_to_file " +
|
||||
"attachment_mime_type caption?], got " + Arrays.toString(args));
|
||||
}
|
||||
|
||||
command.setItemMediaUrl(args[0]);
|
||||
command.setAttachmentFile(args[1]);
|
||||
command.setAttachmentMimeType(args[2]);
|
||||
if (args.length == 4) {
|
||||
command.setCaption(args[3]);
|
||||
}
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link UpdateMediaCommand}.
|
||||
*/
|
||||
private static Command createUpdateMediaCommand(String[] args) {
|
||||
UpdateMediaCommand command = new UpdateMediaCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
command.setAttachmentId(getItemId(args));
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link DeleteMediaCommand}.
|
||||
*/
|
||||
private static Command createDeleteMediaCommand(String[] args) {
|
||||
DeleteMediaCommand command = new DeleteMediaCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
command.setAttachmentId(getItemId(args));
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and initializes a {@link GetMediaCommand).
|
||||
*/
|
||||
private static Command createGetMediaCommand(String[] args) {
|
||||
GetMediaCommand command = new GetMediaCommand();
|
||||
args = parseAndSetCommonArguments(command, args);
|
||||
|
||||
command.setAttachmentId(getItemId(args));
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the item id from the command line and make sure it's the
|
||||
* only argument left.
|
||||
*
|
||||
* @param args command line arguments left over from
|
||||
* {@link #parseAndSetCommonArguments(Command, String[])}
|
||||
* @return the item ID (an url)
|
||||
*/
|
||||
private static String getItemId(String[] args) {
|
||||
if (args.length != 1) {
|
||||
throw error("Expected one argument after the command name: " +
|
||||
"the ID (url) of the item to delete.");
|
||||
}
|
||||
return args[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the command line and initialize things that are common
|
||||
* to all {@link Command}s.
|
||||
*
|
||||
* @param command the command object
|
||||
* @param args command-line arguments (0 is the command name)
|
||||
* @return the arguments that are left that haven't been parsed
|
||||
* by this method, or an empty array if there's nothing left
|
||||
*/
|
||||
private static String[] parseAndSetCommonArguments(Command command,
|
||||
String[] args) {
|
||||
// Start at the first argument after the command name
|
||||
int current = 1;
|
||||
|
||||
while (current < args.length && args[current].startsWith("-")) {
|
||||
String option = args[current];
|
||||
current++;
|
||||
if ( current >= args.length) {
|
||||
throw error("expected an argument after option " + option);
|
||||
}
|
||||
if ("--dry_run".equals(option)) {
|
||||
command.setDryRun(true);
|
||||
continue;
|
||||
}
|
||||
String value = args[current];
|
||||
current++;
|
||||
|
||||
if ("--user".equals(option)) {
|
||||
command.setUsername(value);
|
||||
} else if("--password".equals(option)) {
|
||||
command.setPassword(value);
|
||||
} else if("--url".equals(option)) {
|
||||
try {
|
||||
command.setGoogleBaseServerUrl(value);
|
||||
} catch(MalformedURLException e) {
|
||||
throw error("Value for --url should be a valid URL: " +
|
||||
e.getMessage());
|
||||
}
|
||||
} else if("--auth".equals(option)) {
|
||||
try {
|
||||
command.setAuthenticationServerUrl(value);
|
||||
} catch(MalformedURLException e) {
|
||||
throw error("Value for --auth should be a valid http or https " +
|
||||
"URL: " + e.getMessage());
|
||||
}
|
||||
} else if("--key".equals(option)) {
|
||||
command.setKey(value);
|
||||
} else {
|
||||
throw error("unexpected option: " + option);
|
||||
}
|
||||
}
|
||||
|
||||
if (!command.hasAllIdentificationInformation()) {
|
||||
throw error("You must input all two required parameters: " +
|
||||
"--user email --password password ");
|
||||
}
|
||||
|
||||
// leave the rest for the command
|
||||
String[] retval = new String[args.length-current];
|
||||
System.arraycopy(args, current, retval, 0, retval.length);
|
||||
return retval;
|
||||
}
|
||||
|
||||
private static void expectNoMoreArguments(String[] args) {
|
||||
if (args.length > 0) {
|
||||
throw error("Expected no more arguments, got instead " + args[0]);
|
||||
}
|
||||
}
|
||||
|
||||
private static IllegalArgumentException error(String message) {
|
||||
return new IllegalArgumentException("Error: wrong arguments. " + message);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user