/*
* Created on 2004-10-18
*/
package mmonster.webfrontend;
import java.io.IOException;
import java.io.PrintWriter;
import java.rmi.RemoteException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import multimonster.common.setting.Setting;
import multimonster.common.setting.SettingID;
import multimonster.common.setting.SettingValue;
import multimonster.systemadministration.exceptions.SettingNotExistsException;
import multimonster.systemadministration.exceptions.SettingOutOfDomainException;
import multimonster.systemadministration.interfaces.SystemAdministrationImpl;
import multimonster.systemadministration.interfaces.SystemAdministrationImplHome;
/**
*
* For Viewing and Modifying Settings of the MultiMonster.
* Displays all available Settings in a table and allows to change single
* setting-values.
*
* @author sijomeie
*
* @web.servlet name = "SettingServlet"
* display-name = "Setting Servlet"
* description = "Servlet for Viewing and Modifying Settings"
*
* @web.servlet-mapping url-pattern="/setting-admin"
*
* @web.ejb-ref name = "multimonster/systemadministration/SystemAdministrationFacade"
* type = "Session"
* home = "multimonster.systemadministration.interfaces.SystemAdministrationImplHome"
* remote = "multimonster.systemadministration.interfaces.SystemAdministrationImpl"
* description = "Reference to the Sysadmin Facade Bean"
*
* @jboss.ejb-ref-jndi ref-name = "multimonster/systemadministration/SystemAdministrationFacade"
* jndi-name = "multimonster/systemadministration/SystemAdministrationFacade"
*/
public class SettingServlet extends HttpServlet {
private SystemAdministrationImplHome sysHome;
private Logger log;
String title = "";
public void init() throws ServletException {
log = Logger.getLogger(this.getClass());
try {
Context context = new InitialContext();
Object ref = context.lookup(SystemAdministrationImplHome.JNDI_NAME);
sysHome =
(SystemAdministrationImplHome) PortableRemoteObject.narrow(
ref,
SystemAdministrationImplHome.class);
} catch (Exception e) {
throw new ServletException("Error in init(): " +e.getMessage());
}
title = "MultiMonster - Setting-Admin";
super.init();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
handleRequest(request, response);
}
protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
handleRequest(request, response);
}
/**
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void handleRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
SystemAdministrationImpl sysadminFacade = null;
String answerToClient = "";
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println( printHTMLHeader() );
out.println("<body>");
out.println("<center>");
out.println("<h2>Setting Administration</h2>");
try {
sysadminFacade = sysHome.create();
String method = request.getParameter("method");
if (method != null) {
if (method.equals("setvalue")) {
answerToClient = changeSetting( request.getParameter("sId"),
request.getParameter("sValue"),
sysadminFacade
);
out.println(answerToClient);
} else {
log.warn("Unbekannter Request");
}
}
answerToClient = writeForm();
out.println(answerToClient);
answerToClient = writeSettingTable(sysadminFacade);
out.println(answerToClient);
} catch (Exception e) {
log.error("Fehler: " +e.getMessage());
out.println("Es ist ein Fehler aufgetreten:</br>");
out.println(e);
} finally {
if (sysadminFacade != null)
try {
sysadminFacade.remove();
}
catch (RemoteException e1) {
} catch (RemoveException e1) {
}
out.println("</center></body></html>");
out.close();
}
}
/**
* schreibt HTML-Header f�r Servlet-Antwort
*/
private String printHTMLHeader() {
String ret = "";
ret += "<head>";
ret += "<title>" + title + "</title>";
ret += "<link rel=\"stylesheet\" media=\"all\" href=\"style.css\">";
ret += "<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\">";
ret += "<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">";
ret += "</head>";
return ret;
}
/**
* @return
*/
private String writeSettingTable(SystemAdministrationImpl sysadminFacade) {
String ret = "";
String tableRow = "";
Setting[] settings = null;
Setting s = null;
try {
settings = sysadminFacade.getAllSettings();
if (settings != null || settings.length > 0){
ret += "<table cellspacing=\"2\" cellpadding=\"2\" border=\"0\">";
ret += "<tr>" +
"<td><b>ID</b></td>" +
"<td><b>Name</b></td>" +
"<td><b>Value</b></td>" +
"<td><b>Description</b></td>" +
"<td><b>Domain</b></td>" +
"</tr>";
for(int i=0; i<settings.length; i++){
s = settings[i];
tableRow = "<tr>";
tableRow += "<td>" +s.getId().getId() +"</td>";
tableRow += "<td>" +s.getName() +"</td>";
tableRow += "<td>" +s.getValue().getValueCont() +"</td>";
tableRow += "<td>" +s.getDescription() +"</td>";
tableRow += "<td>" +s.getDomain().getLowerLimit() +" - " +s.getDomain().getUpperLimit() +"</td>";
tableRow += "<tr>";
ret += tableRow;
}
ret += "</table>";
}
} catch (RemoteException e) {
log.error("Couldn't get Settings from sysadmin: " +e.getMessage());
}
return ret;
}
/**
* @return
*/
private String writeForm() {
String ret = "";
ret += "<form action=\"setting-admin\" method=\"POST\" >";
ret += "<table cellspacing=\"2\" cellpadding=\"2\" border=\"0\">";
ret += "<tr><td>SettingID</td><td colspan=\"2\">";
ret += "<input type=\"text\" name=\"sId\" value=\"\">";
ret += "</td></tr>";
ret += "<tr><td>SettingValue</td><td colspan=\"2\">" +
"<input type=\"text\" name=\"sValue\" value=\"\">";
ret += "</td></tr>";
ret += "<tr><td></td><td><input type=\"submit\" name=\"method\" value=\"setvalue\">";
ret += "</td></tr>";
ret += "</table></form>";
return ret;
}
/**
* @param parameter
* @param parameter2
* @param sysadminFacade
* @return
*/
private String changeSetting(String id, String value, SystemAdministrationImpl sysadminFacade) {
String ret = "";
String s_sId = null;
int sId = 0;
String s_sValue = null;
int sValue = 0;
try {
if ((s_sId = id) != null){
sId = Integer.parseInt( s_sId );
}
if ((s_sValue = value) != null){
sValue = Integer.parseInt( s_sValue );
}
SettingID settingId = new SettingID(sId);
SettingValue settingValue = new SettingValue(sValue);
try {
sysadminFacade.setSettingValue(settingId, settingValue);
ret = "<p>Changed setting " +sId +" to value " +sValue +"</p>";
} catch (SettingNotExistsException e1) {
log.error(e1.getMessage());
} catch (SettingOutOfDomainException e1) {
log.error(e1.getMessage());
} catch (RemoteException e1) {
log.error(e1.getMessage());
}
} catch (NumberFormatException e) {
log.warn("Couldn't parse parameters to int (id: " +s_sId +", value: " +s_sValue +"): " +e.getMessage());
}
return ret;
}
}