All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.enterprise.tools.upgrade.gui.DataCollectionPanel Maven / Gradle / Ivy

The newest version!
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
 *
 * 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
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  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 packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * 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.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * 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 don't 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 com.sun.enterprise.tools.upgrade.gui;

import com.sun.enterprise.tools.upgrade.common.Branding;
import com.sun.enterprise.tools.upgrade.common.CommonInfoModel;
import com.sun.enterprise.util.i18n.StringManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.Arrays;
import javax.swing.JFileChooser;

/**
 * JPanel used to collect information from the user needed
 * to perform the upgrade. After the main panel has been initialized,
 * it will call into this panel to check the state of the required
 * text fields.
 *
 * @author Bobby Bissett
 */
public class DataCollectionPanel extends javax.swing.JPanel {

    private static final StringManager stringManager =
        StringManager.getManager(MainFrame.class);
    private static final CommonInfoModel commonInfoModel =
        CommonInfoModel.getInstance();
    
    // putting this in one place in case formatting needs to change
    private static final String REQUIRED_FIELD_CHAR =
        stringManager.getString("upgrade.gui.detailspanel.requiredField.char");
    private static final String SOURCE_LABEL_TEXT = String.format(
        "%s %s", REQUIRED_FIELD_CHAR,
        stringManager.getString("upgrade.gui.detailspanel.sourceDirLabel"));
    private static final String TARGET_LABEL_TEXT = String.format(
        "%s %s", REQUIRED_FIELD_CHAR,
        stringManager.getString("upgrade.gui.detailspanel.targetDirLabel"));
    private static final String REQUIRED_TEXT_LABEL = String.format(
        "(%s %s)", REQUIRED_FIELD_CHAR,
        stringManager.getString("upgrade.gui.detailspanel.requiredField.text"));
    private final MainFrame mainFrame;
    private final JFileChooser chooser;

    // could be rebranded
    private String contentLabelString;
    
