/** * */ package org.openntf.domino.big.impl; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.util.logging.Logger; import org.openntf.domino.Document; import org.openntf.domino.Item; import org.openntf.domino.Session; /** * @author Nathan T. Freeman * */ public class IndexHit implements Externalizable { @SuppressWarnings("unused") private static final Logger log_ = Logger.getLogger(IndexHit.class.getName()); private static final long serialVersionUID = 1L; private CharSequence term_; private CharSequence dbid_; private CharSequence item_; private CharSequence unid_; private CharSequence form_; private boolean hasReaders_ = false; public IndexHit() { } public IndexHit(final CharSequence term, final CharSequence dbid, final CharSequence item, final CharSequence listing) { term_ = term; dbid_ = dbid; item_ = item; try { unid_ = listing.toString().substring(0, 32); String readerFlag = listing.toString().substring(32, 33); hasReaders_ = readerFlag.equals("1"); form_ = listing.toString().substring(33); } catch (NullPointerException npe) { System.out.println("NullPointer for listing?"); throw new RuntimeException(npe); } catch (Exception e) { System.out.println("Exception occured parsing listing: " + listing); throw new RuntimeException(e); } } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((dbid_ == null) ? 0 : dbid_.hashCode()); result = prime * result + ((unid_ == null) ? 0 : unid_.hashCode()); return result; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(final Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; IndexHit other = (IndexHit) obj; if (dbid_ == null) { if (other.dbid_ != null) return false; } else if (!dbid_.equals(other.dbid_)) return false; if (unid_ == null) { if (other.unid_ != null) return false; } else if (!unid_.equals(other.unid_)) return false; return true; } public String getMetaversalID() { return dbid_.toString() + unid_.toString(); } // private transient Document document_; public Document getDocument(final Session session, final String serverName) { // if (document_ == null) { // document_ = session.getDocumentByMetaversalID(getMetaversalID(), serverName); // } else { // String fname = document_.getFormName(); // if (fname == null || fname.length() < 1) { // document_ = session.getDocumentByMetaversalID(getMetaversalID(), serverName); // } // } // return document_; try { return session.getDocumentByMetaversalID(getMetaversalID(), serverName); } catch (Throwable t) { return null; } } public String getHitContext(final Session session, final String serverName) { String result = ""; Document doc = getDocument(session, serverName); if (doc != null && doc.isValid() && !doc.getItems().isEmpty()) { Item hitItem = doc.getFirstItem(getItem()); if (hitItem.getTypeEx() == Item.Type.RICHTEXT) { //TODO NTF - possibly add some HTML formatting stuff... } else { } String text = hitItem.getValueString(); int pos = text.indexOf(getTerm()); if (pos > 30) { if (text.length() < 60) { result = text.substring(pos - 30, text.length()); } else { result = text.substring(pos - 30, pos + 30); } } else { if (text.length() < 60) { result = text; } else { result = text.substring(0, 60); } } } return result; } /** * @return the term */ public String getTerm() { return term_.toString(); } /** * @return the dbid */ public String getDbid() { return dbid_.toString(); } /** * @return the item */ public String getItem() { return item_.toString(); } /** * @return the unid */ public String getUnid() { return unid_.toString(); } public boolean hasReaders() { return hasReaders_; } /** * @return the form */ public String getForm() { return form_.toString(); } /* (non-Javadoc) * @see java.io.Externalizable#readExternal(java.io.ObjectInput) */ @Override public void readExternal(final ObjectInput arg0) throws IOException, ClassNotFoundException { term_ = arg0.readUTF(); dbid_ = arg0.readUTF(); item_ = arg0.readUTF(); form_ = arg0.readUTF(); unid_ = arg0.readUTF(); hasReaders_ = arg0.readBoolean(); } /* (non-Javadoc) * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput) */ @Override public void writeExternal(final ObjectOutput arg0) throws IOException { arg0.writeUTF(term_.toString()); arg0.writeUTF(dbid_.toString()); arg0.writeUTF(item_.toString()); arg0.writeUTF(form_.toString()); arg0.writeUTF(unid_.toString()); arg0.writeBoolean(hasReaders_); } }