// Copyright 2006 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.enterprise.connector.servlet; import com.google.enterprise.connector.instantiator.InstantiatorException; import com.google.enterprise.connector.logging.NDC; import com.google.enterprise.connector.manager.Context; import com.google.enterprise.connector.manager.Manager; import com.google.enterprise.connector.persist.ConnectorTypeNotFoundException; import com.google.enterprise.connector.spi.ConfigureResponse; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Test SetConnectorConfig servlet through a browser. */ public class SetConnectorConfigNoGSA extends HttpServlet { private static final Logger LOGGER = Logger.getLogger(SetConnectorConfigNoGSA.class.getName()); /** * Returns the connector config form for given connector type. * * @param req * @param res * @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { Manager manager = Context.getInstance().getManager(); String typeName = req.getParameter(ServletUtil.XMLTAG_CONNECTOR_TYPE); String language = req.getParameter(ServletUtil.QUERY_PARAM_LANG); res.setContentType(ServletUtil.MIMETYPE_HTML); PrintWriter out = res.getWriter(); NDC.pushAppend("Config " + typeName); try { handleDoGet(manager, typeName, language, out); } finally { out.close(); NDC.pop(); } } // TODO: This extracted method is now testable, so write some tests. private void handleDoGet(Manager manager, String connectorTypeName, String language, PrintWriter out) throws IOException { ConfigureResponse configResponse = null; try { configResponse = manager.getConfigForm(connectorTypeName, language); } catch (ConnectorTypeNotFoundException e) { ServletUtil.writeResponse(out, ConnectorMessageCode.RESPONSE_NULL_CONNECTOR_TYPE); LOGGER.log(Level.WARNING, ServletUtil.LOG_RESPONSE_NULL_CONNECTOR_TYPE, e); return; } catch (InstantiatorException e) { ServletUtil.writeResponse(out, ConnectorMessageCode.EXCEPTION_INSTANTIATOR); LOGGER.log(Level.WARNING, ServletUtil.LOG_EXCEPTION_INSTANTIATOR, e); return; } out.println("<HTML><HEAD><TITLE>Set Connector Config</TITLE></HEAD>"); out.println("<BODY><H3>Connector Config:</H3>"); out.println("<HR><FORM METHOD=POST " + "ACTION=\"/connector-manager/setConnectorConfigTest?" + ServletUtil.XMLTAG_CONNECTOR_TYPE + "=" + connectorTypeName + "&lang=" + language + "\"><TABLE>"); out.println("<tr><td>Connector Name</td><td>" + "<INPUT TYPE=\"TEXT\" NAME=\"connectorName\"></td></tr>"); out.println("<tr><td>Connector Type</td><td>" + "<INPUT TYPE=\"TEXT\" NAME=\"connectorType\" " + "VALUE=\"" + connectorTypeName + "\"></td></tr>"); String formSnippet = null; if (configResponse == null || configResponse.getFormSnippet() == null) { formSnippet = ServletUtil.DEFAULT_FORM; } else { formSnippet = configResponse.getFormSnippet(); } out.println(formSnippet); out.println("<tr><td><INPUT TYPE=\"SUBMIT\" NAME=\"action\"" + "VALUE=\"submit\"></td></tr>"); out.println("</TABLE></FORM></BODY></HTML>"); } /** * Returns the simple response if successfully setting the connector config. * * @param req * @param res * @throws IOException */ @Override @SuppressWarnings("unchecked") protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { Manager manager = Context.getInstance().getManager(); res.setContentType(ServletUtil.MIMETYPE_XML); PrintWriter out = res.getWriter(); NDC.pushAppend("Config"); try { handleDoPost(manager, req.getParameterMap(), out); } finally { out.close(); NDC.pop(); } } // TODO: This extracted method is now testable, so write some tests. private void handleDoPost(Manager manager, Map<String, String> params, PrintWriter out) throws IOException { String language = params.get(ServletUtil.QUERY_PARAM_LANG); String connectorName = params.get(ServletUtil.XMLTAG_CONNECTOR_NAME); String connectorType = params.get(ServletUtil.XMLTAG_CONNECTOR_TYPE); NDC.append(connectorName); StringWriter writer = new StringWriter(); try { writer.write("<" + ServletUtil.XMLTAG_CONNECTOR_CONFIG + ">"); writer.write(" <" + ServletUtil.QUERY_PARAM_LANG + ">" + language + "</" + ServletUtil.QUERY_PARAM_LANG + ">\n"); writer.write(" <" + ServletUtil.XMLTAG_CONNECTOR_NAME + ">" + connectorName + "</" + ServletUtil.XMLTAG_CONNECTOR_NAME + ">"); writer.write(" <" + ServletUtil.XMLTAG_CONNECTOR_TYPE + ">" + connectorType + "</" + ServletUtil.XMLTAG_CONNECTOR_TYPE + ">"); writer.write(" <" + ServletUtil.XMLTAG_PARAMETERS + " name=\"name1\" value=\"" + params.get("name1") + "\"/>"); writer.write(" <" + ServletUtil.XMLTAG_PARAMETERS + " name=\"name2\" value=\"" + params.get("name2") + "\"/>"); writer.write(" <" + ServletUtil.XMLTAG_PARAMETERS + " name=\"name3\" value=\"" + params.get("name3") + "\"/>"); writer.write("</" + ServletUtil.XMLTAG_CONNECTOR_CONFIG + ">"); } finally { writer.close(); } SetConnectorConfigHandler handler = new SetConnectorConfigHandler( writer.getBuffer().toString(), manager); ConfigureResponse configRes = handler.getConfigRes(); ConnectorMessageCode status = (configRes == null)? handler.getStatus() : new ConnectorMessageCode(ConnectorMessageCode.INVALID_CONNECTOR_CONFIG); ConnectorManagerGetServlet.writeConfigureResponse(out, status, configRes); } }