package org.openntf.domino.tests.ntf;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
import org.openntf.domino.Database;
import org.openntf.domino.Document;
import org.openntf.domino.Session;
import org.openntf.domino.helpers.DocumentScanner;
import org.openntf.domino.thread.DominoThread;
import org.openntf.domino.types.CaseInsensitiveString;
import org.openntf.domino.utils.DominoUtils;
import org.openntf.domino.utils.Factory;
import org.openntf.domino.utils.Factory.SessionType;
public class DocumentScannerScratchTest {
@SuppressWarnings("unused")
private static final Logger log_ = Logger.getLogger(DocumentScannerScratchTest.class.getName());
public DocumentScannerScratchTest() {
}
static class Doer implements Runnable {
@Override
public void run() {
long start = System.nanoTime();
@SuppressWarnings("unused")
DateFormat df = new SimpleDateFormat("yyyyMMddhhmmss");
int docCount = 0;
DocumentScanner scanner = new DocumentScanner();
scanner.setTrackTokenLocation(true);
scanner.setTrackFieldTokens(true);
scanner.setTrackFieldTypes(false);
scanner.setTrackFieldValues(false);
scanner.setTrackTokenFreq(false);
Session s = Factory.getSession(SessionType.CURRENT);
Database db = s.getDatabase("", "help/help9_admin.nsf");
System.out.println("Beginning scan of " + db.getApiPath());
for (Document doc : db.getAllDocuments()) {
scanner.processDocument(doc);
docCount++;
}
System.out.println("Scanner reports processing " + scanner.getDocCount() + " documents, " + scanner.getItemCount()
+ " items, and " + scanner.getTokenCount() + " tokens.");
System.out.println("Built field token map of " + scanner.getFieldTokenMap().size() + " entries");
Map<?, ?> tfmap = scanner.getTokenLocationMap();
System.out.println("Built token location map of " + tfmap.size() + " entries");
CaseInsensitiveString dom = new CaseInsensitiveString("domino");
if (tfmap.get(dom) != null) {
int hitCount = 0;
Map<?, ?> tlvalue = (Map<?, ?>) tfmap.get(dom);
for (Object key : tlvalue.keySet()) {
Set<?> hits = (Set<?>) tlvalue.get(key);
hitCount += hits.size();
}
System.out.println("Found " + hitCount + " hits for 'domino'");
}
long elapsed = System.nanoTime() - start;
StringBuilder sb = new StringBuilder();
sb.append("Thread " + Thread.currentThread().getName());
sb.append(" *** ALL OPERATIONS COMPLETE elapsed time: ");
sb.append(elapsed / 1000000 + "ms: processed ");
sb.append(docCount + " docs without recycling.");
System.out.println(sb.toString());
}
}
/** The Constant THREAD_COUNT. */
private static final int THREAD_COUNT = 1;
/**
* The main method.
*
* @param args
* the arguments
*/
public static void main(final String[] args) {
int delay = 500;
DominoThread[] threads = new DominoThread[THREAD_COUNT];
for (int i = 0; i < THREAD_COUNT; i++) {
threads[i] = new DominoThread(new Doer(), "Scratch Test" + i);
}
for (DominoThread thread : threads) {
thread.start();
try {
Thread.sleep(delay);
} catch (InterruptedException e1) {
DominoUtils.handleException(e1);
}
}
}
}