use of org.codice.ddf.spatial.geocoding.GeoEntryIndexingException in project ddf by codice.
the class Geocoding method updateIndex.
private boolean updateIndex(String resource, boolean createIndex) {
final ProgressCallback progressCallback = new ProgressCallback() {
@Override
public void updateProgress(final int progress) {
setProgress(progress);
}
};
LOGGER.trace("Updating GeoNames Index...");
try {
geoEntryIndexer.updateIndex(resource, geoEntryExtractor, createIndex, progressCallback);
LOGGER.trace("\nDone Updating GeoNames Index.");
LOGGER.debug("Done Updating GeoNames Index with : {}", resource);
return true;
} catch (GeoEntryExtractionException e) {
LOGGER.debug("Error extracting GeoNames data from resource {}", resource, e);
return false;
} catch (GeoEntryIndexingException e) {
LOGGER.debug("Error indexing GeoNames data", e);
return false;
} catch (GeoNamesRemoteDownloadException e) {
LOGGER.debug("Error downloading resource from remote source {}", resource, e);
return false;
}
}
use of org.codice.ddf.spatial.geocoding.GeoEntryIndexingException in project ddf by codice.
the class TestGeoNamesUpdateCommand method testExceptionDuringIndexing.
@Test
public void testExceptionDuringIndexing() throws GeoNamesRemoteDownloadException, GeoEntryExtractionException, GeoEntryIndexingException {
final String errorText = "Indexing error text";
final GeoEntryExtractor geoEntryExtractor = mock(GeoEntryExtractor.class);
final GeoEntryIndexer geoEntryIndexer = mock(GeoEntryIndexer.class);
final GeoEntryIndexingException geoEntryIndexingException = new GeoEntryIndexingException(errorText);
doThrow(geoEntryIndexingException).when(geoEntryIndexer).updateIndex(anyString(), any(GeoEntryExtractor.class), anyBoolean(), any(ProgressCallback.class));
geoNamesUpdateCommand.setGeoEntryIndexer(geoEntryIndexer);
geoNamesUpdateCommand.setGeoEntryExtractor(geoEntryExtractor);
geoNamesUpdateCommand.setResource("temp");
geoNamesUpdateCommand.execute();
assertThat(consoleInterceptor.getOutput(), containsString(errorText));
consoleInterceptor.resetSystemOut();
}
use of org.codice.ddf.spatial.geocoding.GeoEntryIndexingException in project ddf by codice.
the class TestGeoNamesLuceneIndexerExceptions method testExceptionWhenAddingDocumentByExtractor.
@Test
public void testExceptionWhenAddingDocumentByExtractor() throws GeoEntryIndexingException, GeoEntryExtractionException, GeoNamesRemoteDownloadException, IOException {
configureMocks();
geoNamesLuceneIndexer.setIndexLocation(ABSOLUTE_PATH + TEST_PATH + "index");
try {
final GeoEntryExtractor geoEntryExtractor = new GeoEntryExtractor() {
@Override
public List<GeoEntry> getGeoEntries(final String resource, final ProgressCallback progressCallback) {
return null;
}
@Override
public void pushGeoEntriesToExtractionCallback(final String resource, final ExtractionCallback extractionCallback) throws GeoEntryExtractionException {
extractionCallback.updateProgress(0);
try {
extractionCallback.extracted(GEO_ENTRY);
} catch (GeoEntryIndexingException e) {
throw new GeoEntryExtractionException("Unable to add entry.", e);
}
}
@Override
public void setUrl(String url) {
return;
}
};
geoNamesLuceneIndexer.updateIndex("", geoEntryExtractor, true, null);
fail("Should have thrown a GeoEntryExtractionException; extractionCallback.extract() threw " + "a GeoEntryIndexingException because addDocument() threw an " + "IOException.");
} catch (GeoEntryExtractionException e) {
assertThat(e.getCause(), instanceOf(GeoEntryIndexingException.class));
}
}
use of org.codice.ddf.spatial.geocoding.GeoEntryIndexingException in project ddf by codice.
the class GeoNamesFileExtractor method pushGeoEntriesToExtractionCallback.
@Override
public void pushGeoEntriesToExtractionCallback(final String resource, final ExtractionCallback extractionCallback) throws GeoEntryExtractionException, GeoNamesRemoteDownloadException {
if (extractionCallback == null) {
throw new IllegalArgumentException("You must pass a non-null callback.");
}
InputStream fileInputStream = getInputStreamFromResource(resource, extractionCallback);
try (InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(inputStreamReader)) {
double bytesRead = 0.0;
for (String line; (line = reader.readLine()) != null; ) {
extractionCallback.extracted(extractGeoEntry(line));
bytesRead += line.getBytes(StandardCharsets.UTF_8).length;
extractionCallback.updateProgress((int) (50 + (bytesRead / fileSize) * 50));
}
extractionCallback.updateProgress(100);
} catch (IOException e) {
throw new GeoEntryExtractionException("Unable to open stream for " + resource, e);
} catch (IndexOutOfBoundsException | NumberFormatException e) {
throw new GeoEntryExtractionException(resource + " does not follow the " + "expected GeoNames file format.", e);
} catch (GeoEntryIndexingException e) {
throw new GeoEntryExtractionException("Unable to extract GeoEntry from " + resource + ".", e);
}
}
use of org.codice.ddf.spatial.geocoding.GeoEntryIndexingException in project ddf by codice.
the class GeoNamesUpdateCommand method execute.
@Override
public Object execute() {
final PrintStream console = System.out;
final ProgressCallback progressCallback = new ProgressCallback() {
@Override
public void updateProgress(final int progress) {
console.printf("\r%d%%", progress);
console.flush();
}
};
console.println("Updating...");
try {
geoEntryIndexer.updateIndex(resource, geoEntryExtractor, create, progressCallback);
console.println("\nDone.");
} catch (GeoEntryExtractionException e) {
LOGGER.debug("Error extracting GeoNames data from resource {}", resource, e);
console.printf("Could not extract GeoNames data from resource %s.%n" + "Message: %s%n" + "Check the logs for more details.%n", resource, e.getMessage());
} catch (GeoEntryIndexingException e) {
LOGGER.debug("Error indexing GeoNames data", e);
console.printf("Could not index the GeoNames data.%n" + "Message: %s%n" + "Check the logs for more details.%n", e.getMessage());
} catch (GeoNamesRemoteDownloadException e) {
LOGGER.debug("Error downloading resource from remote source {}", resource, e);
console.printf("Could not download the GeoNames file %s.%n Message: %s%n" + "Check the logs for more details.%n", resource, e.getMessage());
}
return null;
}
Aggregations