/* * 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; } }