Package org.apache.gaelucene.dashboard

Source Code of org.apache.gaelucene.dashboard.GAELuceneIndexWebHandler

package org.apache.gaelucene.dashboard;

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLDecoder;
import java.util.List;
import java.util.Properties;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.gaelucene.PMF;
import org.apache.gaelucene.auth.GAELuceneAuthException;
import org.apache.gaelucene.auth.GAELuceneOnlineUser;
import org.apache.gaelucene.auth.GAELuceneOnlineUserManager;
import org.apache.gaelucene.auth.GAELucenePermission;
import org.apache.gaelucene.tools.LuceneIndexImportHandler;
import org.apache.lucene.store.GAEFile;
import org.apache.lucene.store.GAEFileContentJDO;
import org.apache.lucene.store.GAEFileJDO;
import org.apache.lucene.store.GAEIndexCategory;
import org.apache.lucene.store.GAEIndexCategoryJDO;

import com.liferay.util.ParamUtil;

public class GAELuceneIndexWebHandler {
  // global logger
  private static Logger log = Logger.getLogger(GAELuceneIndexWebHandler.class.getName());

  private GAELuceneOnlineUserManager userManager = GAELuceneOnlineUserManager.getInstance();

  public void processImportPrepackagedIndex(HttpServletRequest request) throws GAELuceneAuthException,
      IOException {
    GAELuceneOnlineUser onlineUser = userManager.getOnlineUser(request);
    GAELucenePermission permission = onlineUser.getPermission();
    if (!permission.canAdminSystem()) {
      throw new GAELuceneAuthException(0);
    }
    String dirName = ParamUtil.getString(request, "dir", "").trim();
    String category = ParamUtil.getString(request, "cat", "").trim();
    log.info("trying to import prepackaged index under '" + dirName + "' to db.");
    URL resource = this.getClass().getClassLoader().getResource(dirName);
    if (resource == null) {
      URL indicesRoot = this.getClass().getClassLoader().getResource("./");
      throw new IOException("FAILED TO LOCATE '" + dirName + "' UNDER '" + indicesRoot + "'!");
    }
    File indxDir = new File(resource.getFile());
    LuceneIndexImportHandler.importToGAEDataStore(indxDir, category);
  }

  public void processListGAEFiles(HttpServletRequest request) throws GAELuceneAuthException {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    Query query1 = pm.newQuery(GAEIndexCategory.class);
    query1.setOrdering("cat asc");
    List<GAEIndexCategory> categories = (List<GAEIndexCategory>) query1.execute();
    pm.detachCopyAll(categories);

    Query query2 = pm.newQuery(GAEFile.class);
    query2.setOrdering("name asc");
    List<GAEFile> files = (List<GAEFile>) query2.execute();
    pm.detachCopyAll(files);

    request.setAttribute("categories", categories);
    request.setAttribute("files", files);
    pm.close();
  }

  public void deleteGAEFile(HttpServletRequest request) throws GAELuceneAuthException {
    GAELuceneOnlineUser onlineUser = userManager.getOnlineUser(request);
    GAELucenePermission permission = onlineUser.getPermission();
    if (!permission.canAdminSystem()) {
      throw new GAELuceneAuthException(0);
    }

    long id = ParamUtil.getLong(request, "id", 0);
    if (id > 0) {
      log.info("trying to delete GAEFile entity '" + id + "'");
      GAEFileJDO.delete(new Long(id));
    }
  }

  public void batchDeleteGAEFiles(HttpServletRequest request) throws GAELuceneAuthException {
    GAELuceneOnlineUser onlineUser = userManager.getOnlineUser(request);
    GAELucenePermission permission = onlineUser.getPermission();
    if (!permission.canAdminSystem()) {
      throw new GAELuceneAuthException(0);
    }
    String category = ParamUtil.getString(request, "cat", "").trim();
    long version = ParamUtil.getLong(request, "ver", 0);
    log.info("trying to delete GAEFile entities of '" + category + "' with version='" + version + "'");
    GAEFileJDO.batchDelete(category, new Long(version));
  }

  public void deleteGAECategory(HttpServletRequest request) throws GAELuceneAuthException {
    GAELuceneOnlineUser onlineUser = userManager.getOnlineUser(request);
    GAELucenePermission permission = onlineUser.getPermission();
    if (!permission.canAdminSystem()) {
      throw new GAELuceneAuthException(0);
    }

    long id = ParamUtil.getLong(request, "id", 0);
    if (id > 0) {
      log.info("trying to delete GAECategory entity '" + id + "'");
      GAEIndexCategoryJDO.delete(new Long(id));
    }
  }

