blob: c9f5aba312c1eba8a3ca776a28734e632c649d3f [file] [log] [blame]
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;
}
}