001: /* ====================================================================
002: * The JRefactory License, Version 1.0
003: *
004: * Copyright (c) 2001 JRefactory. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * 3. The end-user documentation included with the redistribution,
019: * if any, must include the following acknowledgment:
020: * "This product includes software developed by the
021: * JRefactory (http://www.sourceforge.org/projects/jrefactory)."
022: * Alternately, this acknowledgment may appear in the software itself,
023: * if and wherever such third-party acknowledgments normally appear.
024: *
025: * 4. The names "JRefactory" must not be used to endorse or promote
026: * products derived from this software without prior written
027: * permission. For written permission, please contact seguin@acm.org.
028: *
029: * 5. Products derived from this software may not be called "JRefactory",
030: * nor may "JRefactory" appear in their name, without prior written
031: * permission of Chris Seguin.
032: *
033: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
034: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
035: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
036: * DISCLAIMED. IN NO EVENT SHALL THE CHRIS SEGUIN OR
037: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
038: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
039: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
040: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
041: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
042: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
043: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
044: * SUCH DAMAGE.
045: * ====================================================================
046: *
047: * This software consists of voluntary contributions made by many
048: * individuals on behalf of JRefactory. For more information on
049: * JRefactory, please see
050: * <http://www.sourceforge.org/projects/jrefactory>.
051: */
052: package org.acm.seguin.tools.stub;
053:
054: import java.awt.event.ActionEvent;
055: import java.awt.event.ActionListener;
056: import java.io.File;
057: import java.io.IOException;
058: import javax.swing.JButton;
059: import javax.swing.JDialog;
060: import javax.swing.JFileChooser;
061: import javax.swing.JFrame;
062: import javax.swing.JLabel;
063: import javax.swing.JOptionPane;
064: import javax.swing.JTextArea;
065: import org.acm.seguin.awt.CenterDialog;
066: import org.acm.seguin.io.ExtensionFileFilter;
067:
068: /**
069: * Asks the user where to start loading the JDK source code files
070: *
071: *@author Chris Seguin
072: *@author mike Atkinson
073: *@created September 12, 2001
074: */
075: public class StubPrompter extends JDialog implements ActionListener {
076: private JTextArea filename;
077: private File result;
078:
079: private String jdk = null;
080:
081: private String[] JDK_instructions = new String[] {
082: "To effectively use this tool it is necessary to have",
083: "some overview of the Java Development Kit's",
084: "source code.",
085: "Please enter the jar or zip file that contains the",
086: "source. It is usually called src.zip." };
087:
088: private String[] generalInstructions = new String[] {
089: "A stub may be obtained for any set of source files.",
090: "These are used to generate UML diagrams of ", };
091:
092: /**
093: * Constructor for the StubPrompter object
094: *
095: *@param frame Description of Parameter
096: *@param output Description of Parameter
097: *@param findJDK get the stubs for the JDK
098: */
099: public StubPrompter(JFrame frame, File output, boolean findJDK) {
100: super (frame, (findJDK) ? "JDK Summary Generator"
101: : "Summary Generator", true);
102:
103: result = output;
104:
105: setSize(300, 205);
106: getContentPane().setLayout(null);
107:
108: String[] instructionText = (findJDK) ? JDK_instructions
109: : generalInstructions;
110:
111: int location = 0;
112: int height = 0;
113: for (int i = 0; i < instructionText.length; i++) {
114: JLabel instructions = new JLabel(instructionText[i]);
115: instructions.setLocation(5, 5 + location);
116: instructions.setSize(instructions.getPreferredSize());
117: height = instructions.getPreferredSize().height;
118: location += height;
119: getContentPane().add(instructions);
120: }
121: location += height;
122:
123: filename = new JTextArea();
124: filename.setLocation(5, 15 + location);
125: filename.setSize(190, 25);
126: getContentPane().add(filename);
127:
128: JButton browse = new JButton("Browse");
129: browse.setLocation(200, 15 + location);
130: browse.setSize(85, 25);
131: getContentPane().add(browse);
132: browse.addActionListener(this );
133:
134: JButton okButton = new JButton("OK");
135: okButton.setLocation(5, 45 + location);
136: okButton.setSize(85, 25);
137: getContentPane().add(okButton);
138: okButton.addActionListener(this );
139:
140: CenterDialog.center(this , frame);
141: }
142:
143: /**
144: * The user has pressed a button. Handle the action appropriately.
145: *
146: *@param evt A description of the action
147: */
148: public void actionPerformed(ActionEvent evt) {
149: if (evt.getActionCommand().equals("OK")) {
150: //System.out.println("OK button: " + filename.getText());
151: String name = filename.getText();
152: File file = new File(name);
153: boolean fileOK = checkJDK(name);
154: if (fileOK && file.exists()) {
155: setModal(false);
156: dispose();
157: new StubGenerator((java.awt.Frame) getOwner(), name,
158: result).run();
159: } else if (!fileOK) {
160: JOptionPane
161: .showMessageDialog(
162: this ,
163: "The file you entered does not seem to be the source\n"
164: + "for the Java JDK. It should be in a directory containing\n"
165: + "a string \"1.3.x\", \"1.4.x\" or \"1.5.x\"\n"
166: + "The JDKs for versions before 1.3 do not conform to the\n"
167: + "current Java language specification",
168: "File not correct",
169: JOptionPane.ERROR_MESSAGE);
170: } else {
171: JOptionPane
172: .showMessageDialog(
173: this ,
174: "The file you entered does not exist.\nPlease select the source code for the JDK.",
175: "File does not exist",
176: JOptionPane.ERROR_MESSAGE);
177: }
178: } else if (evt.getActionCommand().equals("Browse")) {
179: //System.out.println("Browse button");
180: JFileChooser chooser = new JFileChooser();
181:
182: ExtensionFileFilter jarFilter = new ExtensionFileFilter();
183: jarFilter.addExtension(".jar");
184: jarFilter.setDescription("Jar files");
185: chooser.addChoosableFileFilter(jarFilter);
186:
187: ExtensionFileFilter zipFilter = new ExtensionFileFilter();
188: zipFilter.addExtension(".zip");
189: zipFilter.setDescription("Zip files");
190: chooser.setFileFilter(zipFilter);
191:
192: chooser
193: .setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
194:
195: int result = chooser.showOpenDialog(this );
196: if (result == JFileChooser.APPROVE_OPTION) {
197: File selected = chooser.getSelectedFile();
198: String path = null;
199: try {
200: path = selected.getCanonicalPath();
201: } catch (IOException ioe) {
202: path = selected.getPath();
203: }
204: filename.setText(path);
205: }
206: }
207: }
208:
209: private boolean checkJDK(String name) {
210: if (name.indexOf("1.5") >= 0) {
211: if (name.indexOf("1.5.1") >= 0) {
212: jdk = "1.5.1";
213: } else if (name.indexOf("1.5.2") >= 0) {
214: jdk = "1.5.2";
215: } else {
216: jdk = "1.5.0";
217: }
218: } else if (name.indexOf("1.4") >= 0) {
219: if (name.indexOf("1.4.1") >= 0) {
220: jdk = "1.4.1";
221: } else if (name.indexOf("1.4.2") >= 0) {
222: jdk = "1.4.2";
223: } else if (name.indexOf("1.4.3") >= 0) {
224: jdk = "1.4.3";
225: } else {
226: jdk = "1.4.0";
227: }
228: } else if (name.indexOf("1.3") >= 0) {
229: if (name.indexOf("1.3.1") >= 0) {
230: jdk = "1.3.1";
231: } else {
232: jdk = "1.3.0";
233: }
234: } else if (name.indexOf("1.2") >= 0) {
235: if (name.indexOf("1.2.1") >= 0) {
236: jdk = "1.2.2";
237: } else if (name.indexOf("1.2.2") >= 0) {
238: jdk = "1.2.2";
239: } else {
240: jdk = "1.2.0";
241: }
242: return false;
243: } else {
244: jdk = "1.1";
245: return false;
246: }
247: return true;
248: }
249:
250: /**
251: * The main program for the StubPrompter class
252: *
253: *@param args The command line arguments
254: */
255: public static void main(String[] args) {
256: (new StubPrompter(null, new File("c:\\temp\\test.stub"), false))
257: .setVisible(true);
258: }
259: }
|