  public void processRegisterNewFile(HttpServletRequest request, HttpServletResponse response)
      throws GAELuceneAuthException, IOException {
    GAELuceneOnlineUser onlineUser = userManager.getOnlineUser(request);
    GAELucenePermission permission = onlineUser.getPermission();
    if (!permission.canAdminSystem()) {
      throw new GAELuceneAuthException(0);
    }
    String category = ParamUtil.getString(request, "cat", "").trim();
    long version = ParamUtil.getLong(request, "ver", 0);
    String fileName = ParamUtil.getString(request, "name", "").trim();
    long fileLength = ParamUtil.getLong(request, "length", -1);
    long lastModified = ParamUtil.getLong(request, "lastModified", -1);
    int segmentCount = ParamUtil.getInteger(request, "segmentCount", 0);

    log.info("receive a new file {cat:" + category + "; name:" + fileName + "; length:" + fileLength
        + "; lastModified:" + lastModified + "; segmentCount:" + segmentCount + "}.");
    Long fileId = GAEFileJDO.saveOrUpdate(category, new Long(version), fileName, new Long(fileLength),
        new Long(lastModified), new Integer(segmentCount));
    log.info("registered fileId:" + fileId);

    PrintWriter out = response.getWriter();
    out.print(fileId);
    out.flush();
  }

  // parse parameter-value pairs from queryString
  private Properties getRequestParameters(String queryString, String encoding) {
    Properties parameters = new Properties();
    if (queryString == null || queryString.trim().length() <= 0) {
      return parameters;
    }
    int i = 0;
    // skip invalid prefix
    char c = queryString.charAt(i);
    while (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) {
      c = queryString.charAt(++i);
    }

    if (i > 0) {
      queryString = queryString.substring(i);
    }

    // replace '&amp;' with '&'
    queryString = queryString.replaceAll("&amp;", "&");
    String[] tokens = queryString.split("[&]");
    for (int j = 0; j < tokens.length; j++) {
      int p = tokens[j].indexOf('=');
      if (p < 0) {
        continue;
      }

      String pname = tokens[j].substring(0, p);
      String pvalue = tokens[j].substring(p + 1);
      try {
        pvalue = URLDecoder.decode(pvalue, encoding);
      } catch (Exception e) {
        pvalue = URLDecoder.decode(pvalue);
      }
      parameters.setProperty(pname, pvalue);
      log.fine("parameter[" + pname + "]={" + pvalue + "}");
    }

    return parameters;
  }

  public void processCommitNewFile(HttpServletRequest request, HttpServletResponse response)
      throws GAELuceneAuthException, IOException {
    GAELuceneOnlineUser onlineUser = userManager.getOnlineUser(request);
    GAELucenePermission permission = onlineUser.getPermission();
    if (!permission.canAdminSystem()) {
      throw new GAELuceneAuthException(0);
    }
    String queryString = request.getQueryString();
    // parse 'query string'
    Properties parameters = getRequestParameters(queryString, "UTF-8");
    //String action = ParamUtil.getString("do", "").trim();
    long fileId = Long.parseLong(parameters.getProperty("fileId", "0").trim());
    int segmentNo = Integer.parseInt(parameters.getProperty("segmentNo", "0").trim());
    long segmentLength = Long.parseLong(parameters.getProperty("segmentLength", "0").trim());

    log.info("receive a new segment {fileId:" + fileId + "; segmentNo:" + segmentNo + "; segmentLength:"
        + segmentLength + "}.");

    ServletInputStream is = request.getInputStream();
    ByteArrayOutputStream dos = new ByteArrayOutputStream();
    byte[] buffer = new byte[10240];
    for (int bytes = is.read(buffer, 0, 10240); bytes >= 0;) {
      dos.write(buffer, 0, bytes);
      bytes = is.read(buffer, 0, 10240);
    }
    log.info("receive " + dos.size() + " bytes from remote host");
    byte[] data = dos.toByteArray();
    GAEFileContentJDO.saveOrUpdate(new Long(fileId), new Integer(segmentNo), new Long(segmentLength), data);

    PrintWriter out = response.getWriter();
    out.print("OK");
    out.flush();
  }

  public void processActivateNewIndex(HttpServletRequest request, HttpServletResponse response)
      throws GAELuceneAuthException, IOException {
    GAELuceneOnlineUser onlineUser = userManager.getOnlineUser(request);
    GAELucenePermission permission = onlineUser.getPermission();
    if (!permission.canAdminSystem()) {
      throw new GAELuceneAuthException(0);
    }
    String category = ParamUtil.getString(request, "cat", "").trim();
    long version = ParamUtil.getLong(request, "ver", 0);
    log.info("trying to activate index of '" + category + "', version=" + version);
    GAEIndexCategoryJDO.saveOrUpdate(category, new Long(version), new Long(System.currentTimeMillis()));

    PrintWriter out = response.getWriter();
    out.print("OK");
    out.flush();
  }
}
TOP

Related Classes of org.apache.gaelucene.dashboard.GAELuceneIndexWebHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.