blob: 90d40f8b9f3e7750e92a363a697eaff56dd519f6 [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.codegen.eclipse.ui;
import org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin;
import org.apache.axis2.tool.codegen.eclipse.util.UIConstants;
import org.apache.axis2.tool.codegen.eclipse.util.WSDLPropertyReader;
import org.apache.axis2.util.CommandLineOptionConstants;
import org.apache.axis2.util.URLProcessor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import javax.wsdl.WSDLException;
import javax.xml.namespace.QName;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Options Page lets the user change general settings on the code generation. It
* is used in the CodegenWizardPlugin, CodeGenWizard.
*
*/
public class OptionsPage extends AbstractWizardPage implements UIConstants {
/**
* Selection list for target languages
*/
private Combo languageSelectionComboBox;
/**
* A radio button to enable/disable code generation for synchronous and
* asynchronous calls.
*/
private Button syncAndAsyncRadioButton;
/**
* A radio button to choose "synchronous only" code generation
*/
private Button syncOnlyRadioButton;
/**
* A radio button to choose "asynchronous only" code generation
*/
private Button asyncOnlyRadioButton;
/**
* Label holding the full qualified package name for generated code
*/
private Text packageText;
/**
* Checkbox to enable server-side skeleton code generation. If enabled,
* generates an empty implementation of the service
*/
private Button serverSideCheckBoxButton;
/**
* Checkbox to enable client side code generation. If enabled,
* generates an empty implementation of the service
*/
private Button clientSideCheckBoxButton;
/**
* Checkbox to enable the generation of test case classes for the generated
* implementation of the webservice.
*/
private Button testCaseCheckBoxButton;
/**
* Checkbox to enable the generation of a default server.xml configuration
* file
*/
private Button serverXMLCheckBoxButton;
/**
* Checkbox to enable the generate all classes
*/
private Button generateAllCheckBoxButton;
/**
* check box for server side interface
*/
private Button generateServerSideInterfaceCheckBoxButton;
private Combo databindingTypeCombo;
/**
* Text box to have the portname
*/
private Combo portNameCombo;
/**
* Text box to have the service name
*/
private Combo serviceNameCombo;
private Button advanceOptionsButton;
private WSDLPropertyReader reader;
private java.util.List serviceQNameList = null;
private final int EDITABLECOLUMN = 1;
private String defaultPackageName = null;
private Combo codegenOptionSelectionComboBox;
/**
* A table to keep the namespace to
* package mappings
*/
private Table namespace2packageTable = null;
private HashMap advanceOptions;
Composite container;
/**
* Creates the page and initialize some settings
*/
public OptionsPage() {
super("page2");
advanceOptions=getInitialisedAdvanceOptions();
}
private HashMap getInitialisedAdvanceOptions(){
HashMap advanceOptions=new HashMap();
advanceOptions.put(CommandLineOptionConstants.WSDL2JavaConstants.UNPACK_CLASSES_OPTION, new String[0]);
return advanceOptions;
}
/**
* Sets the default values for the Options page
*
*/
protected void initializeDefaultSettings() {
settings.put(PREF_CHECK_GENERATE_SERVERCONFIG, false);
settings.put(PREF_CHECK_GENERATE_SERVERSIDE, false);
settings.put(PREF_CHECK_GENERATE_TESTCASE, false);
settings.put(PREF_LANGUAGE_INDEX, 0);
settings.put(PREF_PACKAGE_NAME, DEFAULT_PACKAGENAME);
settings.put(PREF_RADIO_ASYNC_ONLY, false);
settings.put(PREF_RADIO_SYNC_AND_ASYNC, true);
settings.put(PREF_RADIO_SYNC_ONLY, false);
settings.put(PREF_COMBO_PORTNAME_INDEX, 0);
settings.put(PREF_COMBO_SERVICENAME_INDEX, 0);
settings.put(PREF_DATABINDER_INDEX, 0);
settings.put(PREF_GEN_ALL, false);
settings.put(PREF_GEN_SS_INTERFACE, false);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 3;
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
Label label = new Label(container, SWT.NULL);
label.setText(CodegenWizardPlugin.getResourceString("page2.options.desc"));
label.setLayoutData(gd);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
codegenOptionSelectionComboBox = new Combo(container, SWT.DROP_DOWN| SWT.BORDER | SWT.READ_ONLY);
// fill the combo
this.fillCodegenOptionSelectionComboBox();
codegenOptionSelectionComboBox.setLayoutData(gd);
settings.put(PREF_CODEGEN_OPTION_INDEX, codegenOptionSelectionComboBox
.getSelectionIndex());
codegenOptionSelectionComboBox.select(settings.getInt(PREF_CODEGEN_OPTION_INDEX));
codegenOptionSelectionComboBox.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_CODEGEN_OPTION_INDEX, codegenOptionSelectionComboBox
.getSelectionIndex());
if (codegenOptionSelectionComboBox
.getSelectionIndex() == 0 ){
disableControls();
}else if (codegenOptionSelectionComboBox
.getSelectionIndex() == 1){
enableControls();
}
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
Label label1 = new Label(container, SWT.NULL);
label1.setText(CodegenWizardPlugin
.getResourceString("page2.language.caption"));
languageSelectionComboBox = new Combo(container, SWT.DROP_DOWN| SWT.BORDER | SWT.READ_ONLY);
// fill the combo
this.fillLanguageCombo();
languageSelectionComboBox.setLayoutData(gd);
languageSelectionComboBox.select(settings.getInt(PREF_LANGUAGE_INDEX));
languageSelectionComboBox.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_LANGUAGE_INDEX, languageSelectionComboBox
.getSelectionIndex());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
// service name
label = new Label(container, SWT.NULL);
label.setText(CodegenWizardPlugin
.getResourceString("page2.serviceName.caption"));
serviceNameCombo = new Combo(container, SWT.DROP_DOWN | SWT.BORDER
| SWT.READ_ONLY);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
serviceNameCombo.setLayoutData(gd);
// serviceNameCombo.setText(settings.get(PREF_TEXT_SERVICENAME));
serviceNameCombo.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
// update the settings
settings.put(PREF_COMBO_SERVICENAME_INDEX, serviceNameCombo
.getSelectionIndex());
// reload the portName list
loadPortNames();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
// port name
label = new Label(container, SWT.NULL);
label.setText(CodegenWizardPlugin
.getResourceString("page2.portName.caption"));
portNameCombo = new Combo(container, SWT.DROP_DOWN | SWT.BORDER
| SWT.READ_ONLY);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
portNameCombo.setLayoutData(gd);
portNameCombo.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
// update the settings
settings.put(PREF_COMBO_PORTNAME_INDEX, portNameCombo
.getSelectionIndex());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
// Databinding
label = new Label(container, SWT.NULL);
label.setText(CodegenWizardPlugin
.getResourceString("page2.databindingCheck.caption"));
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
databindingTypeCombo = new Combo(container, SWT.DROP_DOWN | SWT.BORDER
| SWT.READ_ONLY);
databindingTypeCombo.setLayoutData(gd);
fillDatabinderCombo();
databindingTypeCombo.select(settings.getInt(PREF_DATABINDER_INDEX));
databindingTypeCombo.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_DATABINDER_INDEX, databindingTypeCombo
.getSelectionIndex());
};
public void widgetDefaultSelected(SelectionEvent e) {
};
});
// package name
label = new Label(container, SWT.NULL);
label.setText(CodegenWizardPlugin
.getResourceString("page2.package.caption"));
packageText = new Text(container, SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
packageText.setLayoutData(gd);
String packageName;
String storedPackageName = settings.get(PREF_PACKAGE_NAME);
this.defaultPackageName = storedPackageName;
if (storedPackageName.equals("")) {
packageName = URLProcessor.makePackageName("");
} else {
packageName = storedPackageName;
}
//if the package name somehow turned out to be null set it to
//default package
if (packageName==null)packageName=URLProcessor.DEFAULT_PACKAGE;
packageText.setText(packageName); // get this text from the
// URLProcessor
packageText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
handleCustomPackageNameModifyEvent();
settings.put(PREF_PACKAGE_NAME, packageText.getText());
}
});
// generate test case option
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
testCaseCheckBoxButton = new Button(container, SWT.CHECK);
testCaseCheckBoxButton.setLayoutData(gd);
testCaseCheckBoxButton
.setText(org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin
.getResourceString("page2.testcase.caption"));
testCaseCheckBoxButton.setSelection(settings
.getBoolean(PREF_CHECK_GENERATE_TESTCASE));
testCaseCheckBoxButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_CHECK_GENERATE_TESTCASE,
testCaseCheckBoxButton.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
//filling label
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
Label fillLabel = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR);
fillLabel.setLayoutData(gd);
//cleint side label
// gd = new GridData(GridData.FILL_HORIZONTAL);
// gd.horizontalSpan = 3;
// Label lblClientside = new Label(container, SWT.NONE);
// lblClientside.setText(CodegenWizardPlugin
// .getResourceString("page2.clientside.caption"));
// lblClientside.setLayoutData(gd);
//cleint side label
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
clientSideCheckBoxButton = new Button(container, SWT.CHECK);
clientSideCheckBoxButton.setLayoutData(gd);
clientSideCheckBoxButton.setText(CodegenWizardPlugin
.getResourceString("page2.clientside.caption"));
clientSideCheckBoxButton.setSelection(settings
.getBoolean(PREF_CHECK_GENERATE_CLIENTSIDE));
clientSideCheckBoxButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
handleClientsideSelection();
settings.put(PREF_CHECK_GENERATE_CLIENTSIDE,
clientSideCheckBoxButton.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
//client side buttons
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
syncAndAsyncRadioButton = new Button(container, SWT.RADIO);
syncAndAsyncRadioButton.setLayoutData(gd);
syncAndAsyncRadioButton.setText(CodegenWizardPlugin
.getResourceString("page2.syncAsync.caption"));
syncAndAsyncRadioButton.setSelection(settings
.getBoolean(PREF_RADIO_SYNC_AND_ASYNC));
syncAndAsyncRadioButton.setVisible(true);
syncAndAsyncRadioButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_RADIO_SYNC_AND_ASYNC, syncAndAsyncRadioButton
.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
syncOnlyRadioButton = new Button(container, SWT.RADIO);
syncOnlyRadioButton.setLayoutData(gd);
syncOnlyRadioButton.setText(CodegenWizardPlugin
.getResourceString("page2.sync.caption"));
syncOnlyRadioButton.setSelection(settings
.getBoolean(PREF_RADIO_SYNC_ONLY));
syncOnlyRadioButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_RADIO_SYNC_ONLY, syncOnlyRadioButton
.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
asyncOnlyRadioButton = new Button(container, SWT.RADIO);
asyncOnlyRadioButton.setLayoutData(gd);
asyncOnlyRadioButton
.setText(org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin
.getResourceString("page2.async.caption"));
asyncOnlyRadioButton.setSelection(settings
.getBoolean(PREF_RADIO_ASYNC_ONLY));
asyncOnlyRadioButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_RADIO_ASYNC_ONLY, asyncOnlyRadioButton
.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
//filling label
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
Label fillLabel1 = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR);
fillLabel1.setLayoutData(gd);
// Server side check box
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
serverSideCheckBoxButton = new Button(container, SWT.CHECK);
serverSideCheckBoxButton.setLayoutData(gd);
serverSideCheckBoxButton.setText(CodegenWizardPlugin
.getResourceString("page2.serverside.caption"));
serverSideCheckBoxButton.setSelection(settings
.getBoolean(PREF_CHECK_GENERATE_SERVERSIDE));
serverSideCheckBoxButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
handleServersideSelection();
settings.put(PREF_CHECK_GENERATE_SERVERSIDE,
serverSideCheckBoxButton.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
// Server side services xml
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
serverXMLCheckBoxButton = new Button(container, SWT.CHECK);
serverXMLCheckBoxButton.setLayoutData(gd);
serverXMLCheckBoxButton.setSelection(settings
.getBoolean(PREF_CHECK_GENERATE_SERVERCONFIG));
serverXMLCheckBoxButton.setText(CodegenWizardPlugin
.getResourceString("page2.serviceXML.caption"));
serverXMLCheckBoxButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_CHECK_GENERATE_SERVERCONFIG,
serverXMLCheckBoxButton.getEnabled());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
//the server side interface option
generateServerSideInterfaceCheckBoxButton = new Button(container, SWT.CHECK);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
generateServerSideInterfaceCheckBoxButton.setLayoutData(gd);
generateServerSideInterfaceCheckBoxButton.setSelection(settings
.getBoolean(PREF_GEN_SS_INTERFACE));
generateServerSideInterfaceCheckBoxButton.setText(CodegenWizardPlugin
.getResourceString("page2.ssInterface.caption"));
generateServerSideInterfaceCheckBoxButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_GEN_SS_INTERFACE, generateServerSideInterfaceCheckBoxButton
.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
//filling label
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
Label fillLabel2 = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR);
fillLabel2.setLayoutData(gd);
// generate all
generateAllCheckBoxButton = new Button(container, SWT.CHECK);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
generateAllCheckBoxButton.setLayoutData(gd);
generateAllCheckBoxButton.setSelection(settings
.getBoolean(PREF_GEN_ALL));
generateAllCheckBoxButton.setText(CodegenWizardPlugin
.getResourceString("page2.genAll.caption"));
generateAllCheckBoxButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_GEN_ALL, generateAllCheckBoxButton
.getSelection());
handleGenerateAllSelection();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
//filling label
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
Label fillLabel3 = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR);
fillLabel3.setLayoutData(gd);
// Databinding
label = new Label(container, SWT.NULL);
label.setText(CodegenWizardPlugin
.getResourceString("page2.namespace2Pkg.caption"));
//add a table to set namespace to package mapping
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 3;
gd.verticalSpan = 5;
namespace2packageTable = new Table(container,SWT.BORDER|SWT.MULTI);
namespace2packageTable.setLinesVisible(true);
namespace2packageTable.setHeaderVisible(true);
namespace2packageTable.setEnabled(true);
namespace2packageTable.setLayoutData(gd);
declareColumn(namespace2packageTable,
350, //a default width until we adjust
CodegenWizardPlugin
.getResourceString("page2.namespace.caption"));
declareColumn(namespace2packageTable,
200,//a default width until we adjust
CodegenWizardPlugin
.getResourceString("page2.package.caption"));
namespace2packageTable.setVisible(true);
// add the table editor
final TableEditor editor = new TableEditor(namespace2packageTable);
editor.setColumn(1);
editor.horizontalAlignment = SWT.LEFT;
editor.grabHorizontal = true;
//This is the cute way of making the namespaces columns editable
namespace2packageTable.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event event) {
Rectangle clientArea = namespace2packageTable.getClientArea();
Point pt = new Point(event.x, event.y);
int index = namespace2packageTable.getTopIndex();
while (index < namespace2packageTable.getItemCount()) {
boolean visible = false;
final TableItem item = namespace2packageTable.getItem(index);
for (int i = 0; i < namespace2packageTable.getColumnCount(); i++) {
Rectangle rect = item.getBounds(i);
if (rect.contains(pt)) {
final int column = i;
final Text text = new Text(namespace2packageTable, SWT.NONE);
Listener textListener = new Listener() {
public void handleEvent(final Event e) {
switch (e.type) {
case SWT.FocusOut:
item.setText(column, text.getText());
text.dispose();
break;
case SWT.Traverse:
switch (e.detail) {
case SWT.TRAVERSE_RETURN:
item
.setText(column, text
.getText());
// FALL THROUGH
case SWT.TRAVERSE_ESCAPE:
text.dispose();
e.doit = false;
}
break;
}
}
};
text.addListener(SWT.FocusOut, textListener);
text.addListener(SWT.Traverse, textListener);
editor.setEditor(text, item, i);
text.setText(item.getText(i));
text.selectAll();
text.setFocus();
return;
}
if (!visible && rect.intersects(clientArea)) {
visible = true;
}
}
if (!visible)
return;
index++;
}
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
Label fillLabel4 = new Label(container, SWT.NULL);
fillLabel4.setLayoutData(gd);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
advanceOptionsButton= new Button(container, SWT.NULL);
advanceOptionsButton.setText("Advance Options");
advanceOptionsButton.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e) {
handleAdvanceButtonClick();
}
});
advanceOptionsButton.setLayoutData(gd);
//adjust the width
//adjustColumnWidth(namespace2packageTable);
/*
* Check the state of server-side selection, so we can enable/disable
* the serverXML checkbox button.
*/
handleServersideSelection();
/*
* try populating the combos and other information from the WSDL if this
* is restored
*/
if (restoredFromPreviousSettings) {
populateParamsFromWSDL();
selectDefaults();
}
//first appearence Disable all the controls
disableControls();
setControl(container);
setPageComplete(true);
}
private void handleAdvanceButtonClick(){
WSDLJavaAdvanceDialog javaAdvanceDialog = new WSDLJavaAdvanceDialog(getShell(),advanceOptions);
javaAdvanceDialog.create();
javaAdvanceDialog.getShell().setSize(700, 950);
javaAdvanceDialog.open();
if (javaAdvanceDialog.getReturnCode() == org.eclipse.jface.window.Window.OK){
advanceOptions=javaAdvanceDialog.getAdvanceOptions();
}
}
// /**
// * Adjust the column widths
// * @param table
// */
// private void adjustColumnWidth(Table table){
// Point p = namespace2packageTable.computeSize(SWT.DEFAULT, SWT.DEFAULT);
// int columns = table.getColumnCount();
// for (int i=0;i<columns;i++){
// table.getColumn(i).setWidth(p.x/columns);
// }
// }
/**
* A util method to create a new column
* @param table
* @param width
* @param colName
*/
private void declareColumn(Table table, int width,String colName){
TableColumn column = new TableColumn(table,SWT.NONE);
column.setWidth(width);
column.setText(colName);
}
private void selectDefaults() {
serviceNameCombo.select(settings.getInt(PREF_COMBO_SERVICENAME_INDEX));
// ports need to be renamed in order for correct default selection
loadPortNames();
portNameCombo.select(settings.getInt(PREF_COMBO_SERVICENAME_INDEX));
}
private void populatePackageName() {
this.packageText.setText(reader.packageFromTargetNamespace());
}
/**
* populate the service and the port from the WSDL this needs to be public
* since the WSDLselection page may call this
*/
public void populateParamsFromWSDL() {
if (reader == null)
reader = new WSDLPropertyReader();
try {
String lname = getCodegenWizard().getWSDLname();
if (!"".equals(lname.trim())) {
reader.readWSDL(lname);
// enable the combo's
setComboBoxEnable(true);
this.serviceQNameList = reader.getServiceList();
if (!serviceQNameList.isEmpty()) {
serviceNameCombo.removeAll();
for (int i = 0; i < serviceQNameList.size(); i++) {
// add the local part of the
serviceNameCombo.add(((QName) serviceQNameList.get(i))
.getLocalPart());
}
;
// select the first one as the default
serviceNameCombo.select(0);
// load the ports
loadPortNames();
updateStatus(null);
} else {
// service name list being empty means we are switching to
// the interface mode
if (serviceNameCombo!=null) serviceNameCombo.removeAll();
if (portNameCombo!=null) portNameCombo.removeAll();
// disable the combo's
setComboBoxEnable(false);
//this is not an error
updateStatus(null);
}
populatePackageName();
//populate the namespacess
loadNamespaces(reader.getDefinitionNamespaceMap());
}
} catch (WSDLException e) {
// disable the combo's
setComboBoxEnable(false);
updateStatus(CodegenWizardPlugin
.getResourceString("page2.wsdlInvalid.message"));
}
catch (Exception e) {
// disable the combo's
setComboBoxEnable(false);
updateStatus(CodegenWizardPlugin
.getResourceString("page2.wsdlNotFound.message"));
}
}
private void loadPortNames() {
int selectionIndex = serviceNameCombo.getSelectionIndex();
if (selectionIndex != -1) {
java.util.List ports = reader.getPortNameList((QName) serviceQNameList
.get(selectionIndex));
if (!ports.isEmpty()) {
portNameCombo.removeAll();
for (int i = 0; i < ports.size(); i++) {
// add the local part of the
portNameCombo.add(ports.get(i).toString());
}
updateStatus(null);
portNameCombo.select(0);
} else {
updateStatus(CodegenWizardPlugin
.getResourceString("page2.noports.message"));
}
}
}
private void setComboBoxEnable(boolean b) {
if (serviceNameCombo != null) {
serviceNameCombo.setEnabled(b);
portNameCombo.setEnabled(b);
}
}
/**
* Loads the namespaces
* @param namespaceMap
*/
private void loadNamespaces(Map namespaceMap){
Iterator namespaces = namespaceMap.values().iterator();
namespace2packageTable.removeAll();
TableItem[] items = new TableItem[namespaceMap.size()]; // An item for each field
int i = 0;
while(namespaces.hasNext()){
items[i] = new TableItem(namespace2packageTable, SWT.NULL);
String namespace = (String)namespaces.next();
items[i].setText(0,namespace);
items[i].setText(1,getPackageFromNamespace(namespace));
i++;
}
namespace2packageTable.setVisible(true);
}
/**
* Fill the combo with proper databinding names
*
*/
private void fillDatabinderCombo() {
databindingTypeCombo.add(DATA_BINDING_ADB);
databindingTypeCombo.add(DATA_BINDING_XMLBEANS);
databindingTypeCombo.add(DATA_BINDING_JIBX);
databindingTypeCombo.add(DATA_BINDING_NONE);
}
/**
* Fill the combo with proper language names
*
*/
private void fillLanguageCombo() {
languageSelectionComboBox.add(JAVA);
//since we have not looked at C# support seriously
//for a long time, we'll just leave it out
//languageSelectionComboBox.add(C_SHARP);
languageSelectionComboBox.select(0);
}
/**
* Fill the combo with properoption selection
*
*/
private void fillCodegenOptionSelectionComboBox() {
codegenOptionSelectionComboBox.add(DEFAULT);
codegenOptionSelectionComboBox.add(CUSTOM);
codegenOptionSelectionComboBox.select(0);
}
/**
* Validates the status of the server-side checkbox, and enables/disables
* the generation checkbox for XML configuration file
*/
private void handleServersideSelection() {
if (this.serverSideCheckBoxButton.getSelection()) {
settings.put(PREF_CHECK_GENERATE_SERVERSIDE, serverSideCheckBoxButton
.getSelection());
this.serverXMLCheckBoxButton.setEnabled(true);
//this.generateAllCheckBoxButton.setEnabled(true);
this.generateServerSideInterfaceCheckBoxButton.setEnabled(true);
if(clientSideCheckBoxButton.getSelection()==true
|| generateAllCheckBoxButton.getSelection() == true){
uncheckClientSide();
uncheckGenerateAll();
serverSideCheckBoxButton.setSelection(true);
settings.put(PREF_CHECK_GENERATE_SERVERSIDE, serverSideCheckBoxButton
.getSelection());
}
this.syncAndAsyncRadioButton.setSelection(false);
this.asyncOnlyRadioButton.setSelection(false);
this.syncOnlyRadioButton.setSelection(false);
//earlier existing code (This only set focus false)
this.syncAndAsyncRadioButton.setEnabled(false);
this.asyncOnlyRadioButton.setEnabled(false);
this.syncOnlyRadioButton.setEnabled(false);
this.testCaseCheckBoxButton.setEnabled(false);
this.testCaseCheckBoxButton.setSelection(false);
}
else {
// //added this to increase the UI features (this will deselct all the selected features)
// this.serverXMLCheckBoxButton.setSelection(false);
// //this.generateAllCheckBoxButton.setSelection(false);
// this.generateServerSideInterfaceCheckBoxButton.setSelection(false);
// //earlier existing code (This only set focus false)
// this.serverXMLCheckBoxButton.setEnabled(false);
// //this.generateAllCheckBoxButton.setEnabled(false);
// this.generateServerSideInterfaceCheckBoxButton.setEnabled(false);
if(clientSideCheckBoxButton.getSelection()==false
&& generateAllCheckBoxButton.getSelection() == false){
serverSideCheckBoxButton.setSelection(true);
settings.put(PREF_CHECK_GENERATE_SERVERSIDE, serverSideCheckBoxButton
.getSelection());
}
}
}
/**
* Validates the status of the client-side checkbox, and enables/disables
* the generation checkbox for XML configuration file
*/
private void handleClientsideSelection() {
if (this.clientSideCheckBoxButton.getSelection()) {
this.syncAndAsyncRadioButton.setSelection(true);
this.syncAndAsyncRadioButton.setEnabled(true);
this.asyncOnlyRadioButton.setEnabled(true);
this.syncOnlyRadioButton.setEnabled(true);
if(serverSideCheckBoxButton.getSelection()==true
|| generateAllCheckBoxButton.getSelection() == true){
clientSideCheckBoxButton.setSelection(true);
settings.put(PREF_CHECK_GENERATE_CLIENTSIDE, clientSideCheckBoxButton
.getSelection());
uncheckServerSide();
uncheckGenerateAll();
}
this.serverXMLCheckBoxButton.setEnabled(false);
this.serverXMLCheckBoxButton.setSelection(false);
this.generateServerSideInterfaceCheckBoxButton.setEnabled(false);
this.generateServerSideInterfaceCheckBoxButton.setSelection(false);
this.testCaseCheckBoxButton.setEnabled(true);
}
else {
//added this to increase the UI features (this will deselct all the selected features)
// this.syncAndAsyncRadioButton.setSelection(false);
// this.asyncOnlyRadioButton.setSelection(false);
// this.syncOnlyRadioButton.setSelection(false);
//earlier existing code (This only set focus false)
// this.syncAndAsyncRadioButton.setEnabled(false);
// this.asyncOnlyRadioButton.setEnabled(false);
// this.syncOnlyRadioButton.setEnabled(false);
if(serverSideCheckBoxButton.getSelection()==false
&& generateAllCheckBoxButton.getSelection() == false){
clientSideCheckBoxButton.setSelection(true);
settings.put(PREF_CHECK_GENERATE_CLIENTSIDE, clientSideCheckBoxButton
.getSelection());
}
}
}
private void handleGenerateAllSelection() {
if (this.generateAllCheckBoxButton.getSelection()) {
settings.put(PREF_GEN_ALL, generateAllCheckBoxButton
.getSelection());
if(serverSideCheckBoxButton.getSelection()==true
|| clientSideCheckBoxButton.getSelection() == true){
this.serverSideCheckBoxButton.setSelection(false);
settings.put(PREF_CHECK_GENERATE_SERVERSIDE, serverSideCheckBoxButton.getSelection());
uncheckServerSide();
uncheckClientSide();
}
this.syncAndAsyncRadioButton.setSelection(false);
this.asyncOnlyRadioButton.setSelection(false);
this.syncOnlyRadioButton.setSelection(false);
//earlier existing code (This only set focus false)
this.syncAndAsyncRadioButton.setEnabled(false);
this.asyncOnlyRadioButton.setEnabled(false);
this.syncOnlyRadioButton.setEnabled(false);
this.serverXMLCheckBoxButton.setEnabled(false);
this.serverXMLCheckBoxButton.setSelection(false);
this.generateServerSideInterfaceCheckBoxButton.setEnabled(false);
this.generateServerSideInterfaceCheckBoxButton.setSelection(false);
this.testCaseCheckBoxButton.setEnabled(true);
}
else{
if(serverSideCheckBoxButton.getSelection()==false
|| clientSideCheckBoxButton.getSelection() == false){
generateAllCheckBoxButton.setSelection(true);
settings.put(PREF_GEN_ALL, generateAllCheckBoxButton
.getSelection());
}
}
}
/**
* Get the selected language
*
* @return a string containing the name of the target language
*/
public String getSelectedLanguage() {
return languageSelectionComboBox.getItem(languageSelectionComboBox
.getSelectionIndex());
}
/**
* the async only status
*
* @return true if "Generate asynchronous code only" is checked
*/
public boolean isAsyncOnlyOn() {
return asyncOnlyRadioButton.getSelection();
}
/**
* the sync only status
*
* @return true if "Generate synchronous code only" is checked
*/
public boolean isSyncOnlyOn() {
return syncOnlyRadioButton.getSelection();
}
/**
* return the package name
*
* @return a string containing the package name to use for code generation
*/
public String getPackageName() {
if ("".equals(packageText.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.packageText.getText();
}
/**
* The serverside status
*
* @return true if "Generate Server-Side" is checked
*/
public boolean isServerside() {
return this.serverSideCheckBoxButton.getSelection();
}
/**
*
* @return true if "Generate XML configuration file" is checked
*/
public boolean isServerXML() {
if (this.serverXMLCheckBoxButton.isEnabled())
return this.serverXMLCheckBoxButton.getSelection();
else
return false;
}
/**
*
* @return true if "Generate test case" is checked
*/
public boolean isGenerateTestCase() {
return this.testCaseCheckBoxButton.getSelection();
}
/*
* (non-Javadoc)
*
* @see org.apache.axis2.tool.codegen.eclipse.ui.CodegenPage#getPageType()
*/
public int getPageType() {
return WSDL_2_JAVA_TYPE;
}
/**
*
* @return null if portname is empty
*/
public String getPortName() {
int selectionIndex = portNameCombo.getSelectionIndex();
if (selectionIndex != -1) {
String text = this.portNameCombo.getItem(selectionIndex);
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 = serviceNameCombo.getSelectionIndex();
// cater for the scenario where the combo's can be empty
if (selectionIndex != -1) {
String text = this.serviceNameCombo.getItem(selectionIndex);
if (text == null || text.trim().equals("")) {
return null;
}
return text;
} else {
return null;
}
}
/**
*
* @return
*/
public String getDatabinderName() {
return this.databindingTypeCombo.getItem(databindingTypeCombo
.getSelectionIndex());
}
/**
*
* @return
*/
public boolean getGenerateServerSideInterface() {
return this.generateServerSideInterfaceCheckBoxButton.getSelection();
}
/**
*
* @return
*/
public boolean getGenerateAll() {
return this.generateAllCheckBoxButton.getSelection();
}
/**
* get the package to namespace mappings
* @return
*/
public String getNs2PkgMapping(){
String returnList="";
TableItem[] items = namespace2packageTable.getItems();
String packageValue;
for (int i=0;i<items.length;i++){
packageValue = items[i].getText(1);
if (packageValue!=null && !"".equals(packageValue)){
returnList = returnList +
("".equals(returnList)?"":",") +
items[i].getText(0)+ "=" + packageValue;
}
}
return "".equals(returnList)?null:returnList;
}
private void disableControls(){
this.codegenOptionSelectionComboBox.select(0);
this.testCaseCheckBoxButton.setEnabled(false);
this.testCaseCheckBoxButton.setSelection(false);
this.databindingTypeCombo.setEnabled(false);
this.databindingTypeCombo.select(0);
this.generateAllCheckBoxButton.setEnabled(false);
this.generateAllCheckBoxButton.setSelection(false);
this.generateServerSideInterfaceCheckBoxButton.setEnabled(false);
this.generateServerSideInterfaceCheckBoxButton.setSelection(false);
this.languageSelectionComboBox.setEnabled(false);
this.namespace2packageTable.setEnabled(false);
this.packageText.setEditable(false);
this.portNameCombo.setEnabled(false);
this.portNameCombo.select(0);
this.serverSideCheckBoxButton.setEnabled(false);
this.serverSideCheckBoxButton.setSelection(false);
this.serverXMLCheckBoxButton.setEnabled(false);
this.serverXMLCheckBoxButton.setSelection(false);
this.serviceNameCombo.setEnabled(false);
this.serviceNameCombo.select(0);
this.syncOnlyRadioButton.setEnabled(false);
this.syncOnlyRadioButton.setSelection(false);
this.asyncOnlyRadioButton.setEnabled(false);
this.asyncOnlyRadioButton.setSelection(false);
this.syncAndAsyncRadioButton.setEnabled(false);
this.syncAndAsyncRadioButton.setSelection(true);
this.packageText.setEnabled(false);
this.clientSideCheckBoxButton.setEnabled(false);
this.clientSideCheckBoxButton.setSelection(true);
this.generateAllCheckBoxButton.setEnabled(false);
this.advanceOptionsButton.setEnabled(false);
}
private void enableControls(){
this.testCaseCheckBoxButton.setEnabled(true);
this.databindingTypeCombo.setEnabled(true);
this.languageSelectionComboBox.setEnabled(true);
this.namespace2packageTable.setEnabled(true);
this.packageText.setEditable(true);
this.portNameCombo.setEnabled(true);
this.serverSideCheckBoxButton.setEnabled(true);
this.serviceNameCombo.setEnabled(true);
this.syncOnlyRadioButton.setEnabled(true);
this.asyncOnlyRadioButton.setEnabled(true);
this.syncAndAsyncRadioButton.setEnabled(true);
this.packageText.setEnabled(true);
this.clientSideCheckBoxButton.setEnabled(true);
this.generateAllCheckBoxButton.setEnabled(true);
this.advanceOptionsButton.setEnabled(true);
}
/**
* get the package derived by Namespace
*/
public String getPackageFromNamespace(String namespace){
return URLProcessor.makePackageName(namespace);
}
private void handleCustomPackageNameModifyEvent() {
// This method is add as a tempory fix for the Axis2-1368
// TODO fix this permanantly.
String text = this.packageText.getText();
if ((text == null) || (text.trim().equals(""))|| (text.endsWith(".")) || (text.startsWith("."))) {
updateStatus(org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin
.getResourceString("page2.pachage.error.nolocation"));
return;
}
updateStatus(null);
}
private void uncheckServerSide(){
this.serverSideCheckBoxButton.setSelection(false);
settings.put(PREF_CHECK_GENERATE_SERVERSIDE, serverSideCheckBoxButton.getSelection());
}
private void uncheckClientSide(){
this.clientSideCheckBoxButton.setSelection(false);
settings.put(PREF_CHECK_GENERATE_CLIENTSIDE, clientSideCheckBoxButton.getSelection());
}
private void uncheckGenerateAll(){
this.generateAllCheckBoxButton.setSelection(false);
settings.put(PREF_GEN_ALL, generateAllCheckBoxButton.getSelection());
}
public HashMap getAdvanceOptions(){
if (advanceOptionsButton.getEnabled())
return advanceOptions;
else
return getInitialisedAdvanceOptions();
}
}