/* * 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. */ package org.apache.jena.query.spatial; import java.io.File; import java.io.IOException; import org.apache.jena.atlas.io.IO ; import org.apache.jena.query.Dataset ; import org.apache.jena.query.DatasetFactory ; import org.apache.jena.tdb.TDBFactory ; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; public class SpatialSearchUtil { private static Version VER = SpatialIndexLucene.VER ; private static final Analyzer analyzer = new StandardAnalyzer(VER); private static final String LUCENE_INDEX_PATH = "target/test/LuceneSpatialIndex"; private static final File LUCENE_Index_DIR = new File(LUCENE_INDEX_PATH); private static final String SOLR_DATA_PATH = "target/test/SolrARQCollection/data"; private static final File SOLR_DATA_DIR = new File(SOLR_DATA_PATH); private static final String SOLR_INDEX_PATH = SOLR_DATA_PATH + "/index"; private static final File SOLR_INDEX_DIR = new File(SOLR_INDEX_PATH); private static final String SOLR_TEST_ASSEM = "src/test/resources/spatial-solr-config.ttl" ; public static void emptyAndDeleteDirectory(File dir) { File[] contents = dir.listFiles() ; if (contents != null) { for (File content : contents) { if (content.isDirectory()) { emptyAndDeleteDirectory(content) ; } else { content.delete() ; } } } dir.delete() ; } public static void createEmptyIndex(File indexDir) { try { Directory directory = FSDirectory.open(indexDir) ; IndexWriterConfig wConfig = new IndexWriterConfig(VER, analyzer) ; @SuppressWarnings("resource") IndexWriter indexWriter = new IndexWriter(directory, wConfig) ; indexWriter.close() ; // force creation of the index files } catch (IOException ex) { IO.exception(ex) ; } } public static Dataset initInMemoryDatasetWithSolrSpatitalIndex() { SpatialSearchUtil.deleteOldFiles(SOLR_DATA_DIR ); SOLR_INDEX_DIR.mkdirs(); SpatialSearchUtil.createEmptyIndex(SOLR_INDEX_DIR); return SpatialDatasetFactory.create(SOLR_TEST_ASSEM) ; } public static Dataset initInMemoryDatasetWithLuceneSpatitalIndex() throws IOException{ return initInMemoryDatasetWithLuceneSpatitalIndex(LUCENE_Index_DIR); } public static Dataset initInMemoryDatasetWithLuceneSpatitalIndex(File indexDir) throws IOException{ deleteOldFiles(indexDir); indexDir.mkdirs(); return createDatasetByCode(indexDir); } public static Dataset initTDBDatasetWithLuceneSpatitalIndex(File indexDir, File TDBDir) throws IOException{ deleteOldFiles(indexDir); deleteOldFiles(TDBDir); indexDir.mkdirs(); TDBDir.mkdir(); return createDatasetByCode(indexDir, TDBDir); } public static void deleteOldLuceneIndexDir() { deleteOldFiles(LUCENE_Index_DIR); } public static void deleteOldSolrDataDir() { deleteOldFiles(SOLR_DATA_DIR); } public static void deleteOldFiles(File indexDir) { if (indexDir.exists()) emptyAndDeleteDirectory(indexDir); } private static Dataset createDatasetByCode(File indexDir) throws IOException { // Base data Dataset ds1 = DatasetFactory.create(); return joinDataset(ds1, indexDir); } private static Dataset createDatasetByCode(File indexDir, File TDBDir) throws IOException { // Base data Dataset ds1 = TDBFactory.createDataset(TDBDir.getAbsolutePath()); return joinDataset(ds1, indexDir); } private static Dataset joinDataset(Dataset baseDataset, File indexDir) throws IOException{ EntityDefinition entDef = new EntityDefinition("uri", "geo"); // Lucene, index in File system. Directory dir = FSDirectory.open(indexDir); // Join together into a dataset Dataset ds = SpatialDatasetFactory.createLucene(baseDataset, dir, entDef); return ds; } }