blob: ceb9fd97cd4b5679d989a7f0e7f004d139c50a12 [file] [log] [blame]
/*
* 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);
}
}
}
}