KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > welcome > WelcomeFrame


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package com.tc.welcome;
6
7 import org.dijon.ApplicationManager;
8 import org.dijon.TabbedPane;
9 import org.dijon.TextPane;
10
11 import com.tc.admin.common.BrowserLauncher;
12 import com.tc.admin.common.InputStreamDrainer;
13 import com.tc.admin.common.Splash;
14 import com.tc.util.ResourceBundleHelper;
15 import com.tc.util.runtime.Os;
16
17 import java.awt.BorderLayout JavaDoc;
18 import java.awt.Color JavaDoc;
19 import java.awt.Container JavaDoc;
20 import java.awt.Cursor JavaDoc;
21 import java.awt.event.ActionEvent JavaDoc;
22 import java.awt.event.ActionListener JavaDoc;
23 import java.awt.event.WindowAdapter JavaDoc;
24 import java.awt.event.WindowEvent JavaDoc;
25 import java.beans.PropertyChangeEvent JavaDoc;
26 import java.beans.PropertyChangeListener JavaDoc;
27 import java.io.File JavaDoc;
28 import java.io.IOException JavaDoc;
29 import java.util.ArrayList JavaDoc;
30
31 import javax.swing.Timer JavaDoc;
32 import javax.swing.UIManager JavaDoc;
33 import javax.swing.event.HyperlinkEvent JavaDoc;
34 import javax.swing.event.HyperlinkListener JavaDoc;
35 import javax.swing.text.AttributeSet JavaDoc;
36 import javax.swing.text.Element JavaDoc;
37 import javax.swing.text.html.HTML JavaDoc;
38 import javax.swing.text.html.HTMLEditorKit JavaDoc;
39
40 public class WelcomeFrame extends HyperlinkFrame
41   implements HyperlinkListener JavaDoc,
42              PropertyChangeListener JavaDoc
43 {
44   private static String JavaDoc[] PRODUCTS = { "Pojo", "Spring", "Sessions" };
45   private static ResourceBundleHelper m_bundleHelper = new ResourceBundleHelper(WelcomeFrame.class);
46   
47   private TabbedPane m_tabbedPane;
48   private ArrayList JavaDoc m_startupList;
49
50   public WelcomeFrame() {
51     super();
52
53     setTitle(getBundleString("welcome.title"));
54
55     m_startupList = new ArrayList JavaDoc();
56
57     Container JavaDoc cp = getContentPane();
58     cp.setLayout(new BorderLayout JavaDoc());
59     cp.add(m_tabbedPane = new TabbedPane());
60     
61     addWindowListener(new WindowAdapter JavaDoc() {
62       public void windowDeactivated(WindowEvent JavaDoc e) {
63         setTextPaneCursor(Cursor.DEFAULT_CURSOR);
64       }
65
66       public void windowActivated(WindowEvent JavaDoc e) {
67         setTextPaneCursor(Cursor.DEFAULT_CURSOR);
68       }
69
70       public void windowGainedFocus(WindowEvent JavaDoc e) {
71         setTextPaneCursor(Cursor.DEFAULT_CURSOR);
72       }
73     });
74
75     for (int i = 0; i < PRODUCTS.length; i++) {
76       TextPane textPane = new TextPane();
77       m_startupList.add(textPane);
78       textPane.setBackground(Color.WHITE);
79       textPane.setEditable(false);
80       textPane.addHyperlinkListener(this);
81       textPane.addPropertyChangeListener("page", this);
82       try {
83         textPane.setPage(getClass().getResource("Welcome" + PRODUCTS[i] + ".html"));
84       } catch (IOException JavaDoc ioe) {
85         textPane.setText(ioe.getMessage());
86       }
87
88       m_tabbedPane.add(PRODUCTS[i], textPane);
89       m_tabbedPane.setBackgroundAt(i, Color.WHITE);
90     }
91   }
92
93   private String JavaDoc getBundleString(String JavaDoc key) {
94     return m_bundleHelper.getString(key);
95   }
96
97   private TextPane getTextPane() {
98     return (TextPane) m_tabbedPane.getSelectedComponent();
99   }
100
101   protected void setTextPaneCursor(int type) {
102     Cursor JavaDoc c = Cursor.getPredefinedCursor(type);
103     TextPane textPane = getTextPane();
104     HTMLEditorKit JavaDoc kit = (HTMLEditorKit JavaDoc) textPane.getEditorKit();
105
106     textPane.setCursor(c);
107     kit.setDefaultCursor(c);
108
109     int linkType = (type == Cursor.WAIT_CURSOR) ? Cursor.WAIT_CURSOR : Cursor.HAND_CURSOR;
110     kit.setLinkCursor(Cursor.getPredefinedCursor(linkType));
111   }
112
113   public void hyperlinkUpdate(HyperlinkEvent JavaDoc e) {
114     TextPane textPane = getTextPane();
115     HyperlinkEvent.EventType JavaDoc type = e.getEventType();
116     Element JavaDoc elem = e.getSourceElement();
117
118     if (elem == null ||
119         type == HyperlinkEvent.EventType.ENTERED ||
120         type == HyperlinkEvent.EventType.EXITED) {
121       return;
122     }
123
124     if (textPane.getCursor().getType() != Cursor.WAIT_CURSOR) {
125       AttributeSet JavaDoc a = elem.getAttributes();
126       AttributeSet JavaDoc anchor = (AttributeSet JavaDoc) a.getAttribute(HTML.Tag.A);
127       String JavaDoc action = (String JavaDoc) anchor.getAttribute(HTML.Attribute.HREF);
128
129       hyperlinkActivated(anchor, action);
130     }
131   }
132
133   private String JavaDoc getProduct() {
134     return PRODUCTS[m_tabbedPane.getSelectedIndex()];
135   }
136
137   private void runDSOSampleLauncher() {
138     setTextPaneCursor(Cursor.WAIT_CURSOR);
139
140     try {
141       String JavaDoc[] cmdarray = { getJavaCmd().getAbsolutePath(), "-Dtc.config=tc-config.xml",
142           "-Dtc.install-root=" + getInstallRoot().getAbsolutePath(),
143           "-cp", getTCLib().getAbsolutePath(),
144           "com.tc.welcome.DSOSamplesFrame" };
145
146       Process JavaDoc p = exec(cmdarray, null, getProductDirectory());
147       InputStreamDrainer errDrainer = new InputStreamDrainer(p.getErrorStream());
148       InputStreamDrainer outDrainer = new InputStreamDrainer(p.getInputStream());
149
150       errDrainer.start();
151       outDrainer.start();
152       startFakeWaitPeriod();
153     } catch (Exception JavaDoc e) {
154       e.printStackTrace();
155     }
156   }
157
158   protected void hyperlinkActivated(AttributeSet JavaDoc anchor, String JavaDoc action) {
159     if (action.equals("show_samples")) {
160       if ("Pojo".equals(getProduct())) {
161         runDSOSampleLauncher();
162       } else {
163         File JavaDoc file = new File JavaDoc(getProductDirectory(), "samples.html");
164
165         openURL("file://" + file.getAbsolutePath());
166       }
167     } else if (action.equals("run_console")) {
168       startFakeWaitPeriod();
169       runScript("admin");
170     } else if (action.equals("run_configurator")) {
171       startFakeWaitPeriod();
172       runScript("sessions-configurator", "tools" + System.getProperty("file.separator") + "sessions");
173     } else if (action.equals("show_guide")) {
174       File JavaDoc file = new File JavaDoc(getProductDirectory(), "docs");
175       String JavaDoc doc = (String JavaDoc) anchor.getAttribute(HTML.Attribute.NAME);
176
177       file = new File JavaDoc(file, doc);
178
179       openURL(file.getAbsolutePath());
180     } else {
181       openURL(action);
182     }
183   }
184
185   protected File JavaDoc getProductDirectory() {
186     int index = m_tabbedPane.getSelectedIndex();
187     return new File JavaDoc(getSamplesDir(), PRODUCTS[index].toLowerCase());
188   }
189
190   protected void openURL(String JavaDoc url) {
191     setTextPaneCursor(Cursor.WAIT_CURSOR);
192     BrowserLauncher.openURL(url);
193     startFakeWaitPeriod();
194   }
195
196   protected void runSampleScript(String JavaDoc scriptPath) {
197     setTextPaneCursor(Cursor.WAIT_CURSOR);
198
199     File JavaDoc dir = getProductDirectory();
200     String JavaDoc ext = Os.isWindows() ? ".bat" : ".sh";
201     File JavaDoc file = new File JavaDoc(dir, scriptPath + ext);
202     String JavaDoc[] cmd = { file.getAbsolutePath() };
203
204     try {
205       Process JavaDoc p = Runtime.getRuntime().exec(cmd);
206
207       InputStreamDrainer errDrainer = new InputStreamDrainer(p.getErrorStream());
208       InputStreamDrainer outDrainer = new InputStreamDrainer(p.getInputStream());
209
210       errDrainer.start();
211       outDrainer.start();
212
213       startFakeWaitPeriod();
214     } catch (IOException JavaDoc ioe) {
215       ioe.printStackTrace();
216     }
217   }
218
219   protected void runScript(String JavaDoc scriptName) {
220     runScript(scriptName, "bin");
221   }
222
223   protected void runScript(String JavaDoc scriptName, String JavaDoc scriptRoot) {
224     setTextPaneCursor(Cursor.WAIT_CURSOR);
225
226     File JavaDoc dir = new File JavaDoc(getInstallRoot(), scriptRoot);
227     String JavaDoc ext = Os.isWindows() ? ".bat" : ".sh";
228     File JavaDoc file = new File JavaDoc(dir, scriptName + ext);
229     String JavaDoc[] cmd = { file.getAbsolutePath() };
230
231     try {
232       Process JavaDoc p = Runtime.getRuntime().exec(cmd);
233
234       InputStreamDrainer errDrainer = new InputStreamDrainer(p.getErrorStream());
235       InputStreamDrainer outDrainer = new InputStreamDrainer(p.getInputStream());
236
237       errDrainer.start();
238       outDrainer.start();
239
240       startFakeWaitPeriod();
241     } catch (IOException JavaDoc ioe) {
242       ioe.printStackTrace();
243     }
244   }
245
246   protected void startFakeWaitPeriod() {
247     Timer JavaDoc t = new Timer JavaDoc(3000, new ActionListener JavaDoc() {
248       public void actionPerformed(ActionEvent JavaDoc ae) {
249         setTextPaneCursor(Cursor.DEFAULT_CURSOR);
250       }
251     });
252     t.setRepeats(false);
253     t.start();
254   }
255
256   public void propertyChange(PropertyChangeEvent JavaDoc pce) {
257     TextPane textPane = (TextPane) pce.getSource();
258     m_startupList.remove(textPane);
259
260     if (m_startupList.isEmpty()) {
261       pack();
262       center();
263       Timer JavaDoc t = new Timer JavaDoc(2000, new ActionListener JavaDoc() {
264         public void actionPerformed(ActionEvent JavaDoc ae) {
265           setVisible(true);
266           splashProc.destroy();
267         }
268       });
269       t.setRepeats(false);
270       t.start();
271     }
272   }
273
274   private static Process JavaDoc splashProc;
275   
276   public static void main(final String JavaDoc[] args) throws Exception JavaDoc {
277     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
278
279     splashProc = Splash.start("Starting Terracotta Welcome...", new Runnable JavaDoc() {
280       public void run() {
281         ApplicationManager.parseLAFArgs(args);
282         WelcomeFrame welcome = new WelcomeFrame();
283         welcome.setResizable(false);
284       }
285     });
286     splashProc.waitFor();
287   }
288 }
289
Popular Tags