package org.openntf.domino.big; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Observable; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import org.openntf.domino.Database; import org.openntf.domino.Document; import org.openntf.domino.Session; import org.openntf.domino.View; import org.openntf.domino.big.impl.IScannerStateManager; import org.openntf.domino.big.impl.IndexHit; import org.openntf.domino.helpers.DocumentScanner; import org.openntf.domino.types.CaseInsensitiveString; public interface IndexDatabase extends IScannerStateManager { public static final String TERM_VIEW_NAME = "$TermIndex"; public static final String TERM_FORM_NAME = "$TermDoc"; public static final String TERM_KEY_NAME = "TermKey"; public static final String TERM_MAP_PREFIX = "TermMap_"; public static final String VALUE_FORM_NAME = "$ValueDoc"; public static final String VALUE_KEY_NAME = "ValueKey"; public static final String VALUE_MAP_PREFIX = "ValueMap_"; public static final String DBID_NAME = "DbidList"; public static final String DB_VIEW_NAME = "$DbIndex"; public static final String DB_FORM_NAME = "$DbDoc"; public static final String DB_KEY_NAME = "DbKey"; public static final String DB_TOKEN_LOCATION_NAME = "TokenLocationMap"; public static final String DB_NAME_LOCATION_NAME = "NameLocationMap"; public static final String DB_FIELD_TOKEN_NAME = "FieldTokenMap"; public static final String DB_LAST_INDEX_NAME = "LastIndexTime"; public static final String DB_DOC_LIST_NAME = "DocumentList"; public static final String DB_TITLE_NAME = "Title"; public static final String DB_DOC_SORTER_NAME = "DocumentSorter"; public static final String[] DEFAULT_STOP_WORDS_EN = "a,able,about,across,after,all,almost,also,am,among,an,and,any,are,as,at,be,because,been,but,by,can,cannot,could,dear,did,do,does,either,else,ever,every,for,from,get,got,had,has,have,he,her,hers,him,his,how,however,i,if,in,into,is,it,its,just,least,let,like,likely,may,me,might,most,must,my,neither,no,nor,not,of,off,often,on,only,or,other,our,own,rather,said,say,says,she,should,since,so,some,than,that,the,their,them,then,there,these,they,this,tis,to,too,twas,us,wants,was,we,were,what,when,where,which,while,who,whom,why,will,with,would,yet,you,your" .split(","); public static class Utils { public static Set<CharSequence> toCISSet(final Object value) { Set<CharSequence> result = new HashSet<CharSequence>(); if (value == null) return result; if (value instanceof Iterable) { Iterable values = (Iterable) value; for (Object o : values) { if (o instanceof CaseInsensitiveString) { result.add((CaseInsensitiveString) o); } else if (o instanceof CharSequence) { result.add(new CaseInsensitiveString(((CharSequence) o).toString())); } else { result.add(new CaseInsensitiveString(String.valueOf(o))); } } } else if (value instanceof CaseInsensitiveString) { result.add((CaseInsensitiveString) value); } else if (value instanceof CharSequence) { result.add(new CaseInsensitiveString(((CharSequence) value).toString())); } else { result.add(new CaseInsensitiveString(String.valueOf(value))); } return result; } public static Set<CharSequence> toStringSet(final Object value) { Set<CharSequence> result = new HashSet<CharSequence>(); if (value == null) return result; if (value instanceof Iterable) { Iterable values = (Iterable) value; for (Object o : values) { if (o instanceof String) { result.add((String) o); } else if (o instanceof CaseInsensitiveString) { result.add(((CaseInsensitiveString) o).toString()); } else { result.add(String.valueOf(o)); } } } else if (value instanceof String) { result.add((String) value); } else if (value instanceof CharSequence) { result.add(((CharSequence) value).toString()); } else { result.add(String.valueOf(value)); } return result; } public static List<String> dbidCollToTitle(final Session session, final String serverName, final Collection<String> dbids) { List<String> result = new ArrayList<String>(); for (String dbid : dbids) { Database db = session.getDatabase(serverName, dbid); if (db != null) { result.add(db.getTitle() + "|" + dbid); } } return result; } public static List<String> dbMapToCheckbox(final Session session, final String serverName, final Map<String, AtomicInteger> dbMap) { List<String> result = new ArrayList<String>(); for (String dbid : dbMap.keySet()) { Database db = session.getDatabase(serverName, dbid); if (db != null) { result.add(db.getTitle() + " (" + dbMap.get(dbid) + ")|" + dbid); } } return result; } public static List<String> itemMapToCheckbox(final Map<String, AtomicInteger> itemMap) { List<String> result = new ArrayList<String>(); for (String item : itemMap.keySet()) { result.add(item.substring(16) + " (" + itemMap.get(item) + ")|" + item.substring(16)); } return result; } public static List<String> formMapToCheckbox(final Map<String, AtomicInteger> formMap) { List<String> result = new ArrayList<String>(); for (String form : formMap.keySet()) { result.add(form.substring(16) + " (" + formMap.get(form) + ")|" + form.substring(16)); } return result; } } public abstract void setCaseSensitive(boolean value); public abstract boolean getCaseSensitive(); public abstract void setDatabase(Database indexDb); public abstract Database getIndexDb(); public abstract Set<CharSequence> getStopList(); public abstract void setStopList(Set<CharSequence> list); public abstract View getTermView(); public abstract List<String> getTermStarts(String startsWith, int count); public abstract View getDbView(); public abstract Document getDbDocument(CharSequence dbid); public abstract Document getTermDocument(CharSequence token); public abstract Document getNameDocument(CharSequence name); public abstract Document getValueDocument(CharSequence value); public abstract void scanServer(Session session, String serverName); public abstract DocumentScanner scanDatabase(Database db); public abstract DocumentScanner scanDatabase(Database db, DocumentScanner scanner); public abstract List<String> getTermDbids(CharSequence term); public abstract int getTermHitCount(String term); public abstract Set<CharSequence> getTermItemsInDbids(String term, Collection<String> dbids); public abstract List<IndexHit> getTermResults(CharSequence term, int limit, Set<CharSequence> dbids, Set<CharSequence> itemNames, Set<CharSequence> forms); public abstract Set<CharSequence> getTermUnidInDbsItems(String term, Collection<String> dbids, Collection<?> itemNames); public abstract Set<String> getTermLinksInDbsItems(Session session, String serverName, String term, Collection<CharSequence> dbids, Collection<?> itemNames); public abstract Set<CharSequence> getTermUnidInItems(CharSequence term, Collection<String> itemNames); public abstract Set<String> getTermUnidInDbids(CharSequence term, Collection<String> dbids); public abstract Map<String, Set<CharSequence>> getTermItemMap(String term); public abstract Map<CharSequence, Set<CharSequence>> getTermUnidMap(CharSequence term); // public abstract void setLastIndexDate(Object mapKey, Date date); // // public abstract Date getLastIndexDate(Object mapKey); // // public abstract Map<CharSequence, Set<CharSequence>> restoreTokenLocationMap(CharSequence token, Object mapKey); // // public abstract Map<CharSequence, Set<CharSequence>> restoreValueLocationMap(CharSequence value, Object mapKey); // // public abstract Map<CharSequence, Set<CharSequence>> restoreNameLocationMap(CharSequence name, Object mapKey); // public abstract void saveTokenLocationMap(CharSequence token, Object mapKey, Map<CharSequence, Set<CharSequence>> map); // public abstract void saveTokenLocationMap(Object mapKey, Map<CharSequence, Map<CharSequence, Set<CharSequence>>> fullMap, // DocumentScanner scanner); // public abstract void saveNameLocationMap(CharSequence name, Object mapKey, Map<CharSequence, Set<CharSequence>> map); // public abstract void saveNameLocationMap(Object mapKey, Map<CharSequence, Map<CharSequence, Set<CharSequence>>> fullMap, // DocumentScanner scanner); // public abstract void saveValueLocationMap(CharSequence token, Object mapKey, Map<CharSequence, Set<CharSequence>> map); // public abstract void saveValueLocationMap(Object mapKey, Map<CharSequence, Map<CharSequence, Set<CharSequence>>> fullMap, // DocumentScanner scanner); @Override public abstract void update(Observable o, Object arg); }