summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java
diff options
context:
space:
mode:
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.java171
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;
}
-
+
}
}