diff options
author | adrianocrestani <adrianocrestani@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-28 06:38:34 +0000 |
---|---|---|
committer | adrianocrestani <adrianocrestani@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-28 06:38:34 +0000 |
commit | aaea9a7255e72725634af9f46bb59c4f61418776 (patch) | |
tree | 4ca00006ac9373cf7a85f358abe2df47dcf0510e /branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/DocumentProcessorsMap.java | |
parent | e14097e558d803c2b22a92ec3484330ffebf1459 (diff) |
applying patch tuscany_2552_phillipe_ramalho_09_30_2009.patch from TUSCANY-2552
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@830448 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/DocumentProcessorsMap.java')
-rw-r--r-- | branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/DocumentProcessorsMap.java | 115 |
1 files changed, 36 insertions, 79 deletions
diff --git a/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/DocumentProcessorsMap.java b/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/DocumentProcessorsMap.java index 065994319b..3f8ae0026b 100644 --- a/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/DocumentProcessorsMap.java +++ b/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/DocumentProcessorsMap.java @@ -19,129 +19,86 @@ package org.apache.tuscany.sca.domain.search; import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; import org.apache.tuscany.sca.domain.search.impl.Document; + /** + * This class is a {@link DocumentProcessor} that holds a map from {@link Class} + * -> {@link DocumentProcessor}, and based on this map this processor delegates + * the object to be processed to its respective {@link DocumentProcessor}. * * @version $Rev$ $Date$ */ -public class DocumentProcessorsMap extends - HashMap<Class<?>, List<DocumentProcessor>> implements DocumentProcessor { +public class DocumentProcessorsMap extends HashMap<Class<?>, DocumentProcessor> implements DocumentProcessor { private static final long serialVersionUID = 3967390896890947159L; - private Object documentKey; - - public void addDocumentProcessor(Class<?> clazz, DocumentProcessor processor) { - List<DocumentProcessor> processors = get(clazz); - - if (processors == null) { - processors = new LinkedList<DocumentProcessor>(); - put(clazz, processors); - - } - - processors.add(processor); - - } - - private void appendProcessors(LinkedList<DocumentProcessor> processorsList, - List<DocumentProcessor> processors, - Object object) { - - if (processors != null) { - - for (DocumentProcessor processor : processors) { - - if (this.documentKey == null) { - this.documentKey = processor.getDocumentKey(object); - - if (processorsList == null) { - return; - } - - } - - if (processorsList != null) { - processorsList.add(processor); - } - - } - - } - - } - - private void findAllDocumentProcessors(LinkedList<DocumentProcessor> processorsList, Object object) { - Class<?> clazz = object.getClass(); - appendProcessors(processorsList, get(clazz), object); + private DocumentProcessor findDocumentProcessor(Object object, Class<?> clazz) { + DocumentProcessor processor = get(clazz); - while (clazz != null) { + if (processor == null) { Class<?>[] interfaces = clazz.getInterfaces(); for (Class<?> interfac : interfaces) { - Class<?>[] interfaces2 = interfac.getInterfaces(); - appendProcessors(processorsList, get(interfac), object); + processor = findDocumentProcessor(object, interfac); - for (Class<?> interface2 : interfaces2) { - appendProcessors(processorsList, get(interface2), object); + if (processor != null) { + return processor; } } - clazz = clazz.getSuperclass(); - appendProcessors(processorsList, get(clazz), object); + if (!clazz.isInterface()) { + return findDocumentProcessor(object, clazz.getSuperclass()); + } } + return processor; + } + /** + * @see DocumentProcessor#getDocumentKey(Object) + */ public Document process(DocumentProcessor parentProcessor, DocumentMap documents, Object object, Document document, String parent) { - LinkedList<DocumentProcessor> processorsList; - - try { - - this.documentKey = document; - processorsList = new LinkedList<DocumentProcessor>(); - findAllDocumentProcessors(processorsList, object); + DocumentProcessor processor = findDocumentProcessor(object, object.getClass()); - if (document == null && this.documentKey != null) { - document = documents.get(this.documentKey); + if (processor == null) { + throw new IllegalArgumentException(); + } - if (document == null) { - document = FAKE_DOCUMENT; - } + if (document == null) { + document = documents.get(processor.getDocumentKey(object)); + if (document == null) { + document = FAKE_DOCUMENT; } - } finally { - this.documentKey = null; } - for (DocumentProcessor processor : processorsList) { - processor.process(parentProcessor, documents, object, document, parent); - } + processor.process(parentProcessor, documents, object, document, parent); return document; } + /** + * @see DocumentProcessor#getDocumentKey(Object) + */ public Object getDocumentKey(Object object) { + DocumentProcessor processor = findDocumentProcessor(object, object.getClass()); - try { - findAllDocumentProcessors(null, object); - - return this.documentKey; + if (processor != null) { + return processor.getDocumentKey(object); - } finally { - this.documentKey = null; + } else { + return null; } } |