You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ad...@apache.org on 2009/08/10 03:40:04 UTC

svn commit: r802637 [2/2] - in /tuscany/branches/sca-java-1.x/modules: domain-manager/src/main/java/org/apache/tuscany/sca/domain/manager/impl/ domain-manager/src/main/resources/ domain-manager/src/main/resources/icons/ domain-search/src/main/java/org/...

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ContributionDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ContributionDocumentProcessor.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ContributionDocumentProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ContributionDocumentProcessor.java Mon Aug 10 01:40:02 2009
@@ -7,7 +7,6 @@
 import org.apache.tuscany.sca.contribution.Contribution;
 import org.apache.tuscany.sca.domain.search.DocumentMap;
 import org.apache.tuscany.sca.domain.search.DocumentProcessor;
-import org.apache.tuscany.sca.domain.search.Result;
 
 public class ContributionDocumentProcessor implements DocumentProcessor {
 
@@ -24,18 +23,21 @@
 					uri = null;
 
 				} else {
-					
-					parent += DomainPathAnalyzer.PATH_SEPARATOR
+
+					parent += Character.toString(DomainPathAnalyzer.PATH_START)
 							+ SearchFields.CONTRIBUTION_FIELD
 							+ DomainPathAnalyzer.TYPE_SEPARATOR + uri;
-					
+
 				}
 
 			}
 
