package com.knowgate.syndication.crawler;
import java.util.Date;
import java.util.Properties;
import java.util.ListIterator;
import java.util.concurrent.ConcurrentLinkedQueue;
import com.knowgate.storage.Table;
import com.knowgate.storage.Record;
import com.knowgate.storage.RecordSet;
import com.knowgate.storage.DataSource;
import com.knowgate.clocial.StorageManager;
import com.knowgate.syndication.SyndSearch;
import com.knowgate.syndication.crawler.SearchRunner;
public class SearchDaemon {
private static ConcurrentLinkedQueue<String> oQueuedSearches = new ConcurrentLinkedQueue<String>();
public static void main (String[] aForceResearch) throws Exception {
StorageManager oStMan = new StorageManager();
Date dtNow = new Date();
DataSource oDts = null;
Table oTbl = null;
RecordSet oQue;
ListIterator<Record> oIter;
Properties oProps = oStMan.getProperties();
oProps.put("shortdate","dd/MM/yyyy");
if (aForceResearch!=null) {
oDts = oStMan.getDataSource();
for (int s=0; s<aForceResearch.length; s++) {
new SearchRunner(aForceResearch[s], oProps).run(oDts);
}
oStMan.free(oDts);
} // fi
try {
if (aForceResearch==null) {
oDts = oStMan.getDataSource();
oTbl = oDts.openTable(new SyndSearch(oDts));
oQue = oTbl.fetch("dt_next_run", "IS NULL");
oIter = oQue.listIterator();
while (oIter.hasNext()) {
Record oRec = oIter.next();
oRec.put("dt_next_run", dtNow);
oRec.store(oTbl);
} // wend
oTbl.close();
oTbl = oDts.openTable(new SyndSearch(oDts));
oQue = oTbl.fetch("dt_next_run", null, dtNow);
oIter = oQue.listIterator();
while (oIter.hasNext()) {
oQueuedSearches.add(oIter.next().getString("tx_sought"));
} // wend
oTbl.close();
oTbl = null;
SearchRunner oRunner = new SearchRunner("",oStMan.getProperties());
while (!oQueuedSearches.isEmpty()) {
oRunner.setQueryString(oQueuedSearches.poll());
oRunner.run(oDts);
} // wend
oStMan.free(oDts);
oDts = null;
} // fi
} finally {
if (oTbl!=null) oTbl.close();
if (oDts!=null) oStMan.free(oDts);
}
}
}