X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2FExternalTools.java;h=8cd1aef178f44c80674af5923a7a4937ec9e4466;hb=6f96fb8a39cd8dadff3602eec8a26ed2a7d1fca8;hp=cd65fffd519d68a95a21b0623dac2146d3e0048b;hpb=5625a1abadb5f2ca5f017fe7dbda1d5141cb637b;p=GpsPrune.git diff --git a/tim/prune/ExternalTools.java b/tim/prune/ExternalTools.java index cd65fff..8cd1aef 100644 --- a/tim/prune/ExternalTools.java +++ b/tim/prune/ExternalTools.java @@ -2,46 +2,90 @@ package tim.prune; import java.io.IOException; +import tim.prune.config.Config; + /** * Class to manage interfaces to external tools, like exiftool */ public abstract class ExternalTools { + /** Constant for Exiftool */ + public static final int TOOL_EXIFTOOL = 0; + /** Constant for Gpsbabel */ + public static final int TOOL_GPSBABEL = 1; + /** Constant for Gnuplot */ + public static final int TOOL_GNUPLOT = 2; + /** Constant for Xerces xml library */ + public static final int TOOL_XERCES = 3; + /** Config keys in order that the tools are defined above */ + private static final String[] CONFIG_KEYS = {Config.KEY_EXIFTOOL_PATH, Config.KEY_GPSBABEL_PATH, Config.KEY_GNUPLOT_PATH}; + /** Verification flags for the tools in the order defined above */ + private static final String[] VERIFY_FLAGS = {"-v", "-V", "-V"}; + /** - * Attempt to call Povray to see if it's installed / available in path - * @return true if found, false otherwise + * Check if the selected tool is installed + * @param inToolNum number of tool, from constants + * @return true if selected tool is installed */ - public static boolean isPovrayInstalled() + public static boolean isToolInstalled(int inToolNum) { - try - { - Runtime.getRuntime().exec("povray"); - return true; - } - catch (IOException ioe) - { - // exception thrown, povray not found - return false; + switch (inToolNum) { + case TOOL_EXIFTOOL: + case TOOL_GPSBABEL: + case TOOL_GNUPLOT: + String toolPath = Config.getConfigString(CONFIG_KEYS[inToolNum]); + if (toolPath != null && toolPath.length() > 0) { + return check(toolPath + " " + VERIFY_FLAGS[inToolNum]); + } + break; + case TOOL_XERCES: + try { + return Class.forName("org.apache.xerces.parsers.SAXParser").getClassLoader() != null; + } + catch (ClassNotFoundException e) { + // System.err.println(e.getClass().getName() + " : " + e.getMessage()); + } + break; } + // Not found + return false; } + /** + * Check if the selected tool is installed using the given path + * @param inToolNum number of tool, from constants + * @param inPath selected path to use instead of configured one + * @return true if selected tool is installed + */ + public static boolean isToolInstalled(int inToolNum, String inPath) + { + if (inPath == null || inPath.equals("")) {return false;} + switch (inToolNum) { + case TOOL_EXIFTOOL: + case TOOL_GPSBABEL: + case TOOL_GNUPLOT: + return check(inPath + " " + VERIFY_FLAGS[inToolNum]); + } + // Not found + return false; + } /** - * Attempt to call Exiftool to see if it's installed / available in path + * Attempt to call the specified command * @return true if found, false otherwise */ - public static boolean isExiftoolInstalled() + private static boolean check(String inCommand) { try { - Runtime.getRuntime().exec("exiftool -v"); + Runtime.getRuntime().exec(inCommand); return true; } catch (IOException ioe) { - // exception thrown, exiftool not found + // exception thrown, command not found return false; } }