blob: 0c70c96b3efa8fa95ba510ba9d6af78d81807c77 [file] [log] [blame]
/*
* 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.tools.idea;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import org.apache.axis2.tools.bean.CodegenBean;
import org.apache.axis2.tools.component.WizardComponents;
import org.apache.axis2.tools.component.WizardPanel;
import org.apache.axis2.tools.wizardframe.CodegenFrame;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
public class WSDL2JavaOutputPanel extends WizardPanel {
private JTextField txtoutput;
private JTextField txtaxisHome;
private JTextField txtjarFileName;
private JButton btnBrowseOutput;
private JButton btnBrowseAxisHome;
private JButton btnCheckLib;
private JRadioButton radCurrentProject;
private JRadioButton radCustomLocation;
private JCheckBox chbAddAxisCodegenJar;
private JCheckBox chbAddAxisLib;
private JCheckBox chbCreateJar;
private JLabel lblMessage;
private JTextArea txtaTilte;
private JComboBox cmbCurrentProject;
private JComboBox cmbModuleSrc;
private JLabel lblAsixHome;
private JLabel lblJarFileName;
private JLabel lbloutput;
private JLabel lblModule;
private JLabel lblDirectory;
final JFileChooser DirChooser=new JFileChooser();
final private String title="Select one of below to save the codegen output either on idea workspace project or on file " +
"system and then browse to enter the output path";
final private String hint="If you have Axis2 binary distribution or Axis source, then you can add those libs also to the" +
" resulted codegen project by checking the \"Add Axis2 Libraries to the codegen resulted project\"" +
" check box and specifying the Axis2 home. Another option you have is to compile the codegen " +
" result project and add it as a jar file in the lib directory of the resulted project, for that you can" +
" check the \"Create a jar file of codegen result project and add to resulted project lib folder\"" +
" checkbox and then give the jar file name that you prefer. \n" +
" If you are adding the codegen result to a eclipse project on current eclipse workspace," +
" please make sure to refresh that particular eclipse project.\n" +
" Also if you select the options to add libs to the project, make sure to add those libs to the" +
" project library path.";
private CodegenBean codegenBean;
private boolean flag = true;
private Project project;
private JButton btnHint;
private JTextArea txaHint;
private boolean jarFileCopyOption = false;
private String axis2LibsLocation = null;
public WSDL2JavaOutputPanel(WizardComponents wizardComponents,CodegenBean codegenBean, Project project) {
super(wizardComponents, "Axis2 Idea Plugin WSDL2Java Wizards");
this.codegenBean=codegenBean;
this.project=project;
setPanelTopTitle("Output");
setPanelBottomTitle("set the out location for the generated code");
init();
}
private void init(){
txaHint =new JTextArea();
txaHint.setBorder(null);
txaHint.setFocusable(false);
txaHint.setLineWrap(true);
txaHint.setWrapStyleWord(true);
txaHint.setOpaque(false);
btnHint =new JButton("Hint >>");
btnHint.setBorder(new EmptyBorder(new Insets(0,0,0,0)));
lblMessage = new JLabel();
lblMessage.setOpaque(true);
lblMessage.setBackground(Color.white);
btnBrowseAxisHome =new JButton("Browse..");
btnBrowseOutput =new JButton("Browse..");
btnCheckLib =new JButton("Check Libs..");
cmbCurrentProject =new JComboBox();
cmbCurrentProject.setEnabled(false);
cmbModuleSrc=new JComboBox();
cmbModuleSrc.setEnabled(false);
txtoutput=new JTextField();
txtaxisHome =new JTextField("Unpacked Axis2 binary home Or Axis2 source location");
txtjarFileName =new JTextField();
txtaTilte =new JTextArea(title);
txtaTilte.setBorder(null);
txtaTilte.setFocusable(false);
txtaTilte.setLineWrap(true);
txtaTilte.setWrapStyleWord(true);
txtaTilte.setOpaque(false);
lblAsixHome=new JLabel("Axis2 Home");
lblAsixHome.setEnabled(false);
lblJarFileName = new JLabel("Jar File Name");
lblJarFileName.setEnabled(false);
lblDirectory= new JLabel("Select the Directory");
lblModule = new JLabel("Select the Module");
lbloutput =new JLabel("Out put path");
chbAddAxisCodegenJar =new JCheckBox("Add the Axis2 Codegen jars to the codegen resulted project");
chbAddAxisLib =new JCheckBox(" Add Axis2 libraries to the codegen result project ");
chbCreateJar=new JCheckBox(" Create a jar file of codegen result project and add to resulted project lib folder(Default :CodegenResults.jar)");
radCurrentProject =new JRadioButton("Browse and select a project on current idea workspace",false);
radCustomLocation =new JRadioButton("Browse and select location on local file system",true);
ButtonGroup buttonGroup= new ButtonGroup();
buttonGroup.add(radCurrentProject );
buttonGroup.add(radCustomLocation);
codegenBean.setProject(project);
setNextButtonEnabled(false);
this.setLayout(new GridBagLayout() );
this.add(txtaTilte
, new GridBagConstraints(0, 0, GridBagConstraints.REMAINDER , 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 10, 0,10), 0, 0));
this.add(radCurrentProject
, new GridBagConstraints(0, 1, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 10, 0,10), 0, 0));
radCurrentProject.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cmbCurrentProject.setEnabled(true);
cmbModuleSrc.setEnabled(true);
txtoutput.setEnabled(false);
btnBrowseOutput.setEnabled(false);
loadCmbCurrentProject();
loadcmbModuleSrcProject();
setFinishButtonEnabled(true);
update();
}
});
this.add(lblModule
, new GridBagConstraints(0, 2, 1, 1, 0.1, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 10, 0, 0), 0, 0));
this.add(cmbCurrentProject
, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0,0), 0, 0));
cmbCurrentProject.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadcmbModuleSrcProject();
update();
}
});
this.add(lblDirectory
, new GridBagConstraints(0, 3, 1, 1, 0.1, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 10, 0, 0), 0, 0));
this.add(cmbModuleSrc
, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0,0), 0, 0));
cmbModuleSrc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
update();
}
});
this.add(radCustomLocation
, new GridBagConstraints(0, 4, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 10, 0,10), 0, 0));
radCustomLocation.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cmbCurrentProject.setEnabled(false);
cmbModuleSrc.setEnabled(false);
txtoutput.setEnabled(true);
btnBrowseOutput.setEnabled(true);
setEnabledForCustomProject();
update();
}
});
this.add(lbloutput
, new GridBagConstraints(0, 5, 1, 1, 0.1, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 10, 0,0), 0, 0));
this.add(txtoutput
, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0,0), 0, 0));
this.add(btnBrowseOutput
, new GridBagConstraints(2, 5, 1, 1, 0.1, 0.0
, GridBagConstraints.EAST , GridBagConstraints.NONE
, new Insets(5, 0, 0,10), 0, 0));
btnBrowseOutput .addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DirChooser .setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = DirChooser.showOpenDialog(btnBrowseOutput );
if (returnVal == JFileChooser.APPROVE_OPTION) {
DirChooser.setFileSelectionMode(JFileChooser .FILES_ONLY );
File newfile = DirChooser.getSelectedFile();
txtoutput.setText(newfile.getAbsolutePath() );
}
setFinishButtonEnabled(true);
update();
}
});
this.add(chbAddAxisCodegenJar
, new GridBagConstraints(0, 6, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 10, 0,10), 0, 0));
chbAddAxisCodegenJar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
update();
}
});
this.add(new JSeparator()
, new GridBagConstraints(0, 7, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 1, 0,1), 0, 0));
this.add(chbAddAxisLib
, new GridBagConstraints(0, 8, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 10, 0,10), 0, 0));
chbAddAxisLib .addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setEnabledForAddAxisLib();
handleLoadLibsBrowse();
update();
}
});
this.add(lblAsixHome
, new GridBagConstraints(0, 9, 1, 1, 0.1, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 10, 0,10), 0, 0));
this.add(txtaxisHome
, new GridBagConstraints(1, 9, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0,0), 0, 0));
this.add(btnBrowseAxisHome
, new GridBagConstraints(2, 9, 1, 1, 0.1, 0.0
, GridBagConstraints.EAST , GridBagConstraints.NONE
, new Insets(5, 0, 0,10), 0, 0));
btnBrowseAxisHome .addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DirChooser .setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = DirChooser.showOpenDialog(btnBrowseAxisHome );
if (returnVal == JFileChooser.APPROVE_OPTION) {
DirChooser.setFileSelectionMode(JFileChooser .FILES_ONLY );
File newfile = DirChooser.getSelectedFile();
txtaxisHome .setText(newfile.getAbsolutePath() );
}
update();
}
});
this.add(btnCheckLib
, new GridBagConstraints(0, 10, 1, 1, 0.1, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 10, 0,10), 0, 0));
btnCheckLib .addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
handleLoadLibsBrowse();
update();
}
});
this.add(lblMessage
, new GridBagConstraints(1, 10, 1, 1, 1.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0,0), 0, 0));
this.add(new JSeparator()
, new GridBagConstraints(0, 11, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 1, 0,1), 0, 0));
this.add(chbCreateJar
, new GridBagConstraints(0, 12, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 10, 0,10), 0, 0));
chbCreateJar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
update();
}
});
this.add(lblJarFileName
, new GridBagConstraints(0, 13, 1, 1, 0.1, 0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 10, 0,10), 0, 0));
this.add(txtjarFileName
, new GridBagConstraints(1, 13,1, 1, 1.0, 0.0
, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0,0), 0, 0));
this.add(new JSeparator()
, new GridBagConstraints(0, 14, GridBagConstraints.REMAINDER, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 1, 0,1), 0, 0));
// hint button
this.add(btnHint,
new GridBagConstraints(0,15, 1, 1, 0.1,0.0
, GridBagConstraints.WEST , GridBagConstraints.NONE
, new Insets(5, 20, 0,0), 0, 0));
btnHint.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(flag){
btnHint.setText("Hint >>");
txaHint.setText("");
flag=false;
}else{
btnHint.setText("Hint <<");
txaHint.setText(hint);
flag=true;
}
update();
}
});
// hint lable
this.add(txaHint,
new GridBagConstraints(0, 16, GridBagConstraints.REMAINDER, 1, 0.1, 1.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.BOTH
, new Insets(10, 20, 0,0), 0, 0));
update();
}
public void back() {
switchPanel(CodegenFrame.PANEL_OPTION_A );
}
public void next() {
}
public void update(){
setNextButtonEnabled(false);
checkPageComlete();
setEnabledForAddAxisLib();
}
public void loadCmbCurrentProject() {
Module modules[] = codegenBean .getModules();
if (modules != null) {
for(int count = 0; count < modules.length; count++) {
cmbCurrentProject.addItem(modules[count].getName());
}
}
}
public void loadcmbModuleSrcProject() {
String module = null;
module = (String) cmbCurrentProject.getSelectedItem();
cmbModuleSrc.removeAllItems();
int count = 0;
if (module != null) {
String src[] = codegenBean.getModuleSrc(module);
for ( count = 0; count < src.length; count++) {
cmbModuleSrc.addItem(src[count]);
}
count = src.length;
}
if (flag)
{
if (count == 0) {
flag =false;
setEnabledForCustomProject();
}
else{
setEnabledForCurrentProject();
}
}
}
private void setEnabledForCurrentProject(){
radCurrentProject.setSelected(true);
radCurrentProject.setEnabled(true);
cmbCurrentProject.setEnabled(true);
cmbModuleSrc.setEnabled(true);
lblDirectory.setEnabled(true);
lblModule .setEnabled(true);
radCurrentProject.setSelected(true);
txtoutput.setEnabled(false);
lbloutput.setEnabled(false);
btnBrowseOutput.setEnabled(false);
}
private void setEnabledForCustomProject(){
if(!flag){
radCurrentProject.setEnabled(false);
}else{
radCurrentProject.setEnabled(true);
radCurrentProject.setSelected(true);
}
cmbCurrentProject.setEnabled(false);
cmbModuleSrc.setEnabled(false);
lblDirectory.setEnabled(false);
lblModule .setEnabled(false);
radCustomLocation.setSelected(true);
txtoutput.setEnabled(true);
lbloutput.setEnabled(true);
btnBrowseOutput .setEnabled(true);
}
private void setEnabledForAddAxisLib(){
if(chbAddAxisLib.isSelected()){
lblAsixHome.setEnabled(true);
lblMessage.setEnabled(true);
lblJarFileName.setEnabled(true);
txtaxisHome.setEnabled(true);
txtjarFileName.setEnabled(true);
chbCreateJar.setEnabled(true);
btnBrowseAxisHome.setEnabled(true);
btnCheckLib .setEnabled(true);
}else{
lblAsixHome.setEnabled(false);
lblMessage.setEnabled(false);
lblJarFileName.setEnabled(false);
txtaxisHome.setEnabled(false);
txtjarFileName.setEnabled(false);
chbCreateJar.setEnabled(false);
btnBrowseAxisHome.setEnabled(false);
btnCheckLib .setEnabled(false);
txtaxisHome.setText("Unpacked Axis2 binary home Or Axis2 source location");
lblMessage.setBackground(Color.WHITE);
}
}
private void handleLoadLibsBrowse(){
if(txtaxisHome.getText().equals("")){
lblMessage.setText("Axis libs are not available !! ");
jarFileCopyOption=false;
//error message
}else{
String axis_home = txtaxisHome.getText().trim();
String axis_target_lib=axis_home+File.separator+"target"+File.separator+"lib";
String axis_std_lib_directory=axis_home+File.separator+"lib";
File axis_target_libs_directory = new File(axis_target_lib);
File axis_libs_directory = new File(axis_std_lib_directory);
if (axis_libs_directory.isDirectory() || axis_target_libs_directory.isDirectory()) {
lblMessage.setText("Axis libs loaded successfully!!");
if(axis_libs_directory.isDirectory()){
axis2LibsLocation=axis_std_lib_directory;
}
else if(axis_target_libs_directory.isDirectory()){
axis2LibsLocation=axis_target_lib;
}
jarFileCopyOption =true;
lblMessage.setBackground(Color.WHITE);
}else{
lblMessage.setText("Axis libs are not available !! ");
lblMessage.setBackground(Color.RED);
jarFileCopyOption=false;
}
}
}
/**
* get the output location
*/
public String getOutputLocation() {
if(radCurrentProject.isSelected())
return cmbModuleSrc.getSelectedItem().toString();
else
return txtoutput.getText();
}
public String getAxisHomeLocation() {
return txtaxisHome.getText();
}
public String getJarFilename() {
return txtjarFileName.getText();
}
public boolean getAxis2PluginLibCopyCheckBoxSelection(){
return this.chbAddAxisCodegenJar.isSelected();
}
public boolean getAxisLibCopyCheckBoxSelection(){
return this.chbAddAxisLib.isSelected();
}
public boolean getCreateJarCheckBoxSelection(){
return this.chbCreateJar.isSelected();
}
public String getAxisJarsLocation(){
return this.axis2LibsLocation;
}
public boolean oktoLoadLibs(){
return this.jarFileCopyOption;
}
public void setJarFileName(String jarFileName){
this.txtjarFileName.setText(jarFileName);
}
/**
* this algorithm used for set page complete and Enabled finsh button
*/
private void checkPageComlete(){
if(getAxisLibCopyCheckBoxSelection()){
if(radCurrentProject.isSelected()) {
if(jarFileCopyOption){
setPageComplete(true);
setFinishButtonEnabled(true);
codegenBean.setOutput(getOutputLocation());
}else{
setPageComplete(false);
setFinishButtonEnabled(false);
}
}else{
if(!getOutputLocation().equals("")){
if(jarFileCopyOption){
setPageComplete(true);
setFinishButtonEnabled(true);
codegenBean.setOutput(getOutputLocation());
}else{
setPageComplete(false);
setFinishButtonEnabled(false);
}
}else{
setPageComplete(false);
setFinishButtonEnabled(false);
}
}
}else{
if(radCurrentProject.isSelected()) {
setPageComplete(true);
setFinishButtonEnabled(true);
codegenBean.setOutput(getOutputLocation());
}else{
if(!getOutputLocation().equals("")){
setPageComplete(true);
setFinishButtonEnabled(true);
codegenBean.setOutput(getOutputLocation());
}else{
setPageComplete(false);
setFinishButtonEnabled(false);
}
}
}
}
/**
* get page type
*/
public int getPageType() {
return WizardPanel.WSDL_2_JAVA_TYPE;
}
private void handleModifyEvent() {
String text = this.txtoutput.getText();
if ((text == null) || (text.trim().equals(""))) {
// error message "output location needs to be specified"
return;
}
// error message null
}
private void handleAxisHomeModifyEvent() {
String text = this.txtaxisHome.getText();
if ((text == null) || (text.trim().equals(""))) {
// error message "output location needs to be specified"
return;
}
// error message null
}
private void handleJarNameModifyEvent() {
String text = this.txtjarFileName.getText();
if ((text == null) || (text.trim().equals(""))) {
// error message "output location needs to be specified"
return;
}
// error message null
}
}