    /**
     * Creates new form DataCollectionPanel. Instance of MainPanel is
     * passed in so that this panel can set the state of the 'next'
     * button to continue.
     */
    public DataCollectionPanel(MainFrame mainFrame) {
        contentLabelString = Branding.getString(
            "upgrade.gui.detailspanel.contentLabel",
            stringManager, commonInfoModel.getTarget().getVersion());

        initComponents();

        this.mainFrame = mainFrame;

        // listen for key presses to enable "next" button
        KeyAdapter dirTextKeyAdapter = new KeyAdapter() {

            @Override
            public void keyReleased(KeyEvent ke) {
                processDirTextKeyReleased();
            }
        };
        sourceTextField.addKeyListener(dirTextKeyAdapter);
        targetTextField.addKeyListener(dirTextKeyAdapter);

        // set initial values for source/target text fields
        String tempStr = commonInfoModel.getSource().getInstallDir();
        if (tempStr != null) {
            sourceTextField.setText(tempStr);
        }
        tempStr = commonInfoModel.getTarget().getInstallDir();
        if (tempStr != null) {
            targetTextField.setText(tempStr);
        }
        if (commonInfoModel.getSource().getMasterPassword() != null) {
            masterPWField.setEnabled(false);
        }

        // add listeners for source/target browse buttons
        sourceBrowseButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                sourceBrowseButtonActionPerformed();
            }
        });
        targetBrowseButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                targetBrowseButtonActionPerformed();
            }
        });

        // create file chooser for source and target directories
        chooser = new JFileChooser();
        chooser.setDialogTitle(stringManager.getString(
            "upgrade.gui.detailspanel.fileChooseTitle"));
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // //GEN-BEGIN:initComponents
    private void initComponents() {

        javax.swing.JLabel headerLabel = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        javax.swing.JLabel contentLabel = new javax.swing.JLabel();
        sourceLabel = new javax.swing.JLabel();
        sourceTextField = new javax.swing.JTextField();
        sourceBrowseButton = new javax.swing.JButton();
        javax.swing.JLabel targetLabel = new javax.swing.JLabel();
        targetTextField = new javax.swing.JTextField();
        targetBrowseButton = new javax.swing.JButton();
        javax.swing.JLabel masterPWLabel = new javax.swing.JLabel();
        masterPWField = new javax.swing.JPasswordField();
        javax.swing.JLabel reqTextLabel = new javax.swing.JLabel();

        headerLabel.setText(stringManager.getString("upgrade.gui.detailspanel.headerPanel"));

        contentLabel.setForeground(java.awt.Color.blue);
        contentLabel.setText(contentLabelString);

        sourceLabel.setLabelFor(sourceTextField);
        sourceLabel.setText(SOURCE_LABEL_TEXT);

        sourceTextField.setToolTipText(stringManager.getString("upgrade.gui.detailspanel.sourceHelpLabel"));

        sourceBrowseButton.setText(stringManager.getString("upgrade.gui.detailspanel.browseButtonText"));

        targetLabel.setLabelFor(targetTextField);
        targetLabel.setText(TARGET_LABEL_TEXT);

        targetBrowseButton.setText(stringManager.getString("upgrade.gui.detailspanel.browseButtonText"));

        masterPWLabel.setText(stringManager.getString("upgrade.gui.detailspanel.masterPWLabel"));

        reqTextLabel.setText(REQUIRED_TEXT_LABEL);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(contentLabel)
                            .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 500, Short.MAX_VALUE)
                            .addComponent(headerLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 500, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(sourceLabel)
                                    .addComponent(targetLabel)
                                    .addComponent(targetTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE)
                                    .addComponent(sourceTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(targetBrowseButton)
                                    .addComponent(sourceBrowseButton))))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(masterPWField, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE)
                        .addGap(266, 266, 266))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(masterPWLabel)
                        .addContainerGap(436, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(reqTextLabel)
                        .addContainerGap(436, Short.MAX_VALUE))))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {sourceBrowseButton, targetBrowseButton});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(headerLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 12, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(contentLabel)
                .addGap(18, 18, 18)
                .addComponent(sourceLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(sourceTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(sourceBrowseButton))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(targetLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(targetTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(targetBrowseButton))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(masterPWLabel)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(masterPWField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(reqTextLabel)
                .addContainerGap(52, Short.MAX_VALUE))
        );
    }// //GEN-END:initComponents

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JPasswordField masterPWField;
    private javax.swing.JButton sourceBrowseButton;
    private javax.swing.JLabel sourceLabel;
    private javax.swing.JTextField sourceTextField;
    private javax.swing.JButton targetBrowseButton;
    private javax.swing.JTextField targetTextField;
    // End of variables declaration//GEN-END:variables

    /*
     * After the main frame is initialized, it calls
     * this method so that the data collection panel
     * can check if the user can continue (e.g., click
     * the 'next' button) or not. This method simply
     * calls the processDirTextKeyReleased method,
     * an implementation detail.
     */
    void checkState() {
        processDirTextKeyReleased();
    }

    /*** Getters for data fields ***/
    public String getSourceDirPath() {
        return sourceTextField.getText();
    }
    
    public String getDestinationDirPath() {
        return targetTextField.getText();
    }

    public char [] getMasterPassword() {
        return masterPWField.getPassword();
    }
    /*** end getters ***/

    /*
     * Check required fields and update "next" button in main
     * frame. No need to check state of main frame since the fields
     * that fire this event are only present in data collection panel.
     */
    private void processDirTextKeyReleased() {
        if (sourceTextField.getText().isEmpty() ||
            targetTextField.getText().isEmpty()) {
            mainFrame.allowContinue(false);
        } else {
            mainFrame.allowContinue(true);
        }
    }

    /*
     * Show file chooser dialog and update status. Setting
     * current dir here to null in case it has already
     * been set by targetBrowseButtonActionPerformed.
     */
    private void sourceBrowseButtonActionPerformed() {
        chooser.setCurrentDirectory(null);
        int retVal = chooser.showOpenDialog(mainFrame);
        if (JFileChooser.APPROVE_OPTION == retVal) {
            sourceTextField.setText(chooser.getSelectedFile().getPath());
            checkState();
        }
    }

    /*
     * Show file chooser dialog and update status. This is the
     * same as sourceBrowseButtonActionPerformed, except that the
     * target directory text field has a default value so we will
     * use it as the starting directory in the dialog.
     */
    private void targetBrowseButtonActionPerformed() {
        chooser.setCurrentDirectory(new File(targetTextField.getText()));
        int retVal = chooser.showOpenDialog(mainFrame);
        if (JFileChooser.APPROVE_OPTION == retVal) {
            targetTextField.setText(chooser.getSelectedFile().getPath());
            checkState();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy