| @ -0,0 +1,37 @@ | |||
| <?xml version="1.0"?> | |||
| <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" | |||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | |||
| <modelVersion>4.0.0</modelVersion> | |||
| <parent> | |||
| <artifactId>tools</artifactId> | |||
| <groupId>com.google.i18n.phonenumbers</groupId> | |||
| <version>1.0-SNAPSHOT</version> | |||
| </parent> | |||
| <groupId>com.google.i18n.phonenumbers.tools</groupId> | |||
| <artifactId>common</artifactId> | |||
| <version>1.0-SNAPSHOT</version> | |||
| <name>Libphonenumber common library for build tools</name> | |||
| <description> | |||
| This library contains helper classes designed to ease file manipulation and command dispatching | |||
| which is required by build tools dealing with code generation and multiple commands invocation | |||
| from a single entry point. | |||
| </description> | |||
| <build> | |||
| <sourceDirectory>src</sourceDirectory> | |||
| <plugins> | |||
| <plugin> | |||
| <version>2.3.2</version> | |||
| <groupId>org.apache.maven.plugins</groupId> | |||
| <artifactId>maven-compiler-plugin</artifactId> | |||
| <configuration> | |||
| <source>1.5</source> | |||
| <target>1.5</target> | |||
| </configuration> | |||
| </plugin> | |||
| </plugins> | |||
| </build> | |||
| </project> | |||
| @ -0,0 +1,51 @@ | |||
| /* | |||
| * Copyright (C) 2011 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 com.google.i18n.phonenumbers.tools; | |||
| /** | |||
| * Abstract class defining a common interface for commands provided by build tools (e.g: commands to | |||
| * generate code or to download source files). | |||
| * | |||
| * <p> Subclass it to create a new command (e.g: code generation step). | |||
| * | |||
| * @author Philippe Liard | |||
| */ | |||
| public abstract class Command { | |||
| // The arguments provided to this command. The first one is the name of the command. | |||
| private String[] args; | |||
| /** | |||
| * Entry point of the command called by the CommandDispatcher when requested. This method must be | |||
| * implemented by subclasses. | |||
| */ | |||
| public abstract boolean start(); | |||
| /** | |||
| * The name of the command is used by the CommandDispatcher to execute the requested command. The | |||
| * Dispatcher will pass along all command-line arguments to this command, so args[0] will be | |||
| * always the command name. | |||
| */ | |||
| public abstract String getCommandName(); | |||
| public String[] getArgs() { | |||
| return args; | |||
| } | |||
| public void setArgs(String[] args) { | |||
| this.args = args; | |||
| } | |||
| } | |||
| @ -0,0 +1,78 @@ | |||
| /* | |||
| * Copyright (C) 2011 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 com.google.i18n.phonenumbers.tools; | |||
| /** | |||
| * 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()); | |||
| } | |||
| } | |||
| @ -0,0 +1,52 @@ | |||
| /* | |||
| * Copyright (C) 2011 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. | |||
| * under the License. | |||
| */ | |||
| package com.google.i18n.phonenumbers.tools; | |||
| import java.io.Closeable; | |||
| import java.io.IOException; | |||
| /** | |||
| * Helper class containing methods designed to ease file manipulation. | |||
| * | |||
| * @author Philippe Liard | |||
| */ | |||
| public class FileUtils { | |||
| /** | |||
| * Silently closes a resource (i.e: don't throw any exception). | |||
| */ | |||
| private static void close(Closeable closeable) { | |||
| if (closeable == null) { | |||
| return; | |||
| } | |||
| try { | |||
| closeable.close(); | |||
| } catch (IOException e) { | |||
| System.err.println(e.getMessage()); | |||
| } | |||
| } | |||
| /** | |||
| * Silently closes multiple resources. This method doesn't throw any exception when an error | |||
| * occurs when a resource is being closed. | |||
| */ | |||
| public static void closeFiles(Closeable ... closeables) { | |||
| for (Closeable closeable : closeables) { | |||
| close(closeable); | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,26 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
| <modelVersion>4.0.0</modelVersion> | |||
| <groupId>com.google.i18n.phonenumbers</groupId> | |||
| <artifactId>tools</artifactId> | |||
| <packaging>pom</packaging> | |||
| <version>1.0-SNAPSHOT</version> | |||
| <name>Libphonenumber build tools</name> | |||
| <properties> | |||
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |||
| </properties> | |||
| <licenses> | |||
| <license> | |||
| <name>Apache 2</name> | |||
| <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> | |||
| <comments>Copyright (C) 2011 Google Inc.</comments> | |||
| </license> | |||
| </licenses> | |||
| <modules> | |||
| <module>common</module> | |||
| </modules> | |||
| </project> | |||