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