-			if (uri != null && doc == null) {
-				doc = documents.get(uri);
+			if (uri != null) {
 
+				if (doc == null) {
+					doc = documents.get(uri);
+				}
+				
 				doc.add(new Field(SearchFields.CONTRIBUTION_FIELD, uri,
 						Field.Store.YES, Field.Index.ANALYZED));
 
@@ -85,8 +87,9 @@
 			if (!object.getClass().getSimpleName().contains("Workspace")) {
 
 				for (Composite composite : contribution.getDeployables()) {
-					Document compositeDoc = parentProcessor.process(parentProcessor,
-							documents, composite, null, parent);
+					Document compositeDoc = parentProcessor
+							.process(parentProcessor, documents, composite,
+									null, parent);
 
 					if (uri != null) {
 
@@ -125,25 +128,4 @@
 
 	}
 
-	public Result processDocument(org.apache.lucene.document.Document document,
-			Result result) {
-		String contributionName = document.get(SearchFields.CONTRIBUTION_FIELD);
-
-		if (contributionName != null) {
-
-			if (result == null) {
-				result = new ContributionResult(contributionName);
-
-			} else if (!(result instanceof ContributionResult)) {
-				throw new IllegalArgumentException();
-			}
-
-			result.setName(contributionName);
-
-		}
-
-		return result;
-
-	}
-
 }

Added: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileContent.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileContent.java?rev=802637&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileContent.java (added)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileContent.java Mon Aug 10 01:40:02 2009
@@ -0,0 +1,35 @@
+package org.apache.tuscany.sca.domain.search.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+public class DefaultFileContent implements FileContent {
+
+	final private URL url;
+
+	public DefaultFileContent(URL url) {
+		this.url = url;
+	}
+
+	public FileContent[] getChildren() {
+		return new FileContent[0];
+	}
+
+	public InputStream getInputStream() throws IOException {
+		return this.url.openStream();
+	}
+
+	public String getName() {
+		return this.url.getFile();
+	}
+
+	public String getPath() {
+		return this.url.getPath();
+	}
+
+	public boolean isLeaf() {
+		return false;
+	}
+
+}

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileDocumentProcessor.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileDocumentProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DefaultFileDocumentProcessor.java Mon Aug 10 01:40:02 2009
@@ -25,11 +25,12 @@
 					doc = documents.get(file.getPath());
 				}
 				
-				doc.add(new Field(SearchFields.FILE_FIELD, file.getName(), Field.Store.YES,
-						Field.Index.ANALYZED));
-				
 				doc.add(new Field(SearchFields.FILE_CONTENT_FIELD, reader));
 				
+				doc.add(new Field(SearchFields.FILE_CONTENT_FIELD,
+						"", Field.Store.YES,
+						Field.Index.ANALYZED));
+				
 				return doc;
 				
 			} catch (IOException e) {

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/Document.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/Document.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/Document.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/Document.java Mon Aug 10 01:40:02 2009
@@ -88,5 +88,5 @@
 	public boolean containsField(String field) {
 		return this.fieldablesTable.containsKey(field);
 	}
-
+	
 }

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzer.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzer.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzer.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzer.java Mon Aug 10 01:40:02 2009
@@ -10,16 +10,20 @@
 
 public class DomainPathAnalyzer extends Analyzer {
 
-	final public static char PATH_SEPARATOR = '\u0001';
-
-	final public static char TYPE_SEPARATOR = '\u0002';
-
-	final public static char URI_SEPARATOR = '\u0003';
+	final public static char PATH_START = '\u0001';
+	
+	final public static char PATH_SEPARATOR = '\u0002';
+
+	final public static char TYPE_SEPARATOR = '\u0003';
+
+	final public static char URI_SEPARATOR = '\u0004';
+	
+	final public static char ARCHIVE_SEPARATOR = '!';
 
 	static class DomainPathTokenizer extends Tokenizer {
 
 		private int offset = 0, bufferIndex = 0, dataLen = 0;
-		private static final int MAX_WORD_LEN = 255;
+		private static final int MAX_WORD_LEN = 1024;
 		private static final int IO_BUFFER_SIZE = 4096;
 		private final char[] ioBuffer = new char[IO_BUFFER_SIZE];
 		private boolean typeCharFound = false;
@@ -90,8 +94,8 @@
 				final char c = ioBuffer[bufferIndex++];
 				boolean breakChar = true;
 				boolean includeChar = false;
-
-				if (c == PATH_SEPARATOR) {
+				
+				if (c == PATH_START || c == PATH_SEPARATOR) {
 
 					if (length == 0) {
 						includeChar = true;

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchDocumentProcessorsMap.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchDocumentProcessorsMap.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchDocumentProcessorsMap.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchDocumentProcessorsMap.java Mon Aug 10 01:40:02 2009
@@ -1,7 +1,5 @@
 package org.apache.tuscany.sca.domain.search.impl;
 
-import java.io.File;
-
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentType;
@@ -23,7 +21,8 @@
 		addDocumentProcessor(Binding.class, new BindingDocumentProcessor());
 		addDocumentProcessor(Component.class, new ComponentDocumentProcessor());
 		addDocumentProcessor(Composite.class, new CompositeDocumentProcessor());
-		addDocumentProcessor(File.class, new DomainSearchFileDocumentProcessor());
+		addDocumentProcessor(FileContent.class, new DomainSearchFileDocumentProcessor());
+		addDocumentProcessor(Property.class, new PropertyDocumentProcessor());
 		
 	}
 

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchFormatter.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchFormatter.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchFormatter.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchFormatter.java Mon Aug 10 01:40:02 2009
@@ -26,5 +26,22 @@
 		}
 
 	}
+	
+	public static boolean isHighlighted(String text) {
+		int start = text.indexOf(HIGHLIGHT_START);
+		int end = text.indexOf(HIGHLIGHT_END);
+		
+		if (start < end && start != -1) {
+			start = text.indexOf(HIGHLIGHT_START, start + 1);
+			
+			if (start > end || start == -1) {
+				return true;
+			}
+			
+		}
+		
+		return false;
+		
+	}
 
 }

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchImpl.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchImpl.java Mon Aug 10 01:40:02 2009
@@ -1,189 +1,357 @@
 package org.apache.tuscany.sca.domain.search.impl;
 
+import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.List;
+import java.util.HashSet;
 
 import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.document.Field;
 import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.queryParser.MultiFieldQueryParser;
 import org.apache.lucene.queryParser.ParseException;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.HitCollector;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.LockObtainFailedException;
+import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.store.SimpleFSLockFactory;
 import org.apache.tuscany.sca.contribution.Contribution;
-import org.apache.tuscany.sca.contribution.service.ContributionRepository;
 import org.apache.tuscany.sca.domain.search.DocumentMap;
 import org.apache.tuscany.sca.domain.search.DomainSearch;
 import org.apache.tuscany.sca.domain.search.Result;
 import org.osoa.sca.annotations.AllowsPassByReference;
+import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Scope;
 
 @Scope("COMPOSITE")
 public class DomainSearchImpl implements DomainSearch {
 
-	private Directory dir = new RAMDirectory();
+	@Property
+	public String indexDirectoryPath;
+
+	private Directory dir;
 
 	private Analyzer analyzer = new DomainSearchAnalyzer();
 
+	private MultiFieldQueryParser qp = new MultiFieldQueryParser(new String[] {
+			SearchFields.ARTIFACT_FIELD, SearchFields.BINDING_FIELD,
+			SearchFields.COMPONENT_FIELD, SearchFields.COMPOSITE_FIELD,
+			SearchFields.CONTRIBUTION_FIELD, SearchFields.EXPORTEDBY_FIELD,
+			SearchFields.FILE_CONTENT_FIELD, SearchFields.IMPLEMENTS_FIELD,
+			SearchFields.IMPORTEDBY_FIELD, SearchFields.INCLUDEDBY_FIELD,
+			SearchFields.PROPERTY_KEY_FIELD, SearchFields.REFERENCE_FIELD,
+			SearchFields.REFERENCE_INTERFACE_CALLBACK_FIELD,
+			SearchFields.REFERENCE_INTERFACE_FIELD,
+			SearchFields.REFERENCE_NAME_FIELD, SearchFields.SERVICE_FIELD,
+			SearchFields.SERVICE_INTERFACE_CALLBACK_FIELD,
+			SearchFields.SERVICE_INTERFACE_FIELD,
+			SearchFields.SERVICE_NAME_FIELD, SearchFields.TYPE_FIELD,
+			SearchFields.VALUE_FIELD }, this.analyzer);
+
 	public DomainSearchImpl() {
-		// empty constructor
+		this.qp.setAllowLeadingWildcard(true);
+
+	}
+
+	private Directory getIndexDirectory() throws IOException {
+
+		if (this.dir == null) {
+
+			if (this.indexDirectoryPath == null
+					|| this.indexDirectoryPath.length() == 0) {
+				this.dir = new RAMDirectory();
+
+			} else {
+
+				try {
+					this.dir = new FSDirectory(
+							new File(this.indexDirectoryPath),
+							new SimpleFSLockFactory(this.indexDirectoryPath));
+
+				} catch (IOException e) {
+					System.err.println("Could not open index at "
+							+ this.indexDirectoryPath);
+
+					throw e;
+
+				}
+
+			}
+
+		}
+
+		return this.dir;
+
 	}
 
 	@AllowsPassByReference
-	public void contributionAdded(ContributionRepository repository,
-			Contribution contribution) {
-		System.out.println("contributionAdded:");
-		System.out.println(repository);
-		System.out.println(contribution);
+	public void contributionAdded(Contribution contribution) {
+
+		IndexWriter indexWriter = null;
 
 		try {
-			IndexWriter indexWriter = new IndexWriter(dir, analyzer,
+			indexWriter = new IndexWriter(getIndexDirectory(), this.analyzer,
 					IndexWriter.MaxFieldLength.UNLIMITED);
 
-			try {
-				DomainSearchDocumentProcessorsMap docProcessors = new DomainSearchDocumentProcessorsMap();
-				DocumentMap docs = new DocumentMap();
+			contributionAdded(contribution, indexWriter);
+
+			indexWriter.commit();
+
+		} catch (Exception e) {
+
+			if (indexWriter != null) {
+
+				try {
+					indexWriter.rollback();
+
+				} catch (Exception e1) {
+					// ignore exception
+				}
+
+			}
+
+			throw new RuntimeException("Problem while indexing!", e);
+
+		} finally {
+
+			if (indexWriter != null) {
 
 				try {
-				docProcessors.process(docProcessors, docs, contribution, null, "");
+					indexWriter.close();
+
 				} catch (Exception e) {
-					e.printStackTrace();
+					// ignore exception
 				}
 
-				for (Document doc : docs.values()) {
-					indexWriter.addDocument(doc.createLuceneDocument());
+			}
+
+		}
+
+	}
+
+	@AllowsPassByReference
+	public void contributionRemoved(Contribution contribution) {
+
+		IndexWriter indexWriter = null;
+
+		try {
+			indexWriter = new IndexWriter(getIndexDirectory(), this.analyzer,
+					IndexWriter.MaxFieldLength.UNLIMITED);
+
+			contributionRemoved(contribution, indexWriter);
+
+			indexWriter.commit();
+
+		} catch (Exception e) {
+
+			if (indexWriter != null) {
+
+				try {
+					indexWriter.rollback();
+
+				} catch (Exception e1) {
+					// ignore exception
 				}
 
-			} finally {
-				indexWriter.close();
-			}
-
-			// BufferedReader consoleReader = new BufferedReader(
-			// new InputStreamReader(System.in));
-			//
-			// while (true) {
-			// System.out.print("query: ");
-			// String queryString = consoleReader.readLine();
-			//
-			// if (queryString.equals("exit")) {
-			// break;
-			// }
-			//				
-			// parseAndSearch(queryString, false);
-			//
-			// }
+			}
+
+			throw new RuntimeException("Problem while indexing!", e);
+
+		} finally {
+
+			if (indexWriter != null) {
+
+				try {
+					indexWriter.close();
+
+				} catch (Exception e) {
+					// ignore exception
+				}
+
+			}
 
-		} catch (CorruptIndexException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (LockObtainFailedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
 		}
 
 	}
 
-	public void contributionRemoved(ContributionRepository repository,
-			Contribution contribution) {
-		System.out.println("contributionRemoved:");
-		System.out.println(repository);
-		System.out.println(contribution);
+	private void contributionRemoved(Contribution contribution,
+			IndexWriter indexWriter) throws CorruptIndexException, IOException {
+
+		String contributionURI = contribution.getURI();
+		StringBuilder sb = new StringBuilder(SearchFields.PARENT_FIELD);
+		sb.append(":\"");
+		sb.append(DomainPathAnalyzer.PATH_START);
+		sb.append(contributionURI);
+		sb.append("\" OR ");
+		sb.append(SearchFields.CONTRIBUTION_FIELD);
+		sb.append(":\"");
+		sb.append(contributionURI);
+		sb.append('"');
+
+		try {
+			Query query = this.qp.parse(sb.toString());
+			indexWriter.deleteDocuments(query);
+
+		} catch (ParseException e) {
+			throw new RuntimeException("Could not parse query: "
+					+ sb.toString(), e);
+		}
 
 	}
 
-	public void contributionUpdated(ContributionRepository repository,
-			Contribution oldContribution, Contribution contribution) {
+	private void contributionAdded(Contribution contribution,
+			IndexWriter indexWriter) throws CorruptIndexException, IOException {
+
+		DomainSearchDocumentProcessorsMap docProcessors = new DomainSearchDocumentProcessorsMap();
+		DocumentMap docs = new DocumentMap();
+
+		try {
+			docProcessors.process(docProcessors, docs, contribution, null, "");
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		FileWriter writer = new FileWriter("indexed.txt");
+		for (Document doc : docs.values()) {
+			org.apache.lucene.document.Document luceneDoc = doc
+					.createLuceneDocument();
+			writer.write(luceneDoc.toString());
+			writer.write('\n');
+			writer.write('\n');
+			indexWriter.addDocument(luceneDoc);
 
-		System.out.println("contributionUpdated:");
-		System.out.println(repository);
-		System.out.println(oldContribution);
-		System.out.println(contribution);
+		}
+
+		writer.close();
+
+		// BufferedReader consoleReader = new BufferedReader(
+		// new InputStreamReader(System.in));
+		//
+		// while (true) {
+		// System.out.print("query: ");
+		// String queryString = consoleReader.readLine();
+		//
+		// if (queryString.equals("exit")) {
+		// break;
+		// }
+		//				
+		// parseAndSearch(queryString, false);
+		//
+		// }
 
 	}
 
-	@SuppressWarnings("deprecation")
-	public Result[] parseAndSearch(String searchQuery, boolean highlight) {
+	@AllowsPassByReference
+	public void contributionUpdated(Contribution oldContribution,
+			Contribution contribution) {
+
+		IndexWriter indexWriter = null;
 
 		try {
-			final IndexSearcher searcher = new IndexSearcher(dir);
-			final DomainSearchResultProcessor resultProcessor = new DomainSearchResultProcessor(
-					new DomainSearchResultFactory());
+			indexWriter = new IndexWriter(getIndexDirectory(), this.analyzer,
+					IndexWriter.MaxFieldLength.UNLIMITED);
 
-			QueryParser qp = new QueryParser("", analyzer);
+			contributionRemoved(oldContribution, indexWriter);
+			contributionAdded(contribution, indexWriter);
 
-			qp.setAllowLeadingWildcard(true);
+			indexWriter.commit();
 
-			try {
-				final Query query = qp.parse(searchQuery);
+		} catch (Exception e) {
 
-				searcher.search(query, new HitCollector() {
+			if (indexWriter != null) {
 
-					@Override
-					public void collect(int doc, float score) {
-						try {
-							org.apache.lucene.document.Document document = searcher
-									.doc(doc);
+				try {
+					indexWriter.rollback();
 
-							resultProcessor.process(document, query, null);
+				} catch (Exception e1) {
+					// ignore exception
+				}
 
-							List<?> fields = document.getFields();
-							System.out.println("---------");
-							System.out.println("doc = " + doc);
+			}
 
-							for (Object obj : fields) {
-								Field field = (Field) obj;
-								String[] values = document.getValues(field
-										.name());
-								System.out.println(field);
+			throw new RuntimeException("Problem while indexing!", e);
 
-								for (String value : values) {
-									System.out.println("\t" + value);
-								}
+		} finally {
 
-							}
+			if (indexWriter != null) {
 
-						} catch (CorruptIndexException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						} catch (IOException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						}
-					}
+				try {
+					indexWriter.close();
 
-				});
+				} catch (Exception e) {
+					// ignore exception
+				}
 
-			} catch (ParseException e) {
-				System.out.println(e.getMessage());
 			}
 
-			Result[] results = resultProcessor.getResultRoots();
+		}
+
+	}
+
+	public Result[] parseAndSearch(String searchQuery, final boolean highlight)
+			throws Exception {
+
+		final IndexSearcher searcher = new IndexSearcher(getIndexDirectory());
+
+		DomainSearchResultProcessor resultProcessor = new DomainSearchResultProcessor(
+				new DomainSearchResultFactory());
 
-			// for (Result result : results) {
-			// System.out.println(result);
-			// }
+		final Query query = qp.parse(searchQuery);
+		System.out.println("query: " + searchQuery);
 
-			System.out.println();
+		TopDocs topDocs = searcher.search(query, 1000);
 
-			return results;
+		int indexed = 0;
+		HashSet<String> set = new HashSet<String>();
+		for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
+			org.apache.lucene.document.Document luceneDocument = searcher
+					.doc(scoreDoc.doc);
+
+			resultProcessor.process(luceneDocument, null);
+
+			indexed++;
+			set.add(luceneDocument.toString());
+
+			System.out.println(luceneDocument);
 
-		} catch (CorruptIndexException e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
-		} catch (IOException e1) {
-			// TODO Auto-generated catch block
-			e1.printStackTrace();
 		}
 
-		return null;
+		/*
+		 * searcher.search(query, new HitCollector() {
+		 * 
+		 * @Override public void collect(int doc, float score) { try {
+		 * org.apache.lucene.document.Document document = searcher .doc(doc);
+		 * 
+		 * luceneDocuments.put(doc, document);
+		 * 
+		 * System.out.println(doc);
+		 * 
+		 * } catch (CorruptIndexException e) { // TODO Auto-generated catch
+		 * block e.printStackTrace(); } catch (IOException e) { // TODO
+		 * Auto-generated catch block e.printStackTrace(); } }
+		 * 
+		 * });
+		 */
+
+		System.out.println("indexed = " + indexed);
+		System.out.println("set.size() = " + set.size());
+
+		Result[] results = resultProcessor.createResultRoots();
+
+		if (highlight) {
+
+			for (Result result : results) {
+				HighlightingUtil.highlightResult(result, query);
+			}
+
+		}
+
+		return results;
 
 	}
 
@@ -192,4 +360,26 @@
 		return null;
 	}
 
+	public String highlight(String field, String text, String searchQuery)
+			throws Exception {
+		final Query query = qp.parse(searchQuery);
+
+		return HighlightingUtil.highlight(field, query, text);
+
+	}
+
+	public boolean indexExists() {
+
+		if ((this.indexDirectoryPath == null || this.indexDirectoryPath
+				.length() == 0)
+				&& this.dir == null) {
+
+			return false;
+
+		} else {
+			return this.dir != null || IndexReader.indexExists(new File(this.indexDirectoryPath));
+		}
+
+	}
+
 }

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultFactory.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultFactory.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultFactory.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultFactory.java Mon Aug 10 01:40:02 2009
@@ -1,17 +1,17 @@
 package org.apache.tuscany.sca.domain.search.impl;
 
-public class DomainSearchResultFactory extends ResultFactoryList {
+public class DomainSearchResultFactory extends PriorityFieldListResultFactory {
 
 	private static final long serialVersionUID = -7421799172738469027L;
 
 	public DomainSearchResultFactory() {
-		add(new ContributionResultFactory());
-		add(new CompositeResultFactory());
-		add(new ComponentResultFactory());
-		add(new ComponentTypeResultFactory());
-		add(new ArtifactResultProcessor.ArtifactResultFactory());
-		add(new BindingResultFactory());
-		add(new FileContentResultProcessor.FileContentResultFactory());
+		add(SearchFields.COMPOSITE_FIELD);
+		add(SearchFields.COMPONENT_FIELD);
+		add(SearchFields.COMPONENT_TYPE_FIELD);
+		add(SearchFields.CONTRIBUTION_FIELD);
+		add(SearchFields.BINDING_FIELD);
+		add(SearchFields.FILE_CONTENT_FIELD);
+		add(SearchFields.ARTIFACT_FIELD);
 		
 	}
 

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultProcessor.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/DomainSearchResultProcessor.java Mon Aug 10 01:40:02 2009
@@ -12,7 +12,6 @@
 		
 		super(new DomainSearchResultFactory());
 		
-		add(new ArtifactResultProcessor());
 		add(new FileContentResultProcessor());
 		
 	}

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileContentResultProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileContentResultProcessor.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileContentResultProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileContentResultProcessor.java Mon Aug 10 01:40:02 2009
@@ -1,110 +1,80 @@
 package org.apache.tuscany.sca.domain.search.impl;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
-import java.util.Enumeration;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
+import java.net.URL;
 
 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 FileContentResultProcessor implements ResultProcessor {
 
-	public static class FileContentResultFactory implements
-			ResultFactory<FileContentResult> {
+	public Result process(Document document, Result result) {
 
-		public FileContentResultFactory() {
-			// empty constructor
-		}
-
-		public FileContentResult createResult(String name) {
-			return new FileContentResult(name);
-		}
-
-		public String getName(Document document) {
-			return document.get(SearchFields.FILE_FIELD);
-		}
-
-		public String getType() {
-			return SearchFields.FILE_FIELD;
-		}
-
-		public FileContentResult createResult(Document document) {
-			String name = getName(document);
-
-			if (name != null) {
-				return createResult(name);
-			}
-
-			return null;
-
-		}
-
-	}
-
-	public Result process(Document document, Query query, Result result) {
-
-		if (result instanceof FileContentResult) {
-			FileContentResult fileContentResult = (FileContentResult) result;
+		if (document.getFieldable(SearchFields.FILE_CONTENT_FIELD) != null) {
 			Reader reader;
 
 			ParentField parentField = new ParentField(document
 					.get(SearchFields.PARENT_FIELD));
-			String parentURI = parentField.getElementURI(parentField
-					.getElementsCount() - 1);
-			String name = document.get(SearchFields.FILE_FIELD);
 
-			if (name == null) {
-				return result;
-			}
+			int lastParentElementIndex = parentField.getElementsCount() - 1;
+			String parentURI;
 
-			if (parentURI.indexOf(ZipDocumentProcessor.ARCHIVE_SEPARATOR) != -1) {
-				String[] locations = parentURI.split(Character
-						.toString(ZipDocumentProcessor.ARCHIVE_SEPARATOR));
+			if (SearchFields.ARTIFACT_FIELD.equals(parentField
+					.getElementType(lastParentElementIndex))) {
+				parentURI = parentField.getElementURI(lastParentElementIndex);
 
-				try {
-					ZipFile zip = new ZipFile(new File(locations[0]));
+				// if (parentURI.startsWith("jar:")) {
 
-					// TODO: normalize the entry path and check if the entry still exists
-					ZipEntry entry = zip.getEntry(locations[1].substring(1) + name);
-					
-					Enumeration<? extends ZipEntry> entries = zip.entries();
-					
-					while (entries.hasMoreElements()) System.out.println(entries.nextElement().getName());
-					
-					reader = new InputStreamReader(zip.getInputStream(entry));
+				try {
+					reader = new InputStreamReader(new URL(parentURI)
+							.openStream());
 
 				} catch (IOException e) {
 					return result;
 				}
 
-			} else {
+				// } else {
+				//
+				// try {
+				// reader = new InputStreamReader(new FileInputStream(
+				// new File(parentURI + (parentURI.length() > 0 ? "/" : "") +
+				// name)));
+				//
+				// } catch (FileNotFoundException e) {
+				// return result;
+				// }
+				//
+				// }
 
 				try {
-					reader = new InputStreamReader(new FileInputStream(
-							new File(parentURI + '/' + name)));
 
-				} catch (FileNotFoundException e) {
-					return result;
-				}
+					StringBuilder sb = new StringBuilder();
+					int c;
 
-			}
+					// TODO: load the chars into an array buffer instead of one
+					// at a
+					// time
+					while ((c = reader.read()) != -1) {
+						char character = (char) c;
+
+						if (!Character.isIdentifierIgnorable(character)) {
+							sb.append(character);
+						}
+
+					}
+
+					result.setValue(sb.toString());
+
+				} catch (Exception e) {
+					// ignore content loading, TODO: maybe it should return an
+					// error
+					// message as the content
+
+				}
 
-			try {
-				fileContentResult.setContent(HighlightingUtil
-						.bestFragmentHighlighted(query, reader));
-
-			} catch (IOException e) {
-				// ignore content loading, TODO: maybe it return an error
-				// message as the content
 			}
 
 		}

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileDocumentProcessor.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileDocumentProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/FileDocumentProcessor.java Mon Aug 10 01:40:02 2009
@@ -2,7 +2,6 @@
 
 import java.util.LinkedList;
 
-import org.apache.lucene.document.Field;
 import org.apache.tuscany.sca.domain.search.DocumentMap;
 import org.apache.tuscany.sca.domain.search.DocumentProcessor;
 
@@ -20,36 +19,36 @@
 			if (!file.isLeaf()) {
 
 				if (doc == null) {
-					doc = documents.get(file.getPath());
+					doc = documents.get(SearchFields.FILE_CONTENT_FIELD + file.getPath());
 				}
 
-				doc.add(new Field(SearchFields.DIRECTORY_FIELD, file
-						.getPath(), Field.Store.YES,
-						Field.Index.ANALYZED));
-
-				parent += DomainPathAnalyzer.PATH_SEPARATOR
-						+ SearchFields.FILE_FIELD
-						+ DomainPathAnalyzer.TYPE_SEPARATOR + file.getPath()
-						+ DomainPathAnalyzer.URI_SEPARATOR + file.getName();
-
-				FileContent[] files = file.getChildren();
-
-				for (FileContent childFile : files) {
-					Document fileDoc = parentProcessor.process(parentProcessor,
-							documents, childFile, null, parent);
+				//FileContent[] files = file.getChildren();
 
-					fileDoc.add(new Field(SearchFields.PARENT_FIELD, parent,
-							Field.Store.YES, Field.Index.ANALYZED));
+//				for (FileContent childFile : files) {
+//					// Document fileDoc = parentProcessor.process(
+//					// parentProcessor, documents, childFile, null,
+//					// parent);
+//
+//					Document fileDoc = null;
+//
+//					fileDoc = process(this, documents, childFile, null, parent);
+//
+//					if (fileDoc == null) {
+//						continue;
+//					}
+//
+//					fileDoc.add(new Field(SearchFields.PARENT_FIELD, parent,
+//							Field.Store.YES, Field.Index.ANALYZED));
+//
+//				}
 
-				}
-				
 				return doc;
 
 			} else {
 
 				for (DocumentProcessor processor : this) {
-					Document newDoc = processor.process(this, documents,
-							object, doc, parent);
+					Document newDoc = processor.process(this, documents, file,
+							doc, parent);
 
 					if (newDoc != null) {
 						return newDoc;
@@ -60,7 +59,7 @@
 			}
 
 		}
-		
+
 		return doc;
 
 	}
@@ -75,7 +74,7 @@
 				return null;
 			}
 
-			return path;
+			return SearchFields.FILE_CONTENT_FIELD + path;
 
 		}
 

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/HighlightingUtil.java Mon Aug 10 01:40:02 2009
@@ -1,43 +1,76 @@
 package org.apache.tuscany.sca.domain.search.impl;
 
 import java.io.IOException;
-import java.io.Reader;
 import java.io.StringReader;
+import java.util.Map;
 
 import org.apache.lucene.analysis.CachingTokenFilter;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.highlight.Fragmenter;
 import org.apache.lucene.search.highlight.Highlighter;
 import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
+import org.apache.lucene.search.highlight.NullFragmenter;
 import org.apache.lucene.search.highlight.SimpleFragmenter;
 import org.apache.lucene.search.highlight.SpanScorer;
+import org.apache.tuscany.sca.domain.search.Result;
 
 final public class HighlightingUtil {
 	
-	public static String bestFragmentHighlighted(Query query, Reader reader) throws IOException {
-		StringBuilder sb = new StringBuilder();
-		int c;
+	public static void highlightResult(Result result, Query query) {
+		highlightResult(result, query, new SimpleFragmenter(70));
+	}
+	
+	public static void highlightResult(Result result, Query query, Fragmenter fragmenter) {
+		Map<String, Result> contents = result.getContents();
+
+		if (contents != null) {
+
+			for (Result content : contents.values()) {
+				highlightResult(content, query, fragmenter);
+			}
+
+		}
 		
-		// TODO: load the chars into a buffer instead of one at a time
-		while ((c = reader.read()) != -1) {
-			char character = (char) c;
-			
-			if (!Character.isIdentifierIgnorable(character)) {
-				sb.append(character);
+		try {
+			String highlightedText = HighlightingUtil.bestFragmentHighlighted(
+					result.getField(), query, result.getValue(), fragmenter);
+
+			// checks if something was highlighted before resetting the value
+			if (highlightedText != null && highlightedText.length() > 0) {
+				result.setValue(highlightedText);
 			}
-			
+
+		} catch (IOException e) {
+			// ignore highlighting
+		}
+
+	}
+	
+	public static String highlight(String field, Query query, String text) throws IOException {
+		String highlightedText = bestFragmentHighlighted(field, query, text, new NullFragmenter());
+		
+		if (highlightedText == null || text.length() >= highlightedText.length()) {
+			return text;
 		}
 		
-		String text = sb.toString();
+		return highlightedText;
 		
-		CachingTokenFilter tokenStream = new CachingTokenFilter(new NamingAnalyzer().tokenStream(
-		        SearchFields.FILE_CONTENT_FIELD, new StringReader(text)));
+	}
+	
+	public static String bestFragmentHighlighted(String field, Query query, String text) throws IOException {
+		return bestFragmentHighlighted(field, query, text, new SimpleFragmenter(100));
+	}
+	
+	public static String bestFragmentHighlighted(String field, Query query, String text, Fragmenter fragmenter) throws IOException {
+		CachingTokenFilter tokenStream = new CachingTokenFilter(new DomainSearchAnalyzer().tokenStream(
+		        field, new StringReader(text)));
 		
-		Highlighter highlighter = new Highlighter(new DomainSearchFormatter(), new SpanScorer(query, SearchFields.FILE_CONTENT_FIELD, tokenStream, ""));
-		highlighter.setTextFragmenter(new SimpleFragmenter(100));
+		Highlighter highlighter = new Highlighter(new DomainSearchFormatter(), new SpanScorer(query, field, tokenStream, ""));
+		highlighter.setTextFragmenter(fragmenter);
 		tokenStream.reset();
 		
 	    try {
-			return highlighter.getBestFragments(tokenStream, text, 2, "...");
+			return highlighter.getBestFragments(tokenStream, text, 2, " ... ");
 			
 		} catch (InvalidTokenOffsetsException e) {
 			
@@ -45,7 +78,7 @@
 			return "";
 			
 		}
-	    
+		
 	}
 	
 	public static String replaceHighlightMarkupBy(CharSequence text,

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ParentField.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ParentField.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ParentField.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ParentField.java Mon Aug 10 01:40:02 2009
@@ -29,7 +29,7 @@
 		for (int i = 0; i < length ; i++) {
 			char c = parentFieldValue.charAt(i);
 
-			if (c == DomainPathAnalyzer.PATH_SEPARATOR) {
+			if (c == DomainPathAnalyzer.PATH_SEPARATOR || c == DomainPathAnalyzer.PATH_START) {
 
 				if (sb.length() > 0 || element != null) {
 

Copied: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/PriorityFieldListResultFactory.java (from r791205, tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultFactoryList.java)
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/PriorityFieldListResultFactory.java?p2=tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/PriorityFieldListResultFactory.java&p1=tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultFactoryList.java&r1=791205&r2=802637&rev=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultFactoryList.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/PriorityFieldListResultFactory.java Mon Aug 10 01:40:02 2009
@@ -6,21 +6,21 @@
 import org.apache.tuscany.sca.domain.search.Result;
 import org.apache.tuscany.sca.domain.search.ResultFactory;
 
-public class ResultFactoryList extends LinkedList<ResultFactory<? extends Result>> implements ResultFactory<Result> {
+public class PriorityFieldListResultFactory extends LinkedList<String> implements ResultFactory<Result> {
 	
 	private static final long serialVersionUID = 6806221945324235828L;
 
-	public ResultFactoryList() {
+	public PriorityFieldListResultFactory() {
 		// empty constructor
 	}
 	
 	public Result createResult(Document document) {
 		
-		for (ResultFactory<? extends Result> resultFactory : this) {
-			Result result = resultFactory.createResult(document);
+		for (String field : this) {
+			String value = document.get(field);
 			
-			if (result != null) {
-				return result;
+			if (value != null) {
+				return new ResultImpl(field, value);
 			}
 			
 		}
@@ -29,27 +29,8 @@
 		
 	}
 
-	public Result createResult(String name) {
-		return null;
-	}
-
-	public String getName(Document document) {
-		
-		for (ResultFactory<? extends Result> resultFactory : this) {
-			String name = resultFactory.getName(document);
-			
-			if (name != null) {
-				return name;
-			}
-			
-		}
-		
-		return null;
-		
-	}
-
-	public String getType() {
-		return "";
+	public Result createResult(String field, String value) {
+		return new ResultImpl(field, value);
 	}
 
 }

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultImpl.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultImpl.java Mon Aug 10 01:40:02 2009
@@ -9,7 +9,7 @@
 
 import org.apache.tuscany.sca.domain.search.Result;
 
-public abstract class ResultImpl implements Result {
+final public class ResultImpl implements Result {
 
 	private static final long serialVersionUID = 7084570994751217396L;
 
@@ -17,14 +17,26 @@
 
 	private HashMap<String, Result> contents;
 
-	private String name;
+	private String value;
+	
+	private String field;
 
 	public ResultImpl() {
 		// empty constructor
 	}
 
-	public ResultImpl(String name) {
-		this.name = name;
+	public ResultImpl(String field, String value) {
+		setValue(value);
+		setField(field);
+		
+	}
+	
+	public String getField() {
+		return this.field;
+	}
+	
+	public void setField(String field) {
+		this.field = field;
 	}
 
 	public Result getContainer() {
@@ -41,8 +53,8 @@
 
 	}
 
-	public String getName() {
-		return this.name;
+	public String getValue() {
+		return this.value;
 	}
 
 	public void setContainer(Result container) {
@@ -69,8 +81,8 @@
 		if (obj instanceof Result) {
 			Result artifactResult = (Result) obj;
 
-			if (artifactResult.getName() == this.name || this.name != null
-					&& this.name.equals(artifactResult.getName())) {
+			if (artifactResult.getValue() == this.value || this.value != null
+					&& this.value.equals(artifactResult.getValue())) {
 
 				if (artifactResult.getContainer() == this.container
 						|| this.container != null
@@ -96,7 +108,7 @@
 	}
 
 	public void addContent(Result artifactResult) {
-		internalGetContents().put(artifactResult.getName(), artifactResult);
+		internalGetContents().put(artifactResult.getValue(), artifactResult);
 		
 		if (artifactResult.getContainer() != this) {
 			artifactResult.setContainer(this);
@@ -139,22 +151,22 @@
 				* 31
 				+ (this.contents == null || this.contents.isEmpty() ? 13
 						: this.contents.hashCode());
-		hash = hash * 31 + (this.name == null ? 17 : this.name.hashCode());
+		hash = hash * 31 + (this.value == null ? 17 : this.value.hashCode());
 
 		return hash;
 
 	}
 
-	public void setName(String name) {
-		this.name = name;
+	public void setValue(String value) {
+		this.value = value;
 	}
 
 	public String toString() {
 		StringBuilder sb = new StringBuilder("<");
 		Result container = getContainer();
 		
-		sb.append(getClass().getName()).append(" name='").append(getName())
-				.append("' container='").append(container != null ? container.getName() : null).append("'>\n");
+		sb.append(getClass().getName()).append(" name='").append(getValue())
+				.append("' container='").append(container != null ? container.getValue() : null).append("'>\n");
 
 		Method[] methods = getClass().getMethods();
 

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ResultProcessorList.java Mon Aug 10 01:40:02 2009
@@ -4,145 +4,162 @@
 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;
 		}
-		
+
 	}
 
 }

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SearchFields.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SearchFields.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SearchFields.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SearchFields.java Mon Aug 10 01:40:02 2009
@@ -2,11 +2,7 @@
 
 public interface SearchFields {
 
-	final public static String LOCATION_FIELD = "location";
-	
-	final public static String DIRECTORY_FIELD = "directory";
-	
-	final public static String FILE_FIELD = "file";
+	final public static String ARTIFACT_FIELD = "artifact";
 	
 	final public static String COMPONENT_TYPE_FIELD = "componenttype";
 	
@@ -18,8 +14,6 @@
 	
 	final public static String BINDING_FIELD = "binding";
 	
-	final public static String ARTIFACT_FIELD = "artifact";
-	
 	final public static String CONTRIBUTION_FIELD = "contribution";
 	
 	final public static String COMPONENT_FIELD = "component";
@@ -48,7 +42,7 @@
 	
 	final public static String INCLUDEDBY_FIELD = "includedby";
 	
-	final public static String KEY_FIELD = "propertykey";
+	final public static String PROPERTY_KEY_FIELD = "propertykey";
 
 	final public static String VALUE_FIELD = "propertyvalue";
 	

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SystemFileContent.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SystemFileContent.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SystemFileContent.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/SystemFileContent.java Mon Aug 10 01:40:02 2009
@@ -5,24 +5,26 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-public class SystemFileContent extends File implements FileContent {
+public class SystemFileContent implements FileContent {
 
 	private static final long serialVersionUID = -8337926886777467728L;
 
 	final boolean leaf;
-
+	
 	final private File file;
 
 	public SystemFileContent(File file) {
-		super(file.getPath());
-
 		this.leaf = !file.isDirectory();
 		this.file = file;
 
 	}
-
+	
+	public File getFile() {
+		return this.file;
+	}
+	
 	public InputStream getInputStream() throws IOException {
-		return new FileInputStream(this);
+		return new FileInputStream(this.file);
 	}
 
 	public FileContent[] getChildren() {
@@ -41,4 +43,12 @@
 		return this.leaf;
 	}
 
+	public String getName() {
+		return this.file.getName();
+	}
+
+	public String getPath() {
+		return this.file.getPath();
+	}
+
 }

Added: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/WrappedFileContent.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/WrappedFileContent.java?rev=802637&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/WrappedFileContent.java (added)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/WrappedFileContent.java Mon Aug 10 01:40:02 2009
@@ -0,0 +1,91 @@
+package org.apache.tuscany.sca.domain.search.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.JarURLConnection;
+import java.net.URL;
+
+public class WrappedFileContent implements FileContent {
+
+	final private FileContent fileContent;
+
+	public WrappedFileContent(URL url) throws IOException {
+		String protocol = url.getProtocol();
+
+		if (protocol.equals("jar")) {
+			JarURLConnection jarConn = (JarURLConnection) url.openConnection();
+			//Enumeration<JarEntry> entries = jarConn.getJarFile().entries();
+			String file = url.getFile();
+			file = file.substring(file.lastIndexOf('!') + 1);
+			
+//			if (file.charAt(file.length() - 1) != '/') {
+//				
+//				int beginIndex;
+//				
+//				if (file.charAt(0) == '/') {
+//					beginIndex = 1;
+//					 
+//				} else {
+//					beginIndex = 0;
+//				}
+//				
+//				file = file.substring(beginIndex);
+//			
+//				while (entries.hasMoreElements()) {
+//					String actualFile = entries.nextElement().getName();
+//					
+//					if (actualFile.charAt(0) == '/') {
+//						beginIndex = 1;
+//						
+//					} else {
+//						beginIndex = 0;
+//					}
+//					
+//					if (actualFile.length() - beginIndex == file.length() + 1 && actualFile.charAt(actualFile.length() - 1) == '/') {
+//						
+//						if (actualFile.startsWith(file, beginIndex)) {
+//							file = actualFile;
+//							
+//							break;
+//							
+//						}
+//						
+//					}
+//					
+//				}
+//				
+//			}
+			
+			this.fileContent = ZipFileContent.createZipFileContent(jarConn.getJarFile(), file);
+
+		} else if (protocol.equals("file")) {
+			this.fileContent = new SystemFileContent(new File(url.getFile()));
+
+		} else {
+			this.fileContent = new DefaultFileContent(url);
+		}
+
+	}
+
+	public FileContent[] getChildren() {
+		return this.fileContent.getChildren();
+	}
+
+	public InputStream getInputStream() throws IOException {
+		return this.fileContent.getInputStream();
+	}
+
+	public String getName() {
+		return this.fileContent.getName();
+	}
+
+	public String getPath() {
+		return this.fileContent.getPath();
+	}
+
+	public boolean isLeaf() {
+		return this.fileContent.isLeaf();
+	}
+
+}

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipDocumentProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipDocumentProcessor.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipDocumentProcessor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipDocumentProcessor.java Mon Aug 10 01:40:02 2009
@@ -2,7 +2,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
 import org.apache.lucene.document.Field;
@@ -11,8 +10,6 @@
 
 public class ZipDocumentProcessor implements DocumentProcessor {
 	
-	final public static char ARCHIVE_SEPARATOR = '\u0004';
-
 	public Object getDocumentKey(Object object) {
 
 		if (object instanceof File) {
@@ -39,18 +36,18 @@
 			SystemFileContent file = (SystemFileContent) object;
 
 			try {
-				ZipFile zip = new ZipFile(file);
+				ZipFile zip = new ZipFile(file.getFile());
 				
 				if (document == null) {
 					document = documents.get(file.getPath());
 				}
 
 				parent += DomainPathAnalyzer.PATH_SEPARATOR
-						+ SearchFields.FILE_FIELD
-						+ DomainPathAnalyzer.TYPE_SEPARATOR + file.getPath() + ARCHIVE_SEPARATOR
+						+ SearchFields.ARTIFACT_FIELD
+						+ DomainPathAnalyzer.TYPE_SEPARATOR + "jar:file:" + file.getPath() + DomainPathAnalyzer.ARCHIVE_SEPARATOR + '/' + file.getName()
 						+ DomainPathAnalyzer.URI_SEPARATOR + file.getName();
 				
-				document.add(new Field(SearchFields.FILE_FIELD, file.getName(), Field.Store.YES,
+				document.add(new Field(SearchFields.ARTIFACT_FIELD, file.getName(), Field.Store.YES,
 						Field.Index.ANALYZED));
 
 				ZipFileContent[] zipFiles = ZipFileContent.createZipFileContent(zip);

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipFileContent.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipFileContent.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipFileContent.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/main/java/org/apache/tuscany/sca/domain/search/impl/ZipFileContent.java Mon Aug 10 01:40:02 2009
@@ -7,20 +7,18 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
-import org.apache.tuscany.sca.domain.search.DocumentProcessor;
-
 public class ZipFileContent implements FileContent {
-	
+
 	final private ZipFile file;
-	
+
 	final private ZipEntry entry;
-	
+
 	private FileContent[] children;
-	
+
 	private ZipFileContent(ZipFile file, ZipEntry entry) {
 		this.file = file;
 		this.entry = entry;
-		
+
 	}
 
 	public InputStream getInputStream() throws IOException {
@@ -28,7 +26,8 @@
 	}
 
 	public String getPath() {
-		return this.file.getName() + ZipDocumentProcessor.ARCHIVE_SEPARATOR + '/' +  this.entry.getName();
+		return this.file.getName() + DomainPathAnalyzer.ARCHIVE_SEPARATOR + '/'
+				+ this.entry.getName();
 	}
 
 	public FileContent[] getChildren() {
@@ -36,153 +35,270 @@
 	}
 
 	public String getName() {
-		String name = this.entry.getName();
-		int lastSlashIndex = name.lastIndexOf('/');
-		
-		if (lastSlashIndex == -1) {
-			return name;
-		}
-		
-		if (lastSlashIndex == name.length() - 1 && name.length() > 1) {
-			lastSlashIndex = name.lastIndexOf('/', name.length() - 2);
-			
-			if (lastSlashIndex == -1) {
-				return name.substring(0, name.length() - 1);
-			}
-			
-			return name.substring(lastSlashIndex + 1, name.length() - 1);
-			
-		}
-		
-		return name.substring(lastSlashIndex + 1);
-		
+		return this.entry.getName();
+//		int lastSlashIndex = name.lastIndexOf('/');
+//
+//		if (lastSlashIndex == -1) {
+//			return name;
+//		}
+//
+//		if (lastSlashIndex == name.length() - 1 && name.length() > 1) {
+//			lastSlashIndex = name.lastIndexOf('/', name.length() - 2);
+//
+//			if (lastSlashIndex == -1) {
+//				return name.substring(0, name.length() - 1);
+//			}
+//
+//			return name.substring(lastSlashIndex + 1, name.length() - 1);
+//
+//		}
+//
+//		return name.substring(lastSlashIndex + 1);
+
 	}
 
 	public boolean isLeaf() {
 		return !this.entry.isDirectory();
 	}
-	
+
 	public static ZipFileContent[] createZipFileContent(ZipFile file) {
 		Enumeration<? extends ZipEntry> entries = file.entries();
-		
+
 		if (!entries.hasMoreElements()) {
 			return null;
 		}
-		
+
 		HashMap<String, ZipMap> roots = new HashMap<String, ZipMap>();
-		
+
 		do {
 			ZipEntry entry = entries.nextElement();
 			String name = entry.getName();
-			
+
 			if (name.length() > 0) {
-				
+
 				String[] path = name.split("/");
-				
+
 				ZipMap current = roots.get(path[0]);
-				
+
 				if (current == null) {
 					current = new ZipMap();
 					roots.put(path[0], current);
-					
+
 					if (path.length == 1) {
 						current.setEntry(file, entry);
 						continue;
 
 					}
-					
+
 				}
-				
-				for (int i = 1 ; i < path.length - 1 ; i++) {
+
+				for (int i = 1; i < path.length - 1; i++) {
 					ZipMap actual = current.get(path[i]);
-					
+
 					if (actual == null) {
 						actual = new ZipMap();
 						current.put(path[i], actual);
-						
+
 					}
-					
+
 					current = actual;
-					
+
 				}
-				
+
 				ZipMap entryMap = current.get(path[path.length - 1]);
-				
+
 				if (entryMap == null) {
 					entryMap = new ZipMap();
 					current.put(path[path.length - 1], entryMap);
-					
+
 				}
-				
+
 				entryMap.setEntry(file, entry);
-				
+
 			}
-			
+
 		} while (entries.hasMoreElements());
-		
+
 		for (ZipMap map : roots.values()) {
 			createZipFileContentChildren(map);
 		}
-		
+
 		ZipFileContent[] ret = new ZipFileContent[roots.size()];
 		int i = 0;
-		
+
 		for (ZipMap rootMap : roots.values()) {
 			ret[i++] = rootMap.zipContent;
 		}
-		
+
 		return ret;
+
+	}
+
+	public static ZipFileContent createZipFileContent(ZipFile file,
+			String filePath) {
+
+		Enumeration<? extends ZipEntry> entries = file.entries();
+
+		if (!entries.hasMoreElements()) {
+			return null;
+		}
+
+		int beginIndex;
+		int endIndex;
+
+		if (filePath.charAt(0) == '/') {
+			beginIndex = 1;
+
+		} else {
+			beginIndex = 0;
+		}
+
+		ZipMap root = new ZipMap();
 		
+		if (filePath.length() > 1
+				&& filePath.charAt(filePath.length() - 1) == '/') {
+			endIndex = filePath.length() - 1;
+
+		} else {
+			endIndex = filePath.length();
+		}
+
+		filePath = filePath.substring(beginIndex, endIndex);
+		// HashMap<String, ZipMap> roots = new HashMap<String, ZipMap>();
+
+		do {
+			ZipEntry entry = entries.nextElement();
+			String name = entry.getName();
+
+			if (name.length() > 0) {
+				
+				if (name.charAt(name.length() - 1) == '/') {
+					endIndex = 1;
+					
+				} else {
+					endIndex = 0;
+				}
+				
+				if (name.length() - endIndex == filePath.length()) {
+					root.setEntry(file, entry);
+					
+				} else if (filePath.length() == 0 || (name.startsWith(filePath) && name.charAt(filePath.length()) == '/')) {
+				
+					name = name.substring(filePath.length());
+					String[] path = name.split("/");
+
+					ZipMap current = root;
+
+					// if (current == null) {
+					// current = new ZipMap();
+					// roots.put(path[0], current);
+					//
+					// if (path.length == 1) {
+					// current.setEntry(file, entry);
+					// continue;
+					//
+					// }
+					//
+					// }
+
+					if (path.length > 0) {
+
+						int i;
+						
+						if (path[0].length() == 0) {
+							i = 1;
+							
+						} else {
+							i = 0;
+						}
+						
+						for (; i < path.length - 1; i++) {
+							ZipMap actual = current.get(path[i]);
+
+							if (actual == null) {
+								actual = new ZipMap();
+								current.put(path[i], actual);
+
+							}
+
+							current = actual;
+
+						}
+
+						ZipMap entryMap = current.get(path[path.length - 1]);
+
+						if (entryMap == null) {
+							entryMap = new ZipMap();
+							current.put(path[path.length - 1], entryMap);
+
+						}
+						
+						entryMap.setEntry(file, entry);
+
+					}
+
+				}
+
+			}
+
+		} while (entries.hasMoreElements());
+
+		createZipFileContentChildren(root);
+
+		return root.zipContent;
+
 	}
-	
+
 	private static void createZipFileContentChildren(ZipMap map) {
 		ZipFileContent[] children = new ZipFileContent[map.size()];
 		int i = 0;
-		
+
 		for (ZipMap childMap : map.values()) {
-			
+
 			if (childMap.zipContent == null) {
-				throw new RuntimeException("could not load zip file hierarchy for file: " + map.zipContent.file);
+				throw new RuntimeException(
+						"could not load zip file hierarchy for file: "
+								+ map.zipContent.file);
 			}
-			
+
 			children[i++] = childMap.zipContent;
-			
+
 			createZipFileContentChildren(childMap);
-			
+
 		}
-		
+
 		map.zipContent.children = children;
-		
+
 	}
-	
+
 	@Override
 	public String toString() {
 		return this.file.getName() + '/' + this.entry.getName();
 	}
-	
+
 	private static class ZipMap extends HashMap<String, ZipMap> {
-		
+
 		private static final long serialVersionUID = 6514645087432837480L;
-		
+
 		ZipFileContent zipContent;
-		
+
 		void setEntry(ZipFile zipFile, ZipEntry entry) {
 			this.zipContent = new ZipFileContent(zipFile, entry);
 		}
-		
+
 		ZipFileContent[] getChildren() {
-			
+
 			ZipFileContent ret[] = new ZipFileContent[this.size()];
 			int i = 0;
-			
+
 			for (ZipMap actual : this.values()) {
 				ret[i++] = actual.zipContent;
 			}
-			
+
 			return ret;
-			
+
 		}
-		
+
 	}
 
 }

Modified: tuscany/branches/sca-java-1.x/modules/domain-search/src/test/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzerTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/domain-search/src/test/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzerTestCase.java?rev=802637&r1=802636&r2=802637&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/domain-search/src/test/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzerTestCase.java (original)
+++ tuscany/branches/sca-java-1.x/modules/domain-search/src/test/java/org/apache/tuscany/sca/domain/search/impl/DomainPathAnalyzerTestCase.java Mon Aug 10 01:40:02 2009
@@ -15,12 +15,13 @@
 	public void test() throws IOException {
 		
 		Tokenizer tokenizer = new DomainPathAnalyzer.DomainPathTokenizer(new StringReader(
-				DomainPathAnalyzer.PATH_SEPARATOR + SearchFields.CONTRIBUTION_FIELD + DomainPathAnalyzer.TYPE_SEPARATOR + "123tuscany" + DomainPathAnalyzer.TYPE_SEPARATOR + "SCA" +
+				Character.toString(DomainPathAnalyzer.PATH_START) + SearchFields.CONTRIBUTION_FIELD + DomainPathAnalyzer.TYPE_SEPARATOR + "123tuscany" + DomainPathAnalyzer.PATH_START + DomainPathAnalyzer.TYPE_SEPARATOR + "SCA" +
 				DomainPathAnalyzer.PATH_SEPARATOR + DomainPathAnalyzer.TYPE_SEPARATOR + "TuscanySCA" + DomainPathAnalyzer.TYPE_SEPARATOR + "321" + DomainPathAnalyzer.URI_SEPARATOR + "123"));
 
-		assertNextToken(Character.toString(DomainPathAnalyzer.PATH_SEPARATOR), tokenizer);
+		assertNextToken(Character.toString(DomainPathAnalyzer.PATH_START), tokenizer);
 		assertNextToken("123", tokenizer);
 		assertNextToken("tuscany", tokenizer);
+		assertNextToken(Character.toString(DomainPathAnalyzer.PATH_START), tokenizer);
 		assertNextToken("sca", tokenizer);
 		assertNextToken(Character.toString(DomainPathAnalyzer.PATH_SEPARATOR), tokenizer);
 		assertNextToken("tuscany", tokenizer);