blob: eaa7d9b64479c4a78c27c75f25a2ee278bfb8d38 [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.eclipse.ui;
import org.apache.axis2.tool.service.bean.WSDLAutoGenerateOptionBean;
import org.apache.axis2.tool.service.eclipse.plugin.ServiceArchiver;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Label;
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 java.io.File;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class WSDLOptionsPage extends AbstractServiceWizardPage {
private static final String SERVICE_WSDL_DEFAULT_NAME = "service.wsdl";
private Text classNameTextBox;
private Text outputFileNameTextBox;
private Combo styleSelectionCombo;
private Button searchDeclaredMethodsCheckBox;
private Table table;
private boolean dirty = false;
public WSDLOptionsPage(){
super("page6");
}
/* (non-Javadoc)
* @see org.apache.axis2.tool.service.eclipse.ui.AbstractServiceWizardPage#initializeDefaultSettings()
*/
protected void initializeDefaultSettings() {
settings.put(PREF_WSDL_FILE_NAME,SERVICE_WSDL_DEFAULT_NAME);
settings.put(PREF_WSDL_CLASS_NAME,"");
settings.put(PREF_WSDL_STYLE_INDEX,0);
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 3;
layout.verticalSpacing = 9;
// #########################################################
Label label = new Label(container, SWT.NULL);
label
.setText(ServiceArchiver
.getResourceString("page6.fileName.label"));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
outputFileNameTextBox = new Text(container, SWT.BORDER);
outputFileNameTextBox.setLayoutData(gd);
outputFileNameTextBox.setText(settings.get(PREF_WSDL_FILE_NAME));
//###########################################################
outputFileNameTextBox.setEnabled(false);//this text box is disbaled for
// now
//########################################################
outputFileNameTextBox.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
handlFileNameModification();
}
});
//########################################################
gd = new GridData(GridData.FILL_HORIZONTAL);
label = new Label(container, SWT.NULL);
label.setText(ServiceArchiver.getResourceString("page6.class.label"));
classNameTextBox = new Text(container, SWT.BORDER);
classNameTextBox.setLayoutData(gd);
classNameTextBox.setText(settings.get(PREF_WSDL_CLASS_NAME));
classNameTextBox.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
handleClassNameModification();
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
Button loadButton = new Button(container, SWT.PUSH);
loadButton.setText("Load");
loadButton.setLayoutData(gd);
loadButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateTable();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
searchDeclaredMethodsCheckBox = new Button(container,SWT.CHECK);
searchDeclaredMethodsCheckBox.setLayoutData(gd);
searchDeclaredMethodsCheckBox.setText("List Declared Methods Only");
searchDeclaredMethodsCheckBox.addSelectionListener(new SelectionListener(){
public void widgetSelected(SelectionEvent e){
updateDirtyStatus(true);//dirty
}
public void widgetDefaultSelected(SelectionEvent e){}
});
// #####################################################
label = new Label(container, SWT.NULL);
label.setText(ServiceArchiver.getResourceString("page6.style.label"));
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
styleSelectionCombo = new Combo(container, SWT.DROP_DOWN | SWT.BORDER
| SWT.READ_ONLY);
styleSelectionCombo.setLayoutData(gd);
populateStyleCombo();
styleSelectionCombo.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settings.put(PREF_WSDL_STYLE_INDEX, styleSelectionCombo
.getSelectionIndex());
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 3;
gd.verticalSpan = 5;
table = new Table(container,SWT.SINGLE|SWT.FULL_SELECTION|SWT.CHECK);
table.setLinesVisible(true);
table.setHeaderVisible(true);
table.setLayoutData(gd);
declareColumn(table,20,"");
declareColumn(table,100,"Method Name");
declareColumn(table,100,"Return Type");
declareColumn(table,100,"Parameter Count");
table.setVisible(false);
setControl(container);
}
private void declareColumn(Table table, int width,String colName){
TableColumn column = new TableColumn(table,SWT.NONE);
column.setWidth(width);
column.setText(colName);
}
private void populateStyleCombo() {
styleSelectionCombo.add("Document");
styleSelectionCombo.add("rpc");
styleSelectionCombo.add("Wrapped");
styleSelectionCombo.select(settings.getInt(PREF_WSDL_STYLE_INDEX));
}
private void updateTable() {
//get a URL from the class file location
try {
String classFileLocation = getClassFileLocation();
URL classFileURL = new File(classFileLocation).toURL();
ClassLoader loader = new URLClassLoader(new URL[] { classFileURL });
Class clazz = loader.loadClass(classNameTextBox.getText());
Method[] methods = null;
if (searchDeclaredMethodsCheckBox.getSelection()){
methods = clazz.getDeclaredMethods();
}else{
methods = clazz.getMethods();
}
int methodCount = methods.length;
if (methodCount > 0) {
table.removeAll();
TableItem[] items = new TableItem[methodCount]; // An item for each field
for (int i = 0 ; i < methodCount; i++){
items[i] = new TableItem(table, SWT.NONE);
items[i].setText(1,methods[i].getName());
items[i].setText(2,methods[i].getReturnType().getName());
items[i].setText(3,methods[i].getParameterTypes().length+"");
items[i].setChecked(true);//check them all by default
}
table.setVisible(true);
//update the dirty variable
updateDirtyStatus(false);
updateStatus(null);
}
} catch (MalformedURLException e) {
updateStatus("Error : invalid location " +e.getMessage());
} catch (ClassNotFoundException e) {
updateStatus("Error : Class not found " + e.getMessage());
}
}
private void handleClassNameModification(){
String className = classNameTextBox.getText();
settings.put(PREF_WSDL_CLASS_NAME, className);
if (className==null || "".equals(className.trim())){
updateStatus(ServiceArchiver.getResourceString("page6.error.classname1"));
}else if (className.endsWith(".")){
updateStatus(ServiceArchiver.getResourceString("page6.error.classname2"));
}else{
updateStatus(null);
}
}
private void handlFileNameModification(){
String wsdlFileName = outputFileNameTextBox.getText();
settings.put(PREF_WSDL_FILE_NAME, wsdlFileName);
if (wsdlFileName==null || "".equals(wsdlFileName.trim())){
updateStatus(ServiceArchiver.getResourceString("page6.error.fileName1"));
}else if (wsdlFileName.endsWith(".wsdl")){
updateStatus(ServiceArchiver.getResourceString("page6.error.fileName2"));
}else{
updateStatus(null);
}
}
private String getClassFileLocation(){
ServiceArchiveWizard wizard = (ServiceArchiveWizard)getWizard();
return wizard.getClassFileLocation();
}
public WSDLAutoGenerateOptionBean getBean(){
WSDLAutoGenerateOptionBean optionBean = new WSDLAutoGenerateOptionBean();
optionBean.setClassFileName(classNameTextBox.getText());
optionBean.setOutputFileName(outputFileNameTextBox.getText());
optionBean.setStyle(styleSelectionCombo.getItem(styleSelectionCombo.getSelectionIndex()));
return optionBean;
}
private void updateDirtyStatus(boolean status){
dirty = status;
if (table.isVisible()){
table.setEnabled(!status);
}
setPageComplete(!status);
}
protected boolean getWizardComplete() {
return false;
}
}