/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved. * * Oracle and Java are registered trademarks of Oracle and/or its affiliates. * Other names may be trademarks of their respective owners. * * The contents of this file are subject to the terms of either the GNU General * Public License Version 2 only ("GPL") or the Common Development and Distribution * License("CDDL") (collectively, the "License"). You may not use this file except in * compliance with the License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the * License for the specific language governing permissions and limitations under the * License. When distributing the software, include this License Header Notice in * each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP. Oracle * designates this particular file as subject to the "Classpath" exception as * provided by Oracle in the GPL Version 2 section of the License file that * accompanied this code. If applicable, add the following below the License Header, * with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyrighted [year] [name of copyright owner]" * * Contributor(s): * * The Original Software is NetBeans. The Initial Developer of the Original Software * is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All * Rights Reserved. * * If you wish your version of this file to be governed by only the CDDL or only the * GPL Version 2, indicate your decision by adding "[Contributor] elects to include * this software in this distribution under the [CDDL or GPL Version 2] license." If * you do not indicate a single choice of license, a recipient has the option to * distribute your version of this file under either the CDDL, the GPL Version 2 or * to extend the choice of license to its licensees as provided above. However, if * you add GPL Version 2 code and therefore, elected the GPL Version 2 license, then * the option applies only if the new code is made subject to such option by the * copyright holder. */ package org.mycompany.installer.wizard.components.panels; import java.awt.GridBagConstraints; import java.awt.Insets; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.netbeans.installer.product.Registry; import org.netbeans.installer.product.components.Product; import org.netbeans.installer.product.components.ProductConfigurationLogic; import org.netbeans.installer.utils.LogManager; import org.netbeans.installer.utils.ResourceUtils; import org.netbeans.installer.utils.StringUtils; import org.netbeans.installer.utils.exceptions.InitializationException; import org.netbeans.installer.utils.helper.swing.NbiCheckBox; import org.netbeans.installer.utils.helper.swing.NbiTextPane; import org.netbeans.installer.wizard.components.WizardPanel; import org.netbeans.installer.wizard.containers.SwingContainer; import org.netbeans.installer.wizard.containers.SwingFrameContainer; import org.netbeans.installer.wizard.ui.SwingUi; import org.netbeans.installer.wizard.ui.WizardUi; import static org.netbeans.installer.utils.helper.DetailedStatus.INSTALLED_SUCCESSFULLY; import static org.netbeans.installer.utils.helper.DetailedStatus.INSTALLED_WITH_WARNINGS; import static org.netbeans.installer.utils.helper.DetailedStatus.FAILED_TO_INSTALL; import static org.netbeans.installer.utils.helper.DetailedStatus.UNINSTALLED_SUCCESSFULLY; import static org.netbeans.installer.utils.helper.DetailedStatus.UNINSTALLED_WITH_WARNINGS; import static org.netbeans.installer.utils.helper.DetailedStatus.FAILED_TO_UNINSTALL; /** * * @author Dmitry Lipin */ public class PostInstallSummaryPanel extends WizardPanel { ///////////////////////////////////////////////////////////////////////////////// // Instance public PostInstallSummaryPanel() { setProperty(TITLE_PROPERTY, DEFAULT_TITLE); setProperty(DESCRIPTION_PROPERTY, DEFAULT_DESCRIPTION); setProperty(MESSAGE_TEXT_SUCCESS_PROPERTY, DEFAULT_MESSAGE_TEXT_SUCCESS); setProperty(MESSAGE_CONTENT_TYPE_SUCCESS_PROPERTY, DEFAULT_MESSAGE_CONTENT_TYPE_SUCCESS); setProperty(MESSAGE_TEXT_WARNINGS_PROPERTY, DEFAULT_MESSAGE_TEXT_WARNINGS); setProperty(MESSAGE_CONTENT_TYPE_WARNINGS_PROPERTY, DEFAULT_MESSAGE_CONTENT_TYPE_WARNINGS); setProperty(MESSAGE_TEXT_ERRORS_PROPERTY, DEFAULT_MESSAGE_TEXT_ERRORS); setProperty(MESSAGE_CONTENT_TYPE_ERRORS_PROPERTY, DEFAULT_MESSAGE_CONTENT_TYPE_ERRORS); setProperty(MESSAGE_TEXT_SUCCESS_UNINSTALL_PROPERTY, DEFAULT_MESSAGE_TEXT_SUCCESS_UNINSTALL); setProperty(MESSAGE_CONTENT_TYPE_SUCCESS_UNINSTALL_PROPERTY, DEFAULT_MESSAGE_CONTENT_TYPE_SUCCESS_UNINSTALL); setProperty(MESSAGE_TEXT_WARNINGS_UNINSTALL_PROPERTY, DEFAULT_MESSAGE_TEXT_WARNINGS_UNINSTALL); setProperty(MESSAGE_CONTENT_TYPE_WARNINGS_UNINSTALL_PROPERTY, DEFAULT_MESSAGE_CONTENT_TYPE_WARNINGS_UNINSTALL); setProperty(MESSAGE_TEXT_ERRORS_UNINSTALL_PROPERTY, DEFAULT_MESSAGE_TEXT_ERRORS_UNINSTALL); setProperty(MESSAGE_CONTENT_TYPE_ERRORS_UNINSTALL_PROPERTY, DEFAULT_MESSAGE_CONTENT_TYPE_ERRORS_UNINSTALL); setProperty(NEXT_BUTTON_TEXT_PROPERTY, DEFAULT_NEXT_BUTTON_TEXT); } @Override public boolean isPointOfNoReturn() { return true; } @Override public WizardUi getWizardUi() { if (wizardUi == null) { wizardUi = new PostInstallSummaryPanelUi(this); } return wizardUi; } ///////////////////////////////////////////////////////////////////////////////// // Inner Classes public static class PostInstallSummaryPanelUi extends WizardPanelUi { protected PostInstallSummaryPanel component; public PostInstallSummaryPanelUi(PostInstallSummaryPanel component) { super(component); this.component = component; } public SwingUi getSwingUi(SwingContainer container) { if (swingUi == null) { swingUi = new PostInstallSummaryPanelSwingUi(component, container); } return super.getSwingUi(container); } } public static class PostInstallSummaryPanelSwingUi extends WizardPanelSwingUi { protected PostInstallSummaryPanel component; private NbiTextPane messagePaneInstall; private NbiTextPane messagePaneUninstall; private NbiTextPane messagePaneFinish; private NbiCheckBox runAppNow; private Product app; public PostInstallSummaryPanelSwingUi( final PostInstallSummaryPanel component, final SwingContainer container) { super(component, container); this.component = component; initComponents(); } protected void initializeContainer() { super.initializeContainer(); // set up the back button container.getBackButton().setVisible(false); container.getBackButton().setEnabled(false); // set up the next (or finish) button container.getNextButton().setVisible(true); container.getNextButton().setEnabled(true); container.getNextButton().setText( component.getProperty(NEXT_BUTTON_TEXT_PROPERTY)); // set up the cancel button container.getCancelButton().setVisible(false); container.getCancelButton().setEnabled(false); } @Override public void evaluateNextButtonClick() { container.getNextButton().setEnabled(false); final Product product = app; if (app != null) { ProductConfigurationLogic l = null; try { l = app.getLogic(); } catch (InitializationException e) { } final File executable = l != null ? new File(app.getInstallationLocation(), l.getExecutable()) : null; if (executable != null && runAppNow.isSelected()) { LogManager.log("... running: " + executable.getAbsolutePath()); ProcessBuilder pb = new ProcessBuilder(new String[]{executable.getAbsolutePath()}); try { pb.start(); } catch (IOException e) { LogManager.log(e); } } } super.evaluateNextButtonClick(); } protected void initialize() { final Registry registry = Registry.getInstance(); final List<Product> successfulInstall = registry.getProducts(INSTALLED_SUCCESSFULLY); final List<Product> warningInstall = registry.getProducts(INSTALLED_WITH_WARNINGS); final List<Product> errorInstall = registry.getProducts(FAILED_TO_INSTALL); final List<Product> successfulUninstall = registry.getProducts(UNINSTALLED_SUCCESSFULLY); final List<Product> warningUninstall = registry.getProducts(UNINSTALLED_WITH_WARNINGS); final List<Product> errorUninstall = registry.getProducts(FAILED_TO_UNINSTALL); if (errorInstall.size() > 0) { messagePaneInstall.setContentType(component.getProperty(MESSAGE_CONTENT_TYPE_ERRORS_PROPERTY)); messagePaneInstall.setText(StringUtils.format( component.getProperty(MESSAGE_TEXT_ERRORS_PROPERTY), errorInstall.get(0).getDisplayName(), LogManager.getLogFile())); } else if (warningInstall.size() > 0) { messagePaneInstall.setContentType(component.getProperty(MESSAGE_CONTENT_TYPE_WARNINGS_PROPERTY)); messagePaneInstall.setText(StringUtils.format( component.getProperty(MESSAGE_TEXT_WARNINGS_PROPERTY), warningInstall.get(0).getDisplayName(), LogManager.getLogFile())); } else if (successfulInstall.size() > 0) { messagePaneInstall.setContentType(component.getProperty(MESSAGE_CONTENT_TYPE_SUCCESS_PROPERTY)); messagePaneInstall.setText(StringUtils.format( component.getProperty(MESSAGE_TEXT_SUCCESS_PROPERTY), successfulInstall.get(0).getDisplayName(), LogManager.getLogFile())); } else { messagePaneInstall.setVisible(false); } messagePaneFinish.setVisible(true); messagePaneFinish.setContentType(DEFAULT_MESSAGE_FINISH_PROCESS_CONTENT_TYPE); messagePaneFinish.setText(DEFAULT_MESSAGE_FINISH_PROCESS); if (errorUninstall.size() > 0) { messagePaneUninstall.setContentType(component.getProperty(MESSAGE_CONTENT_TYPE_ERRORS_UNINSTALL_PROPERTY)); messagePaneUninstall.setText(StringUtils.format( component.getProperty(MESSAGE_TEXT_ERRORS_UNINSTALL_PROPERTY), errorUninstall.get(0).getDisplayName(), LogManager.getLogFile())); } else if (warningUninstall.size() > 0) { messagePaneUninstall.setContentType(component.getProperty(MESSAGE_CONTENT_TYPE_WARNINGS_UNINSTALL_PROPERTY)); messagePaneUninstall.setText(StringUtils.format( component.getProperty(MESSAGE_TEXT_WARNINGS_UNINSTALL_PROPERTY), warningUninstall.get(0).getDisplayName(), LogManager.getLogFile())); } else if (successfulUninstall.size() > 0) { messagePaneUninstall.setContentType(component.getProperty(MESSAGE_CONTENT_TYPE_SUCCESS_UNINSTALL_PROPERTY)); messagePaneUninstall.setText(StringUtils.format( component.getProperty(MESSAGE_TEXT_SUCCESS_UNINSTALL_PROPERTY), successfulUninstall.get(0).getDisplayName(), LogManager.getLogFile())); } else { messagePaneUninstall.setVisible(false); } final List<Product> products = new LinkedList<Product>(); products.addAll(successfulInstall); products.addAll(warningInstall); runAppNow.setSelected(false); if (!products.isEmpty()) { runAppNow.setText(StringUtils.format(DEFAULT_MESSAGE_LAUNCH_APPLICATION_NOW, products.get(0).getDisplayName())); runAppNow.doClick(); app = products.get(0); } else { runAppNow.setVisible(false); } } private void initComponents() { // messagePaneInstall /////////////////////////////////////////////////// messagePaneInstall = new NbiTextPane(); // messagePaneUninstall ///////////////////////////////////////////////// messagePaneUninstall = new NbiTextPane(); // messagePaneRunApplication /////////////////////////////////////////////////// messagePaneFinish = new NbiTextPane(); runAppNow = new NbiCheckBox(); // this ///////////////////////////////////////////////////////////////// add(messagePaneInstall, new GridBagConstraints( 0, 0, // x, y 1, 1, // width, height 1.0, 0.0, // weight-x, weight-y GridBagConstraints.PAGE_START, // anchor GridBagConstraints.HORIZONTAL, // fill new Insets(31, 11, 0, 11), // padding 0, 0)); // padx, pady - ??? add(messagePaneUninstall, new GridBagConstraints( 0, 1, // x, y 1, 1, // width, height 1.0, 0.0, // weight-x, weight-y GridBagConstraints.PAGE_START, // anchor GridBagConstraints.BOTH, // fill new Insets(31, 11, 0, 11), // padding 0, 0)); // padx, pady - ??? add(messagePaneFinish, new GridBagConstraints( 0, 3, // x, y 1, 1, // width, height 1.0, 1.0, // weight-x, weight-y GridBagConstraints.PAGE_START, // anchor GridBagConstraints.HORIZONTAL, // fill new Insets(11, 11, 0, 11), // padding 0, 0)); // padx, pady - ??? /* add(new NbiPanel(), new GridBagConstraints( 0, 4, // x, y 1, 1, // width, height 1.0, 1.0, // weight-x, weight-y GridBagConstraints.CENTER, // anchor GridBagConstraints.BOTH, // fill new Insets(0, 11, 0, 11), // padding 0, 0)); // padx, pady - ??? */ add(runAppNow, new GridBagConstraints( 0, 4, // x, y 1, 1, // width, height 1.0, 1.0, // weight-x, weight-y GridBagConstraints.PAGE_START, // anchor GridBagConstraints.HORIZONTAL, // fill new Insets(11, 11, 0, 11), // padding 0, 0)); // padx, pady - ??? if (container instanceof SwingFrameContainer) { final SwingFrameContainer sfc = (SwingFrameContainer) container; sfc.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent event) { SwingUi currentUi = component.getWizardUi().getSwingUi(container); if (currentUi != null) { if (!container.getCancelButton().isEnabled() && // cancel button is disabled !container.getCancelButton().isVisible() && // no cancel button at this panel !container.getBackButton().isVisible() && // no back button at this panel container.getNextButton().isVisible() && // next button is visible container.getNextButton().isEnabled()) { // and enabled currentUi.evaluateNextButtonClick(); sfc.removeWindowListener(this); } } } }); } } } ///////////////////////////////////////////////////////////////////////////////// // Constants public static final String MESSAGE_TEXT_SUCCESS_PROPERTY = "message.text.success"; // NOI18N public static final String MESSAGE_CONTENT_TYPE_SUCCESS_PROPERTY = "message.content.type.success"; // NOI18N public static final String MESSAGE_TEXT_WARNINGS_PROPERTY = "message.text.warnings"; // NOI18N public static final String MESSAGE_CONTENT_TYPE_WARNINGS_PROPERTY = "message.content.type.warnings"; // NOI18N public static final String MESSAGE_TEXT_ERRORS_PROPERTY = "message.text.errors"; // NOI18N public static final String MESSAGE_CONTENT_TYPE_ERRORS_PROPERTY = "message.content.type.errors"; // NOI18N public static final String MESSAGE_TEXT_SUCCESS_UNINSTALL_PROPERTY = "message.text.success.uninstall"; // NOI18N public static final String MESSAGE_CONTENT_TYPE_SUCCESS_UNINSTALL_PROPERTY = "message.content.type.success.uninstall"; // NOI18N public static final String MESSAGE_TEXT_WARNINGS_UNINSTALL_PROPERTY = "message.text.warnings.uninstall"; // NOI18N public static final String MESSAGE_CONTENT_TYPE_WARNINGS_UNINSTALL_PROPERTY = "message.content.type.warnings.uninstall"; // NOI18N public static final String MESSAGE_TEXT_ERRORS_UNINSTALL_PROPERTY = "message.text.errors.uninstall"; // NOI18N public static final String MESSAGE_CONTENT_TYPE_ERRORS_UNINSTALL_PROPERTY = "message.content.type.errors.uninstall"; // NOI18N public static final String DEFAULT_MESSAGE_TEXT_SUCCESS = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.success"); // NOI18N public static final String DEFAULT_MESSAGE_CONTENT_TYPE_SUCCESS = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.content.type.success"); // NOI18N public static final String DEFAULT_MESSAGE_TEXT_WARNINGS = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.warnings"); // NOI18N public static final String DEFAULT_MESSAGE_CONTENT_TYPE_WARNINGS = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.content.type.warnings"); // NOI18N public static final String DEFAULT_MESSAGE_TEXT_ERRORS = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.errors"); // NOI18N public static final String DEFAULT_MESSAGE_CONTENT_TYPE_ERRORS = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.content.type.errors"); // NOI18N public static final String DEFAULT_MESSAGE_TEXT_SUCCESS_UNINSTALL = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.success.uninstall"); // NOI18N public static final String DEFAULT_MESSAGE_CONTENT_TYPE_SUCCESS_UNINSTALL = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.content.type.success.uninstall"); // NOI18N public static final String DEFAULT_MESSAGE_TEXT_WARNINGS_UNINSTALL = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.warnings.uninstall"); // NOI18N public static final String DEFAULT_MESSAGE_CONTENT_TYPE_WARNINGS_UNINSTALL = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.content.type.warnings.uninstall"); // NOI18N public static final String DEFAULT_MESSAGE_TEXT_ERRORS_UNINSTALL = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.errors.uninstall"); // NOI18N public static final String DEFAULT_MESSAGE_CONTENT_TYPE_ERRORS_UNINSTALL = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.content.type.errors.uninstall"); // NOI18N public static final String DEFAULT_TITLE = ResourceUtils.getString( PostInstallSummaryPanel.class, "PoISP.title"); // NOI18N public static final String DEFAULT_DESCRIPTION = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.description"); // NOI18N public static final String DEFAULT_NEXT_BUTTON_TEXT = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.next.button.text"); // NOI18N public static final String DEFAULT_MESSAGE_FINISH_PROCESS = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.finish"); // NOI18N public static final String DEFAULT_MESSAGE_FINISH_PROCESS_CONTENT_TYPE = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.text.finish.content.type"); // NOI18N public static final String DEFAULT_MESSAGE_LAUNCH_APPLICATION_NOW = ResourceUtils.getString(PostInstallSummaryPanel.class, "PoISP.message.run.application.now");//NOI18N }