/*
* 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.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.io.File;
import java.util.List;
import org.netbeans.installer.product.Registry;
import org.netbeans.installer.product.components.Product;
import org.netbeans.installer.utils.ErrorManager;
import org.netbeans.installer.utils.LogManager;
import org.netbeans.installer.utils.ResourceUtils;
import org.netbeans.installer.utils.StringUtils;
import org.netbeans.installer.utils.SystemUtils;
import org.netbeans.installer.utils.exceptions.InitializationException;
import org.netbeans.installer.utils.helper.Platform;
import org.netbeans.installer.utils.helper.swing.NbiPanel;
import org.netbeans.installer.utils.helper.swing.NbiTextPane;
import org.netbeans.installer.wizard.components.panels.ErrorMessagePanel;
import org.netbeans.installer.wizard.components.panels.ErrorMessagePanel.ErrorMessagePanelSwingUi;
import org.netbeans.installer.wizard.components.panels.ErrorMessagePanel.ErrorMessagePanelUi;
import org.netbeans.installer.wizard.containers.SwingContainer;
import org.netbeans.installer.wizard.ui.SwingUi;
import org.netbeans.installer.wizard.ui.WizardUi;
/**
*
* @author Dmitry Lipin
*/
public class WelcomePanel extends ErrorMessagePanel {
/////////////////////////////////////////////////////////////////////////////////
private Registry bundledRegistry;
private Registry defaultRegistry;
public WelcomePanel() {
setProperty(TITLE_PROPERTY,
DEFAULT_TITLE);
setProperty(DESCRIPTION_PROPERTY,
DEFAULT_DESCRIPTION);
setProperty(WELCOME_TEXT_PROPERTY,
DEFAULT_WELCOME_TEXT);
setProperty(WELCOME_ALREADY_INSTALLED_TEXT_PROPERTY,
DEFAULT_WELCOME_ALREADY_INSTALLED_TEXT);
setProperty(WELCOME_ALREADY_INSTALLED_NEXT_BUTTON_TEXT_PROPERTY,
DEFAULT_WELCOME_ALREADY_INSTALLED_NEXT_BUTTON_TEXT);
try {
defaultRegistry = Registry.getInstance();
bundledRegistry = new Registry();
final String bundledRegistryUri = System.getProperty(
Registry.BUNDLED_PRODUCT_REGISTRY_URI_PROPERTY);
if (bundledRegistryUri != null) {
bundledRegistry.loadProductRegistry(bundledRegistryUri);
} else {
bundledRegistry.loadProductRegistry(
Registry.DEFAULT_BUNDLED_PRODUCT_REGISTRY_URI);
}
} catch (InitializationException e) {
ErrorManager.notifyError("Cannot load bundled registry", e);
}
}
Registry getBundledRegistry() {
return bundledRegistry;
}
@Override
public WizardUi getWizardUi() {
if (wizardUi == null) {
wizardUi = new WelcomePanelUi(this);
}
return wizardUi;
}
@Override
public boolean canExecuteForward() {
return canExecute();
}
@Override
public boolean canExecuteBackward() {
return canExecute();
}
// private //////////////////////////////////////////////////////////////////////
private boolean canExecute() {
return bundledRegistry.getNodes().size() > 1;
}
/////////////////////////////////////////////////////////////////////////////////
// Inner Classes
public static class WelcomePanelUi extends ErrorMessagePanelUi {
protected WelcomePanel component;
public WelcomePanelUi(WelcomePanel component) {
super(component);
this.component = component;
}
@Override
public SwingUi getSwingUi(SwingContainer container) {
if (swingUi == null) {
swingUi = new WelcomePanelSwingUi(component, container);
}
return super.getSwingUi(container);
}
}
public static class WelcomePanelSwingUi extends ErrorMessagePanelSwingUi {
protected WelcomePanel panel;
private NbiTextPane textPane;
private NbiPanel leftImagePanel;
ValidatingThread validatingThread;
public WelcomePanelSwingUi(
final WelcomePanel component,
final SwingContainer container) {
super(component, container);
this.panel = component;
initComponents();
}
@Override
public String getTitle() {
return null; // the welcome page does not have a title
}
// protected ////////////////////////////////////////////////////////////////
@Override
protected void initializeContainer() {
super.initializeContainer();
container.getBackButton().setVisible(false);
}
@Override
protected void initialize() {
textPane.setContentType("text/html");
textPane.setText(StringUtils.format(panel.getProperty(WELCOME_TEXT_PROPERTY)));
List<Product> toInstall = Registry.getInstance().getProductsToInstall();
if(toInstall.isEmpty()) {
List <Product> list = panel.getBundledRegistry().getProducts();
if(list.size() == 1) {
if(SystemUtils.getCurrentPlatform().isCompatibleWith(list.get(0).getPlatforms())) {
File installationLocation = list.get(0).getInstallationLocation();
textPane.setText(
StringUtils.format(
panel.getProperty(WELCOME_ALREADY_INSTALLED_TEXT_PROPERTY),
list.get(0).getDisplayName(),
installationLocation.getAbsolutePath()));
} else {
textPane.setText(
StringUtils.format(
WELCOME_INCOMPATIBLE_PLATFORM_TEXT,
list.get(0).getDisplayName()));
}
container.getCancelButton().setVisible(false);
container.getNextButton().setText(panel.getProperty(
WELCOME_ALREADY_INSTALLED_NEXT_BUTTON_TEXT_PROPERTY));
}
}
super.initialize();
}
// private //////////////////////////////////////////////////////////////////
private void initComponents() {
// textPane /////////////////////////////////////////////////////////////
textPane = new NbiTextPane();
leftImagePanel = new NbiPanel();
int width = 0;
int height = 0;
final String topLeftImage = SystemUtils.resolveString(
System.getProperty(
WELCOME_PAGE_LEFT_TOP_IMAGE_PROPERTY));
final String bottomLeftImage = SystemUtils.resolveString(
System.getProperty(
WELCOME_PAGE_LEFT_BOTTOM_IMAGE_PROPERTY));
int bottomAnchor = NbiPanel.ANCHOR_BOTTOM_LEFT;
if (topLeftImage != null) {
leftImagePanel.setBackgroundImage(topLeftImage, ANCHOR_TOP_LEFT);
width = leftImagePanel.getBackgroundImage(NbiPanel.ANCHOR_TOP_LEFT).getIconWidth();
height += leftImagePanel.getBackgroundImage(NbiPanel.ANCHOR_TOP_LEFT).getIconHeight();
}
if (bottomLeftImage != null) {
leftImagePanel.setBackgroundImage(bottomLeftImage, bottomAnchor);
width = leftImagePanel.getBackgroundImage(bottomAnchor).getIconWidth();
height += leftImagePanel.getBackgroundImage(bottomAnchor).getIconHeight();
}
leftImagePanel.setPreferredSize(new Dimension(width, height));
leftImagePanel.setMaximumSize(new Dimension(width, height));
leftImagePanel.setMinimumSize(new Dimension(width, 0));
leftImagePanel.setSize(new Dimension(width, height));
leftImagePanel.setOpaque(false);
// this /////////////////////////////////////////////////////////////////
int dy = 0;
add(leftImagePanel, new GridBagConstraints(
0, 0, // x, y
1, 100, // width, height
0.0, 1.0, // weight-x, weight-y
GridBagConstraints.WEST, // anchor
GridBagConstraints.VERTICAL, // fill
new Insets(0, 0, 0, 0), // padding
0, 0)); // padx, pady - ???
add(textPane, new GridBagConstraints(
1, dy++, // x, y
4, 1, // width, height
1.0, 0.0, // weight-x, weight-y
GridBagConstraints.LINE_START, // anchor
GridBagConstraints.HORIZONTAL, // fill
new Insets(10, 11, 11, 11), // padding
0, 0)); // padx, pady - ???
NbiTextPane separatorPane = new NbiTextPane();
separatorPane = new NbiTextPane();
add(separatorPane, new GridBagConstraints(
3, dy, // x, y
1, 1, // width, height
1.0, 0.0, // weight-x, weight-y
GridBagConstraints.CENTER, // anchor
GridBagConstraints.BOTH, // fill
new Insets(0, 0, 0, 0), // padding
0, 0)); // padx, pady - ???
// move error label after the left welcome image
Component errorLabel = getComponent(0);
getLayout().removeLayoutComponent(errorLabel);
add(errorLabel, new GridBagConstraints(
1, 99, // x, y
99, 1, // width, height
1.0, 0.0, // weight-x, weight-y
GridBagConstraints.CENTER, // anchor
GridBagConstraints.HORIZONTAL, // fill
new Insets(4, 11, 4, 0), // padding
0, 0)); // ??? (padx, pady)
}
}
/////////////////////////////////////////////////////////////////////////////////
// Constants
public static final String DEFAULT_TITLE =
ResourceUtils.getString(WelcomePanel.class,
"WP.title");
public static final String DEFAULT_DESCRIPTION =
ResourceUtils.getString(WelcomePanel.class,
"WP.description"); // NOI18N
public static final String WELCOME_TEXT_PROPERTY =
"welcome.text"; // NOI18N
public static final String WELCOME_ALREADY_INSTALLED_TEXT_PROPERTY =
"welcome.already.installed.text"; // NOI18N
public static final String WELCOME_ALREADY_INSTALLED_NEXT_BUTTON_TEXT_PROPERTY =
"welcome.already.installed.next.button.text";//NOI18N
public static final String WELCOME_INCOMPATIBLE_PLATFORM_TEXT =
ResourceUtils.getString(WelcomePanel.class,
"WP.incompatible.platform.text");//NOI18N
public static final String DEFAULT_WELCOME_ALREADY_INSTALLED_NEXT_BUTTON_TEXT =
ResourceUtils.getString(WelcomePanel.class,
"WP.already.installed.next.button.text");//NOI18N
public static final String DEFAULT_WELCOME_TEXT =
ResourceUtils.getString(WelcomePanel.class,
"WP.welcome.text"); // NOI18N
public static final String DEFAULT_WELCOME_ALREADY_INSTALLED_TEXT =
ResourceUtils.getString(WelcomePanel.class,
"WP.already.installed.text"); // NOI18N
public static final String WELCOME_PAGE_LEFT_TOP_IMAGE_PROPERTY =
"nbi.wizard.ui.swing.welcome.left.top.image";//NOI18N
public static final String WELCOME_PAGE_LEFT_BOTTOM_IMAGE_PROPERTY =
"nbi.wizard.ui.swing.welcome.left.bottom.image";//NOI18N
}