blob: 5c4efb815b6f60e4b21942816d023097076cf21d [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.Page2Bean;
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.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;
import java.util.ArrayList;
public class ServiceXMLGenerationPage extends AbstractServiceWizardPage{
private Text classNameTextBox;
private Text serviceNameTextBox;
private Button searchDeclaredMethodsCheckBox;
Button loadButton;
private Table table;
private boolean dirty = false;
public ServiceXMLGenerationPage(){
super("page3");
}
/* (non-Javadoc)
* @see org.apache.axis2.tool.service.eclipse.ui.AbstractServiceWizardPage#initializeDefaultSettings()
*/
protected void initializeDefaultSettings() {
settings.put(PREF_SERVICE_GEN_SERVICE_NAME,"MyService");
settings.put(PREF_SERVICE_GEN_CLASSNAME,"");
settings.put(PREF_SERVICE_GEN_LOAD_ALL,false);
}
/* (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();
layout.numColumns=3;
container.setLayout(layout);
Label label = new Label(container,SWT.NULL);
label.setText(ServiceArchiver.getResourceString("page3.servicename.lable"));
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
serviceNameTextBox = new Text(container,SWT.BORDER);
serviceNameTextBox.setLayoutData(gd);
serviceNameTextBox.setToolTipText(ServiceArchiver.getResourceString("page3.servicename.tooltip"));
serviceNameTextBox.setText(settings.get(PREF_SERVICE_GEN_SERVICE_NAME));
serviceNameTextBox.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
updateDirtyStatus(true);
settings.put(PREF_SERVICE_GEN_SERVICE_NAME,serviceNameTextBox.getText());
//validate
}
});
label = new Label(container,SWT.NULL);
label.setText(ServiceArchiver.getResourceString("page3.classname.lable"));
gd = new GridData(GridData.FILL_HORIZONTAL);
classNameTextBox = new Text(container,SWT.BORDER);
classNameTextBox.setLayoutData(gd);
classNameTextBox.setToolTipText(ServiceArchiver.getResourceString("page3.classname.tooltip"));
classNameTextBox.setText(settings.get(PREF_SERVICE_GEN_CLASSNAME));
classNameTextBox.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
updateDirtyStatus(true);
settings.put(PREF_SERVICE_GEN_CLASSNAME,classNameTextBox.getText());
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
loadButton = new Button(container,SWT.PUSH);
loadButton.setText(ServiceArchiver.getResourceString("page3.loadbutton.lable"));
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(ServiceArchiver.getResourceString("page3.declared.lable"));
searchDeclaredMethodsCheckBox.addSelectionListener(new SelectionListener(){
public void widgetSelected(SelectionEvent e){
updateDirtyStatus(true);//dirty
settings.put(PREF_SERVICE_GEN_LOAD_ALL,searchDeclaredMethodsCheckBox.getSelection());
if(table.isVisible()){
updateTable();
}
}
public void widgetDefaultSelected(SelectionEvent e){}
});
searchDeclaredMethodsCheckBox.setSelection(settings.getBoolean(PREF_SERVICE_GEN_LOAD_ALL));
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
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,ServiceArchiver.getResourceString("page3.table.col1"));
declareColumn(table,100,ServiceArchiver.getResourceString("page3.table.col2"));
declareColumn(table,100,ServiceArchiver.getResourceString("page3.table.col3"));
table.setVisible(false);
if (restoredFromPreviousSettings){
//try running the update
updateTable();
}else{
setPageComplete(false);
}
setControl(container);
}
/**
* if the user has already filled the data, this page needs to be
* unchangeable
*
*/
public void fillDatafromPrevious(WSDLAutoGenerateOptionBean bean) {
//set class name
String automaticClassName = bean.getClassFileName();
this.classNameTextBox.setText(automaticClassName);
this.classNameTextBox.setEnabled(false);
//set service name
String[] classnameParts = automaticClassName.split("\\.");
if (classnameParts.length == 0) {
this.serviceNameTextBox.setText(automaticClassName);
} else {
this.serviceNameTextBox
.setText(classnameParts[classnameParts.length - 1]);
}
//load the classes
updateTable();
//check the correct ones
//disbale the table
table.setEnabled(false);
loadButton.setEnabled(false);
}
public void clearPreviousData(){
this.classNameTextBox.setText("");
this.classNameTextBox.setEnabled(true);
//set service name
this.serviceNameTextBox.setText("");
if (table.isVisible()){
table.setVisible(false);
}
loadButton.setEnabled(true);
}
private void updateDirtyStatus(boolean status){
dirty = status;
if (table.isVisible()){
table.setEnabled(!status);
}
setPageComplete(!status);
}
private void declareColumn(Table table, int width,String colName){
TableColumn column = new TableColumn(table,SWT.NONE);
column.setWidth(width);
column.setText(colName);
}
private void updateTable() {
//get a URL from the class file location
try {
String classFileLocation = getClassFileLocation();
URL classFileURL = new File(classFileLocation).toURL();
ArrayList listofURLs = new ArrayList();
listofURLs.add(classFileURL);
//get the libraries from the lib page and load it
String[] libFileList = ((ServiceArchiveWizard)this.getWizard()).getLibFileList();
if (libFileList!=null){
int count = libFileList.length;
for (int i=0;i<count;i++){
listofURLs.add(new File(libFileList[i]).toURL());
}
}
ClassLoader loader = new URLClassLoader((URL[])listofURLs.toArray(new URL[listofURLs.size()]));
Class clazz = Class.forName(classNameTextBox.getText(),true,loader);
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(ServiceArchiver.getResourceString("page3.error.url") +e.getMessage());
} catch (ClassNotFoundException e) {
updateStatus(ServiceArchiver.getResourceString("page3.error.class")+ e.getMessage());
} catch (Exception e){
e.printStackTrace();
updateStatus(ServiceArchiver.getResourceString("page3.error.unknown") + e.getMessage());
}
}
public boolean isDirty(){
return dirty;
}
private String getClassFileLocation(){
ServiceArchiveWizard wizard = (ServiceArchiveWizard)getWizard();
return wizard.getClassFileLocation();
}
public Page2Bean getBean(Page2Bean previousBean){
if (!previousBean.isManual()){
previousBean.setAutomatic(true);
previousBean.setAutomaticClassName(classNameTextBox.getText());
ArrayList list = new ArrayList();
TableItem[] items = table.getItems();
int itemLength = items.length;
for(int i=0;i<itemLength;i++){
if(items[i].getChecked()){
list.add(items[i].getText(1));//get the selected method name only
}
}
previousBean.setSelectedMethodNames(list);
previousBean.setServiceName(this.serviceNameTextBox.getText());
}
return previousBean;
}
protected boolean getWizardComplete() {
return false;
}
}