/** * * Exposes XMLRPC functionality contained within. * * @license * */ package com.knowledgetree.indexer; import com.knowledgetree.lucene.TokenAuthenticationException; // TODO: ktid has been added for future use! // idea is that KT Live can pass ktid, which would mean one indexing server could manage multiple // kt installations, but the indexes are managed based on the ktid. public class IndexerInterface { /** * get some basic statistics from Lucene * * @return * @throws Exception */ public String getStatistics(String ktid, String token) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } return manager.getStatistics(); } /** * check if the document exists * * @param documentId * @return * @throws Exception */ public boolean documentExists(String ktid,String token, int documentId) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } try { return manager.documentExists(documentId); } catch (Exception ex) { manager.getLogger().error(ex.getMessage()); return false; } } /** * adds the document to the 'internal queue * * @param documentId * @param contentFilename * @param propertiesFilename * @return * @throws Exception */ public int addDocument(String ktid,String token,int documentId, String contentFilename, String discussion, String title, String version) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } try { manager.getLogger().debug("addDocument("+documentId + "," + contentFilename + ",...)"); manager.indexDocument(documentId, contentFilename, discussion, title, version); } catch(Exception ex) { manager.getLogger().error(ex.getMessage()); return -1; } return 0; } /** * Update the discussion on a document * * @param documentId * @param discussion * @return int * @throws Exception */ public int updateDiscussion(String ktid,String token,int documentId, String discussion) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } try { manager.getLogger().debug("updateDiscussion("+documentId + ",...)"); manager.updateDiscussion(documentId, discussion); } catch(Exception ex) { manager.getLogger().error(ex.getMessage()); return -1; } return 0; } /** * remove the document from Lucene * * @param documentId * @return * @throws Exception */ public int deleteDocument(String ktid,String token,int documentId) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } manager.getLogger().debug("deleteDocument("+documentId + ")"); try { manager.deleteDocument(documentId); } catch (Exception ex) { manager.getLogger().error(ex.getMessage()); return -1; } return 0; } /** * optimise the lucene index * * @return * @throws Exception */ public int optimise(String ktid,String token) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } manager.getLogger().debug("optimise()"); try { manager.optimise(); manager.getLogger().debug("optimise() done"); } catch (Exception ex) { manager.getLogger().error(ex.getMessage()); return -1; } return 0; } /** * run a query through lucene. * returns a JSON result structure as it is really very easy to parse! * * @param query * @return string * @throws Exception */ public String query(String ktid,String token,String query) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } manager.getLogger().debug("query("+query+")"); try { QueryHit[] docs = manager.query(query, true); return QueryHit.toJSON(docs); } catch (Exception ex) { manager.getLogger().error(ex.getClass().getName() + ":" + ex.getMessage()); return null; } } /** * Returns the text for a specific document. * @param documentId * @return * @throws Exception */ public String getText(String ktid,String token,int documentId) throws Exception { IndexerManager manager = IndexerManager.get(); if (!manager.authenticate(token)) { throw new TokenAuthenticationException(token); } manager.getLogger().debug("getText("+documentId+")"); String result = manager.getText(documentId); return result; } }