/**
   * Constructor takes a QueryConfigurationObject from which it gets the args it needs supplied
   * through agent's configuration file by InfoAgent.
   */
  public WCNForecastWeatherQueryFn(QueryConfigurationObject queryConfigObj) {
    this.queryConfigObj = queryConfigObj;
    this.siteURLString = queryConfigObj.getInfoSourceURL();
    this.display = queryConfigObj.getExtGUI();

    // I should now get the agentDebugLevel and options and
    // do some setup with them. Just do very simple for now.
    int debugLevel = queryConfigObj.getAgentDebugLevel();
    if (debugLevel == 0) setNoDebugFlags();
    else setDebugFlags();
    int options = queryConfigObj.getAgentOptionsSelect();
    if (options == 3) {
      Parser.DEBUG = true;
    } else if (options == 0) {
      WCNForecastWeatherQueryFn.FILE_READ = false;
      WCNForecastWeatherQueryFn.FILE_WRITE = false;
    } else if (options == 1) {
      WCNForecastWeatherQueryFn.FILE_READ = false;
      WCNForecastWeatherQueryFn.FILE_WRITE = true;
    } else {
      WCNForecastWeatherQueryFn.FILE_READ = true;
      WCNForecastWeatherQueryFn.FILE_WRITE = false;
    }
  }
 /**
  * ************************************************************** public synchronized void
  * setCommunicator(Communicator comm) { if (comm == null) { displayMessage("ERROR",
  * "WCNForecastWeatherQueryFn::setCommunicator " + "Null arg for Communicator was supplied"); }
  * this.comm = comm; notifyAll(); } private synchronized Communicator getCommunicator() { while
  * (comm == null) {try {wait();} catch (Exception e) {}} return comm; }
  * **************************************************************
  */
 private RetsinaCommunicator getCommunicator() {
   if (comm == null) comm = queryConfigObj.getCommunicator(); // may block waiting
   return comm;
 }