From 8cb386b0d20ab4b79d199c983c44441ecaebdd21 Mon Sep 17 00:00:00 2001 From: ?? ? <ulysseskao@ximple.com.tw> Date: Thu, 07 Aug 2008 16:09:09 +0800 Subject: [PATCH] update for EOFM-141, EOFM-142 --- xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobWizard.java | 458 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 432 insertions(+), 26 deletions(-) diff --git a/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobWizard.java b/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobWizard.java index bb620b2..659c739 100644 --- a/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobWizard.java +++ b/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobWizard.java @@ -1,48 +1,454 @@ package com.ximple.eofms; import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ResourceBundle; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.ButtonGroup; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JEditorPane; +import javax.swing.JFileChooser; import javax.swing.JFrame; -import javax.swing.WindowConstants; import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.JToolBar; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.awl.Wizard; import org.awl.DefaultWizard; import org.awl.DefaultWizardPageDescriptor; -import org.awl.WizardConstants; +import org.awl.NavigationAuthorization; +import org.awl.Wizard; +import org.awl.WizardPageDescriptor; +import org.awl.demo.AwlDemo; +import org.awl.header.AbstractWizardHeader; +import org.awl.header.EclipseWizardHeader; +import org.awl.message.MessageLevel; -public class XQuartzJobWizard +public class XQuartzJobWizard extends DefaultWizard { static Log logger = LogFactory.getLog(XQuartzJobWizard.class); - public static void main(String[] args) - { - Wizard wizard = new DefaultWizard((JFrame)null); - initializeWizardComponent(wizard); + /** + * header type none + */ + private static final String HEADER_NONE = "none"; - wizard.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); - wizard.setTitle("Read a bad book..."); - wizard.setSize(new Dimension(430, 300)); - wizard.setVisible(true); + /** + * header type classic + */ + private static final String HEADER_CLASSIC = "classic"; + + /** + * header type eclipse + */ + private static final String HEADER_ECLIPSE = "eclipse"; + + /** + * first page + */ + private WizardPageDescriptor firstPage = null; + + /** + * second page + */ + private WizardPageDescriptor secondPage = null; + + /** + * third page + */ + private WizardPageDescriptor thirdPage = null; + + /** + * forth page + */ + private WizardPageDescriptor fourthPage = null; + + /** + * Creates a new instance of AwlDemo + */ + public XQuartzJobWizard(JFrame frame) + { + super(frame); + + AbstractWizardHeader header = new EclipseWizardHeader(); + header.getIconLabel().setIcon(new ImageIcon(AwlDemo.class.getResource("/org/awl/rc/install.png"))); + this.setHeader(header); + + final ResourceBundle rb = ResourceBundle.getBundle(XQuartzJobWizard.class.getName()); + + this.setTitle(rb.getString("title")); + + /** first page */ + this.firstPage = new DefaultWizardPageDescriptor(); + firstPage.setTitle(rb.getString("first.title")); + firstPage.setDescription(rb.getString("first.description")); + + JLabel firstLabel = new JLabel(rb.getString("first.label.text")); + firstLabel.setVerticalAlignment(SwingConstants.TOP); + firstLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + firstPage.setComponent(firstLabel); + + firstPage.setNextDescriptorId("2"); + + /** second page */ + this.secondPage = new DefaultWizardPageDescriptor(); + secondPage.setTitle(rb.getString("second.title")); + secondPage.setDescription(rb.getString("second.description")); + + secondPage.setMessage(rb.getString("second.messageContent"), MessageLevel.INFO); + + URL licenseUrl = null; + try + { + licenseUrl = new URL("http://www.gnu.org/licenses/lgpl-2.1.txt"); + } + catch (MalformedURLException e) + { + e.printStackTrace(); + } + + JEditorPane licensePane = null; + if (licenseUrl == null) + { + licensePane = new JEditorPane(); + licensePane.setText("license LGPL 2.1"); + } else + { + try + { + licensePane = new JEditorPane(licenseUrl); + } + catch (IOException e) + { + licensePane = new JEditorPane(); + licensePane.setText("license LGPL 2.1"); + } + } + + licensePane.setPreferredSize(new Dimension(630, 350)); + + final JRadioButton radioAcceptLicense = new JRadioButton(rb.getString("second.licenseAccepted")); + final JRadioButton radioRefuseLicense = new JRadioButton(rb.getString("second.licenseRefused")); + + ButtonGroup licenseButtonGroup = new ButtonGroup(); + licenseButtonGroup.add(radioAcceptLicense); + licenseButtonGroup.add(radioRefuseLicense); + + ChangeListener changeListener = new ChangeListener() + { + public void stateChanged(ChangeEvent e) + { + secondPage.setNextPageAuthorization( + radioAcceptLicense.isSelected() ? NavigationAuthorization.DEFAULT : + NavigationAuthorization.FORBIDDEN); + } + }; + + radioAcceptLicense.addChangeListener(changeListener); + radioRefuseLicense.addChangeListener(changeListener); + + radioRefuseLicense.setSelected(true); + + JPanel secondPageComponent = new JPanel(); + GridBagLayout secondPageLayout = new GridBagLayout(); + secondPageComponent.setLayout(secondPageLayout); + + GridBagConstraints gbc = new GridBagConstraints(); + + gbc.gridx = 1; + gbc.gridy = 1; + gbc.fill = GridBagConstraints.BOTH; + gbc.weightx = 1.0f; + gbc.weighty = 1.0f; + JScrollPane scrollLicense = new JScrollPane(licensePane); + scrollLicense.setBorder(BorderFactory.createLoweredBevelBorder()); + secondPageComponent.add(scrollLicense, gbc); + + gbc.gridx = 1; + gbc.gridy = 2; + gbc.fill = GridBagConstraints.NONE; + gbc.weightx = 0.0f; + gbc.weighty = 0.0f; + secondPageComponent.add(new JToolBar.Separator(new Dimension(10, 10)), gbc); + + gbc.gridx = 1; + gbc.gridy = 3; + gbc.anchor = GridBagConstraints.WEST; + secondPageComponent.add(radioAcceptLicense, gbc); + + gbc.gridx = 1; + gbc.gridy = 4; + secondPageComponent.add(radioRefuseLicense, gbc); + + secondPageComponent.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + secondPage.setComponent(secondPageComponent); + + secondPage.setPreviousDescriptorId("1"); + secondPage.setNextDescriptorId("3"); + + /** third page */ + final JTextField locationField = new JTextField(20); + final Action chooseLocation = new AbstractAction() + { + public void actionPerformed(ActionEvent e) + { + File current = null; + String text = locationField.getText(); + if (text != null && text.trim().length() > 0) + { + try + { + current = new File(text); + if (!current.exists()) + { + current = null; + } + } + catch (Exception ex) + { } + } + + JFileChooser chooser = new JFileChooser(current); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + chooser.setFileFilter(new javax.swing.filechooser.FileFilter() + { + public boolean accept(File f) + { + boolean result = false; + + if (f != null && f.isDirectory()) + { + result = true; + } + + return result; + } + + public String getDescription() + { + return rb.getString("third.fileChooser.description"); + } + }); + chooser.setMultiSelectionEnabled(false); + int answer = chooser.showDialog(XQuartzJobWizard.this, rb.getString("third.fileChooser.selectLabel")); + + if (answer == JFileChooser.CANCEL_OPTION) + { + locationField.setText(""); + thirdPage.setMessage(rb.getString("third.messageContent"), MessageLevel.WARN); + } else // aprove + { + locationField.setText(chooser.getSelectedFile().getPath()); + } + } + }; + this.thirdPage = new DefaultWizardPageDescriptor() + { + public void displayingPanel(Wizard wizard) + { + /** open file dialog box */ + if (locationField.getText().trim().length() == 0) + { + chooseLocation.actionPerformed(null); + } + } + }; + chooseLocation.putValue(Action.SMALL_ICON, new ImageIcon(AwlDemo.class.getResource("/org/awl/rc/folder.png"))); + thirdPage.setNextPageAuthorization(NavigationAuthorization.FORBIDDEN); + + locationField.getDocument().addDocumentListener(new DocumentListener() + { + public void changedUpdate(DocumentEvent e) + { } + + public void insertUpdate(DocumentEvent e) + { + this.changeNavigation(); + } + + public void removeUpdate(DocumentEvent e) + { + this.changeNavigation(); + } + + private void changeNavigation() + { + thirdPage.setNextPageAuthorization(locationField.getText().trim().length() > 0 ? NavigationAuthorization.DEFAULT : + NavigationAuthorization.FORBIDDEN); + } + }); + + thirdPage.setTitle(rb.getString("third.title")); + thirdPage.setDescription(rb.getString("third.description")); + + JPanel thirdSubPanel = new JPanel(); + + JPanel thirdPanel = new JPanel(); + JLabel installLocationLabel = new JLabel(rb.getString("third.label.text")); + installLocationLabel.setHorizontalAlignment(SwingConstants.LEFT); + thirdSubPanel.add(installLocationLabel); + locationField.setEnabled(false); + locationField.setHorizontalAlignment(SwingConstants.LEFT); + thirdSubPanel.add(locationField); + JButton locationButton = new JButton(chooseLocation); + locationButton.setHorizontalAlignment(SwingConstants.LEFT); + Dimension buttonPrefSize = new Dimension(locationButton.getPreferredSize()); + buttonPrefSize.height = locationField.getPreferredSize().height; +// buttonPrefSize.width = ((Icon)chooseLocation.getValue(Action.SMALL_ICON)).getIconWidth() + 4; + locationButton.setPreferredSize(buttonPrefSize); + thirdSubPanel.add(locationButton); + + thirdSubPanel.setAlignmentX(0.0f); + thirdPanel.setAlignmentX(0.0f); + + thirdPanel.setLayout(new GridBagLayout()); + + gbc.gridx = 1; + gbc.gridy = 1; + gbc.weightx = 0.0f; + gbc.weighty = 0.0f; + gbc.fill = GridBagConstraints.NONE; + thirdPanel.add(thirdSubPanel, gbc); + + gbc.gridx = 2; + gbc.gridy = 2; + gbc.weightx = 1.0f; + gbc.weighty = 1.0f; + gbc.fill = GridBagConstraints.BOTH; + thirdPanel.add(new JToolBar.Separator(new Dimension(5, 5)), gbc); + + thirdPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + thirdPage.setComponent(thirdPanel); + + thirdPage.setPreviousDescriptorId("2"); + thirdPage.setNextDescriptorId("4"); + + /** fourth page */ + final JProgressBar installProgressBar = new JProgressBar(); + final JLabel progressLabel = new JLabel(rb.getString("fourth.inProgress.text")); + + this.fourthPage = new DefaultWizardPageDescriptor() + { + public void displayingPanel(Wizard wizard) + { + /* begin installation */ + this.setPreviousPageAuthorization(NavigationAuthorization.FORBIDDEN); + this.setFinishAuthorization(NavigationAuthorization.FORBIDDEN); + + /* begin new thread */ + Runnable runnable = new Runnable() + { + public void run() + { + while (installProgressBar.getValue() < installProgressBar.getMaximum()) + { + Runnable r = new Runnable() + { + public void run() + { installProgressBar.setValue(installProgressBar.getValue() + 1); } + }; + SwingUtilities.invokeLater(r); + + try + { + Thread.sleep(50); + } + catch (InterruptedException e) + { + Runnable r1 = new Runnable() + { + public void run() + { installProgressBar.setValue(installProgressBar.getMaximum()); } + }; + SwingUtilities.invokeLater(r1); + + break; + } + } + + Runnable r2 = new Runnable() + { + public void run() + { progressLabel.setText(rb.getString("fourth.finished.text")); } + }; + SwingUtilities.invokeLater(r2); + + setFinishAuthorization(NavigationAuthorization.DEFAULT); + setCancelAuthorization(NavigationAuthorization.FORBIDDEN); + } + }; + + new Thread(runnable).start(); + } + }; + fourthPage.setTitle(rb.getString("fourth.title")); + fourthPage.setDescription(rb.getString("fourth.description")); + + JPanel fourthPanel = new JPanel(); + BoxLayout fourthLayout = new BoxLayout(fourthPanel, BoxLayout.PAGE_AXIS); + fourthPanel.setLayout(fourthLayout); + + fourthPanel.add(installProgressBar); + fourthPanel.add(progressLabel); + + fourthPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + fourthPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + fourthPage.setComponent(fourthPanel); + + fourthPage.setPreviousDescriptorId("3"); + + /** register */ + this.addPage(firstPage, "1"); + this.addPage(secondPage, "2"); + this.addPage(thirdPage, "3"); + this.addPage(fourthPage, "4"); } - private static void initializeWizardComponent(Wizard wizard) + public static void main(String[] args) { - DefaultWizardPageDescriptor page1 = new DefaultWizardPageDescriptor(); - page1.setComponent(new JLabel("this is my first page")); - page1.setDescription("my first page"); + Runnable runnable = new Runnable() + { + public void run() + { + Wizard wizard = new XQuartzJobWizard((JFrame) null); - DefaultWizardPageDescriptor page2 = new DefaultWizardPageDescriptor(); - page2.setComponent(new JLabel("this is my second page")); - page2.setDescription("my second page"); + wizard.pack(); + wizard.setVisibleOnCenterOfScreen(); + } + }; - page1.setNextDescriptorId("2"); - page2.setPreviousDescriptorId("1"); - page1.setPreviousDescriptorId(WizardConstants.STARTING_DESCRIPTOR_ID); - page2.setNextDescriptorId(WizardConstants.TERMINAL_DESCRIPTOR_ID); - - wizard.addPage(page1, "1"); - wizard.addPage(page2, "2"); + try + { + SwingUtilities.invokeLater(runnable); + } + catch (Exception ex) + { + ex.printStackTrace(); + } } } -- Gitblit v0.0.0-SNAPSHOT