/*
* 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.codegen.eclipse.ui;
import org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
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.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ContainerSelectionDialog;
import java.io.File;
public class JavaWSDLOutputLocationPage extends AbstractWizardPage {
private static final String EMPTY_STRING = "";
private static final int ECLIPSE_PROJECT_NAME_SEGMENT_INDEX = 0;
private Text outputFolderTextBox;
private Text outputFileNameTextBox;
private Button workspaceProjectOptionsButton;
private Button filesyStemOptionsButton;
private boolean workspaceSaveOption = false;
public JavaWSDLOutputLocationPage() {
super("page6");
}
/*
* (non-Javadoc)
*
* @see org.apache.axis2.tool.codegen.eclipse.ui.AbstractWizardPage#
* initializeDefaultSettings()
*/
protected void initializeDefaultSettings() {
settings.put(PREF_JAVA_OUTPUT_WSDL_LOCATION, EMPTY_STRING);
settings.put(JAVA_OUTPUT_WSDL_NAME, "services.wsdl");
settings.put(PREF_JAVA_OUTPUT_FILESYATEM, true);
settings.put(PREF_JAVA_OUTPUT_WORKSPACE, false);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.axis2.tool.codegen.eclipse.ui.AbstractWizardPage#getPageType()
*/
public int getPageType() {
return JAVA_2_WSDL_TYPE;
}
/*
* (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;
// layout.verticalSpacing = 9;
container.setLayout(layout);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
Label selectLabel = new Label(container, SWT.NULL);
selectLabel
.setText(CodegenWizardPlugin
.getResourceString("Select the location where to put the output"));
selectLabel.setLayoutData(gd);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
workspaceProjectOptionsButton = new Button(container, SWT.RADIO);
workspaceProjectOptionsButton.setLayoutData(gd);
workspaceProjectOptionsButton.setText(CodegenWizardPlugin
.getResourceString("page6.workspace.caption"));
workspaceProjectOptionsButton.setToolTipText(CodegenWizardPlugin
.getResourceString("page6.workspace.desc"));
workspaceProjectOptionsButton.setSelection(settings
.getBoolean(PREF_JAVA_OUTPUT_WORKSPACE));
workspaceProjectOptionsButton
.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleCheckboxSelection();
}
});
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
filesyStemOptionsButton = new Button(container, SWT.RADIO);
filesyStemOptionsButton.setLayoutData(gd);
filesyStemOptionsButton.setText(CodegenWizardPlugin
.getResourceString("page6.filesystem.caption"));
filesyStemOptionsButton.setToolTipText(CodegenWizardPlugin
.getResourceString("page6.filesystem.desc"));
filesyStemOptionsButton.setSelection(settings
.getBoolean(PREF_JAVA_OUTPUT_FILESYATEM));
filesyStemOptionsButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleCheckboxSelection();
}
});
Label label1 = new Label(container, SWT.NULL);
label1.setText(CodegenWizardPlugin
.getResourceString("page6.output.label"));
gd = new GridData(GridData.FILL_HORIZONTAL);
outputFolderTextBox = new Text(container, SWT.BORDER);
outputFolderTextBox.setLayoutData(gd);
outputFolderTextBox.setText(EMPTY_STRING);
outputFolderTextBox.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
handleFolderTextChange();
}
});
Button browseButton = new Button(container, SWT.PUSH);
browseButton.setText(CodegenWizardPlugin
.getResourceString("general.browse"));
browseButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
handleBrowse();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
Label label = new Label(container, SWT.NULL);
label.setText(CodegenWizardPlugin
.getResourceString("page6.outputname.label"));
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
outputFileNameTextBox = new Text(container, SWT.BORDER);
outputFileNameTextBox.setLayoutData(gd);
outputFileNameTextBox.setText(settings.get(JAVA_OUTPUT_WSDL_NAME));
outputFileNameTextBox.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
handleFileNameTextChange();
}
});
if (restoredFromPreviousSettings) {
handleFolderTextChange();
handleFolderTextChange();
}
setControl(container);
}
private void handleCheckboxSelection() {
if (workspaceProjectOptionsButton.getSelection()) {
settings.put(PREF_JAVA_OUTPUT_WORKSPACE, true);
settings.put(PREF_JAVA_OUTPUT_FILESYATEM, false);
workspaceSaveOption = true;
} else if (filesyStemOptionsButton.getSelection()) {
settings.put(PREF_JAVA_OUTPUT_FILESYATEM, true);
settings.put(PREF_JAVA_OUTPUT_WORKSPACE, false);
workspaceSaveOption = false;
}
}
private void handleFolderTextChange() {
String outputFolder = outputFolderTextBox.getText();
settings.put(PREF_JAVA_OUTPUT_WSDL_LOCATION, outputFolder);
if (EMPTY_STRING.equals(outputFolder.trim())) {
updateStatus("Input a proper location for the output");
} else {
updateStatus(null);
}
}
private void handleFileNameTextChange() {
String outFileName = outputFileNameTextBox.getText();
settings.put(JAVA_OUTPUT_WSDL_NAME, outFileName);
if (EMPTY_STRING.equals(outFileName.trim())) {
updateStatus("Input a file name");
} else if (outFileName.matches("\\W")) {
updateStatus("Input a valid file name");
} else if (!(outFileName.endsWith(".wsdl") || outFileName
.endsWith(".xml"))) {
updateStatus("Input a valid file name , Example : services.wsdl or services.xml");
} else {
updateStatus(null);
}
}
private void handleBrowse() {
// boolean location = locationSelectCheckBox.getSelection();
boolean location = false;
if (settings.getBoolean(PREF_JAVA_OUTPUT_FILESYATEM)) {
location = false;
} else if (settings.getBoolean(PREF_JAVA_OUTPUT_WORKSPACE)) {
location = true;
}
if (workspaceSaveOption) {
location = true;
}
if (!location) {
DirectoryDialog dialog = new DirectoryDialog(this.getShell());
String returnString = dialog.open();
if (returnString != null) {
outputFolderTextBox.setText(returnString);
}
} else {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
ContainerSelectionDialog dialog = new ContainerSelectionDialog(
getShell(), root, false,
CodegenWizardPlugin
.getResourceString("page3.containerbox.title"));
if (dialog.open() == ContainerSelectionDialog.OK) {
Object[] result = dialog.getResult();
if (result.length == 1) {
Path path = ((Path) result[0]);
if (root.exists(path)) {
// Fixing issue AXIS2-4008 by retrieving the project
// path instead of appending it to the workspace root.
IProject project = null;
StringBuilder builder=new StringBuilder();
if (path.segmentCount() > 1) {
// User has selected a folder inside a project
project = root.getProject(path.segment(ECLIPSE_PROJECT_NAME_SEGMENT_INDEX));
for (int i = ECLIPSE_PROJECT_NAME_SEGMENT_INDEX + 1; i < path.segments().length; i++) {
builder.append(File.separator).append(path.segment(i));
}
} else {
project = root.getProject(path.toOSString());
}
if (project != null) {
outputFolderTextBox.setText(project.getLocation()
.toOSString() + builder.toString());
} else {
// append to the workspace path if the project is
// null
outputFolderTextBox.setText(root.getLocation()
.append(path).toFile().getAbsolutePath());
}
}
}
}
}
}
public String getFullFileName() {
String folder = this.outputFolderTextBox.getText();
String fileName = this.outputFileNameTextBox.getText();
if (!fileName.endsWith(".wsdl")) {
fileName = fileName + ".wsdl";
}
return folder + File.separator + fileName;
}
public String getOutputWSDLName() {
return this.outputFileNameTextBox.getText();
}
public String getOutputLocation() {
return this.outputFolderTextBox.getText();
}
}