blob: 5b829d60d0bc073d17653745f9108ac34c65ffcb [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.wizardframe;
import com.intellij.openapi.project.Project;
import org.apache.axis2.tools.bean.CodegenBean;
import org.apache.axis2.tools.bean.SrcCompiler;
import org.apache.axis2.tools.bean.WsdlgenBean;
import org.apache.axis2.tools.component.CancelAction;
import org.apache.axis2.tools.component.DefaultWizardComponents;
import org.apache.axis2.tools.component.FinishAction;
import org.apache.axis2.tools.component.Utilities;
import org.apache.axis2.tools.component.WizardComponents;
import org.apache.axis2.tools.component.WizardPanel;
import org.apache.axis2.tools.idea.FirstPanel;
import org.apache.axis2.tools.idea.ProgressBarPanel;
import org.apache.axis2.tools.idea.SecondPanel;
import org.apache.axis2.tools.idea.WSDL2JavaOutputPanel;
import org.apache.ideaplugin.bean.ArchiveBean;
import org.apache.ideaplugin.bean.JarFileWriter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.TimerTask;
/**
* wizardFrame class
*/
public class WizardFrame extends JFrame {
/**
* variable
*/
private JLabel panelImageLabel;
private JLabel panelTopTitleLabel;
private JLabel panelBottomTitleLabel;
private WizardComponents wizardComponents;
protected WsdlgenBean wsdlgenBean;
protected CodegenBean codegenBean;
protected ArchiveBean archiveBean;
protected Project project;
private ProgressBarPanel progress;
public WizardFrame() {
init();
}
private void init() {
wizardComponents = new DefaultWizardComponents();
wsdlgenBean= new WsdlgenBean();
codegenBean = new CodegenBean();
archiveBean =new ArchiveBean();
this.getContentPane().setLayout(new GridBagLayout());
this.getContentPane().add(createTitlePanel()
, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0
, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL
, new Insets(0, 0, 0, 0), 0, 0));
this.getContentPane().add(new JSeparator()
, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(0, 0, 0, 0), 0, 0));
this.getContentPane().add(wizardComponents.getWizardPanelsContainer()
, new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.BOTH
, new Insets(10, 0, 0, 0), 0, 0));
progress =new ProgressBarPanel();
this.getContentPane().add(progress
, new GridBagConstraints(0, 3, 1, 1, 1.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL
, new Insets(0, 0, 0, 0), 0, 0));
this.getContentPane().add(new JSeparator()
, new GridBagConstraints(0, 4, 1, 1, 1.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL
, new Insets(1, 1, 1, 1), 0, 0));
this.getContentPane().add(createButtonPanel(),
new GridBagConstraints(0, 5, 1, 1, 1.0, 0.0
,GridBagConstraints.EAST, GridBagConstraints.NONE,
new Insets(10, 10, 10, 10), 0, 0));
java.net.URL resource = WizardPanel.class.getResource("/icons/icon.png");
this.setIconImage(new ImageIcon(resource).getImage());
this.setFont(new Font("Helvetica", Font.PLAIN, 8));
wizardComponents.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
setPanelTopTitle(((WizardPanel)event.getNewValue()).getPanelTopTitle());
setPanelTitleImage(((WizardPanel)event.getNewValue()).getPanelImage());
setPanelBottomTitle(((WizardPanel)event.getNewValue()).getPanelBottomTitle());
setTitle(((WizardPanel)event.getNewValue()).getFrameTitle());
}
});
wizardComponents.setFinishAction(createFinishAction());
wizardComponents.setCancelAction(createCancelAction());
handleWindowClosing();
}
public WizardComponents getWizardComponents(){
return wizardComponents;
}
public void setWizardComponents(WizardComponents aWizardComponents){
wizardComponents = aWizardComponents;
}
public void show() {
wizardComponents.updateComponents();
this.setSize(600,600);
Utilities.centerComponentOnScreen(this);
super.show();
}
protected void setBottomVisible(boolean flag){
panelBottomTitleLabel.setVisible(flag);
}
//Set Title Panel
protected void setPanelTopTitle(String title) {
panelTopTitleLabel.setText(title);
}
protected void setPanelBottomTitle(String title) {
panelBottomTitleLabel.setText(title);
}
// set title image
protected void setPanelTitleImage(ImageIcon image){
panelImageLabel.setIcon(image );
}
protected JPanel createTitlePanel() {
JPanel panel = new JPanel(new GridBagLayout() );
panel.setBackground(Color.white );
panelTopTitleLabel = new JLabel();
panelTopTitleLabel.setFont(new Font("Helvetica", Font.BOLD, 12));
panelBottomTitleLabel=new JLabel();
panelBottomTitleLabel.setFont(new Font("Helvetica", Font.ITALIC, 10));
panelImageLabel= new JLabel();
panel.add(panelTopTitleLabel
, new GridBagConstraints(0, 0, 1, 1, 0.5, 0.0
, GridBagConstraints.LINE_START , GridBagConstraints.BOTH
, new Insets(10, 20, 0, 0), 0, 0));
panel.add(panelBottomTitleLabel
, new GridBagConstraints(0, 1, 1, 1, 0.5, 0.0
, GridBagConstraints.LINE_START, GridBagConstraints.BOTH
, new Insets(10,20, 0, 0), 0, 0));
panel.add(panelImageLabel
, new GridBagConstraints(1, 0, 1,2, 0.0, 0.0
, GridBagConstraints.CENTER, GridBagConstraints.BOTH
, new Insets(0, 0, 0, 0), 0, 0));
return panel;
}
protected JPanel createButtonPanel() {
JPanel panel = new JPanel(new GridLayout());
panel.add(wizardComponents.getBackButton());
panel.add(wizardComponents.getNextButton());
panel.add(wizardComponents.getFinishButton());
panel.add(wizardComponents.getCancelButton());
return panel;
}
protected FinishAction createFinishAction() {
return new FinishAction(wizardComponents) {
public void performAction() {
System.out.println("FinishAction performed");
try {
wizardComponents.getCurrentPanel().update();
switch (wizardComponents.getCurrentPanel().getPageType()) {
case WizardPanel .WSDL_2_JAVA_TYPE:
doFinishWSDL2Java();
System.out.println("FinishAction WSDL2Java performed");
break;
case WizardPanel.JAVA_2_WSDL_TYPE:
doFinishJava2WSDL();
System.out.println("FinishAction Java2WSDL performed");
break;
case WizardPanel.SERVICE_ARCHIVE_TYPE:
doFinishServiceArchive();
System.out.println("FinishAction Servcie Archive performed");
break;
case WizardPanel.UNSPECIFIED_TYPE:
break; //Do nothing
default:
throw new RuntimeException("Invalid state!");
}
} catch (Exception e) {
wizardComponents.setCurrentIndex(CodegenFrame.PANEL_CHOOSER);
dispose();
}
}
};
}
protected CancelAction createCancelAction() {
return new CancelAction(wizardComponents) {
public void performAction() {
wizardComponents.setCurrentIndex(CodegenFrame.PANEL_CHOOSER);
System.out.println("CancelAction performed");
dispose();
}
};
}
protected void handleWindowClosing() {
wizardComponents.setCurrentIndex(CodegenFrame.PANEL_CHOOSER);
this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
wizardComponents.getCancelAction().performAction();
}
});
}
protected void handlePragress(){
wizardComponents.getFinishButton().setEnabled(false);
progress.setVisible(true);
progress.aboutToDisplayPanel();
progress.displayingPanel();
new java.util.Timer(true).schedule(new TimerTask() {
public void run() {
progress.requestStop();
}
}, 1000);
}
protected void handleSuccess(){
StringWriter writer = new StringWriter();
JOptionPane.showMessageDialog(this ,
"Code genaration Successful !" + writer.toString(),
"Axis2 code generation",
JOptionPane.INFORMATION_MESSAGE );
wizardComponents.setCurrentIndex(CodegenFrame.PANEL_CHOOSER);
dispose();
}
protected void handleError(){
wizardComponents.getFinishButton().setEnabled(true);
StringWriter writer = new StringWriter();
JOptionPane.showMessageDialog(this ,
"Code genaration failed! !" + writer.toString(),
"Axis2 code generation",
JOptionPane.ERROR_MESSAGE );
}
private void addLibsToProjectLib(String libDirectory, String outputLocation){
String newOutputLocation = outputLocation+File.separator+"lib";
//Create a lib directory; all ancestor directories must exist
boolean success = (new File(newOutputLocation)).mkdir();
if (!success) {
// Directory creation failed
}
try {
copyDirectory(new File(libDirectory),new File(newOutputLocation));
} catch (IOException e) {
e.printStackTrace();
}
}
// Copies all files under srcDir to dstDir.
// If dstDir does not exist, it will be created.
public void copyDirectory(File srcDir, File dstDir) throws IOException {
if (srcDir.isDirectory()) {
if (!dstDir.exists()) {
dstDir.mkdir();
}
String[] children = srcDir.list();
for (int i=0; i<children.length; i++) {
copyDirectory(new File(srcDir, children[i]),
new File(dstDir, children[i]));
}
} else {
copyFile(srcDir, dstDir);
}
}
// Copies src file to dst file.
// If the dst file does not exist, it is created
private void copyFile(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
// Deletes all files and subdirectories under dir.
// Returns true if all deletions were successful.
// If a deletion fails, the method stops attempting to delete and returns false.
private boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// The directory is now empty so delete it
return dir.delete();
}
protected void doFinishWSDL2Java(){
handlePragress();
new java.util.Timer(true).schedule(new TimerTask() {
public void run() {
try {
FirstPanel first=(FirstPanel)wizardComponents.getWizardPanel(1);
SecondPanel option=(SecondPanel)wizardComponents.getWizardPanel(3);
WSDL2JavaOutputPanel output=(WSDL2JavaOutputPanel)wizardComponents.getWizardPanel(5);
boolean isServerside,isServiceXML,isGenerateServerSideInterface = false;
if (option.getGenerateAll()){
isServerside = true;
isServiceXML = true;
isGenerateServerSideInterface = true;
}else{
isServerside = option.isServerside();
isServiceXML =option.isServerXML();
isGenerateServerSideInterface = option.getGenerateServerSideInterface();
}
codegenBean.setPackageName(option.getPackageName());
codegenBean.setLanguage(option.getSelectedLanguage());
codegenBean.setPortName(option.getPortName());
codegenBean.setServiceName(option.getServiceName());
codegenBean.setDatabindingName(option.getDatabinderName());
codegenBean.setAsyncOnly(option.isAsyncOnlyOn());
codegenBean.setSyncOnly(option.isSyncOnlyOn());
codegenBean.setTestCase(option.isGenerateTestCase());
codegenBean.setGenerateAll(option.getGenerateAll());
codegenBean.setServerXML(isServiceXML);
codegenBean.setServerSide(isServerside);
codegenBean.setServerSideInterface(isGenerateServerSideInterface);
codegenBean.setOutput(output.getOutputLocation());
codegenBean.setNamespace2packageList(option.getNs2PkgMapping());
codegenBean.setWSDLFileName(first.getWSDLFileName());
codegenBean.generate();
//Add the codegen libs that are coming with the plugin to the project lib that has been created
if (output.getAxis2PluginLibCopyCheckBoxSelection()){
java.net.URL resource = WizardPanel.class.getResource("/icons/icon.png");
String path =new File(resource.getPath()).getParentFile().getParentFile().getParentFile().getPath();
System.out.println(path);
String pluginLibLocation = path+File.separator+"lib";
addLibsToProjectLib(pluginLibLocation, output.getOutputLocation());
}
//Add the libraries on the plugin lib directory to the created project lib
if (output.getAxisLibCopyCheckBoxSelection() && output.oktoLoadLibs()){
String libDirectory = output.getAxisJarsLocation();
addLibsToProjectLib(libDirectory, output.getOutputLocation());
}
//This will Create a jar file from the codegen results and add to the output
//locations lib directory
if (output.getCreateJarCheckBoxSelection()){
File tempClassFile=codegenBean.getTemp();
tempClassFile.mkdir();
File srcTemp=new File(tempClassFile.getPath()+File.separator+"src");
srcTemp.mkdir();
copyDirectory(new File(output.getOutputLocation()+File.separator+"src"),srcTemp);
//Compile the source to another directory
SrcCompiler srcCompileTool = new SrcCompiler();
srcCompileTool.compileSource(tempClassFile.getPath());
//create the jar file and add that to the lib directory
String projectLib = output.getOutputLocation()+File.separator+"lib";
JarFileWriter jarFileWriter = new JarFileWriter();
String jarFileName = "CodegenResults.jar";
if (!output.getJarFilename().equals("")){
jarFileName=output.getJarFilename();
}
output.setJarFileName(jarFileName);
File tempClass = new File(tempClassFile.getPath()+File.separator+"classes");
jarFileWriter.writeJarFile(new File(projectLib), jarFileName, tempClass);
//Delete the temp folders
deleteDir(tempClassFile );
}
progress.setVisible(false);
handleSuccess();
}catch (Exception e1) {
e1.printStackTrace();
progress.setVisible(false);
handleError();
}
}
}, 5000);
}
protected void doFinishJava2WSDL(){
handlePragress();
new java.util.Timer(true).schedule(new TimerTask() {
public void run() {
try {
wsdlgenBean.generate();
progress.setVisible(false);
handleSuccess();
} catch (Exception e1) {
progress.setVisible(false);
handleError();
}
}
}, 3100);
}
protected void doFinishServiceArchive(){
handlePragress();
new java.util.Timer(true).schedule(new TimerTask() {
public void run() {
try {
archiveBean.finsh();
progress.setVisible(false);
handleSuccess();
} catch (Exception e1) {
progress.setVisible(false);
handleError();
}
}
}, 3100);
}
public void setProject(Project project){
this.project=project;
}
public JComponent getRootComponent() {
return this.getRootPane();
}
public void showUI() {
pack();
this.setVisible(true);
show();
}
}