package com.sugarcrm.candybean.server.configuration; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Map; import java.util.Properties; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import com.sugarcrm.candybean.automation.Candybean; import com.sugarcrm.candybean.configuration.Configuration; import com.sugarcrm.candybean.exceptions.CandybeanException; @SuppressWarnings("serial") public class SaveConfigurationServlet extends HttpServlet { public static Logger logger = Logger .getLogger(SaveConfigurationServlet.class.getName()); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); @SuppressWarnings("unchecked") Map<String, String[]> parameterMap = request.getParameterMap(); try { Candybean candybean = Candybean.getInstance(); Configuration config = candybean.config; Properties props = config.getPropertiesCopy(); for (String key : parameterMap.keySet()) { String[] values = parameterMap.get(key); String newValue = values.length > 0 ? values[0] : ""; if (StringUtils.isNotEmpty(newValue)) { props.remove(key); props.setProperty(key, newValue); } } writeNewConfigFile(config, props); logger.info("Candybean configuration saved"); response.getWriter().println("<h1>Candybean configuration saved successfully</h1>"); } catch (CandybeanException e) { logger.severe("Unable to save candybean configuration"); response.getWriter().println("<h1>Unable to save configuration</h1>"); } } private void writeNewConfigFile(Configuration config, Properties props) throws IOException { File f = config.configFile; f.delete(); f.createNewFile(); FileWriter fw = new FileWriter(f.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); //Write header first if it exists if(props.containsKey("configuration.header")){ String[] headerLines = props.get("configuration.header").toString().split("###"); if (headerLines.length > 0) { for (String headerLine : headerLines) { bw.write("###" + headerLine + "\n"); } bw.write("\n"); } } //Write the remaining key value pairs for (Object key : props.keySet()) { String mapKey = key.toString(); if (!mapKey.endsWith(".desc.hidden") && !mapKey.equals("configuration.header")) { String descKey = mapKey + ".desc.hidden"; if (props.containsKey(descKey)) { String[] comments = props.get(descKey).toString() .split("#"); if (comments.length > 0) { for (String comment : comments) { if (!comment.isEmpty()) { bw.write("#" + comment + "\n"); } } } } bw.write(key + "=" + props.get(key) + "\n"); } } bw.close(); } }