package org.Webgatherer.Persistence.InputOutput; import com.google.inject.Inject; import org.Webgatherer.CoreEngine.Core.ThreadCommunication.ThreadCommunication; import org.Webgatherer.CoreEngine.Core.ThreadCommunication.ThreadCommunicationBase; import java.util.LinkedList; /** * @author Rick Dane */ public class WriterOutputQueueToFile { private PersistenceImpl_WriteToFile persWriteToFile; private int minEntryLength = 1; private int minStringArryLength = 2; @Inject public WriterOutputQueueToFile(PersistenceImpl_WriteToFile persWriteToFile) { this.persWriteToFile = persWriteToFile; } public String writeQueueToFile(String outputFilePath, ThreadCommunication threadCommunication, int indexPageQueueEntries, boolean doSplit, String splitDelim) { LinkedList<String> duplicateCheck = new LinkedList<String>(); StringBuilder strBld = new StringBuilder(); while (!threadCommunication.isOutputDataHolderEmpty()) { String[] curEntry = threadCommunication.getFromOutputDataHolder(); String writeEntry = curEntry[indexPageQueueEntries]; boolean wroteDuplicate = false; if (doSplit) { String[] split = writeEntry.split(splitDelim); if (!(split.length >= minStringArryLength)) { StringBuilder tmpStrBld = new StringBuilder(); for (String curEntr : split) { wroteDuplicate = doAppendIfNotDuplicate(wroteDuplicate, duplicateCheck, strBld, curEntr + "\n"); } continue; } } if (!(writeEntry.length() >= minEntryLength)) { continue; } doAppendIfNotDuplicate(wroteDuplicate, duplicateCheck, strBld, writeEntry + "\n"); } persWriteToFile.writeToFile(outputFilePath, strBld.toString()); return strBld.toString(); } private boolean doAppendIfNotDuplicate(boolean wroteDuplicate, LinkedList<String> duplicateCheck, StringBuilder strBld, String appendStr) { if (!duplicateCheck.contains(appendStr)) { strBld.append(appendStr); } if (!wroteDuplicate) { duplicateCheck.add(appendStr); } return true; } }