Ignore:
Timestamp:
2009-09-15T20:16:08+12:00 (15 years ago)
Author:
ak19
Message:

Changes to Server.jar files and affected files to add address_resolution options so that the GSI dialog for GS2 looks and behaves more like server.exe.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • greenstone3/trunk/src/java/org/greenstone/server/Server2Settings.java

    r18969 r20604  
    22
    33import java.awt.BorderLayout;
     4import java.awt.FlowLayout;
     5import java.awt.GridLayout;
    46import java.awt.event.*;
     7import java.net.InetAddress;
     8import java.net.UnknownHostException;
    59import java.util.ArrayList;
    610import javax.swing.*;
     
    913import org.greenstone.server.BaseServerSettings;
    1014
    11 public class Server2Settings extends BaseServerSettings implements ChangeListener, ActionListener
     15public class Server2Settings extends BaseServerSettings implements ActionListener
    1216{
    1317    protected JComboBox prefix_combobox;
     18    protected JCheckBox allowConnections;
     19    protected JRadioButton[] hostRadioButtons = new JRadioButton[4];
     20
     21    // 0 to 3: 0 is resolve (hostname) from local IP, 1 is local IP address, 2 is localhost, 3 is 127.0.0.1
     22    protected int address_resolution_method = 2;
     23    protected int externalaccess = 0;
    1424
    1525    public Server2Settings(BaseServer server)
    1626    {
    17     super(server);
     27    super(server); 
    1828    }
    1929
    2030    protected JPanel createServletPanel()
    2131    {
    22     portNumber_spinner.addChangeListener(this);
     32    JPanel server2panel = new JPanel();
     33    server2panel.setLayout(new BorderLayout());
    2334
    24     JLabel prefix_label = new JLabel(server.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".URL"));
     35    boolean allowCons = false;
     36    String externalAccess = server.config_properties.getProperty("externalaccess").trim();
     37    if(externalAccess != null && externalAccess.equals("1")) {
     38        this.externalaccess = 1;
     39        allowCons = true;
     40    }
     41    allowConnections = new JCheckBox(server.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".ExternalAccess"), allowCons);
     42    allowConnections.setBackground(bg_color);
     43    allowConnections.addActionListener(this);
     44   
     45    JPanel connect_panel = new JPanel(new GridLayout(4, 1));
     46    connect_panel.setBackground(bg_color);
     47    connect_panel.setBorder(BorderFactory.createTitledBorder("Connection configuration"));
    2548
    26     prefix_combobox = new JComboBox();
    27     prefix_combobox.setEditable(true);
    28     prefix_combobox.addItem(server.getBrowserURL());
    29     prefix_combobox.addActionListener(this);
     49    hostRadioButtons = new JRadioButton[4];
     50    hostRadioButtons[0] = new JRadioButton(server.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".ResolveIP"));
     51    hostRadioButtons[1] = new JRadioButton(server.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".LocalIP"));
     52    hostRadioButtons[2] = new JRadioButton(server.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".AlwaysUse")+" localhost");
     53    hostRadioButtons[3] = new JRadioButton(server.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".AlwaysUse")+" 127.0.0.1");
    3054
    31     JPanel comb_panel = new JPanel();
    32     comb_panel.setLayout(new BorderLayout());
    33     comb_panel.add(prefix_label, BorderLayout.NORTH);
    34     comb_panel.add(prefix_combobox, BorderLayout.CENTER);
     55    ButtonGroup hostGroup = new ButtonGroup();
     56    for(int i = 0; i < hostRadioButtons.length; i ++) {
     57        connect_panel.add(hostRadioButtons[i]);
     58        hostGroup.add(hostRadioButtons[i]);
     59        hostRadioButtons[i].setBackground(bg_color);
     60        hostRadioButtons[i].setEnabled(!allowCons);
     61    }
     62   
     63
     64    String addressResolutionMethod = server.config_properties.getProperty("address_resolution_method").trim();
     65    if(addressResolutionMethod != null) {
     66        this.address_resolution_method = Integer.parseInt(addressResolutionMethod);
     67    }
     68    hostRadioButtons[address_resolution_method].setSelected(true);
     69
     70    JPanel comb_panel = new JPanel(new BorderLayout());
     71    comb_panel.add(allowConnections, BorderLayout.NORTH);
     72    comb_panel.add(connect_panel, BorderLayout.CENTER);
    3573    return comb_panel;
    3674    }
    3775
    38     public String onSave()
     76    public boolean[] onSave()
    3977    {
    40     String result = "";
    41     if (!server.getBrowserURL().equals(prefix_combobox.getSelectedItem())) {
    42         result += "changed";
    43         result += "restart";
     78    // superclass detects changes to port and autoenter
     79    // handle changes to address_resolution_method and externalAccess/allowConnections here
     80
     81    boolean hasChanged = false;
     82    boolean requireRestart = false;
     83   
     84    for(int i = 0; i < hostRadioButtons.length; i++) {
     85        if(hostRadioButtons[i].isSelected() && address_resolution_method != i) {
     86        address_resolution_method = i;
     87        hasChanged = true;
     88        requireRestart = true;
     89        }
    4490    }
    45     return result;
     91
     92    int oldExternalAccess = externalaccess;
     93    externalaccess = allowConnections.isSelected() ? 1 : 0;
     94    if (oldExternalAccess != externalaccess) {
     95        hasChanged = true;
     96        requireRestart = true;
     97    }
     98
     99    boolean[] returnValues = { hasChanged, requireRestart };
     100    return returnValues;
    46101    }
    47102
    48103    public void save(ScriptReadWrite scriptReadWrite, ArrayList newFileLines)
    49104    {
     105    // write only 1 or 0 (and not true or false) for Server2
    50106    boolean auto_enter = autoEnter.isSelected();
    51107    if(autoStart != auto_enter) {
     
    53109        newFileLines = scriptReadWrite.queryReplace(newFileLines, BaseServer.Property.AUTOSTART, newAutoEnter);
    54110    }
    55     }
    56111
    57     public void stateChanged(ChangeEvent e) {
    58     int portNumber = ((Integer)portNumber_spinner.getValue()).intValue();
    59     String url = (String)prefix_combobox.getSelectedItem();
    60     url.replace('\\', '/');
    61     String pre = "";
    62     if(url.indexOf("http://") != -1) {
    63         pre = "http://";
    64         url = url.substring(7);
     112    // external access - onSave() would have updated this value
     113    newFileLines = scriptReadWrite.queryReplace(newFileLines, "externalaccess", Integer.toString(externalaccess));
     114   
     115    // work out the host (default is address_resolution_method 2: localhost)
     116    String host = "localhost";
     117    InetAddress inetAddress = null;
     118    try {
     119        inetAddress = InetAddress.getLocalHost();
     120    } catch(UnknownHostException e) {
     121        logger.error(e);
     122        logger.info("Server2.java reload(): Defaulting host IP to "+ host); // use the default     
     123        address_resolution_method = 2;
    65124    }
     125    switch(address_resolution_method) {
     126    case 0:
     127        host = inetAddress.getHostName();
     128        break;
     129    case 1:
     130        host = inetAddress.getHostAddress();
     131        break;
     132    case 3:
     133        host = "127.0.0.1";
     134        break;
     135    case 2: default:
     136        host = "localhost";         
     137    }
     138    newFileLines = scriptReadWrite.queryReplace(newFileLines, "host", host);
    66139
    67     String[] parts = url.split("/");
    68     String prefix = parts[0];
    69 
    70     int colon = prefix.indexOf(':');
    71     if(colon != -1) {
    72         prefix = prefix.substring(0, colon);
    73     }
     140    // address resolution method - onSave() would have updated
     141    // this value (or the UnknownHostException above might have)
     142    newFileLines = scriptReadWrite.queryReplace(newFileLines, "address_resolution_method", Integer.toString(address_resolution_method));
    74143   
    75     url = pre + prefix + ":" + portNumber;
    76     for(int i = 1; i < parts.length; i++) {
    77         url = url + "/" + parts[i];
    78     }
    79 
    80     prefix_combobox.setSelectedItem(url);   
    81144    }
    82145
    83146    public void actionPerformed(ActionEvent e) {
    84     String url = (String)prefix_combobox.getSelectedItem();
    85     int portNumber = 80;
    86 
    87     String oldUrl = url;
    88     if(url.indexOf("http://") != -1) {
    89         url = url.substring(7);
    90     }
    91     int colon = url.indexOf(':');
    92     int slash = url.indexOf('/');
    93     if(slash == -1) {
    94         slash = url.length();
    95     }
    96     if(colon != -1) {
    97         url = url.substring(colon+1, slash);
    98         try {
    99         portNumber_spinner.setValue(Integer.decode(url));
    100         } catch(NumberFormatException nfe) { // couldn't parse port number
    101         // not an integer, leave portnumber at 80
    102         String oldNum = portNumber_spinner.getValue().toString();
    103         oldUrl = oldUrl.replaceFirst(oldNum, "80");
    104         portNumber_spinner.setValue(new Integer(80));
     147    boolean toggle = !allowConnections.isSelected();
     148    if(e.getSource() == allowConnections) {
     149        for(int i = 0; i < hostRadioButtons.length; i++) {
     150        hostRadioButtons[i].setEnabled(toggle);
    105151        }
    106     } else { // no port number
    107         oldUrl = oldUrl.replaceFirst(url, url+":80");
    108         portNumber_spinner.setValue(new Integer(80));
    109152    }
    110153    }
Note: See TracChangeset for help on using the changeset viewer.