public boolean indexAttachmentsLocally = true;\r
public volatile IndexSignal signal;\r
private final TreeSet<String> foundWords;\r
+ int uncommittedCount = 0;\r
\r
\r
public IndexRunner(String logname, String u, String uid, String pswd, String cpswd) {\r
foundWords = new TreeSet<String>();\r
logger = new ApplicationLogger(logname);\r
- conn = new DatabaseConnection(logger, u, uid, pswd, cpswd, 300);\r
+ conn = new DatabaseConnection(logger, u, uid, pswd, cpswd, 0);\r
indexType = SCAN;\r
guid = null;\r
keepRunning = true;\r
while (keepRunning) {\r
idle=true;\r
try {\r
+ conn.commitTransaction();\r
+ uncommittedCount = 0;\r
waitSeconds(1);\r
String work = workQueue.take();\r
idle=false;\r
\r
logger.log(logger.EXTREME, "Splitting words");\r
String[] result = text.toString().split(regex);\r
+ conn.beginTransaction();\r
logger.log(logger.EXTREME, "Deleting existing words for note from index");\r
conn.getWordsTable().expungeFromWordIndex(guid, "CONTENT");\r
\r
logger.log(logger.EXTREME, "Number of words found: " +result.length);\r
- for (int j=0; j<result.length && keepRunning; j++) {\r
+ for (int j=0; j<result.length && keepRunning && !interrupt; j++) {\r
if (!result[j].trim().equals("")) {\r
logger.log(logger.EXTREME, "Result word: " +result[j].trim());\r
addToIndex(guid, result[j], "CONTENT");\r
if (Global.keepRunning) {\r
logger.log(logger.EXTREME, "Resetting note guid needed");\r
conn.getNoteTable().setIndexNeeded(guid, false);\r
- }\r
+ } \r
+ conn.commitTransaction();\r
+ uncommittedCount = 0;\r
logger.log(logger.EXTREME, "Leaving indexRunner.indexNoteContent()");\r
}\r
\r
else\r
resourceBinary = new QByteArray(r.getRecognition().getBody());\r
\r
+ conn.beginTransaction();\r
conn.getWordsTable().expungeFromWordIndex(r.getNoteGuid(), "RESOURCE");\r
// This is due to an old bug & can be removed at some point in the future 11/23/2010\r
conn.getWordsTable().expungeFromWordIndex(guid, "RESOURCE"); \r
+ conn.commitTransaction();\r
+ uncommittedCount = 0;\r
+ conn.beginTransaction();\r
\r
doc.setContent(resourceBinary);\r
QDomElement docElem = doc.documentElement();\r
\r
// look for text tags\r
QDomNodeList anchors = docElem.elementsByTagName("t");\r
- for (int i=0; i<anchors.length() && keepRunning; i++) {\r
+ for (int i=0; i<anchors.length() && keepRunning && !interrupt; i++) {\r
QDomElement enmedia = anchors.at(i).toElement();\r
String weight = new String(enmedia.attribute("w"));\r
String text = new String(enmedia.text()).toLowerCase();\r
if (!text.equals("")) {\r
conn.getWordsTable().addWordToNoteIndex(r.getNoteGuid(), text, "RESOURCE", new Integer(weight));\r
+ uncommittedCount++;\r
+ if (uncommittedCount > 100) {\r
+ conn.commitTransaction();\r
+ uncommittedCount=0;\r
+ }\r
}\r
}\r
\r
- if (Global.keepRunning && indexAttachmentsLocally) {\r
+ if (Global.keepRunning && indexAttachmentsLocally && !interrupt) {\r
+ conn.commitTransaction();\r
+ uncommittedCount = 0;\r
+ conn.beginTransaction();\r
indexResourceContent(guid);\r
}\r
\r
if (Global.keepRunning)\r
conn.getNoteTable().noteResourceTable.setIndexNeeded(guid,false);\r
+ conn.commitTransaction();\r
+ uncommittedCount = 0;\r
}\r
\r
private void indexResourceContent(String guid) {\r
private void indexResourceRTF(Resource r) {\r
\r
QTemporaryFile f = writeResource(r.getData());\r
- if (!keepRunning) {\r
+ if (!keepRunning || interrupt) {\r
return;\r
}\r
\r
ParseContext context = new ParseContext();\r
parser.parse(input, textHandler, metadata, context);\r
String[] result = textHandler.toString().split(regex);\r
- for (int i=0; i<result.length && keepRunning; i++) {\r
+ for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
}\r
input.close();\r
private void indexResourceODF(Resource r) {\r
\r
QTemporaryFile f = writeResource(r.getData());\r
- if (!keepRunning) {\r
+ if (!keepRunning || interrupt) {\r
return;\r
}\r
\r
ParseContext context = new ParseContext();\r
parser.parse(input, textHandler, metadata, context);\r
String[] result = textHandler.toString().split(regex);\r
- for (int i=0; i<result.length && keepRunning; i++) {\r
+ for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
}\r
input.close();\r
private void indexResourceOffice(Resource r) {\r
\r
QTemporaryFile f = writeResource(r.getData());\r
- if (!keepRunning) {\r
+ if (!keepRunning || interrupt) {\r
return;\r
}\r
\r
ParseContext context = new ParseContext();\r
parser.parse(input, textHandler, metadata, context);\r
String[] result = textHandler.toString().split(regex);\r
- for (int i=0; i<result.length && keepRunning; i++) {\r
+ for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
}\r
input.close();\r
private void indexResourcePDF(Resource r) {\r
\r
QTemporaryFile f = writeResource(r.getData());\r
- if (!keepRunning) {\r
+ if (!keepRunning || interrupt) {\r
return;\r
}\r
\r
ParseContext context = new ParseContext();\r
parser.parse(input, textHandler, metadata, context);\r
String[] result = textHandler.toString().split(regex);\r
- for (int i=0; i<result.length && keepRunning; i++) {\r
+ for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
}\r
input.close();\r
private void indexResourceOOXML(Resource r) {\r
\r
QTemporaryFile f = writeResource(r.getData());\r
- if (!keepRunning) {\r
+ if (!keepRunning || interrupt) {\r
return;\r
}\r
\r
ParseContext context = new ParseContext();\r
parser.parse(input, textHandler, metadata, context);\r
String[] result = textHandler.toString().split(regex);\r
- for (int i=0; i<result.length && keepRunning; i++) {\r
+ for (int i=0; i<result.length && keepRunning && !interrupt; i++) {\r
addToIndex(r.getNoteGuid(), result[i], "RESOURCE");\r
}\r
input.close();\r
int index = content.indexOf("<en-crypt");\r
int endPos;\r
boolean tagFound = true;\r
- while (tagFound && keepRunning) {\r
+ while (tagFound && keepRunning && !interrupt) {\r
endPos = content.indexOf("</en-crypt>", index)+11;\r
if (endPos > -1 && index > -1) {\r
content = content.substring(0,index)+content.substring(endPos);\r
foundWords.add(buffer.toString());\r
foundWords.add(word);\r
conn.getWordsTable().addWordToNoteIndex(guid, buffer.toString(), type, 100);\r
+ uncommittedCount++;\r
+ if (uncommittedCount > 100) {\r
+ conn.commitTransaction();\r
+ uncommittedCount=0;\r
+ }\r
}\r
}\r
return;\r
}\r
for (int i=0; i<notes.size() && !interrupt && keepRunning; i++) {\r
guid = notes.get(i);\r
- if (guid != null && keepRunning) {\r
+ if (guid != null && keepRunning && !interrupt) {\r
waitSeconds(1);\r
indexNoteContent();\r
}\r
\r
private void waitSeconds(int len) {\r
long starttime = 0; // variable declared\r
+ if (starttime == 0)\r
+ return;\r
//...\r
// for the first time, remember the timestamp\r
starttime = System.currentTimeMillis();\r