Package com.jbidwatcher.search

Source Code of com.jbidwatcher.search.SearchManager$TitleSearcher

package com.jbidwatcher.search;
/*
* Copyright (c) 2000-2007, CyberFOX Software, Inc. All Rights Reserved.
*
* Developed by mrs (Morgan Schweers)
*/

import com.cyberfox.util.platform.Path;
import com.jbidwatcher.util.config.JConfig;
import com.jbidwatcher.util.queue.TimerHandler;
import com.jbidwatcher.util.queue.MQFactory;
import com.jbidwatcher.util.queue.AuctionQObject;
import com.jbidwatcher.util.xml.XMLElement;
import com.jbidwatcher.util.xml.XMLParseException;
import com.jbidwatcher.util.xml.XMLSerializeSimple;
import com.jbidwatcher.util.Constants;

import java.io.*;
import java.util.List;
import java.util.ArrayList;

public class SearchManager extends XMLSerializeSimple implements SearchManagerInterface, TimerHandler.WakeupProcess {
  private List<Searcher> _searches = new ArrayList<Searcher>();
  private static SearchManager _instance = null;
  private static TimerHandler sTimer;
  private String destinationQueue;

  private SearchManager() { }
  public static SearchManager getInstance() {
    if (_instance == null) _instance = new SearchManager();

    return _instance;
  }

  public void addSearch(Searcher newSearch) {
    _searches.add(newSearch);
  }

  public Searcher getSearchByName(String name) {
    for (Searcher search : _searches) {
      if (name.equals(search.getName())) return search;
    }

    return null;
  }

  public void setDestinationQueue(String dQueue) {
    destinationQueue = dQueue;
  }

  public class StringSearcher extends Searcher {
    public String getTypeName() { return "Text"; }
    protected void fire() {
      MQFactory.getConcrete(destinationQueue).enqueueBean(new AuctionQObject(AuctionQObject.LOAD_SEARCH, getId(), getCategory()));
    }
  }

  public class TitleSearcher extends Searcher {
    public String getTypeName() { return "Title"; }
    protected void fire() {
      MQFactory.getConcrete(destinationQueue).enqueueBean(new AuctionQObject(AuctionQObject.LOAD_TITLE, getId(), getCategory()));
    }
  }

  public class URLSearcher extends Searcher {
    public String getTypeName() { return "URL"; }
    protected void fire() {
      MQFactory.getConcrete(destinationQueue).enqueueBean(new AuctionQObject(AuctionQObject.LOAD_URL, getId(), getCategory()));
    }
  }

  public class SellerSearcher extends Searcher {
    public String getTypeName() { return "Seller"; }
    protected void fire() {
      MQFactory.getConcrete(destinationQueue).enqueueBean(new AuctionQObject(AuctionQObject.LOAD_SELLER, getId(), getCategory()));
    }
  }

  public class MyItemSearcher extends Searcher {
    public String getTypeName() { return "My Items"; }
    protected void fire() {
      MQFactory.getConcrete(destinationQueue).enqueueBean(new AuctionQObject(AuctionQObject.LOAD_MYITEMS, null, hasCategory() ? getCategory() : null));
    }
  }

  public Searcher getSearchByIndex(int i) { if(i < _searches.size()) return _searches.get(i); else return null; }

  public int findSearch(Searcher s) { return _searches.indexOf(s); }

  public static Searcher getSearchById(Long id) {
    return getInstance().getSearchById(id.longValue());
  }

  public Searcher getSearchById(long id) {
    for (Searcher s : _searches) {
      if (id == s.getId()) return s;
    }

    return null;
  }

  public boolean check() {
    boolean fired=false;
    for (Searcher s : _searches) {
      if (s.shouldExecute()) {
        s.execute();
        fired = true;
      }
    }
    return fired;
  }

  /**
   * @brief Save searches in a file.
   *
   * This is mostly for testing, although the same function will be
   * used by the 'shutdown' code.
   *
   * @return - true indicates the file was successfully saved, false
   * indicates that an error occurred while trying to save the searches.
   */
  public boolean saveSearches() {
    String saveFile = JConfig.queryConfiguration("search.savefile", "searches.xml");
    String oldSave = saveFile;

    StringBuffer saveData = this.toXML().toStringBuffer();

    saveFile = Path.getCanonicalFile(saveFile, "jbidwatcher", false);
    if(!saveFile.equals(oldSave)) {
      JConfig.setConfiguration("search.savefile", saveFile);
    }

    boolean saveDone = true;
    try {
      PrintStream ps = new PrintStream(new FileOutputStream(saveFile));

      ps.println("<?xml version=\"1.0\"?>");
      ps.println("");
      ps.println(Constants.XML_SEARCHES_DOCTYPE);
      ps.println("");
      ps.println(saveData);
      ps.close();
    } catch(IOException e) {
      JConfig.log().handleException("Failed to save searches.", e);
      saveDone = false;
    }

    return saveDone;
  }

