diff --git a/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java b/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java index 66b5f8b86..67ea242fa 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java +++ b/src/main/java/org/codelibs/fess/thumbnail/impl/BaseThumbnailGenerator.java @@ -15,7 +15,9 @@ */ package org.codelibs.fess.thumbnail.impl; +import static org.codelibs.core.stream.StreamUtil.stream; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -34,7 +36,9 @@ public abstract class BaseThumbnailGenerator implements ThumbnailGenerator { protected int directoryNameLength = 5; - public List generatorList; + protected List generatorList; + + protected Map filePathMap = new HashMap<>(); public void addCondition(final String key, final String regex) { conditionMap.put(key, regex); @@ -54,7 +58,31 @@ public abstract class BaseThumbnailGenerator implements ThumbnailGenerator { @Override public boolean isAvailable() { if (generatorList != null && !generatorList.isEmpty()) { - return generatorList.stream().allMatch(s -> new File(s).isFile()); + String path = System.getenv("PATH"); + if (path == null) { + path = System.getenv("Path"); + } + if (path == null) { + path = System.getenv("path"); + } + final List pathList = new ArrayList<>(); + pathList.add("/usr/share/fess/bin"); + if (path != null) { + stream(path.split(File.pathSeparator)).of(stream -> stream.map(s -> s.trim()).forEach(s -> pathList.add(s))); + } + return generatorList.stream().map(s -> { + if (s.startsWith("${path}")) { + for (String p : pathList) { + final File f = new File(s.replace("${path}", p)); + if (f.exists()) { + final String filePath = f.getAbsolutePath(); + filePathMap.put(s, filePath); + return filePath; + } + } + } + return s; + }).allMatch(s -> new File(s).isFile()); } return true; } @@ -63,4 +91,15 @@ public abstract class BaseThumbnailGenerator implements ThumbnailGenerator { this.directoryNameLength = directoryNameLength; } + protected String expandPath(String value) { + if (value != null && filePathMap.containsKey(value)) { + return filePathMap.get(value); + } + return value; + } + + public void setGeneratorList(List generatorList) { + this.generatorList = generatorList; + } + } \ No newline at end of file diff --git a/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java b/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java index e2a0fa4a7..aa5cd3db9 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java +++ b/src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java @@ -81,7 +81,7 @@ public class CommandGenerator extends BaseThumbnailGenerator { final String outputPath = outputFile.getAbsolutePath(); final List cmdList = new ArrayList<>(); for (final String value : commandList) { - cmdList.add(value.replace("${url}", url).replace("${outputFile}", outputPath)); + cmdList.add(expandPath(value.replace("${url}", url).replace("${outputFile}", outputPath))); } ProcessBuilder pb = null; diff --git a/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java b/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java index 9d06651de..cd90904ac 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java +++ b/src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java @@ -31,6 +31,7 @@ import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.phantomjs.PhantomJSDriver; +import org.openqa.selenium.remote.DesiredCapabilities; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,16 +53,28 @@ public class WebDriverGenerator extends BaseThumbnailGenerator { @PostConstruct public void init() { - try { - if (webDriver == null) { - webDriver = webDriverCapabilities == null ? new PhantomJSDriver() : new PhantomJSDriver(webDriverCapabilities); - } - webDriver.manage().window().setSize(new Dimension(windowWidth, windowHeight)); - } catch (final Exception e) { - if (logger.isDebugEnabled()) { - logger.debug("WebDriver is not available for generating thumbnails.", e); - } else { - logger.info("WebDriver is not available for generating thumbnails."); + if (super.isAvailable()) { + try { + if (webDriver == null) { + if (webDriverCapabilities == null) { + webDriver = new PhantomJSDriver(); + } else { + if (webDriverCapabilities instanceof DesiredCapabilities) { + DesiredCapabilities capabilities = (DesiredCapabilities) webDriverCapabilities; + webDriverCapabilities.asMap().entrySet().stream() + .filter(e -> e.getValue() instanceof String && filePathMap.containsKey(e.getValue().toString())) + .forEach(e -> capabilities.setCapability(e.getKey(), filePathMap.get(e.getValue().toString()))); + } + webDriver = new PhantomJSDriver(webDriverCapabilities); + } + } + webDriver.manage().window().setSize(new Dimension(windowWidth, windowHeight)); + } catch (final Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("WebDriver is not available for generating thumbnails.", e); + } else { + logger.info("WebDriver is not available for generating thumbnails."); + } } } } diff --git a/src/main/resources/fess_thumbnail.xml b/src/main/resources/fess_thumbnail.xml index 930554d82..b331b824c 100644 --- a/src/main/resources/fess_thumbnail.xml +++ b/src/main/resources/fess_thumbnail.xml @@ -11,11 +11,14 @@ + + ["${path}/phantomjs"] + "phantomjs.binary.path" - "/usr/bin/phantomjs" + "${path}/phantomjs" @@ -27,13 +30,13 @@ - ["/usr/share/fess/bin/generate-thumbnail", + ["${path}/generate-thumbnail", "msoffice", "${url}", "${outputFile}"] - ["/usr/share/fess/bin/generate-thumbnail"] + ["${path}/generate-thumbnail"] "mimetype"