/** *######################################################################### * * A component of the GAI application, part of the Greenstone digital * library suite from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * *

* * Author: Chi-Yu Huang, Greenstone Digital Library, University of Waikato * Date: 05.2005 * *

* * Copyright (C) 1999 New Zealand Digital Library Project * *

* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * *

* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * *

* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *######################################################################## */ /* This program is intended to confirm the initial user's setting about * the Tomcat server and MySQL server they would like to run GSDL3 with */ package org.greenstone.admin.gui; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.List; import java.util.ArrayList; import java.lang.Object; import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import javax.swing.table.*; import java.awt.event.MouseEvent; import java.net.*; import java.sql.*; import org.greenstone.util.Configuration; import org.greenstone.core.ParsingProgress; import org.greenstone.admin.GAI; /** The initial setting pane is to request the user to input the preferred * Tomcat and Mysql server,they would like to run GSDL3 with * @author Chi-Yu Huang, Greenstone Digital Library, University of Waikato * @version */ public class SetServerPane extends JFrame implements ActionListener { /* This pane is to allow the user to set up their own running Tomcat/Mysql server * before the installation of the GSDL3*/ // protected JScrollPane setting_message_pane = null; protected JPanel main_pane = null; protected JPanel button_pane = null; protected JPanel outter_control_pane = null; protected JScrollPane setting_table_pane = null; protected JTable server_setting_table = null; private JButton save_button = null; private JButton install_button = null; private JButton exit_button = null; ServerSettingTableModel server_setting_table_model = null; private boolean setting_confirm = false; private ArrayList conf_array; private boolean success = false; private boolean file_saved = true; /** The various sizes for the screen layout*/ static private Dimension MIN_SIZE = new Dimension( 90, 90); static private Dimension LIST_SIZE = new Dimension(200, 450); static private Dimension DIALOG_SIZE = new Dimension (400,300); static private Dimension FRAME_SIZE = new Dimension (500, 450); static private Dimension TABLE_SIZE = new Dimension(500,200); static final Dimension SIZE = new Dimension(400,400); //Constructor public SetServerPane() { super(); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setSize(FRAME_SIZE); this.setTitle("Setting Tomcat/MYSQL Servers"); // create all the control button panes button_pane = new JPanel(); //First time running button SaveButtonListener ybl = new SaveButtonListener(); InstallButtonListener nbl = new InstallButtonListener(); ExitButtonListener ebl = new ExitButtonListener(); // ImagesIcon for the buttons ImageIcon SaveButtonIcon = new ImageIcon(GAI.images_path + "refresh.gif"); ImageIcon InstallButtonIcon = new ImageIcon(GAI.images_path + "exit.gif"); ImageIcon ExitButtonIcon = new ImageIcon(GAI.images_path + "exit.gif"); save_button = new JButton("Save Setting", SaveButtonIcon); save_button.addActionListener(ybl); save_button.setMnemonic(KeyEvent.VK_S); save_button.setToolTipText("Click this button to save up the setting"); save_button.setEnabled(false); install_button = new JButton("Install GSDL3", InstallButtonIcon); install_button.addActionListener(nbl); install_button.setEnabled(false); install_button.setMnemonic(KeyEvent.VK_I); install_button.setToolTipText("Click this button to Install Greenstone III"); exit_button = new JButton("Exit Setting and Installation", ExitButtonIcon); exit_button.addActionListener(ebl); exit_button.setEnabled(false); install_button.setMnemonic(KeyEvent.VK_I); install_button.setToolTipText("Click this button to Exit the Setting and Installation of Greenstone III"); //Setting&Installation buttons ybl = null; nbl = null; ebl = null; } /** Any implementation of ActionListener requires this method so that when an **action is performed the appropriate effect can occur.*/ public void actionPerformed(ActionEvent event) { } /** This method is callsed to actually layout the components.*/ public void display() { //KeyListenerImpl key_listener = new KeyListenerImpl(); //MouseListenerImpl mouse_listener = new MouseListenerImpl(); //this.addKeyListener(key_listener); server_setting_table_model = new ServerSettingTableModel(); server_setting_table = new JTable(server_setting_table_model) { protected String[] rowToolTips = { "The name of the machine that Tomcat is/will be run on", "The port number that Tomcat is/will be run on", "The base directory for the existing Tomcat installation", "The name of the machine that Mysql is/will be run on", "The port number that Mysql is/will be run on", "The base directory for the existing MYSQL installations", "The user name for the administrator of using MySQL", "The socket that Mysql is/will be run on"}; public String getToolTipText(MouseEvent e){ String tip = null; Point p = e.getPoint(); int rowIndex = rowAtPoint(p); int colIndex = columnAtPoint(p); int realColumnIndex = convertColumnIndexToModel(colIndex); if (realColumnIndex == 0){ tip = rowToolTips[rowIndex]; } else { tip = super.getToolTipText(e); } return tip; } }; //Set up tableHeader JTableHeader header = server_setting_table.getTableHeader(); header.setFont(new Font("Arial", Font.BOLD, 14)); server_setting_table.setRowHeight(30); setting_table_pane = new JScrollPane(server_setting_table); // Button Control Layout save_button.setEnabled(true); install_button.setEnabled(true); exit_button.setEnabled(true); button_pane.setLayout (new GridLayout(1,3)); button_pane.add(save_button); button_pane.add(install_button); button_pane.add(exit_button); outter_control_pane = new JPanel(); outter_control_pane.setLayout (new BorderLayout()); outter_control_pane.setBorder(BorderFactory.createLoweredBevelBorder()); outter_control_pane.setPreferredSize(new Dimension(50,50)); outter_control_pane.setSize(new Dimension(50,50)); outter_control_pane.add (button_pane, BorderLayout.CENTER); main_pane = (JPanel) getContentPane(); main_pane.setLayout (new BorderLayout()); main_pane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); main_pane.add(setting_table_pane, BorderLayout.CENTER); main_pane.add(outter_control_pane, BorderLayout.SOUTH); main_pane.setBackground(Configuration.getColor("coloring.workspace_selection_background")); main_pane.setForeground(Configuration.getColor("coloring.workspace_selection_foreground")); // Center and display Dimension screen_size = Toolkit.getDefaultToolkit().getScreenSize(); setLocation((screen_size.width - SIZE.width) / 2, (screen_size.height - SIZE.height) / 2); setVisible(true); } public void destroy() { } /** This class serves as the listener for actions on the build button.*/ private class SaveButtonListener implements ActionListener { /** This button is to save any change you have added ** to the Tomcat/Mysql servers setting*/ public void actionPerformed(ActionEvent event) { setting_confirm = true; int result = JOptionPane.showConfirmDialog((Component) null, "Do you really want to save the setting?", "Save Confirmation", JOptionPane.YES_NO_OPTION); if ( result == JOptionPane.YES_OPTION) { updateSetting (GAI.build_properties_file); file_saved = writeFile (GAI.build_properties_file); if (file_saved) { JOptionPane.showMessageDialog((Component) null,"Change has been saved succefully!"); } else { JOptionPane.showMessageDialog((Component) null,"Change has not been saved succefully!"); file_saved = false; } } else if (result == JOptionPane.NO_OPTION) { JOptionPane.showMessageDialog((Component) null,"Change has not been saved!"); file_saved = false; } } } public void updateSetting(File build_properties_file) { readFile (GAI.build_properties_file); String new_string; for (int i=0; i < server_setting_table_model.getRowCount(); i++){ //System.err.println("What is the value here:" + server_setting_table_model.getValueAt(i,0).toString()); if (!server_setting_table_model.getValueAt(i,1).toString().matches("^\\s*$")){ for (int j=0; j < conf_array.size(); j++){ if (((String)conf_array.get(j)).startsWith(server_setting_table_model.getValueAt(i,0).toString().toLowerCase())){ //System.err.println("What is the value in conf_array:" + conf_array.get(j)); new_string = server_setting_table_model.getValueAt(i,0).toString()+"="+server_setting_table_model.getValueAt(i,1).toString(); conf_array.set(j, new_string.toLowerCase()); } } } } } public void readFile (File build_properties_file) { String filename = build_properties_file.getPath(); String fileLine; /*conf_array[] store all the details from the build.properties*/ conf_array = new ArrayList(); try { BufferedReader conf_in = new BufferedReader(new FileReader(filename)); while ((fileLine = conf_in.readLine()) != null) { // Besides an empty line, all the other lines will be stored in the conf_array if (!fileLine.matches("^\\s*$")) { conf_array.add(fileLine); } } conf_in.close(); } catch (Exception e) { e.printStackTrace(); } } public boolean writeFile(File build_properties_file){ String filename = build_properties_file.getPath(); try { BufferedWriter conf_out = new BufferedWriter(new FileWriter(filename)); for (int j=0 ; j < conf_array.size(); j++){ conf_out.write(conf_array.get(j).toString()); conf_out.newLine(); } success = true; conf_out.close(); } catch (Exception e) { e.printStackTrace(); success = false; } return success; } private class InstallButtonListener implements ActionListener { // Exit the Adminstration tool public void actionPerformed(ActionEvent event) { setting_confirm = false; /*if (!setting_confirm) { GAIManager gai = new GAIManager("/research/chi/gsdl3-test/gsdl3", screen_size); }*/ } } private class ExitButtonListener implements ActionListener { // Exit the Adminstration tool public void actionPerformed(ActionEvent event) { if (!file_saved) { int result = JOptionPane.showConfirmDialog((Component) null, "The value of configuration has been changed,do you really want to exit?", "Exit Confirmation", JOptionPane.YES_NO_OPTION); if ( result == JOptionPane.YES_OPTION) { System.exit(1); } else if (result == JOptionPane.NO_OPTION) { JOptionPane.showMessageDialog((Component) null,"Press Save button to save the change!"); } } else { System.exit(1); } } } class ServerSettingTableModel extends AbstractTableModel { String[] columnNames = {"Configuration Parameter", "Configuration Value"}; Object [][] conf_display = {{"TOMCAT.SERVER", ""}, {"TOMCAT.PORT", ""}, {"TOMCAT.INSTALLED.PATH",""}, {"MYSQL.SERVER",""}, {"MYSQL.PORT",""}, {"MYSQL.INSTALLED.PATH",""}, {"MYSQL.ADMIN.USER",""}, {"MYSQL.SOCKET",""}}; public int getColumnCount(){ return columnNames.length; } public int getRowCount() { return conf_display.length; } public String getColumnName(int col){ return columnNames[col]; } public Object getValueAt(int row,int col){ return conf_display[row][col]; } public boolean isCellEditable(int row, int col){ if (col == 0){ return false; } else { return true; } } public void setValueAt(Object value, int row, int col){ conf_display[row][col] = value; fireTableCellUpdated(row,col); } } }