private void registerExtractedTextProvider(PreExtractedTextProvider provider){ if (extractedTextCache != null){ if (provider != null){ String usage = extractedTextCache.isAlwaysUsePreExtractedCache() ? "always" : "only during reindexing phase"; log.info("Registering PreExtractedTextProvider {} with extracted text cache. " + "It would be used {}", provider, usage); } else { log.info("Unregistering PreExtractedTextProvider with extracted text cache"); } extractedTextCache.setExtractedTextProvider(provider); } }
private void registerExtractedTextProvider(PreExtractedTextProvider provider){ if (extractedTextCache != null){ if (provider != null){ String usage = extractedTextCache.isAlwaysUsePreExtractedCache() ? "always" : "only during reindexing phase"; log.info("Registering PreExtractedTextProvider {} with extracted text cache. " + "It would be used {}", provider, usage); } else { log.info("Unregistering PreExtractedTextProvider with extracted text cache"); } extractedTextCache.setExtractedTextProvider(provider); } }
@Test public void preExtractionAlwaysUse() throws Exception{ ExtractedTextCache cache = new ExtractedTextCache(10 * FileUtils.ONE_MB, 100, true, null); PreExtractedTextProvider provider = mock(PreExtractedTextProvider.class); cache.setExtractedTextProvider(provider); when(provider.getText(anyString(), any(Blob.class))) .thenReturn(new ExtractedText(ExtractionResult.SUCCESS, "bar")); Blob b = new IdBlob("hello", "a"); String text = cache.get("/a", "foo", b, false); assertEquals("bar", text); }
@Test public void preExtractionReindex() throws Exception{ ExtractedTextCache cache = new ExtractedTextCache(10 * FileUtils.ONE_MB, 100); PreExtractedTextProvider provider = mock(PreExtractedTextProvider.class); cache.setExtractedTextProvider(provider); when(provider.getText(anyString(), any(Blob.class))) .thenReturn(new ExtractedText(ExtractionResult.SUCCESS, "bar")); Blob b = new IdBlob("hello", "a"); String text = cache.get("/a", "foo", b, true); assertEquals("bar", text); }
@Test public void preExtractionNoReindex() throws Exception{ ExtractedTextCache cache = new ExtractedTextCache(10 * FileUtils.ONE_MB, 100); PreExtractedTextProvider provider = mock(PreExtractedTextProvider.class); cache.setExtractedTextProvider(provider); Blob b = new IdBlob("hello", "a"); String text = cache.get("/a", "foo", b, false); assertNull(text); verifyZeroInteractions(provider); }
@Test public void preExtractedTextProvider() throws Exception{ Tree idx = createFulltextIndex(root.getTree("/"), "test"); TestUtil.useV2(idx); root.commit(); AccessStateProvidingBlob testBlob = new AccessStateProvidingBlob("fox is jumping", "id1"); MapBasedProvider textProvider = new MapBasedProvider(); textProvider.write("id1","lion"); editorProvider.getExtractedTextCache().setExtractedTextProvider(textProvider); Tree test = root.getTree("/").addChild("test"); createFileNode(test, "text", testBlob, "text/plain"); root.commit(); //As its not a reindex case actual blob content would be accessed assertTrue(testBlob.isStreamAccessed()); assertQuery("select * from [nt:base] where CONTAINS(*, 'fox ')", asList("/test/text/jcr:content")); assertEquals(0, textProvider.accessCount); testBlob.resetState(); //Lets trigger a reindex root.getTree(idx.getPath()).setProperty(IndexConstants.REINDEX_PROPERTY_NAME, true); root.commit(); //Now the content should be provided by the PreExtractedTextProvider //and instead of fox its lion! assertFalse(testBlob.isStreamAccessed()); assertQuery("select * from [nt:base] where CONTAINS(*, 'lion ')", asList("/test/text/jcr:content")); assertEquals(1, textProvider.accessCount); }