/* * 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=""; } }