Java tutorial
package org.apache.maven.index.updater; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.apache.lucene.document.Document; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import org.apache.maven.index.AbstractRepoNexusIndexerTest; import org.apache.maven.index.ArtifactInfo; import org.apache.maven.index.NexusIndexer; import org.apache.maven.index.context.IndexUtils; import org.apache.maven.index.updater.DefaultIndexUpdater; import org.apache.maven.index.updater.IndexDataWriter; /** * @author Eugene Kuleshov */ public class IndexDataTest extends AbstractRepoNexusIndexerTest { private Directory newDir; @Override protected void prepareNexusIndexer(NexusIndexer nexusIndexer) throws Exception { indexDir = new RAMDirectory(); context = nexusIndexer.addIndexingContext("test-default", "test", repo, indexDir, null, null, DEFAULT_CREATORS); // assertNull( context.getTimestamp() ); // unknown upon creation nexusIndexer.scan(context); Date timestamp = context.getTimestamp(); assertNotNull(timestamp); // save and restore index to be used by common tests ByteArrayOutputStream bos = new ByteArrayOutputStream(); IndexDataWriter dw = new IndexDataWriter(bos); final IndexSearcher indexSearcher = context.acquireIndexSearcher(); try { dw.write(context, indexSearcher.getIndexReader(), null); } finally { context.releaseIndexSearcher(indexSearcher); } ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray()); newDir = new RAMDirectory(); Date newTimestamp = DefaultIndexUpdater.unpackIndexData(is, newDir, context).getTimestamp(); assertEquals(timestamp, newTimestamp); context.replace(newDir); } public void testEmptyContext() throws Exception { indexDir = new RAMDirectory(); context = nexusIndexer.addIndexingContext("test-default", "test", repo, indexDir, null, null, DEFAULT_CREATORS); assertNull(context.getTimestamp()); // unknown upon creation // save and restore index to be used by common tests // the point is that this is virgin context, and timestamp is null, // and it should remain null ByteArrayOutputStream bos = new ByteArrayOutputStream(); IndexDataWriter dw = new IndexDataWriter(bos); final IndexSearcher indexSearcher = context.acquireIndexSearcher(); try { dw.write(context, indexSearcher.getIndexReader(), null); } finally { context.releaseIndexSearcher(indexSearcher); } ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray()); newDir = new RAMDirectory(); Date newTimestamp = DefaultIndexUpdater.unpackIndexData(is, newDir, context).getTimestamp(); assertEquals(null, newTimestamp); context.replace(newDir); } public void testData() throws Exception { IndexReader r1 = context.acquireIndexSearcher().getIndexReader(); Map<String, ArtifactInfo> r1map = readIndex(r1); IndexReader r2 = DirectoryReader.open(newDir); Map<String, ArtifactInfo> r2map = readIndex(r2); for (Entry<String, ArtifactInfo> e : r1map.entrySet()) { String key = e.getKey(); assertTrue("Expected for find " + key, r2map.containsKey(key)); } assertEquals(r1map.size(), r2map.size()); } private Map<String, ArtifactInfo> readIndex(IndexReader r1) throws CorruptIndexException, IOException { Map<String, ArtifactInfo> map = new HashMap<String, ArtifactInfo>(); for (int i = 0; i < r1.maxDoc(); i++) { Document document = r1.document(i); ArtifactInfo ai = IndexUtils.constructArtifactInfo(document, context); if (ai != null) { map.put(ai.getUinfo(), ai); } } return map; } }