| package org.apache.axis2.tool.codegen.eclipse.ui; |
| |
| import java.util.HashMap; |
| import java.util.regex.Pattern; |
| |
| import org.apache.axis2.util.CommandLineOptionConstants; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.swt.SWT; |
| 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.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.Control; |
| import org.eclipse.swt.widgets.DirectoryDialog; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableColumn; |
| import org.eclipse.swt.widgets.TableItem; |
| import org.eclipse.swt.widgets.Text; |
| |
| public class WSDLJavaAdvanceDialog extends Dialog { |
| |
| private Button tmpCheckBox; |
| private Text tmpTextBox; |
| private HashMap advanceOptions; |
| private boolean isEditAdvanceOptions=false; |
| private Combo wsdlVersionCombo; |
| private Button packageRemoveButton; |
| private Table packageNameList; |
| private Button packageAddButton; |
| private Text addNewExcludePackageName; |
| |
| protected WSDLJavaAdvanceDialog(Shell shell, HashMap advanceOptions) { |
| super(shell); |
| isEditAdvanceOptions=(advanceOptions!=null); |
| if (isEditAdvanceOptions) |
| this.advanceOptions=(HashMap) advanceOptions.clone(); |
| else |
| this.advanceOptions=new HashMap(); |
| } |
| |
| private Button addCheckBox(Composite container, |
| final Button tmpCheckBox,String caption,final String parameterType){ |
| GridData gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 3; |
| //tmpCheckBox = new Button(container, SWT.CHECK); |
| tmpCheckBox.setLayoutData(gd); |
| tmpCheckBox.setText(caption); |
| if (isEditAdvanceOptions) |
| tmpCheckBox.setSelection(advanceOptions.containsKey(parameterType)); |
| tmpCheckBox.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent e) { |
| setCheckBoxState(parameterType, tmpCheckBox.getSelection()); |
| } |
| }); |
| return tmpCheckBox; |
| } |
| |
| private Text addTextBox(Composite container,Label lblCaption, |
| final Text tmpTextBox, String caption,final String parameterType,boolean isBrowseFolder){ |
| GridData gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 1; |
| gd.widthHint=200; |
| lblCaption.setLayoutData(gd); |
| lblCaption.setText(caption); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| if (isBrowseFolder) |
| gd.horizontalSpan = 1; |
| else |
| gd.horizontalSpan = 2; |
| tmpTextBox.setLayoutData(gd); |
| if (isEditAdvanceOptions) |
| if (advanceOptions.containsKey(parameterType)) |
| tmpTextBox.setText(((String[])advanceOptions.get(parameterType))[0]); |
| tmpTextBox.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent e) { |
| setTextBoxValue(parameterType, tmpTextBox.getText()); |
| } |
| }); |
| if (isBrowseFolder){ |
| Button browse=new Button(container,SWT.NULL); |
| browse.setText("Browse"); |
| browse.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| DirectoryDialog dialog = new DirectoryDialog(getShell()); |
| String returnString = dialog.open(); |
| if (returnString != null) { |
| tmpTextBox.setText(returnString); |
| } |
| } |
| }); |
| } |
| return tmpTextBox; |
| } |
| |
| protected Control createDialogArea(final Composite parent) { |
| Composite container = (Composite) super.createDialogArea(parent); |
| //FontUtil fontUtil = FontUtil.getInstance(container.getDisplay()); |
| |
| GridLayout layout = new GridLayout(); |
| container.setLayout(layout); |
| layout.numColumns = 3; |
| layout.verticalSpacing = 10; |
| |
| GridData gd; |
| |
| addTextBox(container,new Label(container,SWT.NULL), new Text(container,SWT.BORDER), |
| "Specify a repository against which code is generated.", |
| CommandLineOptionConstants.WSDL2JavaConstants.REPOSITORY_PATH_OPTION,true); |
| addTextBox(container,new Label(container,SWT.NULL), new Text(container,SWT.BORDER), |
| "Specify a directory path for generated source", |
| CommandLineOptionConstants.WSDL2JavaConstants.SOURCE_FOLDER_NAME_OPTION,true); |
| addTextBox(container,new Label(container,SWT.NULL), new Text(container,SWT.BORDER), |
| "Specify a directory path for generated resources", |
| CommandLineOptionConstants.WSDL2JavaConstants.RESOURCE_FOLDER_OPTION,true); |
| addTextBox(container,new Label(container,SWT.NULL), new Text(container,SWT.BORDER), |
| "Proxy host address if you are behind a firewall", |
| CommandLineOptionConstants.WSDL2JavaConstants.HTTP_PROXY_HOST_OPTION_LONG,false); |
| addTextBox(container,new Label(container,SWT.NULL), new Text(container,SWT.BORDER), |
| "Proxy port address if you are behind a firewall", |
| CommandLineOptionConstants.WSDL2JavaConstants.HTTP_PROXY_PORT_OPTION_LONG,false); |
| addTextBox(container,new Label(container,SWT.NULL), new Text(container,SWT.BORDER), |
| "Skelton interface name", |
| CommandLineOptionConstants.WSDL2JavaConstants.SKELTON_INTERFACE_NAME_OPTION,false); |
| addTextBox(container,new Label(container,SWT.NULL), new Text(container,SWT.BORDER), |
| "Skelton class name", |
| CommandLineOptionConstants.WSDL2JavaConstants.SKELTON_CLASS_NAME_OPTION,false); |
| |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 3; |
| Label fillLabel = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR); |
| fillLabel.setLayoutData(gd); |
| |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Unpacks the databinding classes", |
| CommandLineOptionConstants.WSDL2JavaConstants.UNPACK_CLASSES_OPTION); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Flattens the generated files", |
| CommandLineOptionConstants.WSDL2JavaConstants.FLATTEN_FILES_OPTION); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Switch on un-wrapping", |
| CommandLineOptionConstants.WSDL2JavaConstants.UNWRAP_PARAMETERS); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Generate code for all ports", |
| CommandLineOptionConstants.WSDL2JavaConstants.All_PORTS_OPTION); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Overwrite the existing classes", |
| CommandLineOptionConstants.WSDL2JavaConstants.OVERRIDE_OPTION); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Generate Axis 1.x backword compatible code", |
| CommandLineOptionConstants.WSDL2JavaConstants.BACKWORD_COMPATIBILITY_OPTION); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Suppress namespace prefixes (Optimzation that reduces size of soap request/response)", |
| CommandLineOptionConstants.WSDL2JavaConstants.SUPPRESS_PREFIXES_OPTION); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Dont generate the build.xml in the output directory", |
| CommandLineOptionConstants.WSDL2JavaConstants.NO_BUILD_XML_OPTION_LONG); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Dont generate WSDLs in the resources directory", |
| CommandLineOptionConstants.WSDL2JavaConstants.NO_WSDLS_OPTION_LONG); |
| tmpCheckBox=new Button(container, SWT.CHECK);addCheckBox(container,tmpCheckBox, |
| "Dont generate a MessageReceiver in the generated sources", |
| CommandLineOptionConstants.WSDL2JavaConstants.NO_MESSAGE_RECEIVER_OPTION_LONG); |
| |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 3; |
| fillLabel = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR); |
| fillLabel.setLayoutData(gd); |
| |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 2; |
| gd.widthHint=400; |
| Label fillLabel1=new Label(container,SWT.NULL); |
| fillLabel1.setLayoutData(gd); |
| fillLabel1.setText("WSDL version"); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| wsdlVersionCombo=new Combo(container,SWT.DROP_DOWN | SWT.BORDER| SWT.READ_ONLY); |
| wsdlVersionCombo.setLayoutData(gd); |
| fillWSDLVersionCombo(); |
| String key=CommandLineOptionConstants.WSDL2JavaConstants.WSDL_VERSION_OPTION; |
| if ((isEditAdvanceOptions) && (advanceOptions.containsKey(key))) |
| wsdlVersionCombo.select(wsdlVersionCombo.indexOf(((String[])advanceOptions.get(key))[0])); |
| |
| wsdlVersionCombo.addSelectionListener(new SelectionListener() { |
| public void widgetSelected(SelectionEvent e) { |
| handleWsdlVersionComboSelected(); |
| |
| }; |
| |
| public void widgetDefaultSelected(SelectionEvent e) { |
| }; |
| }); |
| |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 3; |
| fillLabel = new Label(container, SWT.HORIZONTAL | SWT.SEPARATOR); |
| fillLabel.setLayoutData(gd); |
| |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 1; |
| Label labelPackageAddCaption = new Label(container, SWT.NULL); |
| labelPackageAddCaption.setLayoutData(gd); |
| labelPackageAddCaption.setText("Excludes Packages"); |
| |
| addNewExcludePackageName=new Text(container,SWT.BORDER); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 1; |
| addNewExcludePackageName.setLayoutData(gd); |
| addNewExcludePackageName.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent e) { |
| handleNewPackageNameChange(); |
| } |
| }); |
| |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 1; |
| packageAddButton= new Button(container, SWT.NULL); |
| packageAddButton.setText("Add"); |
| packageAddButton.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent e) { |
| addPackageName(); |
| } |
| }); |
| packageAddButton.setLayoutData(gd); |
| |
| packageNameList = new Table(container, |
| SWT.SINGLE|SWT.FULL_SELECTION|SWT.V_SCROLL|SWT.H_SCROLL); |
| packageNameList.setLinesVisible(true); |
| packageNameList.setHeaderVisible(true); |
| packageNameList.setLayoutData(gd); |
| TableColumn column = new TableColumn(packageNameList,SWT.NONE); |
| column.setWidth(500); |
| column.setText("Excluded packages"); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.horizontalSpan = 3; |
| gd.heightHint = 80; |
| packageNameList.setLayoutData(gd); |
| packageNameList.setVisible(false); |
| if (isEditAdvanceOptions) updateExcludePackageList(); |
| packageNameList.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent e) { |
| handlePackageNameListClick(); |
| } |
| }); |
| // tableOutputMaps.addMouseListener(new MouseAdapter(){ |
| // public void mouseDoubleClick(MouseEvent e){ |
| // //handleOutputMapEditQuery(); |
| // } |
| // }); |
| packageNameList.redraw(); |
| packageNameList.setVisible(true); |
| |
| 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; |
| packageRemoveButton= new Button(container, SWT.NULL); |
| packageRemoveButton.setText("Remove"); |
| packageRemoveButton.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent e) { |
| removePackageName(); |
| } |
| }); |
| packageRemoveButton.setLayoutData(gd); |
| |
| handlePackageNameListClick(); |
| handleNewPackageNameChange(); |
| |
| return super.createDialogArea(parent); |
| } |
| |
| private void handlePackageNameListClick(){ |
| packageRemoveButton.setEnabled(packageNameList.getSelectionCount()>0); |
| } |
| |
| private void removePackageName(){ |
| if (packageNameList.getSelectionIndex()!=-1){ |
| String type=CommandLineOptionConstants.WSDL2JavaConstants.EXCLUDE_PAKAGES_OPTION; |
| String[] commaSeperatedPackageList=(String[]) advanceOptions.get(type); |
| String[] packageList=commaSeperatedPackageList[0].split(","); |
| String newList=""; |
| int selectedIndex=packageNameList.getSelectionIndex(); |
| String toRemove=packageNameList.getItem(selectedIndex).getText(); |
| for (String s : packageList) { |
| if (!s.equalsIgnoreCase(toRemove)){ |
| if (newList.equalsIgnoreCase("")) |
| newList=s; |
| else |
| newList=newList+","+s; |
| } |
| } |
| if (newList.equalsIgnoreCase("")) |
| advanceOptions.remove(type); |
| else |
| advanceOptions.put(type, new String[]{newList}); |
| packageNameList.remove(selectedIndex); |
| if (selectedIndex>=packageNameList.getItemCount()) |
| selectedIndex--; |
| packageNameList.select(selectedIndex); |
| } |
| packageNameList.redraw(); |
| handlePackageNameListClick(); |
| } |
| |
| private void addPackageName(){ |
| String newList; |
| String type=CommandLineOptionConstants.WSDL2JavaConstants.EXCLUDE_PAKAGES_OPTION; |
| if (packageNameList.getItemCount()>0){ |
| String[] commaSeperatedPackageList=(String[]) advanceOptions.get(type); |
| newList=commaSeperatedPackageList[0]+","+addNewExcludePackageName.getText(); |
| }else |
| newList=addNewExcludePackageName.getText(); |
| advanceOptions.put(type,new String[]{newList}); |
| addTableItem(addNewExcludePackageName.getText()); |
| addNewExcludePackageName.setText(""); |
| handleNewPackageNameChange(); |
| } |
| |
| private void updateExcludePackageList(){ |
| packageNameList.clearAll(); |
| String type=CommandLineOptionConstants.WSDL2JavaConstants.EXCLUDE_PAKAGES_OPTION; |
| if (advanceOptions.containsKey(type)){ |
| String[] commaSeperatedPackageList=(String[]) advanceOptions.get(type); |
| String[] packageList=commaSeperatedPackageList[0].split(","); |
| for (String string : packageList) { |
| addTableItem(string); |
| } |
| } |
| } |
| |
| private void addTableItem(String itemText){ |
| TableItem item=new TableItem(packageNameList,SWT.None); |
| item.setText(itemText); |
| } |
| |
| private void handleNewPackageNameChange(){ |
| Pattern p = Pattern.compile("^[a-zA-Z_\\$][\\w\\$]*(?:\\.[a-zA-Z_\\$][\\w\\$]*)*$"); |
| packageAddButton.setEnabled(p.matcher(addNewExcludePackageName.getText()).matches()); |
| } |
| |
| private void handleWsdlVersionComboSelected(){ |
| advanceOptions.put(CommandLineOptionConstants.WSDL2JavaConstants.WSDL_VERSION_OPTION, |
| new String[]{wsdlVersionCombo.getItem(wsdlVersionCombo.getSelectionIndex())}); |
| } |
| |
| private void fillWSDLVersionCombo(){ |
| wsdlVersionCombo.removeAll(); |
| wsdlVersionCombo.add("1.1"); |
| wsdlVersionCombo.add("2.0"); |
| } |
| private void setCheckBoxState(String type,boolean state){ |
| if (state) |
| advanceOptions.put(type, null); |
| else |
| advanceOptions.remove(type); |
| } |
| |
| private void setTextBoxValue(String type,String value){ |
| if (value.equalsIgnoreCase("")) |
| advanceOptions.remove(type); |
| else |
| advanceOptions.put(type, new String[]{value}); |
| } |
| |
| public HashMap getAdvanceOptions(){ |
| return advanceOptions; |
| } |
| } |