  public void loadSearches() {
    XMLElement xmlFile = new XMLElement(true);
    String loadFile = JConfig.queryConfiguration("search.savefile", "searches.xml");
    String oldLoad = loadFile;

    loadFile = Path.getCanonicalFile(loadFile, "jbidwatcher", true);

    if(!loadFile.equals(oldLoad)) {
      JConfig.setConfiguration("search.savefile", loadFile);
    }

    try {
      InputStreamReader isr = new InputStreamReader(new FileInputStream(loadFile));

      xmlFile.parseFromReader(isr);

      if(!xmlFile.getTagName().equals("searches")) {
        throw new XMLParseException(xmlFile.getTagName(), "SearchManager only recognizes <searches> tag!");
      } else {
        fromXML(xmlFile);
      }
    } catch(IOException ioe) {
      JConfig.log().logDebug("JBW: Failed to load saved searches, the search file is probably not there yet.");
      JConfig.log().logDebug("JBW: This is not an error, unless you are consistently getting it.");
    } catch(Exception e) {
      JConfig.log().handleException("JBW: Failed to load saved searches, file exists but can't be loaded!", e);
    }
  }

  public XMLElement toXML() {
    XMLElement allData = new XMLElement("searches");

    for (Searcher s : _searches) {
      XMLElement search = s.toXML();

      allData.addChild(search);
    }

    return allData;
  }

  protected String[] infoTags = { "search" };
  protected String[] getTags() { return infoTags; }

  protected void handleTag(int i, XMLElement curElement) {
    switch(i) {
      case 0:
        String type = curElement.getProperty("TYPE");
        long id = 0;
        try {
          id = Long.parseLong(curElement.getProperty("ID"));
        } catch(NumberFormatException nfe) {
          //  This is totally normal.
        }
        Searcher s = newSearch(type);
        s.setId(id);

        s.fromXML(curElement);
        if(s.getId() == 0) {
          if(s.getTypeName().equals("My Items")) {
            s.setId(1);
          } else {
            s.setId(s.getName().hashCode() + System.currentTimeMillis() + s.getSearch().hashCode());
          }
        }
        if(getSearchById(s.getId()) == null) {
          _searches.add(s);
        }
        break;
      default:
        break;
    }
  }

  public int getSearchCount() { return _searches.size(); }

  public void deleteSearch(Searcher s) {
    _searches.remove(s);
  }

  private Searcher newSearch(String type) {
    if(type.startsWith("Text")) {
      return new StringSearcher();
    } else if(type.startsWith("Title")) {
      return new TitleSearcher();
    } else if(type.startsWith("Seller")) {
      return new SellerSearcher();
    } else if(type.startsWith("URL")) {
      return new URLSearcher();
    } else if(type.equals("My Items")) {
      return new MyItemSearcher();
    } else {
      JConfig.log().logMessage("Failed to create searcher for: " + type);
    }

    return null;
  }

  public Searcher addSearch(String type, String name, String search, String server, int period, long id) {
    Searcher s = buildSearch(id, type, name, search, server, null, period);
    _searches.add(s);

    return s;
  }

  public Searcher buildSearch(long id, String type, String name, String search, String server, String currency, int period) {
    Searcher s = newSearch(type);
    s.setId(id);
    s.setName(name);
    s.setSearch(search);
    s.setServer(server);
    s.setPeriod(period);
    s.setCurrency(currency);
    return s;
  }

  public void saveSearchDisplay() {
    String xCfg = JConfig.queryAuxConfiguration("searches.x", JConfig.queryDisplayProperty("searches.x"));
    String yCfg = JConfig.queryAuxConfiguration("searches.y", JConfig.queryDisplayProperty("searches.y"));
    String wCfg = JConfig.queryAuxConfiguration("searches.width", JConfig.queryDisplayProperty("searches.width"));
    String hCfg = JConfig.queryAuxConfiguration("searches.height", JConfig.queryDisplayProperty("searches.height"));

    if (xCfg != null && yCfg != null && wCfg != null && hCfg != null) {
      JConfig.setAuxConfiguration("searches.x", xCfg);
      JConfig.setAuxConfiguration("searches.y", yCfg);
      JConfig.setAuxConfiguration("searches.width", wCfg);
      JConfig.setAuxConfiguration("searches.height", hCfg);
    }
  }

  public void deleteSearch(String searchName) {
    Searcher old = getSearchByName(searchName);
    if(old != null) deleteSearch(old);
  }

  //  This thread / timer handles the periodic searching that the
  //  search feature allows to be set up.  Check only once a minute,
  //  because searching isn't a very time-critical feature.
  public static void start() {
    if (sTimer == null) {
      sTimer = new TimerHandler(getInstance(), Constants.ONE_MINUTE);
      sTimer.setName("Searches");
      sTimer.start();
    }
  }
}
TOP

Related Classes of com.jbidwatcher.search.SearchManager$TitleSearcher

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.