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