001: /*
002: * Copyright 2005 Patrick Gotthardt
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package com.pagosoft.plaf;
017:
018: import java.awt.*;
019: import java.lang.reflect.Method;
020: import java.util.ArrayList;
021: import java.util.Arrays;
022: import java.util.Iterator;
023: import java.util.List;
024:
025: /**
026: * Main method wrapper for configuring the PgsLookAndFeel.
027: *
028: * @author <a href="mailto:jesse@odell.ca">Jesse Wilson</a>
029: */
030: public class PgsLauncher {
031:
032: /**
033: * default theme colors
034: */
035: private Color primary;
036: private Color secondary;
037: private Color text = Color.black;
038:
039: /**
040: * Launch using the specified arguments.
041: */
042: private void launch(List arguments) throws Exception {
043: // read the PGS arguments
044: for (Iterator i = arguments.iterator(); i.hasNext();) {
045: String argument = (String) i.next();
046: if (argument.indexOf("=") != -1) {
047: applyArgument(argument);
048: i.remove();
049: } else {
050: break;
051: }
052: }
053:
054: // configure the look & feel
055: if (primary != null && secondary != null) {
056: PgsTheme customTheme = ThemeFactory.createTheme("custom",
057: primary, secondary, text);
058: PlafOptions.setCurrentTheme(customTheme);
059: }
060: PlafOptions.setAsLookAndFeel();
061: PlafOptions.updateAllUIs();
062:
063: // handle the rest of the arguments
064: String className = (String) arguments.remove(0);
065: String[] mainMethodArgs = (String[]) arguments
066: .toArray(new String[arguments.size()]);
067:
068: // launch our class
069: Class mainClass = Class.forName(className);
070: Method mainMethod = mainClass.getDeclaredMethod("main",
071: new Class[] { String[].class });
072: mainMethod.invoke(null, new Object[] { mainMethodArgs });
073: }
074:
075: /**
076: * Applies the specified argument to this launcher.
077: */
078: private void applyArgument(String argument) {
079: String[] keyAndValue = argument.split("\\=", 2);
080: String key = keyAndValue[0];
081: String value = keyAndValue[1];
082:
083: if (key.equalsIgnoreCase("primary")) {
084: primary = parseColor(value);
085: } else if (key.equalsIgnoreCase("secondary")) {
086: secondary = parseColor(value);
087: } else if (key.equalsIgnoreCase("text")) {
088: text = parseColor(value);
089: } else {
090: System.out.println("Unhandled key: \"" + key + "\"");
091: }
092: }
093:
094: /**
095: * Parses a color from the specified String.
096: */
097: private static Color parseColor(String value) {
098: if (value.startsWith("#")) {
099: value = value.substring(1, value.length());
100: } else if (value.startsWith("0x")) {
101: value = value.substring(2, value.length());
102: }
103:
104: return new Color(Integer.parseInt(value, 16));
105: }
106:
107: /**
108: * When started via a main method, this creates a standalone issues browser.
109: */
110: public static void main(String[] args) throws Exception {
111: if (args.length < 1) {
112: System.out
113: .println("Usage: PGSLauncher [primary=<color>] [secondary=<color>] [text=<color>] <mainclass> classargs...");
114: System.out
115: .println(" <color> is in hex format, such as FF0000 for red");
116: System.out.println("");
117: System.out
118: .println("Examples: PGSLauncher com.mycompany.UserInterface");
119: //System.out.println(" PGSLauncher primary=0000FF text=FF0000 com.mycompany.UserInterface");
120: System.out
121: .println(" PGSLauncher primary=FF0000 secondary=0000FF com.mycompany.UserInterface");
122: //System.out.println(" PGSLauncher primary=FF0000 com.mycompany.UserInterface arg1 arg2");
123: return;
124: }
125:
126: // convert the arguments to a List for easier processing
127: List argumentsList = new ArrayList();
128: argumentsList.addAll(Arrays.asList(args));
129:
130: // launch using these arguments
131: PgsLauncher launcher = new PgsLauncher();
132: launcher.launch(argumentsList);
133: }
134: }
|