/**
*
*/
package org.openntf.domino.big.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Logger;
/**
* @author Nathan T. Freeman
*
*/
public class IndexResults {
@SuppressWarnings("unused")
private static final Logger log_ = Logger.getLogger(IndexResults.class.getName());
@SuppressWarnings("unused")
private static final long serialVersionUID = 1L;
protected Map<CharSequence, AtomicInteger> terms_;
protected Map<CharSequence, AtomicInteger> dbids_;
protected Map<CharSequence, AtomicInteger> items_;
protected Map<CharSequence, AtomicInteger> forms_;
protected final List<IndexHit> hits_;
public IndexResults(final List<IndexHit> hits) {
hits_ = hits;
}
public void merge(final IndexResults result) {
if (!result.hits_.isEmpty()) {
for (IndexHit hit : result.hits_) {
if (!hits_.contains(hit)) {
hits_.add(hit);
}
}
}
}
public void intersect(final IndexResults result) {
if (result.hits_.isEmpty()) {
hits_.clear();
} else {
ArrayList<IndexHit> remove = new ArrayList<IndexHit>();
for (IndexHit hit : hits_) {
if (!result.hits_.contains(hit)) {
remove.add(hit);
}
}
hits_.removeAll(remove);
}
}
public Map<CharSequence, AtomicInteger> getTerms() {
if (terms_ == null) {
terms_ = new HashMap<CharSequence, AtomicInteger>();
for (IndexHit hit : hits_) {
String term = hit.getTerm();
if (terms_.containsKey(term)) {
terms_.get(term).incrementAndGet();
} else {
terms_.put(term, new AtomicInteger(1));
}
}
}
return terms_;
}
public Map<CharSequence, AtomicInteger> getDbids() {
if (dbids_ == null) {
dbids_ = new HashMap<CharSequence, AtomicInteger>();
for (IndexHit hit : hits_) {
String term = hit.getDbid();
if (dbids_.containsKey(term)) {
dbids_.get(term).incrementAndGet();
} else {
dbids_.put(term, new AtomicInteger(1));
}
}
}
return dbids_;
}
public Map<CharSequence, AtomicInteger> getForms() {
if (forms_ == null) {
forms_ = new HashMap<CharSequence, AtomicInteger>();
for (IndexHit hit : hits_) {
String term = hit.getDbid() + hit.getForm();
if (forms_.containsKey(term)) {
forms_.get(term).incrementAndGet();
} else {
forms_.put(term, new AtomicInteger(1));
}
}
}
return forms_;
}
public Map<CharSequence, AtomicInteger> getItems() {
if (items_ == null) {
items_ = new HashMap<CharSequence, AtomicInteger>();
for (IndexHit hit : hits_) {
String term = hit.getDbid() + hit.getItem();
if (items_.containsKey(term)) {
items_.get(term).incrementAndGet();
} else {
items_.put(term, new AtomicInteger(1));
}
}
}
return items_;
}
public List<IndexHit> getHits() {
return hits_;
}
public Integer getTermCount(final String term) {
AtomicInteger ai = getTerms().get(term);
return ai == null ? 0 : ai.get();
}
public Integer getDbidCount(final String dbid) {
AtomicInteger ai = getDbids().get(dbid);
return ai == null ? 0 : ai.get();
}
public Integer getFormCount(final String form) {
AtomicInteger ai = getForms().get(form);
return ai == null ? 0 : ai.get();
}
public Integer getItemCount(final String item) {
AtomicInteger ai = getItems().get(item);
return ai == null ? 0 : ai.get();
}
}