diff --git a/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/Config.java b/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/Config.java index 7179b12..c25d59e 100644 --- a/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/Config.java +++ b/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/Config.java @@ -144,8 +144,13 @@ public RestTemplate createRestTemplate() { } @Bean - public GenericEntityListener createGenericEntityListener() { - return new GenericEntityListener(); + public GenericEntityListener createGenericEntityListener( + @Value("${aodn.geonetwork4.esIndexer.apikey}") String apiKey, + @Value("${aodn.geonetwork4.esIndexer.host}") String host, + @Value("${aodn.geonetwork4.esIndexer.urlIndex}") String indexUrl, + RestTemplate restTemplate) { + + return new GenericEntityListener(apiKey, host, indexUrl, restTemplate); } /** * Must use prototype scope as there is a XSRF-TOKEN header for each api, that cannot share diff --git a/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/handler/GenericEntityListener.java b/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/handler/GenericEntityListener.java index 458a4dd..9b0fb2c 100644 --- a/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/handler/GenericEntityListener.java +++ b/geonetwork-core/src/main/java/au/org/aodn/geonetwork4/handler/GenericEntityListener.java @@ -6,7 +6,6 @@ import org.fao.geonet.entitylistener.GeonetworkEntityListener; import org.fao.geonet.entitylistener.PersistentEventType; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.*; import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.RestTemplate; @@ -33,13 +32,10 @@ public class GenericEntityListener implements GeonetworkEntityListener protected static final String UUID = "uuid"; - @Value("${aodn.geonetwork4.esIndexer.urlIndex}") protected String indexUrl; - @Value("${aodn.geonetwork4.esIndexer.apikey}") protected String apiKey; - @Autowired protected RestTemplate restTemplate; @Override @@ -54,6 +50,14 @@ public void cleanUp() { protected int delayStart = 5; + @Autowired + public GenericEntityListener(String apiKey, String host, String indexUrl, RestTemplate restTemplate) { + + this.apiKey = apiKey; + this.indexUrl = host != null && !host.isEmpty() ? indexUrl : null; + this.restTemplate = restTemplate; + } + @PostConstruct public void init() { if(indexUrl == null) { diff --git a/geonetwork-core/src/main/resources/application.properties b/geonetwork-core/src/main/resources/application.properties index d9d25ac..f7d03bb 100644 --- a/geonetwork-core/src/main/resources/application.properties +++ b/geonetwork-core/src/main/resources/application.properties @@ -1,4 +1,4 @@ -aodn.geonetwork4.esIndexer.host=${INDEXER_HOST:http://localhost} +aodn.geonetwork4.esIndexer.host=${INDEXER_HOST:} aodn.geonetwork4.esIndexer.port=${INDEXER_PORT:80} aodn.geonetwork4.esIndexer.apikey=${INDEXER_APIKEY} aodn.geonetwork4.esIndexer.urlIndex=${aodn.geonetwork4.esIndexer.host}:${aodn.geonetwork4.esIndexer.port}/api/v1/indexer/index/{uuid} diff --git a/geonetwork-core/src/main/resources/log4j-imos.xml b/geonetwork-core/src/main/resources/log4j-imos.xml index 3b89e04..43b7e16 100644 --- a/geonetwork-core/src/main/resources/log4j-imos.xml +++ b/geonetwork-core/src/main/resources/log4j-imos.xml @@ -143,6 +143,11 @@ + + + + + diff --git a/geonetwork-core/src/test/java/au/org/aodn/geonetwork4/handler/GenericEntityListenerTest.java b/geonetwork-core/src/test/java/au/org/aodn/geonetwork4/handler/GenericEntityListenerTest.java index 5546f2a..04a78ec 100644 --- a/geonetwork-core/src/test/java/au/org/aodn/geonetwork4/handler/GenericEntityListenerTest.java +++ b/geonetwork-core/src/test/java/au/org/aodn/geonetwork4/handler/GenericEntityListenerTest.java @@ -25,14 +25,14 @@ public class GenericEntityListenerTest { @Test public void verifyUpdateDeleteBehavior() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); - GenericEntityListener listener = new GenericEntityListener(); RestTemplate template = Mockito.mock(RestTemplate.class); // Set of test only, a mock to count what have been called - listener.indexUrl = "http://localhost/api/v1/indexer/index/{uuid}"; - listener.apiKey = "test-key"; - listener.restTemplate = template; - + GenericEntityListener listener = new GenericEntityListener( + "test-key", + "localhost", + "http://localhost/api/v1/indexer/index/{uuid}", + template); listener.init(); // Test data @@ -80,7 +80,6 @@ public void verifyUpdateDeleteBehavior() throws InterruptedException { @Test public void verifyRetryBehavior() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); - GenericEntityListener listener = new GenericEntityListener(); RestTemplate template = Mockito.mock(RestTemplate.class); // Throw exception on first call @@ -105,9 +104,11 @@ public void verifyRetryBehavior() throws InterruptedException { .thenReturn(ResponseEntity.ok(null)); // Set of test only, a mock to count what have been called - listener.indexUrl = "http://localhost/api/v1/indexer/index/{uuid}"; - listener.apiKey = "test-key"; - listener.restTemplate = template; + GenericEntityListener listener = new GenericEntityListener( + "test-key", + "localhost", + "http://localhost/api/v1/indexer/index/{uuid}", + template); listener.init(); @@ -132,4 +133,23 @@ public void verifyRetryBehavior() throws InterruptedException { assertEquals("Map not contains uuid", 0, listener.updateMap.size()); assertEquals("Delete not contains uuid", 0, listener.deleteMap.size()); } + /** + * If host null, then we disable api call to indexer + */ + @Test + public void verifyIndexerCanBeDisabled() { + RestTemplate template = Mockito.mock(RestTemplate.class); + GenericEntityListener listener = new GenericEntityListener( + "test-key", + null, + "http://localhost/api/v1/indexer/index/{uuid}", + template); + + listener.init(); + listener.handleEvent(PersistentEventType.PostUpdate, new Metadata()); + listener.handleEvent(PersistentEventType.PostRemove, new Metadata()); + + assertTrue("Internal update map empty", listener.updateMap.isEmpty()); + assertTrue("Internal delete map empty", listener.deleteMap.isEmpty()); + } }