/*
* The JabaJaba class library
* Copyright (C) 1997-2004 ASAMI, Tomoharu (asami@AsamiOffice.com)
*
* This program 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.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package com.AsamiOffice.jaba2.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.StringTokenizer;
import java.util.Vector;
import com.AsamiOffice.text.UString;
import com.AsamiOffice.util.*;
import com.AsamiOffice.io.UURL;
import com.AsamiOffice.jaba2.io.FilePathList;
/**
* ParameterInfo
*
* @since Feb. 13, 1998
* @version Aug. 28, 2004
* @author ASAMI, Tomoharu (asami@AsamiOffice.com)
*/
public class ParameterInfo {
public static final String ARG_PREFIX = "argument";
protected String prefix_;
protected ParameterManager[] managers_;
protected List packages_ = new ArrayList();
public ParameterInfo(String prefix) {
prefix_ = prefix;
managers_ = null;
}
public ParameterInfo(String prefix, ParameterManager[] managers) {
prefix_ = prefix;
managers_ = (ParameterManager[])managers.clone();
}
public ResourceBundle getResourceBundle() {
for (int i = 0;i < managers_.length;i++) {
ParameterManager manager = managers_[i];
if (manager instanceof ResourceParameterManager) {
ResourceParameterManager rm
= (ResourceParameterManager)manager;
return (rm.getResourceBundle());
}
}
return (null);
}
public void addParameterManagers(ParameterManager[] managers) {
if (managers_ == null) {
managers_ = (ParameterManager[])managers.clone();
} else {
ParameterManager[] newManagers
= new ParameterManager[managers_.length + managers.length];
System.arraycopy(managers_, 0, newManagers, 0, managers_.length);
System.arraycopy(managers, 0, newManagers, managers_.length,
managers.length);
managers_ = newManagers;
}
}
public void addParameterManager(ParameterManager manager) {
ParameterManager[] newManagers
= new ParameterManager[managers_.length + 1];
newManagers[managers_.length] = manager;
System.arraycopy(managers_, 0, newManagers, 0, managers_.length);
managers_ = newManagers;
}
public void addPackage(String packageName) {
packages_.add(packageName);
}
public Iterator getKeys() {
HashSet keys = new HashSet();
for (int i = 0;i < managers_.length;i++) {
Enumeration iter = managers_[i].getKeys();
while (iter.hasMoreElements()) {
keys.add(iter.nextElement());
}
}
return (keys.iterator());
}
public boolean isParameter(String key) {
for (int i = 0;i < managers_.length;i++) {
boolean ok = managers_[i].isParameter(key);
if (ok) {
return (true);
}
}
key = prefix_ + "." + key;
for (int i = 0;i < managers_.length;i++) {
boolean ok = managers_[i].isParameter(key);
if (ok) {
return (true);
}
}
return (false);
}
public Object getParameter(String key) {
for (int i = 0;i < managers_.length;i++) {
Object value = managers_[i].getParameter(key);
if (value != null) {
if ("".equals(value)) { // spec change
return (null);
} else {
return (value);
}
}
}
key = prefix_ + "." + key;
for (int i = 0;i < managers_.length;i++) {
Object value = managers_[i].getParameter(key);
if (value != null) {
if ("".equals(value)) { // spec change
return (null);
} else {
return (value);
}
}
}
return (null);
}
public String getParameterAsString(String key) {
Object value = getParameter(key);
if (value == null) {
return (null);
}
return (value.toString());
}
/**
* @deprecated
* @see getParameterAsString
*/
public String getParameterByString(String key) {
Object value = getParameter(key);
if (value == null) {
return (null);
}
return (value.toString());
}
public String[] getParameterAsStringList(String key) {
return (getParameterAsStringList(key, ":;,"));
}
public String[] getParameterAsStringList(String key, String delim) {
String string = getParameterAsString(key);
if (string == null) {
return (null);
}
StringTokenizer st = new StringTokenizer(string, delim);
String[] list = new String[st.countTokens()];
for (int i = 0;i < list.length;i++) {
list[i] = st.nextToken();
}
return (list);
}
public String[] getParameterByCSVAsStringList(String key) {
String string = getParameterAsString(key);
if (string == null) {
return (null);
}
return (UString.makeStringListFromCSVLine(string));
}
public PropertyList getParameterAsPropertyList(String key) {
String string = getParameterAsString(key);
if (string == null) {
return (null);
}
return (new PropertyList(string));
}
public int getParameterAsInt(String key) {
Object value = getParameter(key);
if (value == null) {
return (-1);
}
if (value instanceof String) {
return (Integer.parseInt((String)value));
} else if (value instanceof Number) {
return (((Number)value).intValue());
} else {
throw (new IllegalArgumentException("not number"));
}
}
/**
* @deprecated
* @see getParameterAsString
*/
public int getParameterByInt(String key) {
Object value = getParameter(key);
if (value == null) {
return (-1);
}
if (value instanceof String) {
return (Integer.parseInt((String)value));
} else if (value instanceof Number) {
return (((Number)value).intValue());
} else {
throw (new IllegalArgumentException("not number"));
}
}
public boolean getParameterAsBoolean(String key) {
Object value = getParameter(key);
if (value == null) {
return (isParameter(key));
}
String string = value.toString();
if (string.equals("true")) {
return (true);
} else if (string.equals("false")) {
return (false);
} else {
return (true);
}
}
public Boolean getParameterAsBooleanOrNull(String key) {
Object value = getParameter(key);
if (value == null) {
return (null);
}
String string = value.toString();
if (string.equals("true")) {
return (Boolean.TRUE);
} else if (string.equals("false")) {
return (Boolean.FALSE);
} else {
return (null);
}
}
/**
* @deprecated
* @see getParameterAsString
*/
public boolean getParameterByBoolean(String key) {
Object value = getParameter(key);
if (value == null) {
return (isParameter(key));
}
String string = value.toString();
if (string.equals("true")) {
return (true);
} else if (string.equals("false")) {
return (false);
} else {
return (true);
}
}
/**
* @deprecated
* @see getParameterAsString
*/
public File getParameterByFile(String key) {
String value = getParameterByString(key);
if (value == null) {
return (null);
}
return (new File(value));
}
public File getParameterAsFile(String key) {
String value = getParameterByString(key);
if (value == null) {
return (null);
}
return (new File(value));
}
public URL getParameterAsURL(String key) throws MalformedURLException {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
return (new URL(value));
}
/**
* @deprecated
* @see getParameterAsURL
*/
public URL getParameterByURL(String key) throws MalformedURLException {
String value = getParameterByString(key);
if (value == null) {
return (null);
}
return (new URL(value));
}
public URL getParameterAsURLFromFileOrURL(String key)
throws MalformedURLException {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
return (UURL.getURLFromFileOrURLName(value));
}
public URL[] getParameterAsURLListFromFileOrURL(String key)
throws MalformedURLException {
String[] values = getParameterAsStringList(key);
if (values == null) {
return (null);
}
URL[] urls = new URL[values.length];
for (int i = 0;i < values.length;i++) {
urls[i] = UURL.getURLFromFileOrURLName(values[i]);
}
return (urls);
}
public URL getParameterAsURLFromResource(String key, Class clazz) {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
return (clazz.getClassLoader().getResource(value));
}
public InputStream getParameterAsInputStreamFromFile(String key)
throws IOException {
File file = getParameterByFile(key);
if (file == null) {
return (null);
}
return (new FileInputStream(file));
}
public InputStream getParameterAsInputStreamFromFileOrURL(String key)
throws IOException {
URL url = getParameterAsURLFromFileOrURL(key);
if (url == null) {
return (null);
}
return (url.openStream());
}
/**
* @deprecated
* @see getParameterAsString
*/
public InputStream getParameterByInputStreamFromFile(String key)
throws IOException {
File file = getParameterByFile(key);
if (file == null) {
return (null);
}
return (new FileInputStream(file));
}
/**
* @deprecated
* @see getParameterAsString
*/
public InputStream getParameterByInputStreamFromURL(String key)
throws MalformedURLException, IOException {
URL url = getParameterByURL(key);
if (url == null) {
return (null);
}
return (url.openStream());
}
public InputStream getParameterAsInputStreamFromResource(
String key,
Class clazz
) {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
return (clazz.getClassLoader().getResourceAsStream(value));
}
/**
* @deprecated
* @see getParameterAsString
*/
public Reader getParameterByReaderFromFile(String key) throws IOException {
File file = getParameterByFile(key);
if (file == null) {
return (null);
}
return (new FileReader(file));
}
/**
* @deprecated
* @see getParameterAsString
*/
public Reader getParameterByReaderFromURL(String key)
throws MalformedURLException, IOException {
URL url = getParameterByURL(key);
if (url == null) {
return (null);
}
return (new InputStreamReader(url.openStream()));
}
public Reader getParameterAsReaderFromResource(String key, Class clazz) {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
return (new InputStreamReader(
clazz.getClassLoader().getResourceAsStream(value))
);
}
public Class getParameterAsClass(String key) {
String value = (String)getParameter(key);
if (value == null) {
return (null);
}
Class clazz = null;
try {
clazz = Class.forName(value);
} catch (ClassNotFoundException e) {
}
if (clazz != null) {
return (clazz);
}
int size = packages_.size();
for (int i = 0;i < size;i++) {
try {
clazz = Class.forName((String)packages_.get(i) + "." + value);
} catch (ClassNotFoundException e) {
}
if (clazz != null) {
return (clazz);
}
}
return (clazz);
}
/**
* @deprecated
* @see getParameterAsClass
*/
public Class getParameterByClass(String key) {
String value = (String)getParameter(key);
if (value == null) {
return (null);
}
Class clazz = null;
try {
clazz = Class.forName(value);
} catch (ClassNotFoundException e) {
}
return (clazz);
}
public Object getParameterAsNewInstance(String key) {
Class clazz = getParameterAsClass(key);
if (clazz == null) {
return (null);
}
Object object = null;
try {
object = clazz.newInstance();
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}
return (object);
}
/**
* @deprecated
* @see getParameterAsString
*/
public Object getParameterByNewInstance(String key) {
Class clazz = getParameterByClass(key);
if (clazz == null) {
return (null);
}
Object object = null;
try {
object = clazz.newInstance();
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}
return (object);
}
public Locale getParameterAsLocale(String key) {
String value = getParameterAsString(key);
if (value == null || value.equals("")) {
return (null);
}
return (ULocale.makeLocale(value));
}
public Locale[] getParameterAsLocaleList(String key) {
String[] value = getParameterAsStringList(key);
if (value == null || value.equals("")) {
return (null);
}
Locale[] locales = new Locale[value.length];
for (int i = 0;i < value.length;i++) {
locales[i] = ULocale.makeLocale(value[i]);
}
return (locales);
}
public LocaleString getParameterAsLocaleString(String key) {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
PropertyList properties = new PropertyList(value);
LocaleString lstring = new LocaleString();
String[] pkeys = properties.getKeys();
for (int i = 0;i < pkeys.length;i++) {
String pkey = pkeys[i];
Object pvalue = properties.get(pkey);
if ("_default_".equals(pkey)) {
lstring.putDefault(pvalue.toString());
} else {
lstring.put(pkey, pvalue.toString());
}
}
return (lstring);
}
public LocaleMap getParameterAsLocaleMap(String key) {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
PropertyList properties = new PropertyList(value);
LocaleMap map = new LocaleMap();
String[] pkeys = properties.getKeys();
for (int i = 0;i < pkeys.length;i++) {
String pkey = pkeys[i];
Object pvalue = properties.get(pkey);
if ("_default_".equals(pkey)) {
map.putDefault(pvalue.toString());
} else {
map.put(pkey, pvalue.toString());
}
}
return (map);
}
public FilePathList getParameterAsFilePathList(String key) {
String value = getParameterAsString(key);
if (value == null) {
return (null);
}
return (new FilePathList(value));
}
/**
* @deprecated
* @see getParameterAsFilePathList
*/
public FilePathList getParameterByFilePathList(String key) {
String value = getParameterByString(key);
if (value == null) {
return (null);
}
return (new FilePathList(value));
}
public URLClassLoader getParameterAsURLClassLoader(String key)
throws MalformedURLException {
FilePathList paths = getParameterAsFilePathList(key);
if (paths == null) {
return (null);
}
return (new URLClassLoader(paths.getURLs()));
}
public int getArgumentCount() { // XXX : more efficient
int no = 0;
for (;;) {
Object arg = getParameter(ARG_PREFIX + no);
if (arg == null) {
break;
}
no++;
}
return (no);
}
public Object getArgument(int no) {
return (getParameter(ARG_PREFIX + no));
}
public Object[] getArguments() {
Vector args = new Vector();
int no = 0;
for (;;) {
Object arg = getParameter(ARG_PREFIX + no);
if (arg == null) {
break;
}
args.addElement(arg);
no++;
}
Object[] array = new Object[args.size()];
args.copyInto(array);
return (array);
}
public String getArgumentAsString(int no) {
return (getParameterAsString(ARG_PREFIX + no));
}
public File getArgumentAsFile(int no) {
String name = getArgumentAsString(no);
if (name == null) {
return (null);
}
return (new File(name));
}
/**
* @deprecated
* @see getArgumentAsString
*/
public String getArgumentByString(int no) {
return (getParameterByString(ARG_PREFIX + no));
}
public InputStream getArgumentAsInputStreamFromFile(int no)
throws IOException {
return (getParameterAsInputStreamFromFile(ARG_PREFIX + no));
}
public InputStream getArgumentAsInputStreamFromFileOrURL(int no)
throws IOException {
return (getParameterAsInputStreamFromFileOrURL(ARG_PREFIX + no));
}
/**
* @deprecated
* @see getParameterAsString
*/
public InputStream getArgumentByInputStreamFromFile(int no)
throws IOException {
return (getParameterByInputStreamFromFile(ARG_PREFIX + no));
}
/**
* @deprecated
* @see getParameterAsString
*/
public Reader getArgumentByReaderFromFile(int no) throws IOException {
return (getParameterByReaderFromFile(ARG_PREFIX + no));
}
public URL getArgumentAsURL(int no) throws MalformedURLException {
return (getParameterAsURL(ARG_PREFIX + no));
}
public URL getArgumentAsURLFromFileOrURL(int no)
throws MalformedURLException {
return (getParameterAsURLFromFileOrURL(ARG_PREFIX + no));
}
public String[] getArgumentsAsString() {
List list = new ArrayList();
int no = 0;
for (;;) {
Object arg = getParameter(ARG_PREFIX + no);
if (arg == null) {
break;
}
list.add(arg);
no++;
}
String[] array = new String[list.size()];
return ((String[])list.toArray(array));
}
public URL[] getArgumentsAsURLFromFileOrURL()
throws MalformedURLException {
Object[] args = getArguments();
URL[] urls = new URL[args.length];
for (int i = 0;i < args.length;i++) {
urls[i] = UURL.getURLFromFileOrURLName(args[i].toString());
}
return (urls);
}
}