/*
This file is part of RouteConverter.
RouteConverter is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
RouteConverter is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with RouteConverter; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 2007 Christian Pesch. All Rights Reserved.
*/
package slash.navigation.converter.tools;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.MissingResourceException;
import static java.lang.System.exit;
/**
* Filters resource bundles.
*
* @author Christian Pesch
*/
public class FilterResourceBundles {
private static final String DEFAULT_ARGUMENT = "default";
private static final String FILTER_ARGUMENT = "filter";
private String defaultBundle, filterBundle;
private void run(String[] args) throws Exception {
CommandLine line = parseCommandLine(args);
defaultBundle = line.getOptionValue(DEFAULT_ARGUMENT);
filterBundle = line.getOptionValue(FILTER_ARGUMENT);
filter();
}
private void filter() throws IOException {
OrderedResourceBundle default0 = new OrderedResourceBundle(new FileInputStream(defaultBundle));
OrderedResourceBundle filter = new OrderedResourceBundle(new FileInputStream(filterBundle));
for(String key : default0.getOrderedKeys()) {
String defaultValue = default0.getString(key);
try {
String filterValue = filter.getString(key);
if (defaultValue.equals(filterValue)) {
if (!filter.handleRemoteObject(key).equals(filterValue))
throw new IOException("Failed to remove key " + key);
}
}
catch (MissingResourceException e) {
// intentionally left empty
}
}
filter.store(new FileOutputStream(filterBundle));
}
@SuppressWarnings("AccessStaticViaInstance")
private CommandLine parseCommandLine(String[] args) throws ParseException {
CommandLineParser parser = new DefaultParser();
Options options = new Options();
options.addOption(Option.builder().argName(DEFAULT_ARGUMENT).hasArgs().numberOfArgs(1).required().
longOpt("default").desc("Default resource bundle").build());
options.addOption(Option.builder().argName(FILTER_ARGUMENT).hasArgs().numberOfArgs(1).required().
longOpt("filter").desc("Resource bundle to filter").build());
try {
return parser.parse(options, args);
} catch (ParseException e) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(getClass().getSimpleName(), options);
throw e;
}
}
public static void main(String[] args) throws Exception {
new FilterResourceBundles().run(args);
exit(0);
}
}