001: /*
002: The contents of this file are subject to the Common Public Attribution License
003: Version 1.0 (the "License"); you may not use this file except in compliance with
004: the License. You may obtain a copy of the License at
005: http://www.projity.com/license . The License is based on the Mozilla Public
006: License Version 1.1 but Sections 14 and 15 have been added to cover use of
007: software over a computer network and provide for limited attribution for the
008: Original Developer. In addition, Exhibit A has been modified to be consistent
009: with Exhibit B.
010:
011: Software distributed under the License is distributed on an "AS IS" basis,
012: WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
013: specific language governing rights and limitations under the License. The
014: Original Code is OpenProj. The Original Developer is the Initial Developer and
015: is Projity, Inc. All portions of the code written by Projity are Copyright (c)
016: 2006, 2007. All Rights Reserved. Contributors Projity, Inc.
017:
018: Alternatively, the contents of this file may be used under the terms of the
019: Projity End-User License Agreeement (the Projity License), in which case the
020: provisions of the Projity License are applicable instead of those above. If you
021: wish to allow use of your version of this file only under the terms of the
022: Projity License and not to allow others to use your version of this file under
023: the CPAL, indicate your decision by deleting the provisions above and replace
024: them with the notice and other provisions required by the Projity License. If
025: you do not delete the provisions above, a recipient may use your version of this
026: file under either the CPAL or the Projity License.
027:
028: [NOTE: The text of this license may differ slightly from the text of the notices
029: in Exhibits A and B of the license at http://www.projity.com/license. You should
030: use the latest text at http://www.projity.com/license for your modifications.
031: You may not remove this license text from the source files.]
032:
033: Attribution Information: Attribution Copyright Notice: Copyright � 2006, 2007
034: Projity, Inc. Attribution Phrase (not exceeding 10 words): Powered by OpenProj,
035: an open source solution from Projity. Attribution URL: http://www.projity.com
036: Graphic Image as provided in the Covered Code as file: openproj_logo.png with
037: alternatives listed on http://www.projity.com/logo
038:
039: Display of Attribution Information is required in Larger Works which are defined
040: in the CPAL as a work which combines Covered Code or portions thereof with code
041: not governed by the terms of the CPAL. However, in addition to the other notice
042: obligations, all copies of the Covered Code in Executable and Source Code form
043: distributed must, as a form of attribution of the original author, include on
044: each user interface screen the "OpenProj" logo visible to all users. The
045: OpenProj logo should be located horizontally aligned with the menu bar and left
046: justified on the top left of the screen adjacent to the File menu. The logo
047: must be at least 100 x 25 pixels. When users click on the "OpenProj" logo it
048: must direct them back to http://www.projity.com.
049: */
050: package com.projity.pm.graphic.frames;
051:
052: import java.awt.Container;
053: import java.net.CookieHandler;
054: import java.net.HttpURLConnection;
055: import java.net.URL;
056: import java.util.ArrayList;
057: import java.util.HashMap;
058: import java.util.Iterator;
059: import java.util.LinkedList;
060: import java.util.List;
061: import java.util.Properties;
062:
063: import javax.swing.JFrame;
064:
065: import com.projity.configuration.Settings;
066: import com.projity.util.Environment;
067: import com.projity.util.FontUtil;
068:
069: public class ApplicationStartupFactory extends StartupFactory {
070: private HashMap opts = null;
071:
072: public ApplicationStartupFactory(String args[]) {
073: this (ApplicationStartupFactory.extractOpts(args));
074: }
075:
076: public ApplicationStartupFactory(HashMap opts) {
077: try {
078: Class.forName("java.net.CookieHandler").getMethod(
079: "setDefault", new Class[] { CookieHandler.class })
080: .invoke(null, new Object[] { null });
081: } catch (Exception e) {
082: }
083:
084: this .opts = opts;
085: dumpOpts();
086:
087: serverUrl = getOpt("serverUrl");
088: if (serverUrl == null)
089: serverUrl = defaultServerUrl;
090:
091: String font = (String) getOpt("font");
092: if (font == null) {
093: String javaVendor = System.getProperty("java.vendor");
094: if (javaVendor.startsWith("IBM")) { //to avoid font bug on SLED with IBM jvm
095: font = FontUtil.getValidFont(new String[] {
096: "DejaVu Sans", "Andale Sans" }); //Lucida Sans
097: }
098: } else {
099: font = font.replace('_', ' ');
100: }
101: //FontUtil.listFonts();
102: if (font != null) {
103: Environment.resetFonts();
104: Environment.setFont(font, Environment.DEFAULT_FONT);
105: FontUtil.setUIFont(font);
106: }
107:
108: Object o = opts.get("fileNames");
109: List fileNames;
110: if (o == null)
111: fileNames = null;
112: else if (o instanceof List) {
113: fileNames = (List) o;
114: } else {
115: fileNames = new ArrayList(1);
116: fileNames.add(o);
117: }
118:
119: if (fileNames != null)
120: projectUrls = (String[]) fileNames.toArray(new String[] {});
121:
122: if (Settings.VERSION_TYPE_STANDALONE
123: .equals(getOpt("versionType")))
124: Environment.setStandAlone(true);
125:
126: }
127:
128: protected void abort() {
129: System.exit(-1);
130: }
131:
132: protected void getCredentials() {
133: String authType = getOpt("credentials", 0);
134: if (authType != null) {
135: if ("login".equals(authType)) {
136: login = getOpt("credentials", 1);
137: password = getOpt("credentials", 2);
138: } else if ("session".equals(authType)) {
139: String partnerConnectionString = getOpt("credentials",
140: 2);
141: String timestamp = getOpt("timestamp");
142: long d = 0L;
143: if (timestamp != null) {
144: try {
145: d = System.currentTimeMillis()
146: - Long.parseLong(timestamp);
147: } catch (NumberFormatException e) {
148: }
149: }
150: String sessionId = getOpt("credentials", 1);
151: //if (sessionId!=null&&d<=SESSION_EXPIRATION)
152: if (sessionId != null
153: || partnerConnectionString != null)
154: try {
155: Properties props = new Properties();
156: String urlString = serverUrl
157: + "/"
158: + Settings.WEB_APP
159: + ((partnerConnectionString == null) ? ""
160: : "/partner")
161: + "/jnlp/projity_credentials.jnlp";
162: if (partnerConnectionString != null)
163: urlString += "?" + partnerConnectionString;
164: URL url = new URL(urlString);
165: HttpURLConnection http = (HttpURLConnection) url
166: .openConnection();
167: if (sessionId != null)
168: http.setRequestProperty("Cookie",
169: "JSESSIONID=" + sessionId);
170: // if (partnerConnectionString == null) {
171: // http.setRequestMethod("POST");
172: // } else {
173: http.setRequestMethod("GET");
174: // }
175: http.connect();
176:
177: props.load(http.getInputStream());
178: http.disconnect();
179:
180: //props.load((new URL(serverUrl+"/web/jnlp/projity_credentials.jnlp;jsessionid="+args[3])).openStream());
181: login = props.getProperty("login");
182: password = props.getProperty("password");
183: } catch (Exception e1) {
184: e1.printStackTrace();
185: }
186: }
187: }
188: }
189:
190: private String getOpt(String name) {
191: return getOpt(name, 0);
192: }
193:
194: private String getOpt(String name, int index) {
195: if (index < 0)
196: return null;
197: Object o = opts.get(name);
198: if (o == null)
199: return null;
200: else if (o instanceof String)
201: return (index == 0) ? ((String) o) : null;
202: else {
203: List lopt = (List) o;
204: if (index >= lopt.size())
205: return null;
206: return (String) lopt.get(index);
207: }
208: }
209:
210: // private void computeOpts(String args[]){
211: // opts = extractOpts(args);
212: // }
213: public static HashMap extractOpts(String args[]) {
214: HashMap opts = new HashMap();
215: if (args.length == 0)
216: return opts;
217: String arg = args[0];
218: if (arg != null && arg.length() > 1 && (!arg.startsWith("--"))) {
219: //assume old format
220: if (args.length < 4)
221: return opts;
222: opts.put("serverUrl", args[0]);
223: if ("login".equals(args[1])) {
224: List lopt = new LinkedList();
225: lopt.add(args[1]);
226: lopt.add(args[2]);
227: lopt.add(args[3]);
228: opts.put("credentials", lopt);
229: }
230: } else {
231: String opt = null, label = null;
232: List lopt = null;
233: for (int i = 0; i < args.length; i++) {
234: arg = args[i];
235: if (arg.length() > 2 && arg.startsWith("--")) {
236: if (label != null) {
237: if (lopt != null)
238: opts.put(label, lopt);
239: else if (opt != null)
240: opts.put(label, opt);
241: }
242: label = arg.substring(2);
243: opt = null;
244: lopt = null;
245: } else {
246: if (lopt != null)
247: lopt.add(arg);
248: else if (opt != null) {
249: lopt = new LinkedList();
250: lopt.add(opt);
251: lopt.add(arg);
252: opt = null;
253: } else
254: opt = arg;
255: }
256: }
257: if (label != null) {
258: if (lopt != null)
259: opts.put(label, lopt);
260: else if (opt != null)
261: opts.put(label, opt);
262: }
263: }
264: return opts;
265: }
266:
267: public void dumpOpts() {
268: System.out.println("opts:");
269: for (Iterator i = opts.keySet().iterator(); i.hasNext();) {
270: String opt = (String) i.next();
271: System.out.println(opt + ":");
272: String arg;
273: int index = 0;
274: while ((arg = getOpt(opt, index++)) != null)
275: System.out.println("\t" + arg);
276: }
277: }
278:
279: public void doPostInitView(Container container) {
280: ((JFrame) container).pack();
281: }
282:
283: }
|