Java tutorial
/* * Copyright 2013 Hewlett-Packard Development Company, L.P * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hp.alm.ali.idea.genesis; import com.hp.alm.ali.idea.cfg.AliConfiguration; import com.hp.alm.ali.idea.genesis.checkout.Checkout; import com.hp.alm.ali.idea.genesis.steps.BranchStep; import com.hp.alm.ali.idea.genesis.steps.GenesisStep; import com.hp.alm.ali.idea.genesis.steps.RepositoryStep; import com.hp.alm.ali.idea.genesis.steps.DomainStep; import com.hp.alm.ali.idea.genesis.steps.ProjectStep; import com.hp.alm.ali.idea.genesis.steps.ALMStep; import com.hp.alm.ali.idea.genesis.steps.ReleaseStep; import com.hp.alm.ali.idea.genesis.steps.TargetStep; import com.intellij.ide.wizard.AbstractWizard; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.vfs.VirtualFile; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class GenesisDialog extends AbstractWizard<GenesisStep> implements ItemListener, DocumentListener { private JPanel panel; private WizardContext context; public GenesisDialog() { super("Provision Development Environment", JOptionPane.getRootFrame()); AliConfiguration conf = ApplicationManager.getApplication().getComponent(AliConfiguration.class); panel = new JPanel(); panel.setLayout(new BorderLayout(10, 10)); JPanel panel3 = new JPanel(); panel3.setLayout(new BorderLayout()); panel3.add(new JLabel(IconLoader.getIcon("/ali_icon_64x64.png")), BorderLayout.NORTH); panel.add(panel3, BorderLayout.WEST); context = new WizardContext(); context.panel = panel; JPanel panel2 = new JPanel(); panel2.setLayout(new GridLayout(0, 1)); context.locationLbl = new JLabel("HP ALM Location:"); panel2.add(context.locationLbl); context.location = new JTextField(conf.ALM_LOCATION); context.location.setPreferredSize(new Dimension(200, context.location.getPreferredSize().height)); context.location.getDocument().addDocumentListener(this); panel2.add(context.location); context.usernameLbl = new JLabel("Username:"); panel2.add(context.usernameLbl); context.username = new JTextField(conf.ALM_USERNAME); context.username.setPreferredSize(new Dimension(75, context.location.getPreferredSize().height)); context.username.getDocument().addDocumentListener(this); panel2.add(context.username); context.passwordLbl = new JLabel("Password:"); panel2.add(context.passwordLbl); context.password = new JPasswordField(conf.ALM_PASSWORD); panel2.add(context.password); context.domainLbl = new JLabel("Domain:"); context.domainLbl.setVisible(false); panel2.add(context.domainLbl); context.domain = new JComboBox(); context.domain.setVisible(false); context.domain.addItemListener(this); panel2.add(context.domain); context.projectLbl = new JLabel("Project:"); context.projectLbl.setVisible(false); panel2.add(context.projectLbl); context.project = new JComboBox(); context.project.setVisible(false); context.project.addItemListener(this); panel2.add(context.project); context.releaseLbl = new JLabel("Release:"); context.releaseLbl.setVisible(false); panel2.add(context.releaseLbl); context.release = new JComboBox(); context.release.setVisible(false); context.release.addItemListener(this); panel2.add(context.release); context.repositoryLbl = new JLabel("Repository:"); context.repositoryLbl.setVisible(false); panel2.add(context.repositoryLbl); context.repository = new JComboBox(); context.repository.setVisible(false); context.repository.addItemListener(this); panel2.add(context.repository); context.branchLbl = new JLabel("Branch:"); context.branchLbl.setVisible(false); panel2.add(context.branchLbl); context.branch = new JComboBox(); context.branch.setVisible(false); context.branch.addItemListener(this); panel2.add(context.branch); context.targetLbl = new JLabel("Target directory:"); context.targetLbl.setVisible(false); panel2.add(context.targetLbl); context.targetBtn = new TextFieldWithBrowseButton(new TextFieldWithBrowseButtonActionListener(context)); context.targetBtn.setVisible(false); panel2.add(context.targetBtn); context.targetFullLbl = new JLabel("Checkout as:"); context.targetFullLbl.setVisible(false); panel2.add(context.targetFullLbl); context.targetFull = new JComboBox(); context.targetFull.setVisible(false); context.targetFull.addItemListener(this); context.targetFull.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { enableDisableNext(); } }); panel2.add(context.targetFull); panel.add(panel2, BorderLayout.CENTER); ALMStep qcStep = new ALMStep(context); addStep(qcStep); DomainStep domainStep = new DomainStep(qcStep, context, conf.ALM_DOMAIN); addStep(domainStep); ProjectStep projectStep = new ProjectStep(domainStep, context, conf.ALM_PROJECT); addStep(projectStep); ReleaseStep releaseStep = new ReleaseStep(projectStep, context); addStep(releaseStep); RepositoryStep repoStep = new RepositoryStep(releaseStep, context); addStep(repoStep); BranchStep branchStep = new BranchStep(repoStep, context); addStep(branchStep); TargetStep targetStep = new TargetStep(branchStep, context); addStep(targetStep); context.targetBtn.getTextField().getDocument().addDocumentListener(targetStep); init(); enableDisableNext(); } private boolean hasDedicatedFinishButton() { JButton finishButton = getFinishButton(); if (finishButton == getFinishButton()) { // next and finish are distinct buttons return true; } else { // no dedicated finish button return false; } } public JComponent getPreferredFocusedComponent() { return context.location; } public String getTarget() { return (String) context.targetFull.getSelectedItem(); } public String getAlmLocation() { return context.location.getText(); } public String getDomain() { return (String) context.domain.getSelectedItem(); } public String getProject() { return (String) context.project.getSelectedItem(); } public String getUsername() { return context.username.getText(); } public String getPassword() { return context.password.getText(); } public Checkout getCheckout() { return context.checkout; } @Override protected String getHelpID() { return null; } public void doNextAction() { super.doNextAction(); if (getCurrentStepObject().isImplicitChoice()) { doNextAction(); } if (getCurrentStep() == mySteps.size() - 1 && getCheckout() == null) { doOKAction(); } else { getNextButton().setEnabled(getCurrentStepObject().isNextAvailable()); } } protected void updateStep() { super.updateStep(); if (hasDedicatedFinishButton() && isLastStep()) { getRootPane().setDefaultButton(getFinishButton()); } else { getRootPane().setDefaultButton(getNextButton()); } } private void enableDisableNext() { if (hasDedicatedFinishButton()) { if (isLastStep()) { getNextButton().setEnabled(false); getFinishButton().setEnabled(getCurrentStepObject().isNextAvailable()); } else { getNextButton().setEnabled(getCurrentStepObject().isNextAvailable()); getFinishButton().setEnabled(false); } } else { getNextButton().setEnabled(getCurrentStepObject().isNextAvailable()); } } public void itemStateChanged(ItemEvent itemEvent) { enableDisableNext(); } public void insertUpdate(DocumentEvent documentEvent) { enableDisableNext(); } public void removeUpdate(DocumentEvent documentEvent) { enableDisableNext(); } public void changedUpdate(DocumentEvent documentEvent) { enableDisableNext(); } private static class TextFieldWithBrowseButtonActionListener implements ActionListener { private WizardContext ctx; public TextFieldWithBrowseButtonActionListener(WizardContext ctx) { this.ctx = ctx; } public void actionPerformed(ActionEvent actionEvent) { VirtualFile[] file = FileChooser.chooseFiles( FileChooserDescriptorFactory.createSingleFolderDescriptor(), ctx.targetBtn.getTextField(), null, null); if (file.length > 0) { ctx.targetBtn.getTextField().setText(file[0].getPath()); } } } }