source: main/trunk/greenstone3/src/java/org/greenstone/server/Server3Settings.java

Last change on this file was 36279, checked in by kjdon, 22 months ago

when compiling the list of servlets to select in gg3 server, ignore oaiserver, mat, grabtext

File size: 4.7 KB
Line 
1package org.greenstone.server;
2
3import java.awt.*;
4import java.awt.event.*;
5import java.io.File;
6import java.util.ArrayList;
7import java.util.HashMap;
8import javax.swing.*;
9
10import org.w3c.dom.*;
11import org.xml.sax.InputSource;
12
13import org.greenstone.util.ScriptReadWrite;
14
15import org.greenstone.util.GlobalProperties;
16import org.greenstone.gsdl3.util.GSEntityResolver;
17import org.greenstone.gsdl3.util.GSXML;
18import org.greenstone.gsdl3.util.XMLConverter;
19
20import org.greenstone.server.BaseServerSettings;
21
22public class Server3Settings extends BaseServerSettings
23{
24 protected String servletDefault = null;
25 protected JComboBox servlet_combobox;
26 protected HashMap<String, String> url_mappings = null;
27
28 public Server3Settings(BaseServer server)
29 {
30 super(server);
31 }
32
33 protected JPanel createServletPanel()
34 {
35 JLabel servlet_label = new JLabel(server.dictionary.get(BaseServer.Property.SERVER_SETTINGS+".URL"));
36
37 this.servletDefault = server.config_properties.getProperty(BaseServer.Property.DEFAULT_SERVLET);
38
39 servlet_combobox = new JComboBox();
40 servlet_combobox.setMaximumRowCount(5);
41 servlet_combobox.setBackground(bg_color);
42
43 File web_xml = new File(GlobalProperties.getGSDL3Home() + File.separator + "WEB-INF" + File.separator + "web.xml");
44 XMLConverter converter = new XMLConverter();
45 // web.xml now includes the new file servlets.xml which defines entities used therein
46 // So when loading web.xml's DOM, need to resolve entities in web.xml. And for this,
47 // need to instruct the entity resolver to load included files relative to web.xml's location
48 Document web_config = converter.getDOM(web_xml, new GSEntityResolver(web_xml.getParentFile()));
49 if (web_config == null) {
50 logger.error("web.xml is null! "+web_xml.getAbsolutePath());
51 return null;
52 }
53
54 NodeList servlet_mappings = web_config.getElementsByTagName("servlet-mapping");
55 // make a little map class
56 url_mappings = new HashMap<String, String>();
57 for (int i = 0; i < servlet_mappings.getLength(); i++) {
58 Element map = (Element) servlet_mappings.item(i);
59 Element servlet_name_elem = (Element) GSXML.getChildByTagName(map, "servlet-name");
60 String name = GSXML.getNodeText(servlet_name_elem);
61 Element url_pattern_elem = (Element) GSXML.getChildByTagName(map, "url-pattern");
62 String pattern = GSXML.getNodeText(url_pattern_elem);
63 // Ignore the Axis servlets plus other non-library servlets
64 if (name.equals("AxisServlet") || name.equals("oaiserver") || name.equals("mat") || name.equals("grabtext") ) {
65 continue;
66 }
67
68 servlet_combobox.addItem(name.trim());
69 url_mappings.put(name, pattern);
70
71
72 if (pattern.replaceAll("/\\*","").equals(servletDefault)) { // urlmapping maybe something like "/library/*", want "/library"
73 servlet_combobox.setSelectedItem(name);
74 }
75
76 }
77
78 JPanel comb_panel = new JPanel();
79 comb_panel.setLayout(new FlowLayout(FlowLayout.LEFT));
80 comb_panel.add(servlet_label);
81 comb_panel.add(servlet_combobox);
82
83 return comb_panel;
84 }
85
86 public boolean[] onSave()
87 {
88 boolean hasChanged = false;
89 boolean requireRestart = false;
90 String urlMapping = url_mappings.get(servlet_combobox.getSelectedItem());
91 if(urlMapping.endsWith("/*")) { // urlmapping maybe something like "/library/*"
92 urlMapping = urlMapping.substring(0, urlMapping.length()-2);
93 }
94
95 if (!servletDefault.equals(urlMapping)) {
96 hasChanged = true;
97 requireRestart = true;
98 }
99 boolean[] returnValues = { hasChanged, requireRestart };
100 return returnValues;
101 }
102
103 public void save(ScriptReadWrite scriptReadWrite, ArrayList<String> newFileLines)
104 {
105 String newAutoEnter = String.valueOf(autoEnter.isSelected());
106 newFileLines = scriptReadWrite.queryReplace(newFileLines, BaseServer.Property.AUTOSTART, newAutoEnter);
107
108 String newKeepPort = String.valueOf(keepPortToggle.isSelected());
109 newFileLines = scriptReadWrite.queryReplace(newFileLines, BaseServer.Property.KEEPPORT, newKeepPort);
110
111 // external access - BaseServerSettings.actionPerformed() would have updated this value
112 // Its possible values are specific to the version of Greenstone: 0 or 1 for GS2 (true or false for GS3)
113 newFileLines = scriptReadWrite.queryReplace(newFileLines, BaseServer.Property.ALLOW_EXTERNAL_ACCESS, externalaccess ? "true" : "false");
114
115 String newServletDef = (String) servlet_combobox.getSelectedItem();
116 String servletDefName = url_mappings.get(newServletDef);
117 if(servletDefName.endsWith("/*")) { // urlmapping maybe something like "/library/*"
118 servletDefName = servletDefName.substring(0, servletDefName.length()-2);
119 }
120 newFileLines = scriptReadWrite.queryReplace(newFileLines,BaseServer.Property.DEFAULT_SERVLET, servletDefName);
121 }
122
123}
Note: See TracBrowser for help on using the repository browser.