001package org.kuali.ole.web;
002
003import org.apache.commons.lang.StringUtils;
004import org.kuali.ole.docstore.common.document.content.enums.DocCategory;
005import org.kuali.ole.docstore.common.document.content.enums.DocFormat;
006import org.kuali.ole.docstore.common.document.content.enums.DocType;
007import org.kuali.ole.docstore.engine.service.index.solr.BibConstants;
008import org.kuali.ole.docstore.metrics.reindex.ReIndexingStatus;
009import org.kuali.ole.docstore.process.RebuildIndexesHandler;
010import org.kuali.ole.logger.DocStoreLogger;
011
012import javax.servlet.ServletException;
013import javax.servlet.http.HttpServlet;
014import javax.servlet.http.HttpServletRequest;
015import javax.servlet.http.HttpServletResponse;
016import java.io.IOException;
017import java.io.PrintWriter;
018
019/**
020 * Created by IntelliJ IDEA.
021 * User: pvsubrah
022 * Date: 11/12/11
023 * Time: 3:41 PM
024 * To change this template use File | Settings | File Templates.
025 */
026public class RebuildIndexServlet extends HttpServlet {
027
028    private static final long serialVersionUID = 1L;
029    DocStoreLogger docStoreLogger = new DocStoreLogger(getClass().getName());
030
031    @Override
032    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
033        doPost(req, resp);
034    }
035
036    @Override
037    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
038        try {
039
040            String docCategory = DocCategory.WORK.getCode();
041            String docType = DocType.BIB.getCode();
042            String docFormat = DocFormat.MARC.getCode();
043            String action = req.getParameter("action");
044            String batchSizeReq = req.getParameter("batchSize");
045            String startIndexReq = req.getParameter("startIndex");
046            String endIndexReq = req.getParameter("endIndex");
047            int batchSize = 0;
048            int startIndex = 0;
049            int endIndex = 0;
050            if(StringUtils.isNotEmpty(batchSizeReq)) {
051                batchSize = Integer.parseInt(batchSizeReq);
052            }
053            if(StringUtils.isNotEmpty(startIndexReq)) {
054                startIndex = Integer.parseInt(startIndexReq);
055            }
056            if(StringUtils.isNotEmpty(endIndexReq)) {
057                endIndex = Integer.parseInt(endIndexReq);
058            }
059            if(startIndex > endIndex) {
060                String result = "Please provide valid input " +  startIndex + " > " + endIndex;
061                outputMessage(resp, result);
062            }
063            RebuildIndexesHandler rebuildIndexesHandler = RebuildIndexesHandler.getInstance();
064
065            if (action.equalsIgnoreCase("start")) {
066                String result = rebuildIndexesHandler.startProcess(docCategory, docType, docFormat, batchSize, startIndex, endIndex);
067                outputMessage(resp, result);
068            } else if (action.equalsIgnoreCase("stop")) {
069                String result = rebuildIndexesHandler.stopProcess();
070                outputMessage(resp, result);
071            } else if (action.equalsIgnoreCase("status")) {
072//                ReIndexingStatus reIndexingStatus = ReIndexingStatus.getInstance();
073//                String result = reIndexingStatus.getJsonString();
074                String result = rebuildIndexesHandler.showStatus();
075                outputMessage(resp, result);
076            } else if (action.equalsIgnoreCase("bibStatus")) {
077                String result = rebuildIndexesHandler.showBibStatus();
078                outputMessage(resp, result);
079            } else if (action.equalsIgnoreCase("Clear Status")) {
080                ReIndexingStatus reIndexingStatus = ReIndexingStatus.getInstance();
081                reIndexingStatus.reset();
082            } else if (action.equalsIgnoreCase("store")) {
083                String result = rebuildIndexesHandler.storeBibInfo(batchSize);
084                outputMessage(resp, result);
085            } else {
086                String result = "Invalid action :" + action;
087                outputMessage(resp, result);
088            }
089        } catch (Exception e) {
090            docStoreLogger.log("Error during rebuilding of the indexes from documentstore", e);
091        }
092    }
093
094    private void outputMessage(HttpServletResponse resp, String s) throws IOException {
095        PrintWriter out = resp.getWriter();
096        out.println(s);
097        out.flush();
098        out.close();
099    }
100}