blob: 684358773dbdcc439c75a622376a965df645532b [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.tools.idea;
import org.apache.axis2.tools.bean.CodegenBean;
import org.apache.axis2.tools.component.WizardComponents;
import org.apache.axis2.tools.component.WizardPanel;
import org.apache.axis2.tools.wizardframe.CodegenFrame;
import org.apache.axis2.util.URLProcessor;
import javax.swing.*;
import javax.wsdl.WSDLException;
import javax.xml.namespace.QName;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class SecondPanel extends WizardPanel {
private JComboBox cmbCodeGenOption;
private JComboBox cmbLan;
private JComboBox cmbServiceName;
private JComboBox cmbPortName;
private JTextField txtPacakgeName;
private JComboBox cmbdbtype;
private JCheckBox chkTestCase;
private JRadioButton clientSide;
private JRadioButton rdBoth;
private JRadioButton rdsyn;
private JRadioButton rdasync;
private JRadioButton serverSide;
private JCheckBox serviceXML;
private JCheckBox serverSideInterface;
private JRadioButton all;
private JTable table;
private JScrollPane spTable;
private List serviceNameList;
private PackageNameTableModel model;
private CodegenBean codegenBean;
public SecondPanel(WizardComponents wizardComponents,CodegenBean codegenBean) {
super(wizardComponents, "Axis2 Idea Plugin WSDL2Java Wizards");
this.codegenBean=codegenBean;
setPanelTopTitle("Options");
setPanelBottomTitle("Set the options for the code generator. If you wish to edit the codegen options, Select custom");
init();
}
private void init(){
cmbLan = new JComboBox();
cmbLan.addItem("java");
cmbLan.setToolTipText("Select the language of the generated code");
cmbServiceName = new JComboBox();
add(cmbServiceName);
cmbServiceName.setToolTipText("Select the name of the service that the code should be generated for");
cmbPortName = new JComboBox();
cmbPortName.setToolTipText("Select the port name that the code should be generated for");
txtPacakgeName = new JTextField("org.axis2");
txtPacakgeName.setToolTipText("Set the package name of the generated code");
cmbdbtype = new JComboBox();
cmbdbtype.addItem("adb");
cmbdbtype.addItem("xmlbeans");
cmbdbtype.addItem("none");
cmbdbtype.setToolTipText("Select the databinding framework to be used in the generation process");
chkTestCase = new JCheckBox("Generate Test Case", false);
chkTestCase.setVisible(true);
chkTestCase.setToolTipText("A test case will be generated if this is checked");
ButtonGroup generationType = new ButtonGroup();
clientSide = new JRadioButton("Generate Client Side",true);
generationType.add(clientSide);
ButtonGroup buttonGroup = new ButtonGroup();
rdBoth = new JRadioButton("Generate both sync and async", true);
buttonGroup.add(rdBoth);
rdsyn = new JRadioButton("Generate sync only", false);
buttonGroup.add(rdsyn);
rdasync = new JRadioButton("Generate async only", false);
buttonGroup.add(rdasync);
serverSide = new JRadioButton("Generate Server Side");
generationType.add(serverSide);
serviceXML = new JCheckBox("Generate default service.xml", false);
serverSideInterface = new JCheckBox("Generate an interface for skeleton", false);
all = new JRadioButton("Generate All");
generationType.add(all);
model = new PackageNameTableModel(new Object [1][2]);
table = new JTable(model);
spTable=new JScrollPane(table);
cmbCodeGenOption =new JComboBox();
cmbCodeGenOption .addItem("default");
cmbCodeGenOption .addItem("custom");
cmbCodeGenOption .setToolTipText("Select the Codegen option");
this.setLayout(new GridBagLayout());
this.add(new JLabel("Cogen Option")
, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 10, 0,10), 0, 0));
this.add(cmbCodeGenOption
, new GridBagConstraints(1, 0, GridBagConstraints.REMAINDER, 1, 1.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL
, new Insets(1, 5, 0,10), 0, 0));
cmbCodeGenOption.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
setEnabledForCodegenType();
update();
}
}
});
this.add(new JLabel("Out put lang")
, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1,10, 0,10), 0, 0));
this.add(cmbLan
, new GridBagConstraints(1, 1, GridBagConstraints.REMAINDER, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 5, 0,10), 0, 0));
this.add(new JLabel("Service name")
, new GridBagConstraints(0, 2, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 10, 0,10), 0, 0));
this.add(cmbServiceName
, new GridBagConstraints(1, 2, GridBagConstraints.REMAINDER, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 5, 0,10), 0, 0));
this.add(new JLabel("port Name")
, new GridBagConstraints(0, 3, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 10, 0,10), 0, 0));
this.add(cmbPortName
, new GridBagConstraints(1, 3, GridBagConstraints.REMAINDER, 1,1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 5, 0,10), 0, 0));
this.add(new JLabel("DataBinding")
, new GridBagConstraints(0, 4, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 10, 0,10), 0, 0));
this.add(cmbdbtype
, new GridBagConstraints(1, 4, GridBagConstraints.REMAINDER, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 5, 0,10), 0, 0));
this.add(new JLabel("Custom Packege")
, new GridBagConstraints(0, 5, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 10, 0,10), 0, 0));
this.add(txtPacakgeName
, new GridBagConstraints(1, 5, GridBagConstraints.REMAINDER, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 5, 0,10), 0, 0));
this.add(chkTestCase
, new GridBagConstraints(0, 6, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 10, 0,10), 0, 0));
this.add(new JSeparator()
, new GridBagConstraints(0, 7, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.BOTH
, new Insets(1, 10, 1,1), 0, 0));
this.add(clientSide
, new GridBagConstraints(0, 8, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 10, 0,10), 0, 0));
clientSide.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
setEnabledForCustom();
update();
}
}
});
this.add(rdBoth
, new GridBagConstraints(0, 9, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 10, 0,10), 0, 0));
this.add(rdsyn
, new GridBagConstraints(1, 9, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 5, 0,10), 0, 0));
this.add(rdasync
, new GridBagConstraints(2, 9, 1, 1, 1.0,0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(1, 5, 0,10), 0, 0));
this.add(new JSeparator()
, new GridBagConstraints(0, 10, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.BOTH
, new Insets(1, 10, 1,1), 0, 0));
this.add(serverSide
, new GridBagConstraints(0, 11, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 10, 0,10), 0, 0));
serverSide.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
setEnabledForCustom();
update();
}
}
});
this.add(serviceXML
, new GridBagConstraints(0, 12, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 10, 0,10), 0, 0));
this.add(serverSideInterface
, new GridBagConstraints(1, 12, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1, 5, 0,10), 0, 0));
this.add(new JSeparator()
, new GridBagConstraints(0, 13, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.BOTH
, new Insets(1, 10, 1,1), 0, 0));
this.add(all
, new GridBagConstraints(0, 14, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1,10, 0,10), 0, 0));
all.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
setEnabledForCustom();
update();
}
}
});
this.add(new JSeparator()
, new GridBagConstraints(0, 15, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.BOTH
, new Insets(1, 10, 1,1), 0, 0));
this.add(new JLabel("Namespace to Package Mapping")
, new GridBagConstraints(0, 16, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(1,10, 0,10), 0, 0));
this.add(spTable
, new GridBagConstraints(0, 17, GridBagConstraints.REMAINDER, 1, 1.0, 1.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.BOTH
, new Insets(1,10, 20,10), 0, 0));
setNextButtonEnabled(false);
setEnabledForCodegenType();
}
public void next() {
switchPanel(CodegenFrame.PANEL_LAST_A );
}
public void back() {
switchPanel(CodegenFrame.PANEL_FIRST_A );
}
public void update(){
checkPageComlete();
populateParamsFromWSDL();
}
private void loadNamespaces(Collection namespaceMap){
Iterator namespaces = namespaceMap.iterator();
Object tableData [][] = new Object[namespaceMap.size()][2];
int i = 0;
while(namespaces.hasNext()){
String namespace = (String)namespaces.next();
tableData[i][0] = namespace;
tableData[i][1] = getPackageFromNamespace(namespace);
i++;
}
model.setTableData(tableData);
}
private void setEnabledForCodegenType(){
if(cmbCodeGenOption.getSelectedItem().equals("default") ){
cmbdbtype.setEnabled(false);
cmbLan.setEnabled(false);
cmbPortName .setEnabled(false);
cmbServiceName.setEnabled(false);
txtPacakgeName.setEnabled(false);
cmbdbtype.setEnabled(false);
if(chkTestCase.isSelected()) {
chkTestCase.setEnabled(false);
chkTestCase.setSelected(false);
} else
chkTestCase.setEnabled(false);
clientSide.setEnabled(false);
rdBoth .setEnabled(false);
rdsyn.setEnabled(false);
rdasync.setEnabled(false);
serverSide.setEnabled(false);
table.setEnabled(false);
spTable.setEnabled(false);
serviceXML.setEnabled(false);
serverSideInterface.setEnabled(false);
all.setEnabled(false);
}else{
cmbdbtype.setEnabled(true);
cmbLan.setEnabled(true);
cmbPortName .setEnabled(true);
cmbServiceName.setEnabled(true);
txtPacakgeName.setEnabled(true);
cmbdbtype.setEnabled(true);
if(!clientSide.isSelected()) {
clientSide.setEnabled(true);
clientSide.setSelected(true);
} else
clientSide.setEnabled(true);
serverSide.setEnabled(true);
table.setEnabled(true);
spTable.setEnabled(true);
all.setEnabled(true);
setEnabledForCustom();
}
}
private void setEnabledForCustom(){
if(clientSide.isSelected()){
if(serviceXML.isSelected()||serverSideInterface.isSelected()){
serverSide.setSelected(false);
serverSideInterface.setSelected(false);
serviceXML.setEnabled(false);
serverSideInterface.setEnabled(false);
}else{
serviceXML.setEnabled(false);
serverSideInterface.setEnabled(false);
}
if(rdasync.isSelected()){
rdasync.setEnabled(true);
rdasync.setSelected(false);
}else{
rdasync.setEnabled(true);
}
if(!rdBoth.isSelected()){
rdBoth.setEnabled(true);
rdBoth.setSelected(true);
}else{
rdBoth.setEnabled(true);
}
if(rdsyn.isSelected()){
rdsyn.setEnabled(true);
rdsyn.setSelected(false);
}else{
rdsyn.setEnabled(true);
}
chkTestCase.setEnabled(true);
}else if(serverSide.isSelected()){
if(serviceXML.isSelected()||serverSideInterface.isSelected()){
serverSide.setSelected(false);
serverSideInterface.setSelected(false);
serviceXML.setEnabled(true);
serverSideInterface.setEnabled(true);
}else{
serviceXML.setEnabled(true);
serverSideInterface.setEnabled(true);
}
if( rdasync.isSelected()||rdBoth.isSelected()||rdsyn.isSelected()) {
rdasync.setSelected(false);
rdBoth.setSelected(false);
rdsyn.setSelected(false);
rdasync.setEnabled(false);
rdBoth.setEnabled(false);
rdsyn .setEnabled(false);
} else{
rdasync.setEnabled(false);
rdBoth.setEnabled(false);
rdsyn .setEnabled(false);
}
if(chkTestCase.isSelected()) {
chkTestCase.setEnabled(false);
chkTestCase.setSelected(false);
} else
chkTestCase.setEnabled(false);
}else if(all.isSelected()){
chkTestCase.setEnabled(true);
if(serviceXML.isSelected()||serverSideInterface.isSelected()){
serverSide.setSelected(false);
serverSideInterface.setSelected(false);
serviceXML.setEnabled(false);
serverSideInterface.setEnabled(false);
}else{
serviceXML.setEnabled(false);
serverSideInterface.setEnabled(false);
}
if( rdasync.isSelected()||rdBoth.isSelected()||rdsyn.isSelected()) {
rdasync.setSelected(false);
rdBoth.setSelected(false);
rdsyn.setSelected(false);
rdasync.setEnabled(false);
rdBoth.setEnabled(false);
rdsyn .setEnabled(false);
} else{
rdasync.setEnabled(false);
rdBoth.setEnabled(false);
rdsyn .setEnabled(false);
}
}
}
public String getPackageFromNamespace(String namespace){
return URLProcessor.makePackageName(namespace);
}
public int getPageType() {
return WizardPanel.WSDL_2_JAVA_TYPE;
}
private void checkPageComlete(){
if(cmbCodeGenOption.getSelectedItem().equals("default")){
setPageComplete(true);
setNextButtonEnabled(true);
} else{
if(txtPacakgeName.getText().equals("")){
setPageComplete(false);
setNextButtonEnabled(false);
} else{
setPageComplete(true);
setNextButtonEnabled(true);
}
}
}
/**
* populate the service and the port from the WSDL this needs to be public
* since the WSDLselection page may call this
*/
public void populateParamsFromWSDL() {
try {
String lname = codegenBean.getWSDLFileName();
if (!"".equals(lname.trim())) {
codegenBean.readWSDL();
// enable the combo's
// setComboBoxEnable(true);
this.serviceNameList = codegenBean.getServiceList();
if (!serviceNameList.isEmpty()) {
cmbServiceName.removeAll();
for (int i = 0; i < serviceNameList.size(); i++) {
// add the local part of the
cmbServiceName.addItem(((QName) serviceNameList.get(i))
.getLocalPart());
};
// select the first one as the default
cmbServiceName.setSelectedIndex(0);
//setComboBoxEnable(false);
// load the ports
loadPortNames();
} else {
// service name list being empty means we are switching to
// the interface mode
if (cmbServiceName!=null) cmbServiceName .removeAll();
if (cmbPortName!=null) cmbPortName.removeAll();
// disable the combo's
// setComboBoxEnable(false);
//this is not an error
}
populatePackageName();
//populate the namespacess
loadNamespaces(codegenBean.getDefinitionNamespaceMap());
}
} catch (WSDLException e) {
// disable the combo's
setComboBoxEnable(false);
}
catch (Exception e) {
// disable the combo's
setComboBoxEnable(false);
}
}
private void populatePackageName() {
this.txtPacakgeName.setText(codegenBean.packageFromTargetNamespace());
}
private void setComboBoxEnable(boolean b) {
if (cmbServiceName != null) {
cmbServiceName .setEnabled(b);
cmbPortName .setEnabled(b);
}
}
private void loadPortNames() {
int selectionIndex = cmbServiceName.getSelectedIndex();
if (selectionIndex != -1) {
java.util.List ports = codegenBean.getPortNameList((QName) serviceNameList
.get(selectionIndex));
if (!ports.isEmpty()) {
cmbPortName.removeAll();
for (int i = 0; i < ports.size(); i++) {
// add the local part of the
cmbPortName.addItem(ports.get(i).toString());
}
cmbPortName.setSelectedIndex(0);
} else {
//Todo error message null
}
}
}
public void populateOptions(){
populateParamsFromWSDL();
}
private void dialogChanged() {
String fileName = getPackageName();
if (fileName.length() == 0) {
//Todo error message "File name should be specified"
setError("File name should be specified",true);
setPageComplete(false);
return;
}
//try populate the options
// getWizardComponents().getWizardPanel(3).populateOptions();
setPageComplete(true);
// update the status
//Todo error message null
}
public String getSelectedLanguage() {
return cmbLan.getSelectedItem().toString();
}
/**
* the async only status
*
* @return true if "Generate asynchronous code only" is checked
*/
public boolean isAsyncOnlyOn() {
return rdasync.isSelected();
}
/**
* the sync only status
*
* @return true if "Generate synchronous code only" is checked
*/
public boolean isSyncOnlyOn() {
return rdsyn.isSelected();
}
/**
* return the package name
*
* @return a string containing the package name to use for code generation
*/
public String getPackageName() {
if ("".equals(txtPacakgeName.getText().trim())){
//we do not allow the packaging to be empty
//if the user sets it to empty we set it to
//the default
return URLProcessor.DEFAULT_PACKAGE;
}
return this.txtPacakgeName.getText();
}
/**
* The serverside status
*
* @return true if "Generate Server-Side" is checked
*/
public boolean isServerside() {
return this.serverSide.isSelected();
}
/**
*
* @return true if "Generate XML configuration file" is checked
*/
public boolean isServerXML() {
if (this.serviceXML.isEnabled())
return this.serviceXML.isSelected();
else
return false;
}
/**
*
* @return true if "Generate test case" is checked
*/
public boolean isGenerateTestCase() {
return this.chkTestCase.isSelected();
}
/**
*
* @return null if portname is empty
*/
public String getPortName() {
int selectionIndex = cmbPortName.getSelectedIndex();
if (selectionIndex != -1) {
String text = this.cmbPortName.getSelectedItem().toString();
if (text == null || text.trim().equals("")) {
return null;
}
return text;
} else {
return null;
}
}
/**
* @return null if the text is empty
*
*/
public String getServiceName() {
int selectionIndex = cmbServiceName.getSelectedIndex();
// cater for the scenario where the combo's can be empty
if (selectionIndex != -1) {
String text = this.cmbServiceName.getSelectedItem().toString();
if (text == null || text.trim().equals("")) {
return null;
}
return text;
} else {
return null;
}
}
public String getDatabinderName() {
return this.cmbdbtype.getSelectedItem().toString();
}
public boolean getGenerateServerSideInterface() {
return this.serverSideInterface.isSelected();
}
public boolean getGenerateAll() {
return this.all.isSelected();
}
public String getNs2PkgMapping(){
String returnList="";
String packageValue;
for (int i=0;i<table.getRowCount() ;i++){
packageValue = table.getValueAt(i,1).toString();
if (packageValue!=null && !"".equals(packageValue)){
returnList = returnList +
("".equals(returnList)?"":",") +
table.getValueAt(i,0).toString()+ "=" + packageValue;
}
}
return "".equals(returnList)?null:returnList;
}
private void handleCustomPackageNameModifyEvent() {
// This method is add as a tempory fix for the Axis2-1368
// TODO fix this permanantly.
String text = this.txtPacakgeName.getText();
if ((text == null) || (text.trim().equals(""))|| (text.endsWith(".")) || (text.startsWith("."))) {
//Todo error message "Invalid package name. Please enter a valid package name."
return;
}
//Todo error message null
}
}