// 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.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Admin servlet to get the config form for a given connector type and language. */ public class GetConfigForm extends HttpServlet { private static final Logger LOGGER = Logger.getLogger(GetConfigForm.class.getName()); /** * Returns the connector config form. * * @param req * @param res * @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { // Make sure this requester is OK if (!RemoteAddressFilter.getInstance() .allowed(RemoteAddressFilter.Access.BLACK, req.getRemoteAddr())) { res.sendError(HttpServletResponse.SC_FORBIDDEN); return; } String connectorTypeName = req.getParameter(ServletUtil.XMLTAG_CONNECTOR_TYPE); res.setContentType(ServletUtil.MIMETYPE_XML); res.setCharacterEncoding("UTF-8"); PrintWriter out = res.getWriter(); NDC.pushAppend("Config " + connectorTypeName); try { String language = req.getParameter(ServletUtil.QUERY_PARAM_LANG); if (language == null || language.length() < 1) { LOGGER.log(Level.WARNING, "Language is null"); language = ServletUtil.DEFAULT_LANGUAGE; } Manager manager = Context.getInstance().getManager(); handleDoGet(connectorTypeName, language, manager, out); } finally { out.close(); NDC.pop(); } } /** * Returns the connector config form. * * @param req * @param res * @throws IOException */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { doGet(req, res); } /** * Handler for doGet in order to do unit tests. * * @param connectorTypeName The name of a connector implementation - it should * be one that this manager knows about (one that would be returned by * a call to getConnectorTypes()). * @param language A locale string, such as "en" or "fr_CA" which the * implementation may use to produce appropriate descriptions and * messages * @param manager the Connector Manager * @param out PrintWriter where the response is written */ public static void handleDoGet(String connectorTypeName, String language, Manager manager, PrintWriter out) { ConnectorMessageCode status = new ConnectorMessageCode(); if (connectorTypeName == null || connectorTypeName.length() < 1) { status.setMessageId(ConnectorMessageCode.RESPONSE_NULL_CONNECTOR_TYPE); ServletUtil.writeResponse(out, status); LOGGER.log(Level.WARNING, ServletUtil.LOG_RESPONSE_NULL_CONNECTOR_TYPE); return; } try { ConfigureResponse configResponse = manager.getConfigForm(connectorTypeName, language); ConnectorManagerGetServlet.writeConfigureResponse(out, status, configResponse); } catch (ConnectorTypeNotFoundException e) { status = new ConnectorMessageCode( ConnectorMessageCode.EXCEPTION_CONNECTOR_TYPE_NOT_FOUND, connectorTypeName); ServletUtil.writeResponse(out, status); LOGGER.log(Level.WARNING, ServletUtil.LOG_EXCEPTION_CONNECTOR_TYPE_NOT_FOUND, e); } catch (InstantiatorException e) { status.setMessageId(ConnectorMessageCode.EXCEPTION_INSTANTIATOR); ServletUtil.writeResponse(out, status); LOGGER.log(Level.WARNING, ServletUtil.LOG_EXCEPTION_INSTANTIATOR, e); } } }