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

Last change on this file since 29728 was 29728, checked in by ak19, 9 years ago

Adjusting gs3-server code to work with changes made to 29686 where web.xml was split into web.xml and servlets.xml, with the first including the second.

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