Package cl.loso.melon.server.model

Source Code of cl.loso.melon.server.model.BusquedaML

package cl.loso.melon.server.model;

import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import cl.loso.melon.server.gae.PMF;
import com.google.appengine.api.datastore.DatastoreNeedIndexException;
import com.google.appengine.api.datastore.DatastoreTimeoutException;

public class BusquedaML {

  private static final Logger log = Logger.getLogger(BusquedaML.class
      .getName());

  public static final int MAXIMUM_NUMBER_OF_WORDS_TO_SEARCH = 5;

  public static final int MAX_NUMBER_OF_WORDS_TO_PUT_IN_INDEX = 200;

  public static List<FallaLN> busquedaFallas(Date fecha_ini, Date fecha_ter,
      String queryString, String idEquipo) {
    PersistenceManager pm = null;
    List<FallaLN> result = null;
    try {
      Map<String, Object> pars = new HashMap<String, Object>();
      StringBuffer queryBuffer = new StringBuffer();

      Set<String> queryTokens = BusquedaMLUtils
          .getTokensForIndexingOrQuery(queryString,
              MAXIMUM_NUMBER_OF_WORDS_TO_SEARCH);

      Iterator<String> ite = queryTokens.iterator();

      int parameterCounter = 0;

      if (idEquipo.equals("0")) {
        queryBuffer
            .append("fecha >= :fechaini && fecha <= :fechater && ");
        pars.put("fechaini", fecha_ini);
        pars.put("fechater", fecha_ter);
      } else {
        queryBuffer
            .append("fecha >= :fechaini && fecha <= :fechater && equipo == :idequipo && ");
        pars.put("fechaini", fecha_ini);
        pars.put("fechater", fecha_ter);
        pars.put("idequipo", Long.valueOf(idEquipo));
      }

      while (ite.hasNext()) {

        String param = ite.next();

        queryBuffer.append("fts == :param" + parameterCounter);
        if (parameterCounter + 1 < queryTokens.size()) {
          queryBuffer.append(" && ");
        }

        pars.put("param" + parameterCounter, param);

        parameterCounter++;

      }

      pm = PMF.get().getPersistenceManager();

      Query query = pm.newQuery(FallaLN.class);

      query.setFilter(queryBuffer.toString());
      query.setOrdering("fecha DESC");//ASC
      result = (List<FallaLN>) pm.detachCopyAll((List<FallaLN>) (query
          .executeWithMap(pars)));

    } catch (DatastoreTimeoutException e) {
      log.severe(e.getMessage());
      log.severe("datastore timeout at: " + queryString);
    } catch (DatastoreNeedIndexException e) {
      log.severe(e.getMessage());
      log.severe("datastore need index exception at: " + queryString);
    } finally {
      pm.close();
    }

    return result;

  }

  public static List<BitacoraLN> busquedaNovedades(Date fecha_ini,
      Date fecha_ter, String queryString, String idEquipo) {
    PersistenceManager pm = null;
    List<BitacoraLN> result = null;
    try {
      Map<String, Object> pars = new HashMap<String, Object>();
      StringBuffer queryBuffer = new StringBuffer();

      Set<String> queryTokens = BusquedaMLUtils
          .getTokensForIndexingOrQuery(queryString,
              MAXIMUM_NUMBER_OF_WORDS_TO_SEARCH);

      Iterator<String> ite = queryTokens.iterator();

      int parameterCounter = 0;

      if (idEquipo.equals("0")) {
        queryBuffer
            .append("fecha >= :fechaini && fecha <= :fechater && ");
        pars.put("fechaini", fecha_ini);
        pars.put("fechater", fecha_ter);
      } else {
        queryBuffer
            .append("fecha >= :fechaini && fecha <= :fechater && equipo == :idequipo && ");
        pars.put("fechaini", fecha_ini);
        pars.put("fechater", fecha_ter);
        pars.put("idequipo", Long.valueOf(idEquipo));
      }

      while (ite.hasNext()) {

        String param = ite.next();

        queryBuffer.append("fts == :param" + parameterCounter);
        if (parameterCounter + 1 < queryTokens.size()) {
          queryBuffer.append(" && ");
        }

        pars.put("param" + parameterCounter, param);

        parameterCounter++;

      }

      pm = PMF.get().getPersistenceManager();

      Query query = pm.newQuery(BitacoraLN.class);

      query.setFilter(queryBuffer.toString());
      query.setOrdering("fecha DESC");//ASC
      result = (List<BitacoraLN>) pm
          .detachCopyAll((List<BitacoraLN>) (query
              .executeWithMap(pars)));

    } catch (DatastoreTimeoutException e) {
      log.severe(e.getMessage());
      log.severe("datastore timeout at: " + queryString);
    } catch (DatastoreNeedIndexException e) {
      log.severe(e.getMessage());
      log.severe("datastore need index exception at: " + queryString);
    } finally {
      pm.close();
    }

    return result;

  }

  public static void actualizaFTSFalla(FallaLN fueraServicio) {

    StringBuffer sb = new StringBuffer();

    sb.append(fueraServicio.getProblema());

    Set<String> new_ftsTokens = BusquedaMLUtils
        .getTokensForIndexingOrQuery(sb.toString(),
            MAX_NUMBER_OF_WORDS_TO_PUT_IN_INDEX);

    Set<String> ftsTokens = fueraServicio.getFts();

    ftsTokens.clear();

    for (String token : new_ftsTokens) {
      ftsTokens.add(token);

    }
  }

  public static void actualizarFTSNovedad(BitacoraLN novedadEquipo) {

    StringBuffer sb = new StringBuffer();

    sb.append(novedadEquipo.getComentario());

    Set<String> new_ftsTokens = BusquedaMLUtils
        .getTokensForIndexingOrQuery(sb.toString(),
            MAX_NUMBER_OF_WORDS_TO_PUT_IN_INDEX);

    Set<String> ftsTokens = novedadEquipo.getFts();

    ftsTokens.clear();

    for (String token : new_ftsTokens) {
      ftsTokens.add(token);

    }
  }

}
TOP

Related Classes of cl.loso.melon.server.model.BusquedaML

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.