4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster/**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Copyright (c) 2009 Sun Microsystems, Inc. All Rights Reserved.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * The contents of this file are subject to the terms
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * of the Common Development and Distribution License
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * (the License). You may not use this file except in
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * compliance with the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * You can obtain a copy of the License at
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * opensso/legal/CDDLv1.0.txt
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * See the License for the specific language governing
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * permission and limitations under the License.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * When distributing Covered Code, include this CDDL
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Header Notice in each file and include the License file
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * at opensso/legal/CDDLv1.0.txt.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * If applicable, add the following below the CDDL Header,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * with the fields enclosed by brackets [] replaced by
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * your own identifying information:
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * "Portions Copyrighted [year] [name of copyright owner]"
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster *
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * $Id: WarCreator.java,v 1.2 2009/08/18 16:08:55 kevinserwin Exp $
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster/*
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * Portions Copyrighted [2011] [ForgeRock AS]
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpackage com.sun.identity.tools.deployablewar;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.BufferedReader;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.File;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.FileInputStream;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.FileNotFoundException;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.FileOutputStream;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.FileReader;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.io.IOException;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.text.MessageFormat;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.ArrayList;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.HashSet;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.List;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.Locale;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.ResourceBundle;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.Set;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.StringTokenizer;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.jar.JarEntry;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterimport java.util.jar.JarOutputStream;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster/**
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * This class creates the specialized WAR such as distributed authentication and
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster * console WAR files.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster */
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Fosterpublic class WarCreator {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static ResourceBundle rb;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static final Set<String> supportedTypes = new HashSet<String>();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster static {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster supportedTypes.add("console");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster supportedTypes.add("distauth");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster supportedTypes.add("noconsole");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster supportedTypes.add("idpdiscovery");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster public static void main(String[] args) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // if locale is null, default locale will be used.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String locale = getOption(args, "-l", "--locale");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster rb = ResourceBundle.getBundle("deployablewar", getLocale(locale));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // print usage and quit.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (args.length == 0 || hasOption(args, "-?", "--help")) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.out.println();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.out.println(rb.getString("usage"));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.exit(0);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // validation.
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String staging = getOption(args, "-s", "--staging");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String type = getOption(args, "-t", "--type");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String warfile = getOption(args, "-w", "--warfile");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if ((staging == null) || (type == null) || (warfile == null)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println(rb.getString("usage"));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.exit(1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster File stagingDir = new File(staging);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster File webinfDir = new File(staging + File.separator + "WEB-INF");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (!stagingDir.exists() || !stagingDir.canRead() || !webinfDir.exists()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println(rb.getString("invalid.staging.dir"));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.exit(1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster File typeDir = new File(type);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (!typeDir.exists() || !typeDir.canRead()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println(rb.getString("missing.typedir"));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.exit(1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (!supportedTypes.contains(type)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println(rb.getString("unsupported.type"));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.exit(1);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // options are all valid, create the WAR now
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster create(staging, type, warfile);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static boolean hasOption(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] args,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String shortName,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String longName
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster for (String arg : args) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (arg.equals(shortName) || arg.equals(longName)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return true;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return false;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static String getOption(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String[] args,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String shortName,
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String longName
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster ) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster for (int i = 0; i < (args.length - 1); i++) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (args[i].equals(shortName) || args[i].equals(longName)) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return (args[i + 1].startsWith("-")) ? null : args[i + 1];
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static void create(String staging, String type, String warfile) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster JarOutputStream out = new JarOutputStream(new FileOutputStream(
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster warfile));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster byte[] buf = new byte[1024];
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // get the contents from mother opensso.war
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster List<String> fileList = getFileList("fam-" + type + ".list");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster for (String f : fileList) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster File test = new File(staging + "/" + f);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (test.exists()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster FileInputStream in = new FileInputStream(staging + "/" + f);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster out.putNextEntry(new JarEntry(f));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int len;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster while ((len = in.read(buf)) > 0) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster out.write(buf, 0, len);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster out.closeEntry();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster in.close();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println(MessageFormat.format(rb.getString("missing.file"), test));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster // get the contents for individual specialized WAR
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster fileList = getTargetedList(type, type);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster for (String f : fileList) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster f = f.replaceAll("\\" + System.getProperty("file.separator"), "/");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster out.putNextEntry(new JarEntry(f));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster FileInputStream in = new FileInputStream(type + "/" + f);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster int len;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster while ((len = in.read(buf)) > 0) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster out.write(buf, 0, len);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster in.close();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster out.closeEntry();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster out.close();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.out.println();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.out.println(rb.getString("warfile.created"));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (FileNotFoundException e) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println(e.getMessage());
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (IOException e) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster System.err.println(e.getMessage());
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static List<String> getTargetedList(String type, String base)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws IOException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster List<String> list = new ArrayList<String>();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster File dir = new File(type);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster File[] files = dir.listFiles();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster for (File f : files) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (f.isDirectory()) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster list.addAll(getTargetedList(type + "/" + f.getName(), base));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } else {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster list.add(f.getPath().substring(base.length() + 1));
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return list;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static List<String> getFileList(String listName)
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster throws IOException {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster List<String> list = new ArrayList<String>();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster FileReader frdr = null;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster frdr = new FileReader(listName);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster BufferedReader brdr = new BufferedReader(frdr);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String line = brdr.readLine();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster while (line != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (line.startsWith("./")) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster line = line.substring(2);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster list.add(line);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster line = brdr.readLine();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } finally {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (frdr != null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster try {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster frdr.close();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster } catch (IOException e) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster //ignore
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return list;
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster private static Locale getLocale(String stringformat) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (stringformat == null) {
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return Locale.getDefault();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster StringTokenizer tk = new StringTokenizer(stringformat, "_");
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String lang = "";
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String country = "";
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster String variant = "";
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (tk.hasMoreTokens())
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster lang = tk.nextToken();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (tk.hasMoreTokens())
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster country = tk.nextToken();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster if (tk.hasMoreTokens())
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster variant = tk.nextToken();
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster return new Locale(lang, country, variant);
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster }
4a2f0f0be43dfd4c1b490cbf3cc48b6ba6084b1cAllan Foster}