/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.axis2.tool.service.swing.ui; import org.apache.axis2.tool.service.bean.Page2Bean; import org.apache.axis2.tool.service.bean.WizardBean; import org.apache.axis2.tool.service.control.Controller; import org.apache.axis2.tool.service.control.ProcessException; import org.apache.axis2.tool.util.Constants; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; public class WizardPane2 extends WizardPane { private WizardBean parentBean; private Page2Bean myBean; private JRadioButton selectManualFileRadioButton; private JRadioButton createAutomaticFileRadioButton; private JPanel selectionPanel; public WizardPane2(WizardBean wizardBean, JFrame ownerFrame) { super(ownerFrame); init(); parentBean = wizardBean; if (wizardBean.getPage2bean() != null) { myBean = wizardBean.getPage2bean(); //set the initial settings from the bean setBeanValues(); } else { myBean = new Page2Bean(); wizardBean.setPage2bean(myBean); setDefaultValues(); } } public void setBeanValues() { if (myBean.isManual()) { this.selectManualFileRadioButton.setSelected(true); loadScreen(new ManualSelectionPanel(true)); } else { this.createAutomaticFileRadioButton.setSelected(true); loadScreen(new AutomaticSelectionPanel(true)); } } public boolean validateValues() { String text = ""; String text2 = ""; boolean returnValue = false; if (myBean.isManual()) { text = myBean.getManualFileName(); returnValue = (text != null && text.trim().length() > 0); } else { text = myBean.getAutomaticClassName(); text2 = myBean.getProviderClassName(); returnValue = (text != null && text.trim().length() > 0) && (text2 != null && text2.trim().length() > 0); } return returnValue; } private void init() { this.setLayout(null); this.setSize(width, height); initDescription("\n Select either the service xml file or the class that you want to \n " + " expose as the service to auto generate a service.xml. \n " + " Only the class files that are in the previously selected location can\n" + " be laded from here"); ButtonGroup group = new ButtonGroup(); this.selectManualFileRadioButton = new JRadioButton("Select a file manually"); this.selectManualFileRadioButton.setBounds(hgap, descHeight, Constants.UIConstants.RADIO_BUTTON_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.add(this.selectManualFileRadioButton); group.add(selectManualFileRadioButton); this.selectManualFileRadioButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { changeSelectionScreen(); } }); this.createAutomaticFileRadioButton = new JRadioButton("Create a file automatically"); this.createAutomaticFileRadioButton.setBounds(hgap, descHeight + vgap + Constants.UIConstants.GENERAL_COMP_HEIGHT, Constants.UIConstants.RADIO_BUTTON_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.add(this.createAutomaticFileRadioButton); group.add(createAutomaticFileRadioButton); this.createAutomaticFileRadioButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { changeSelectionScreen(); } }); this.selectionPanel = new JPanel(); this.selectionPanel.setLayout(null); this.selectionPanel.setBounds(0, descHeight + 2 * Constants.UIConstants.GENERAL_COMP_HEIGHT + 2 * vgap, width, 100); this.add(this.selectionPanel); //select manual option by default } private void setDefaultValues() { this.selectManualFileRadioButton.setSelected(true); loadScreen(new ManualSelectionPanel()); updateBeanFlags(true); } private void changeSelectionScreen() { if (selectManualFileRadioButton.isSelected()) { loadScreen(new ManualSelectionPanel(true)); updateBeanFlags(true); } else { loadScreen(new AutomaticSelectionPanel(true)); updateBeanFlags(false); } } private void updateBeanFlags(boolean flag) { myBean.setManual(flag); myBean.setAutomatic(!flag); } private void loadScreen(JPanel panel) { this.selectionPanel.removeAll(); this.selectionPanel.add(panel); this.repaint(); } private class ManualSelectionPanel extends JPanel { private JLabel serverXMLFileLocationLabel; private JTextField serverXMLFileLocationTextBox; private JButton browseButton; public ManualSelectionPanel() { init(); } public ManualSelectionPanel(boolean loadVals) { init(); if (loadVals) { this.serverXMLFileLocationTextBox.setText( myBean.getManualFileName()); } } private void init() { this.setLayout(null); this.setSize(width, 100); this.serverXMLFileLocationLabel = new JLabel("Service File"); this.add(this.serverXMLFileLocationLabel); this.serverXMLFileLocationLabel.setBounds(hgap, vgap, Constants.UIConstants.LABEL_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.serverXMLFileLocationTextBox = new JTextField(); this.add(this.serverXMLFileLocationTextBox); this.serverXMLFileLocationTextBox.setBounds( Constants.UIConstants.LABEL_WIDTH + 2 * hgap, vgap, Constants.UIConstants.TEXT_BOX_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.serverXMLFileLocationTextBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setOutFileName(); } }); this.serverXMLFileLocationTextBox.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { setOutFileName(); } }); this.browseButton = new JButton("."); this.add(this.browseButton); this.browseButton.setBounds( Constants.UIConstants.LABEL_WIDTH + 2 * hgap + Constants.UIConstants.TEXT_BOX_WIDTH, vgap, Constants.UIConstants.BROWSE_BUTTON_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.browseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { serverXMLFileLocationTextBox.setText(browseForAFile("xml")); setOutFileName(); } }); } private void setOutFileName() { myBean.setManualFileName(serverXMLFileLocationTextBox.getText()); } } private class AutomaticSelectionPanel extends JPanel { private JLabel classFileListLable; private JLabel providerClassLable; private JTextField classFileNameTextBox; private JTextField providerClassNameTextBox; private JButton loadButton; private JButton advancedButton; public AutomaticSelectionPanel() { init(); } public AutomaticSelectionPanel(boolean loadVals) { init(); if (loadVals) { this.classFileNameTextBox.setText( myBean.getAutomaticClassName()); this.providerClassNameTextBox.setText( myBean.getProviderClassName()); } } private void init() { this.setLayout(null); this.setSize(width, 100); this.classFileListLable = new JLabel("Class Name"); this.add(this.classFileListLable); this.classFileListLable.setBounds(hgap, vgap, Constants.UIConstants.LABEL_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.classFileNameTextBox = new JTextField(); this.add(this.classFileNameTextBox); this.classFileNameTextBox.setBounds( Constants.UIConstants.LABEL_WIDTH + 2 * hgap, vgap, Constants.UIConstants.TEXT_BOX_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.classFileNameTextBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setClassName(); } }); this.classFileNameTextBox.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { setClassName(); } }); this.providerClassLable = new JLabel("Provider Class Name"); this.add(this.providerClassLable); this.providerClassLable.setBounds(hgap, (Constants.UIConstants.GENERAL_COMP_HEIGHT + vgap), Constants.UIConstants.LABEL_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.providerClassNameTextBox = new JTextField(); this.add(this.providerClassNameTextBox); this.providerClassNameTextBox.setBounds( Constants.UIConstants.LABEL_WIDTH + 2 * hgap, (Constants.UIConstants.GENERAL_COMP_HEIGHT + vgap * 2), Constants.UIConstants.TEXT_BOX_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.providerClassNameTextBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setProviderClassName(); } }); this.providerClassNameTextBox.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { setProviderClassName(); } }); this.loadButton = new JButton("Load"); this.add(this.loadButton); this.loadButton.setBounds(hgap, (Constants.UIConstants.GENERAL_COMP_HEIGHT + vgap) * 2 + vgap, Constants.UIConstants.GENERAL_BUTTON_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.loadButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadAllMethods(); } }); loadButton.setEnabled(false); this.advancedButton = new JButton("Advanced"); this.add(this.advancedButton); this.advancedButton.setBounds( 2 * hgap + Constants.UIConstants.GENERAL_BUTTON_WIDTH , (Constants.UIConstants.GENERAL_COMP_HEIGHT + vgap) * 2 + vgap, Constants.UIConstants.GENERAL_BUTTON_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.advancedButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openDialog(); } }); this.advancedButton.setEnabled(false); } private void loadAllMethods() { try { ArrayList methodList = new Controller().getMethodList( parentBean); myBean.setSelectedMethodNames(methodList); loadButton.setEnabled(false); advancedButton.setEnabled(true); } catch (ProcessException e) { showErrorMessage(e.getMessage()); } } private void openDialog() { try { new AdvancedSelectionDialog().show(); } catch (ProcessException e) { showErrorMessage(e.getMessage()); } } private void setClassName() { loadButton.setEnabled(true); advancedButton.setEnabled(false); myBean.setAutomaticClassName(classFileNameTextBox.getText()); } private void setProviderClassName() { //loadButton.setEnabled(true); //advancedButton.setEnabled(false); myBean.setProviderClassName(providerClassNameTextBox.getText()); } } private class AdvancedSelectionDialog extends JDialog { private JPanel lablePanel; private JButton okButton; private JButton cancelButton; private boolean[] selectedValues; private ArrayList completeMethodList; public AdvancedSelectionDialog() throws HeadlessException, ProcessException { super(); super.setModal(true); super.setTitle("Select Methods"); this.getContentPane().setLayout(null); init(); } private void init() throws ProcessException { //load the class file list this.completeMethodList = new Controller().getMethodList(parentBean); int methodCount = this.completeMethodList.size(); int panelHeight = methodCount * (Constants.UIConstants.GENERAL_COMP_HEIGHT + vgap); this.lablePanel = new JPanel(); this.lablePanel.setLayout(null); this.lablePanel.setBounds(0, 0, width, panelHeight); this.getContentPane().add(this.lablePanel); ArrayList currentSelectedList = myBean.getSelectedMethodNames(); //create check boxes for all the methods and add them to the panel JCheckBox tempCheckBox; boolean currentSelection; this.selectedValues = new boolean[methodCount]; for (int i = 0; i < methodCount; i++) { tempCheckBox = new JCheckBox( this.completeMethodList.get(i).toString()); currentSelection = currentSelectedList.contains( this.completeMethodList.get(i)); tempCheckBox.setSelected(currentSelection); selectedValues[i] = currentSelection; tempCheckBox.setBounds(hgap, vgap + (Constants.UIConstants.GENERAL_COMP_HEIGHT + vgap) * i, Constants.UIConstants.LABEL_WIDTH * 3, Constants.UIConstants.GENERAL_COMP_HEIGHT); tempCheckBox.addActionListener( new CheckBoxActionListner(tempCheckBox, i)); this.lablePanel.add(tempCheckBox); } okButton = new JButton("OK"); this.getContentPane().add(this.okButton); this.okButton.setBounds(hgap, panelHeight + vgap, Constants.UIConstants.GENERAL_BUTTON_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadValuesToBean(); closeMe(); } }); cancelButton = new JButton("Cancel"); this.getContentPane().add(this.cancelButton); this.cancelButton.setBounds( hgap * 2 + Constants.UIConstants.GENERAL_BUTTON_WIDTH, panelHeight + vgap, Constants.UIConstants.GENERAL_BUTTON_WIDTH, Constants.UIConstants.GENERAL_COMP_HEIGHT); this.cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { closeMe(); } }); this.setSize(width, panelHeight + 2 * Constants.UIConstants.GENERAL_COMP_HEIGHT + 30); this.setResizable(false); } private void updateSelection(JCheckBox checkBox, int index) { if (checkBox.isSelected()) { selectedValues[index] = true; } else { selectedValues[index] = false; } } private void loadValuesToBean() { ArrayList modifiedMethodList = new ArrayList(); for (int i = 0; i < selectedValues.length; i++) { if (selectedValues[i]) modifiedMethodList.add(completeMethodList.get(i)); } myBean.setSelectedMethodNames(modifiedMethodList); } private void closeMe() { this.dispose(); } private class CheckBoxActionListner implements ActionListener { private JCheckBox checkBox; private int index; public CheckBoxActionListner(JCheckBox checkBox, int index) { this.index = index; this.checkBox = checkBox; } public void actionPerformed(ActionEvent e) { updateSelection(checkBox, index); } } } }