package proj.zoie.tools.luke; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import java.io.IOException; import org.apache.lucene.index.IndexReader; import org.getopt.luke.LukePlugin; import proj.zoie.api.DocIDMapper; import proj.zoie.api.ZoieIndexReader; public class ZoiePlugin extends LukePlugin { private ZoieIndexReader _zoieReader; public ZoiePlugin() { _zoieReader = null; } @Override public String getPluginHome() { return "Zoie Luke Plugin"; } @Override public String getPluginInfo() { return "mailto:john.wang@gmail.com"; } @Override public String getPluginName() { return "Zoie Luke Plugin"; } @Override public String getXULName() { return "/zoie-luke.xml"; } @Override public boolean init() throws Exception { return true; } public void toUID(){ Object srcArea = app.find(myUi, "docids"); String val = app.getString(srcArea, "text"); if (val!=null && val.length() > 0){ try{ String[] docids = val.split(","); IntList idList = new IntArrayList(docids.length); for (String docid : docids){ idList.add(Integer.parseInt(docid.trim())); } int[] idArray = idList.toIntArray(); StringBuffer sbuf = new StringBuffer(); ZoieIndexReader zoieReader = getZoieReader(); boolean first = true; for (int docid : idArray){ long uid; try{ uid = zoieReader.getUID(docid); } catch(Exception e){ uid=-1; } if (!first){ sbuf.append(", "); } else{ first = false; } sbuf.append(uid); } Object targetArea = app.find(myUi,"uids"); app.setString(targetArea, "text", sbuf.toString()); } catch(Exception e){ e.printStackTrace(); app.showStatus("invalid input string: "+val); } } } public void toDocID(){ Object srcArea = app.find(myUi, "uids"); String val = app.getString(srcArea, "text"); if (val!=null && val.length() > 0){ try{ String[] uids = val.split(","); IntList idList = new IntArrayList(uids.length); for (String uid : uids){ idList.add(Integer.parseInt(uid.trim())); } int[] idArray = idList.toIntArray(); StringBuffer sbuf = new StringBuffer(); ZoieIndexReader zoieReader = getZoieReader(); DocIDMapper mapper = zoieReader.getDocIDMaper(); boolean first = true; for (int uid : idArray){ int docid; try{ docid = mapper.getDocID(uid); } catch(Exception e){ docid=-1; } if (!first){ sbuf.append(", "); } else{ first = false; } sbuf.append(docid); } Object targetArea = app.find(myUi,"docids"); app.setString(targetArea, "text", sbuf.toString()); } catch(Exception e){ e.printStackTrace(); app.showStatus("invalid input string: "+val); } } } private ZoieIndexReader getZoieReader() throws IOException{ if (_zoieReader == null){ IndexReader innerReader = super.getIndexReader(); _zoieReader = ZoieIndexReader.open(innerReader); } return _zoieReader; } }