diff -r 000000000000 -r a02c979e8dfd srcanaapps/apiquerytool/com.nokia.s60tools.apiquery/src/com/nokia/s60tools/apiquery/servlets/ReportActionServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srcanaapps/apiquerytool/com.nokia.s60tools.apiquery/src/com/nokia/s60tools/apiquery/servlets/ReportActionServlet.java Sat Jan 09 10:04:11 2010 +0530 @@ -0,0 +1,194 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +package com.nokia.s60tools.apiquery.servlets; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Display; + +import com.nokia.s60tools.apiquery.popup.actions.CheckIdentifierAction; +import com.nokia.s60tools.apiquery.popup.actions.OpenFileAction; +import com.nokia.s60tools.apiquery.settings.UserSettings; +import com.nokia.s60tools.apiquery.shared.exceptions.QueryOperationFailedException; +import com.nokia.s60tools.apiquery.shared.resources.Messages; +import com.nokia.s60tools.apiquery.shared.searchmethod.ISearchMethodExtension; +import com.nokia.s60tools.apiquery.shared.ui.dialogs.APIQueryMessageBox; +import com.nokia.s60tools.apiquery.shared.util.console.APIQueryConsole; +import com.nokia.s60tools.apiquery.ui.views.main.MainView; + +/** + * Servlet that takes request from API Query report and forwards it to action. + * Web Server inside Carbide must be up and running when Servlet is executed. + * + * The Web server is running when API Query {@link MainView} is alive. + * + * @see APIQueryWebServerConfigurator#startServer() + */ +public class ReportActionServlet extends HttpServlet implements Servlet { + + + /** + * Default ID. + */ + private static final long serialVersionUID = 1L; + + + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + */ + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + + String queryType = req.getParameter(ReportActionConstants.ACTION_QUERY_TYPE); + try { + String projectName; + if(req.getParameter(ReportActionConstants.ACTION_QUERY_TYPE) != null){ + int type = 1; + if(queryType != null){ + type = Integer.parseInt(queryType); + } + String searchString = (String) req.getParameter(ReportActionConstants.PARAM_QUERY_FOR); + runAPIQueryFor(searchString, type); + } + else if(req.getParameter(ReportActionConstants.ACTION_OPEN_USED_HEADER) != null){ + String headerName = (String) req.getParameter(ReportActionConstants.ACTION_OPEN_USED_HEADER); + projectName = (String) req.getParameter(ReportActionConstants.PARAM_PROJECT_NAME); + openFileFromSDK(headerName, projectName); + } + else if(req.getParameter(ReportActionConstants.ACTION_OPEN_USING_FILE) != null){ + String fileName = (String) req.getParameter(ReportActionConstants.ACTION_OPEN_USING_FILE); + projectName = (String) req.getParameter(ReportActionConstants.PARAM_PROJECT_NAME); + openFileFromProject(fileName, projectName); + } + else{ + String msg = Messages.getString("ReportActionServlet.NotSupportedAction_Msg"); //$NON-NLS-1$ + APIQueryConsole.getInstance().println(msg); + } + + + PrintWriter out = resp.getWriter(); + //When actual servlet page is loaded (Action is launched) directing user back where come from + //by loading java script on body load. + out.println("\n" + //$NON-NLS-1$ + "\n" + //$NON-NLS-1$ + "\n" + //$NON-NLS-1$ + "\n" + //$NON-NLS-1$ + ""); //$NON-NLS-1$ + } catch (NumberFormatException e) { + String msg = Messages.getString("ReportActionServlet.NotSupportedQueryType_ErrMsg_Part1") +queryType +Messages.getString("ReportActionServlet.NotSupportedQueryType_ErrMsg_Part2"); //$NON-NLS-1$ //$NON-NLS-2$ + APIQueryConsole.getInstance().println(msg, APIQueryConsole.MSG_ERROR); + e.printStackTrace(); + } catch (QueryOperationFailedException e) { + showErrorMessage(e.getMessage()); + } + + } + + /** + * Shows on error message to user. + * @param message + */ + private void showErrorMessage(final String message) { + Runnable run = new Runnable(){ + public void run(){ + new APIQueryMessageBox(message, + SWT.ICON_ERROR | SWT.OK).open(); + + } + }; + Display.getDefault().asyncExec(run); + } + + + /** + * Open File from project + * @param fileName + * @param projectName + */ + private void openFileFromProject(String fileName, String projectName) { + OpenFileAction action = new OpenFileAction(); + action.openFileFromProject(fileName, projectName); + } + + /** + * Open file from SDK + * @param fileName + * @param projectName + */ + private void openFileFromSDK(String fileName, String projectName) { + OpenFileAction action = new OpenFileAction(); + action.openFileFromSDK(fileName, projectName); + } + + + + /** + * Runs API Query for selected String with selected type + * @param searchString String to search for + * @param type API Query type + * @throws QueryOperationFailedException + */ + private void runAPIQueryFor(final String searchString, final int type) throws QueryOperationFailedException{ + + ISearchMethodExtension currentlySelectedSearchMethod = UserSettings.getInstance().getCurrentlySelectedSearchMethod(); + + //Check if search method is supported for selected type. Cannot really occur until + //some data source is giving API Query report details for API that some other Data source is not supporting + //and report is generated with different Data source that is currently in use. + boolean isSupported = currentlySelectedSearchMethod.isSupportedQueryType(type); + if(!isSupported){ + String msg = Messages.getString("ReportActionServlet.NotSupportedSearchMethod_ErrMsg_Part1") //$NON-NLS-1$ + + currentlySelectedSearchMethod.getAPIDetailNameInDetailsByQueryType(type) + +Messages.getString("ReportActionServlet.NotSupportedSearchMethod_ErrMsg_Part2") //$NON-NLS-1$ + + currentlySelectedSearchMethod.getExtensionInfo().getDescription() + +"'."; //$NON-NLS-1$ + APIQueryConsole.getInstance().println(msg, APIQueryConsole.MSG_ERROR); + throw new QueryOperationFailedException( + msg); + } + + + //Runnable to run API Query action + final Runnable run = new Runnable() { + public void run() { + // do the actual work in here + try { + CheckIdentifierAction act = new CheckIdentifierAction(); + act.runAPIQuery(searchString, type); + } catch (Exception e) { + e.printStackTrace(); + String msg = Messages.getString("ReportActionServlet.Unexpected_ErrMsg_Part1") //$NON-NLS-1$ + + searchString +Messages.getString("ReportActionServlet.Unexpected_ErrMsg_Part2") +type +Messages.getString("ReportActionServlet.Unexpected_ErrMsg_Part3") +e; //$NON-NLS-1$ //$NON-NLS-2$ + APIQueryConsole.getInstance().println(msg, APIQueryConsole.MSG_ERROR); + } + + } + }; + Display.getDefault().asyncExec(run); + } + +}