blob: 58be6d5a569f5bcbf561861bbf830c98cebe7990 [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.ideaplugin.frames;
import org.apache.axis2.tools.component.WizardComponents;
import org.apache.axis2.tools.component.WizardPanel;
import org.apache.axis2.tools.wizardframe.CodegenFrame;
import org.apache.ideaplugin.bean.ArchiveBean;
import org.apache.ideaplugin.bean.ClassFileFilter;
import org.apache.ideaplugin.bean.OperationObj;
import org.apache.ideaplugin.bean.ServiceObj;
import org.apache.ideaplugin.frames.table.ArchiveTableModel;
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;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
public class ServiceXMLGenerationPage extends WizardPanel {
private JTextField txtServiceName;
private JTextField txtClassName;
private JCheckBox chkBoxSearchMethod;
private JButton btnLoad;
private JButton btnBrowse;
private JTable table;
private JLabel lblTable;
private JScrollPane scrollPane;
private HashMap operations;
private String fileName;
private int count = 1;
private ArrayList servicelsit;
private String sgXMl;
private final JFileChooser fileChooser=new JFileChooser();
private ArchiveBean archiveBean;
/**
* Constructor
* @param wizardComponents
*/
public ServiceXMLGenerationPage(WizardComponents wizardComponents, ArchiveBean archiveBean){
super(wizardComponents, "Axis2 Idea Plugin Service Archiver Creator Wizards");
setPanelTopTitle("Service Archiver");
setPanelBottomTitle("Service XML Generation");
this.archiveBean=archiveBean;
init();
}
private void init(){
txtServiceName =new JTextField();
txtClassName =new JTextField();
btnBrowse=new JButton("Browse");
btnLoad =new JButton("Load");
chkBoxSearchMethod=new JCheckBox("Search declared method only",true);
lblTable=new JLabel("Mark operation you do not want to publish ");
operations = new HashMap();
ArchiveTableModel myModel=new ArchiveTableModel(operations);
table=new JTable(myModel);
table.setOpaque(true);
table.setBackground(getBackground());
table.setShowGrid(true);
table.setSize(getPreferredSize());
scrollPane =new JScrollPane(table);
scrollPane.setBorder(new EmptyBorder(0,0,0,0));
scrollPane.setSize(table.getSize());
scrollPane.setOpaque(true);
scrollPane.setBackground(getBackground());
scrollPane.getViewport().setBackground(getBackground());
scrollPane.setViewportBorder(new EmptyBorder(0,0,0,0));
setBackButtonEnabled(true);
setNextButtonEnabled(false);
setFinishButtonEnabled(false);
setPageComplete(false);
this.setLayout(new GridBagLayout());
this.add(new JLabel("Class Name")
, new GridBagConstraints(0, 0, 1, 1, 0.1, 0.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.NONE
, new Insets(5, 10, 0, 0), 0, 0));
this.add(txtClassName
, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0, 0), 0, 0));
this.add(btnBrowse
, new GridBagConstraints(2, 0, 1, 1, 0.1, 0.0
, GridBagConstraints.NORTH , GridBagConstraints.NONE
, new Insets(5, 1, 1, 1), 0, 0));
btnBrowse .addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
browseClassFile();
update();
}
});
this.add(btnLoad
, new GridBagConstraints(3, 0, 1, 1, 0.1, 0.0
, GridBagConstraints.NORTH , GridBagConstraints.NONE
, new Insets(5, 1, 1, 10), 0, 0));
btnLoad .addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateTable();
update();
}
});
this.add(new JLabel("Service Name")
, new GridBagConstraints(0, 1, 1, 1, 0.1, 0.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.NONE
, new Insets(5, 10, 0,0), 0, 0));
this.add(txtServiceName
, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 0, 0, 0), 0, 0));
this.add(chkBoxSearchMethod
, new GridBagConstraints(0, 2, GridBagConstraints.RELATIVE, 1, 0.0, 0.0
, GridBagConstraints.NORTHWEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 10, 0, 10), 0, 0));
chkBoxSearchMethod .addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
updateTable();
update();
}
});
this.add(lblTable
, new GridBagConstraints(0, 3, GridBagConstraints.RELATIVE, 1, 0.0, 0.0
, GridBagConstraints.WEST , GridBagConstraints.HORIZONTAL
, new Insets(5, 10, 0, 10), 0, 0));
this.add(scrollPane
, new GridBagConstraints(0, 4, GridBagConstraints.REMAINDER , 1, 1.0, 1.0
, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH
, new Insets(5, 10, 10, 10), 0, 0));
setPageComplete(true);
}
public void back() {
switchPanel(CodegenFrame.PANEL_FOURTH_C );
}
public void next() {
setNextButtonEnabled(false);
checkautoGeneration();
switchPanel(CodegenFrame.PANEL_OPTION_C );
((ServiceXMLEditPage)getWizardComponents().getWizardPanel(CodegenFrame.PANEL_OPTION_C )).setDescription(archiveBean.getServiceXML());
((ServiceXMLEditPage)getWizardComponents().getWizardPanel(CodegenFrame.PANEL_OPTION_C )).setDefaultEnabled();
}
public void update(){
}
public int getPageType() {
return WizardPanel.SERVICE_ARCHIVE_TYPE;
}
private void updateTable() {
//get a URL from the class file location
try {
String classFileLocation = archiveBean.getClassLoc().getPath();
URL classFileURL = new File(classFileLocation).toURL();
ArrayList listofURLs = new ArrayList();
listofURLs.add(classFileURL);
//get the libraries from the lib page and load it
ArrayList libList=archiveBean.getLibs();
String[] libFileList=new String[libList.size()];
for (int i = 0; i < libList.size(); i++) {
libFileList[i] = (String )libList.get(i);
}
if (libFileList!=null){
int count = libFileList.length;
for (int i=0;i<count;i++){
listofURLs.add(new File(libFileList[i]).toURL());
}
}
txtServiceName.setText("MyService" + count);
ClassLoader loader = new URLClassLoader((URL[])listofURLs.toArray(new URL[listofURLs.size()]));
Class clazz = Class.forName(fileName ,true,loader);
Method[] methods = null;
if (chkBoxSearchMethod.isSelected()){
methods = clazz.getDeclaredMethods();
}else{
methods = clazz.getMethods();
}
int methodCount = methods.length;
if (methodCount > 0) {
try {
table.removeAll();
table.setVisible(true);
operations.clear();
} catch (Exception e1) {
}
for (int i = 0 ; i < methodCount; i++){
Method method = methods[i];
OperationObj operationobj = new OperationObj(method.getName(),
method.getReturnType().toString(),
new Integer(method.getParameterTypes().length), new Boolean(true));
operations.put(method.getName(), operationobj);
}
ArchiveTableModel myModel=new ArchiveTableModel(operations);
table.setModel(myModel);
scrollPane.repaint();
this.repaint();
setNextButtonEnabled(true);
}
} catch (MalformedURLException e) {
setNextButtonEnabled(false);
JOptionPane.showMessageDialog(btnLoad, "The specified file is not a valid java class",
"Error!", JOptionPane.ERROR_MESSAGE);
} catch (ClassNotFoundException e) {
setNextButtonEnabled(false);
JOptionPane.showMessageDialog(btnLoad, "The specified file is not a valid java class",
"Error!", JOptionPane.ERROR_MESSAGE);
}
}
private void browseClassFile(){
fileChooser.setFileFilter(new ClassFileFilter() );
fileChooser.setCurrentDirectory(archiveBean.getClassLoc());
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File tempfile = fileChooser .getSelectedFile();
String newFile = tempfile.getPath();
int index = newFile.indexOf(archiveBean.getClassLoc().getAbsolutePath().trim());
if (index >= 0) {
int lastindex = archiveBean.getClassLoc().getAbsolutePath().trim().length();
newFile = newFile.substring(lastindex + 1);
char ch = File.separatorChar;
char newch = '.';
int cindex = newFile.indexOf(ch);
while (cindex >= 0) {
newFile = newFile.replace(ch, newch);
cindex = newFile.indexOf(ch);
}
fileName = newFile;
int classIndex = fileName.lastIndexOf(".");
fileName = fileName.substring(0, classIndex);
txtClassName .setText(fileName);
}
}
}
private void serviceGroupProcess(){
ArrayList ops = new ArrayList();
Iterator opitr = operations.values().iterator();
while (opitr.hasNext()) {
OperationObj operationObj = (OperationObj) opitr.next();
if (operationObj.getSelect().booleanValue()) {
ops.add(operationObj.getOpName());
}
}
ServiceObj service = new ServiceObj(txtServiceName.getText(), fileName, ops);
archiveBean.addToServicelsit(service);
if (!archiveBean.isSingleService()) {
int valu = JOptionPane.showConfirmDialog(this, "Do you want to add an another service to group", "Service Archive",
JOptionPane.YES_NO_OPTION);
if (valu == 0) {
fileName = "";
txtClassName.setText("");
txtServiceName.setText("");
operations.clear();
setNextButtonEnabled(false);
switchPanel(CodegenFrame.PANEL_FIRST_C);
count++;
this.repaint();
} else {
servicelsit =archiveBean.getServicelsit();
System.out.println(servicelsit.size());
sgXMl = "<serviceGroup>\n";
for (int i = 0; i < servicelsit.size(); i++) {
ServiceObj serviceObj = (ServiceObj) servicelsit.get(i);
sgXMl = sgXMl + serviceObj.toString();
}
sgXMl = sgXMl + "</serviceGroup>";
archiveBean.setServiceXML(sgXMl);
sgXMl="";
switchPanel(CodegenFrame.PANEL_OPTION_C );
}
} else {
servicelsit = archiveBean.getServicelsit();
sgXMl = "<serviceGroup>\n";
for (int i = 0; i < servicelsit.size(); i++) {
ServiceObj serviceObj = (ServiceObj) servicelsit.get(i);
sgXMl = sgXMl + serviceObj.toString();
}
sgXMl = sgXMl + "</serviceGroup>";
archiveBean.setServiceXML(sgXMl);
sgXMl="";
switchPanel(CodegenFrame.PANEL_OPTION_C );
}
}
private void checkautoGeneration(){
ArrayList ops = new ArrayList();
Iterator opitr = operations.values().iterator();
while (opitr.hasNext()) {
OperationObj operationObj = (OperationObj) opitr.next();
if (operationObj.getSelect().booleanValue()) {
ops.add(operationObj.getOpName());
}
}
txtServiceName.setText(txtServiceName.getText());
ServiceObj service = new ServiceObj(txtServiceName.getText(), fileName, ops);
archiveBean.addToServicelsit(service);
servicelsit = archiveBean.getServicelsit();
sgXMl="<serviceGroup>";
for (int i = 0; i < servicelsit.size(); i++) {
ServiceObj serviceObj = (ServiceObj) servicelsit.get(i);
sgXMl = sgXMl + serviceObj.toString();
}
sgXMl = sgXMl + "</serviceGroup>";
archiveBean.setServiceXML(sgXMl);
sgXMl="";
}
}