diff options
Diffstat (limited to 'branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java')
-rw-r--r-- | branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java | 171 |
1 files changed, 94 insertions, 77 deletions
diff --git a/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java b/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java index e186bdd6d0..ff3dcf7b7f 100644 --- a/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java +++ b/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java @@ -4,145 +4,162 @@ import java.util.HashMap; import java.util.LinkedList; import org.apache.lucene.document.Document; -import org.apache.lucene.search.Query; import org.apache.tuscany.sca.domain.search.Result; import org.apache.tuscany.sca.domain.search.ResultFactory; import org.apache.tuscany.sca.domain.search.ResultProcessor; -public class ResultProcessorList extends LinkedList<ResultProcessor> implements ResultProcessor { +public class ResultProcessorList extends LinkedList<ResultProcessor> implements + ResultProcessor { private static final long serialVersionUID = 7147307292452694895L; - - private ResultFactoryList resultFactoryList; - + private HashMap<String, ResultHashMap> resultRoots = new HashMap<String, ResultHashMap>(); + + private ResultFactory<? extends Result> resultFactory; - public ResultProcessorList(ResultFactoryList resultFactoryList) { - this.resultFactoryList = resultFactoryList; + public ResultProcessorList(ResultFactory<? extends Result> resultFactory) { + this.resultFactory = resultFactory; } - - public Result process(Document document, Query query, Result result) { - - if (result == null) { - result = this.resultFactoryList.createResult(document); - } - + + public Result process(Document document, Result result) { + if (result == null) { - return null; + result = this.resultFactory.createResult(document); + + if (result == null) { + return null; + } + } - + ResultHashMap resultHashMap; - + String parent = document.get(SearchFields.PARENT_FIELD); - + if (parent == null) { resultHashMap = new ResultHashMap(result); - resultRoots.put(result.getName(), resultHashMap); - + resultRoots.put(result.getValue(), resultHashMap); + } else { - + ParentField parentField = new ParentField(parent); HashMap<String, ResultHashMap> current = this.resultRoots; - Result currentResult = null; + //Result currentResult = null; int elementsCount = parentField.getElementsCount(); - - for (int i = 0 ; i < elementsCount ; i++) { - String actualURI = parentField.getElementURI(i); + + for (int i = 0; i < elementsCount; i++) { + String actualName = parentField.getElementName(i); String type = parentField.getElementType(i); - - if (actualURI.length() > 0) { - ResultHashMap actualResultHashMap = current.get(actualURI); - + + if (actualName.length() > 0) { + ResultHashMap actualResultHashMap = current.get(actualName); + if (actualResultHashMap == null) { - ResultHashMap aux = new ResultHashMap(type, parentField.getElementName(i)); - - if (current.put(actualURI, aux) == null && currentResult != null) { - currentResult.addContent(aux.result); - } - + ResultHashMap aux = new ResultHashMap(type, parentField + .getElementName(i)); + + current.put(aux.result.getValue(), aux); +// if (current.put(aux.result.getValue(), aux) == null +// && currentResult != null) { +// currentResult.addContent(aux.result); +// } + current = aux; - currentResult = aux.result; - + //currentResult = aux.result; + } else { current = actualResultHashMap; - currentResult = actualResultHashMap.result; - + //currentResult = actualResultHashMap.result; + } - + } - + } - - resultHashMap = current.get(result.getName()); - + + resultHashMap = current.get(result.getValue()); + if (resultHashMap == null) { resultHashMap = new ResultHashMap(result); - current.put(result.getName(), resultHashMap); - - if (currentResult != null) { - currentResult.addContent(result); - } - + current.put(result.getValue(), resultHashMap); + +// if (currentResult != null) { +// currentResult.addContent(result); +// } + } - + } - + for (ResultProcessor processor : this) { - result = processor.process(document, query, result); + result = processor.process(document, result); } - + resultHashMap.result = result; - + return result; - + } - public Result[] getResultRoots() { - int size = this.resultRoots.size(); + private static void addContentsToResult(ResultHashMap resultHashMap) { + + for (ResultHashMap actual : resultHashMap.values()) { + addContentsToResult(actual); + + resultHashMap.result.addContent(actual.result); + + } + } + + public Result[] createResultRoots() { + int size = this.resultRoots.size(); + if (size == 0) { return new Result[0]; } - + Result[] res = new Result[size]; - + int i = 0; for (ResultHashMap resultHashMap : this.resultRoots.values()) { + + addContentsToResult(resultHashMap); res[i++] = resultHashMap.result; + } + this.resultRoots.clear(); + return res; - + } - - private Result createResult(String type, String name) { + + private Result createResult(String field, String value) { + Result result = this.resultFactory.createResult(field, value); - for (ResultFactory<? extends Result> actualResultFactory : this.resultFactoryList) { - - if (type.equals(actualResultFactory.getType())) { - return actualResultFactory.createResult(name); - } - + if (result != null) { + return result; } - + throw new IllegalArgumentException(); - + } - + private class ResultHashMap extends HashMap<String, ResultHashMap> { private static final long serialVersionUID = 7982561264440904411L; - + Result result; - + ResultHashMap(String type, String name) { - this.result = createResult(type, name); + this(createResult(type, name)); } - + ResultHashMap(Result result) { this.result = result; } - + } } |