public void resetDbs() {
    System.out.println("Resetting Star Wars test databases");
    Session session = Factory.getSession(SessionType.NATIVE);
    Database crewDb = session.getDatabase(crewPath);
    if (crewDb != null) {
      crewDb.getAllDocuments().removeAll(true);
    } else {
      Factory.println("crewDb was null");
    }
    Database movieDb = session.getDatabase(moviePath);
    if (movieDb != null) {
      movieDb.getAllDocuments().removeAll(true);
    }
    Database characterDb = session.getDatabase(charactersPath);
    if (characterDb != null) {
      characterDb.getAllDocuments().removeAll(true);
    }
    Database edgeDb = session.getDatabase(edgePath);
    if (edgeDb != null) {
      edgeDb.getAllDocuments().removeAll(true);
    }

    //		Database nabDb = session.getDatabase("", "names.nsf");
    //		Document ntfDoc = nabDb.getDocumentByUNID(ntfUnid);
    //		ntfDoc.removeItem("_COUNT_OPEN_OUT_rates");
    //		ntfDoc.removeItem("_OPEN_OUT_rates");
    //		ntfDoc.removeItem("_ODA_GRAPHTYPE");
    //		ntfDoc.save();

    session.recycle();
    System.gc();
  }
 protected org.openntf.domino.Name testName(final String what, final NotesBug... notesbug)
     throws NotesException {
   Session s = Factory.getSession(SessionType.CURRENT);
   lotus.domino.Session ls = s.getFactory().toLotus(s);
   org.openntf.domino.Name o = s.createName(what);
   lotus.domino.Name n = ls.createName(what);
   compareNames(n.getCanonical(), n, o, notesbug);
   return o;
 }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.Replication#getCutoffDate()
  */
 @Override
 public DateTime getCutoffDate() {
   try {
     return Factory.fromLotus(getDelegate().getCutoffDate(), DateTime.class, this);
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
 protected Session getSession() {
   try {
     Session session = Factory.fromLotus(NotesFactory.createSession(), Session.class, null);
     return session;
   } catch (Throwable t) {
     DominoUtils.handleException(t);
     return null;
   }
 }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.DirectoryNavigator#getNthItemValue(int)
  */
 @Override
 public Vector<Object> getNthItemValue(int n) {
   try {
     return Factory.wrapColumnValues(getDelegate().getNthItemValue(n));
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.Directory#createNavigator()
  */
 @Override
 public DirectoryNavigator createNavigator() {
   try {
     return Factory.fromLotus(getDelegate().createNavigator(), DirectoryNavigator.class, this);
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.Replication#getEntry(java.lang.String, java.lang.String)
  */
 @Override
 public ReplicationEntry getEntry(final String source, final String destination) {
   try {
     return Factory.fromLotus(
         getDelegate().getEntry(source, destination), ReplicationEntry.class, this);
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.Replication#getEntries()
  */
 @Override
 public Vector<org.openntf.domino.ReplicationEntry> getEntries() {
   try {
     return Factory.fromLotusAsVector(
         getDelegate().getEntries(), org.openntf.domino.ReplicationEntry.class, this);
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.NotesProperty#getValues()
  */
 @Override
 public Vector<Object> getValues() {
   try {
     // Does this even use DateTime? Who knows?
     return Factory.wrapColumnValues(getDelegate().getValues(), this.getAncestorSession());
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
 private Document createDocument() {
   if (db == null) db = Factory.getSession().getDatabase("", "log.nsf");
   try {
     Document doc = db.createDocument();
     return doc;
   } catch (NullPointerException npe) {
     System.err.println("Cannot create demo doc. Is your server running?");
     return null;
   }
 }
  @Override
  public void run() {
    try {

      for (Fixes fix : Fixes.values()) Factory.getSession().setFixEnable(fix, true);
      DominoUtils.setBubbleExceptions(true);

      File file = new File("tests/");
      FilenameFilter filefilter =
          new FilenameFilter() {
            public boolean accept(final File dir, final String name) {
              return name.endsWith(".txt") || dir.isDirectory();
            }
          };

      // Reading directory contents
      File[] files = file.listFiles(filefilter);

      for (int i = 0; i < files.length; i++) {
        System.out.println(files[i]);
        BufferedReader br = new BufferedReader(new FileReader(files[i]));
        String line;
        while ((line = br.readLine()) != null) {
          line = line.trim();
          if (Strings.isBlankString(line)) {

          } else if (line.startsWith("#")) {
            NTF(line);
          } else {
            execute(line, true, true, true);
          }
        }
        br.close();
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
    // System.out.println(Factory.dumpCounters(true));
    db = null;
    Factory.terminate();
    System.out.println(Factory.dumpCounters(true));
  }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.Directory#lookupNames(java.lang.String, java.lang.String, java.lang.String)
  */
 @Override
 public DirectoryNavigator lookupNames(String view, String name, String item) {
   try {
     return Factory.fromLotus(
         getDelegate().lookupNames(view, name, item), DirectoryNavigator.class, this);
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
 /*
  * (non-Javadoc)
  *
  * @see org.openntf.domino.Directory#lookupAllNames(java.lang.String, java.util.Vector)
  */
 @SuppressWarnings("unchecked")
 @Override
 public DirectoryNavigator lookupAllNames(String view, Vector items) {
   try {
     return Factory.fromLotus(
         getDelegate().lookupAllNames(view, items), DirectoryNavigator.class, this);
   } catch (NotesException e) {
     DominoUtils.handleException(e);
     return null;
   }
 }
  /**
   * Determines the sessionType under which the current runnable should run. The first non-null
   * value of the following list is returned
   *
   * <ul>
   *   <li>If the runnable implements <code>IDominoRunnable</code>: result of <code>getSessionType
   *       </code>
   *   <li>the value of {@link SessionType} Annotation
   *   <li>DominoSessionType.DEFAULT
   * </ul>
   *
   * @param task the runnable to determine the DominoSessionType
   */
  protected synchronized void init(final Object task) {
    threadInitializer =
        ServiceLocator.findApplicationService(ThreadInitializerFactory.class).create();
    request = LifeCycleManager.getCurrentRequest();
    if (request == null) {
      request = new RequestImpl("DominoTasklet: " + task.getClass().getName());
    } else {
      request = request.clone("DominoTasklet: " + task.getClass().getName());
    }
    DominoTasklet annot = task.getClass().getAnnotation(DominoTasklet.class);
    if (annot != null) {
      if (sessionFactory == null) {
        switch (annot.session()) {
          case CLONE:
            sessionFactory = Factory.getSessionFactory(SessionType.CURRENT);
            break;

          case CLONE_FULL_ACCESS:
            sessionFactory = Factory.getSessionFactory(SessionType.CURRENT_FULL_ACCESS);
            break;

          case FULL_ACCESS:
            sessionFactory = Factory.getSessionFactory(SessionType.FULL_ACCESS);
            break;

          case NATIVE:
            sessionFactory = Factory.getSessionFactory(SessionType.NATIVE);
            break;

          case NONE:
            sessionFactory = null;
            break;

          case SIGNER:
            sessionFactory = Factory.getSessionFactory(SessionType.SIGNER);
            break;

          case SIGNER_FULL_ACCESS:
            sessionFactory = Factory.getSessionFactory(SessionType.SIGNER_FULL_ACCESS);
            break;

          case TRUSTED:
            sessionFactory = Factory.getSessionFactory(SessionType.TRUSTED);
            break;

          default:
            break;
        }
        if ((annot.session() != DominoTasklet.Session.NONE) && sessionFactory == null) {
          throw new IllegalStateException("Could not create a Fatory for " + annot.session());
        }
      }
    }
  }
    @Override
    public void run() {
      long start = System.nanoTime();

      Session s = Factory.getSession();
      Database db = s.getDatabase("", "events4.nsf");
      Base.lock(s, db);

      int delay = 500;
      DominoChildThread[] threads = new DominoChildThread[THREAD_COUNT];
      Map<String, lotus.domino.Base> context = new HashMap<String, lotus.domino.Base>();
      context.put("session", s);
      context.put("database", db);
      for (int i = 0; i < THREAD_COUNT; i++) {
        threads[i] = new DominoChildThread(new Doer(), "Scratch Test " + i);
        threads[i].setContext(context);
      }

      for (DominoChildThread thread : threads) {
        thread.start();
        try {
          Thread.sleep(delay);
        } catch (InterruptedException e1) {
          DominoUtils.handleException(e1);
        }
      }

      for (DominoChildThread thread : threads) {
        try {
          thread.join();
        } catch (InterruptedException e) {
          DominoUtils.handleException(e);
        }
      }

      for (DominoChildThread thread : threads) {
        thread.close();
      }

      Base.unlock(s, db);

      // boolean keepGoing = true;
      // while (keepGoing) {
      // for (Thread t : threads) {
      // keepGoing = (keepGoing || t.isAlive());
      // }
      // Thread.yield();
      // }

    }
 @Override
 public RET call() throws Exception {
   threadInitializer.initThread();
   try {
     LifeCycleManager.beforeRequest(request);
     try {
       Factory.setSessionFactory(sessionFactory, SessionType.CURRENT);
       return inner.call();
     } catch (Exception e) {
       System.err.println("Error while executing " + inner.getClass().getName());
       e.printStackTrace();
       throw e;
     } finally {
       LifeCycleManager.afterRequest();
     }
   } finally {
     threadInitializer.termThread();
   }
 }
 /** @deprecated needed for {@link Externalizable} - do not use! */
 @Deprecated
 public DateTime() {
   // it does not matter which session we use here, so we use the current one!
   super(null, Factory.getSession(SessionType.CURRENT), NOTES_TIME);
 }
  protected void execute(
      final String line, final boolean testLotus, final boolean testDoc, final boolean testMap) {
    // TODO Auto-generated method stub

    List<Object> ntfDocResult = null;
    List<Object> ntfMapResult = null;
    List<Object> lotusResult = null;
    Throwable ntfError = null;
    boolean lotusFailed = false;
    boolean parserFailed = false;
    // Setup procedure, prepare the demo docs & maps
    StringBuffer errors = new StringBuffer();

    double rnd = Math.random();
    Document ntfDoc = createDocument();
    Document lotusDoc = createDocument();
    Map<String, Object> ntfMap = new HashMap<String, Object>();

    fillDemoDoc(ntfDoc, rnd);
    fillDemoDoc(lotusDoc, rnd);
    fillDemoDoc(ntfMap, rnd);
    lotus.domino.Session rawSession = Factory.toLotus(Factory.getSession());
    lotus.domino.Document rawDocument = Factory.toLotus(lotusDoc);
    if (testLotus) {
      try {

        lotusResult = rawSession.evaluate(line, rawDocument);
      } catch (NotesException e) {
        errors.append(LOTUS("\tLotus failed: ") + ERROR(e) + "\n");
        lotusFailed = true;
      } catch (Throwable t) {
        System.err.println(ERROR("FATAL") + LOTUS("\tLotus failed: ") + ERROR(t));
      }
    }

    // benchmark the AtFormulaParser
    ASTNode ast = null;
    FormulaParser parser = Formulas.getParser();
    try {
      ast = parser.parse(line);
    } catch (FormulaParseException e) {
      errors.append(NTF("\tParser failed: ") + ERROR(e) + "\n");
      e.printStackTrace();
      parserFailed = true;
    } catch (Throwable t) {
      System.err.println(ERROR("FATAL") + NTF("\tParser failed: ") + ERROR(t));
      t.printStackTrace();
    }

    if (!parserFailed) {
      if (testDoc) {
        try {
          FormulaContext ctx1 = Formulas.createContext(ntfDoc, parser);
          ntfDocResult = ast.solve(ctx1);
        } catch (EvaluateException e) {
          errors.append(NTF("\tDoc-Evaluate failed: ") + ERROR(e) + "\n");
          ntfError = e;
          parserFailed = true;
        } catch (Throwable t) {
          System.err.println(ERROR("FATAL") + NTF("\tDoc-Evaluate failed: ") + ERROR(t));
          t.printStackTrace();
        }
      }
      if (testMap) {
        try {
          // benchmark the evaluate with a map as context
          FormulaContext ctx2 = Formulas.createContext(ntfMap, parser);
          ntfMapResult = ast.solve(ctx2);
        } catch (EvaluateException e) {
          errors.append(NTF("\tMap-Evaluate failed: ") + ERROR(e) + "\n");
          ntfError = e;
          parserFailed = true;
        } catch (Throwable t) {
          System.err.println(ERROR("FATAL") + NTF("\tMap-Evaluate failed: ") + ERROR(t));
          t.printStackTrace();
        }
      }
    }

    if (lotusFailed && parserFailed) {
      System.out.println(SUCCESS() + dump(line + " = UNDEFINED"));

      return;
    }

    if (testLotus && testDoc) {
      if (compareList(ntfDocResult, lotusResult)) {
        System.out.println(SUCCESS() + line + " = " + dump(ntfDocResult));
      } else {
        System.err.println(FAIL() + NTF("DOC:") + line);
        System.err.println(
            "\tResult:   "
                + dump(ntfDocResult)
                + " Size: "
                + ((ntfDocResult == null) ? 0 : ntfDocResult.size()));
        System.err.println(
            "\tExpected: "
                + dump(lotusResult)
                + " Size: "
                + ((lotusResult == null) ? 0 : lotusResult.size()));
        if (parserFailed || lotusFailed) {
          System.err.println(errors.toString());
          if (ntfError != null) {
            ntfError.printStackTrace(System.err);
          }
        }
        BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
        try {
          console.readLine();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    } else {
      if (parserFailed) {
        ntfError.printStackTrace();
      }
      System.err.println(
          "\tDocResult:   "
              + dump(ntfDocResult)
              + " Size: "
              + ((ntfDocResult == null) ? 0 : ntfDocResult.size()));
      System.err.println(
          "\tMapResult:   "
              + dump(ntfMapResult)
              + " Size: "
              + ((ntfMapResult == null) ? 0 : ntfMapResult.size()));
    }
    System.out.println(NTF("Read fields\t") + ast.getReadFields());
    System.out.println(NTF("Modified fields\t") + ast.getModifiedFields());
    System.out.println(NTF("Variables\t") + ast.getVariables());
    System.out.println(NTF("Functions\t") + ast.getFunctions());
  }
 /**
  * Gets the Domino program folder (notes for XPiNC app running locally)
  *
  * @return String domino folder
  * @since org.openntf.domino.xsp 2.5.0
  */
 public String getProgramFolder() {
   String filename = Factory.getProgramPath();
   filename = filename.replace("\\", "/");
   if (!filename.endsWith("/")) filename += "/";
   return filename;
 }