summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/PropertyDocumentProcessor.java
blob: 30885dca0ec979e0b057496d939c5d84f2dfd615 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package org.apache.tuscany.sca.domain.search.impl;

import java.lang.reflect.Array;

import org.apache.lucene.document.Field;
import org.apache.tuscany.sca.assembly.Property;
import org.apache.tuscany.sca.domain.search.DocumentMap;
import org.apache.tuscany.sca.domain.search.DocumentProcessor;

public class PropertyDocumentProcessor implements DocumentProcessor {

	public Document process(DocumentProcessor parentProcessor,
			DocumentMap documents, Object object, Document doc, String parent) {

		if (object instanceof Property) {
			Property property = (Property) object;
			String name = property.getName();

			if (name != null && name.length() > 0) {

				if (doc == null) {
					doc = documents.get(name);
				}

				Object value = property.getValue();

				if (value.getClass().isArray()) {
					int arraySize = Array.getLength(value);

					for (int i = 0; i < arraySize; i++) {
						Object arrayValue = Array.get(value, i);

						doc.add(new Field(SearchFields.VALUE_FIELD, arrayValue.toString(),
								Field.Store.YES, Field.Index.ANALYZED));

					}

				} else {

					doc.add(new Field(SearchFields.VALUE_FIELD, value.toString(),
							Field.Store.YES, Field.Index.ANALYZED));

				}
				
				return doc == null ? FAKE_DOCUMENT : doc;

			} else {
				return FAKE_DOCUMENT;
			}

		}

		throw new IllegalArgumentException();

	}

	public Object getDocumentKey(Object object) {
		// TODO Auto-generated method stub
		return null;
	}

}