diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java b/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java index 5acdef3f6a8987e769eabc403226a3bdccab81d1..8e82ed8aef065ebf264a9f3c64e9c71c2b3a6283 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java @@ -120,7 +120,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory { final StoreItemFilterBank filterBank = new StoreItemFilterBank(); filterBank.add(new QuietPeriodFileFilter(incomingStore, parameters, timeProvider)); - final String dataCompletedScript = parameters.getDataCompletedScript(); + final File dataCompletedScript = parameters.getDataCompletedScript(); if (dataCompletedScript != null) { final long timeout = parameters.getDataCompletedScriptTimeout(); diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java b/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java index 658317ed8b733c716d97cc3c2213bc4aafd634f6..63fdc830847d60554d172104d8d9887e35e636b8 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java @@ -26,7 +26,6 @@ import java.util.Properties; import java.util.regex.Pattern; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DurationFormatUtils; import org.apache.log4j.Logger; @@ -37,6 +36,7 @@ import ch.systemsx.cisd.args4j.CmdLineException; import ch.systemsx.cisd.args4j.CmdLineParser; import ch.systemsx.cisd.args4j.ExampleMode; import ch.systemsx.cisd.args4j.Option; +import ch.systemsx.cisd.args4j.spi.FileOptionHandler; import ch.systemsx.cisd.args4j.spi.LongOptionHandler; import ch.systemsx.cisd.args4j.spi.OptionHandler; import ch.systemsx.cisd.args4j.spi.Setter; @@ -78,8 +78,8 @@ public final class Parameters implements ITimingParameters, IFileSysParameters LogFactory.getLogger(LogCategory.NOTIFY, Parameters.class); @Option(longName = PropertyNames.DATA_COMPLETED_SCRIPT, metaVar = "EXEC", usage = "Optional script " - + "which checks whether incoming data is complete or not.") - private String dataCompletedScript; + + "which checks whether incoming data is complete or not.", handler = FileOptionHandler.class) + private File dataCompletedScript; @Option(longName = PropertyNames.DATA_COMPLETED_SCRIPT_TIMEOUT, usage = "Timeout (in seconds) after which data completed script will be stopped " + "[default: " + DEFAULT_DATA_COMPLETED_SCRIPT_TIMEOUT + "]", handler = MillisecondConversionOptionHandler.class) @@ -425,7 +425,7 @@ public final class Parameters implements ITimingParameters, IFileSysParameters { final Properties serviceProperties = loadServiceProperties(); dataCompletedScript = - PropertyUtils.getProperty(serviceProperties, PropertyNames.DATA_COMPLETED_SCRIPT, + tryCreateFile(serviceProperties, PropertyNames.DATA_COMPLETED_SCRIPT, dataCompletedScript); dataCompletedScriptTimeout = toMillis(PropertyUtils.getPosLong(serviceProperties, @@ -553,9 +553,9 @@ public final class Parameters implements ITimingParameters, IFileSysParameters } } - public final String getDataCompletedScript() + public final File getDataCompletedScript() { - return StringUtils.defaultIfEmpty(dataCompletedScript, null); + return dataCompletedScript; } public final long getDataCompletedScriptTimeout() diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java b/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java index f1c8586870c7a22e47f940fba89e19e8e97aec6d..a9d04608b946b0fe6a30b7a0ab45e39a377ae859 100644 --- a/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java +++ b/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.datamover.utils; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -28,6 +29,7 @@ import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogLevel; import ch.systemsx.cisd.common.process.ProcessExecutionHelper; import ch.systemsx.cisd.common.process.ProcessResult; +import ch.systemsx.cisd.common.utilities.FileUtilities; import ch.systemsx.cisd.common.utilities.OSUtilities; import ch.systemsx.cisd.common.utilities.StoreItem; import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore; @@ -57,7 +59,7 @@ public class DataCompletedFilter implements IStoreItemFilter private final IFileStore fileStore; - private final String dataCompletedScript; + private final File dataCompletedScript; private final long dataCompletedScriptTimeout; @@ -68,7 +70,7 @@ public class DataCompletedFilter implements IStoreItemFilter /** * Creates an instance for the specified file store, data completed script, and script time out. */ - public DataCompletedFilter(final IFileStore fileStore, final String dataCompletedScript, + public DataCompletedFilter(final IFileStore fileStore, final File dataCompletedScript, final long dataCompletedScriptTimeout) { if (dataCompletedScript == null) @@ -94,7 +96,7 @@ public class DataCompletedFilter implements IStoreItemFilter { command.add("sh"); } - command.add(getDataCompletedScript()); + command.add(FileUtilities.getCanonicalPath(getDataCompletedScript())); command.add(storeItemLocation.getAbsolutePath()); final String host = storeItemLocation.getHost(); if (host != null) @@ -104,7 +106,7 @@ public class DataCompletedFilter implements IStoreItemFilter return command; } - private final String getDataCompletedScript() + private final File getDataCompletedScript() { if (OSUtilities.executableExists(dataCompletedScript) == false) { @@ -113,7 +115,7 @@ public class DataCompletedFilter implements IStoreItemFilter } else { notificationLogger.reset(String.format("Script '%s' is again accessible.", - dataCompletedScript)); + FileUtilities.getCanonicalPath(dataCompletedScript))); } return dataCompletedScript; } diff --git a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java index d3e2bbd5f772de9820c315ef7c201c60a5dad854..fed16e559b8183b6fbab20e6e733780544047544 100644 --- a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java +++ b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java @@ -178,7 +178,8 @@ public final class ParametersTest extends AbstractFileSystemTestCase // With a highwater mark value parameters = parse("--" + optionName, localTempDir - + HostAwareFileWithHighwaterMarkHandler.DIRECTORY_HIGHWATERMARK_SEP + highwaterMark); + + HostAwareFileWithHighwaterMarkHandler.DIRECTORY_HIGHWATERMARK_SEP + + highwaterMark); hostAwareFileWithHighwaterMark = getFileWithHighwaterMark(optionName, parameters); assertEquals(localTempDir, hostAwareFileWithHighwaterMark.getFile().getPath()); assertEquals(highwaterMark, hostAwareFileWithHighwaterMark.getHighwaterMark()); @@ -224,7 +225,7 @@ public final class ParametersTest extends AbstractFileSystemTestCase final File scriptFile = new File(workingDirectory, scriptName); FileUtils.touch(scriptFile); parameters = parse("--" + PropertyNames.DATA_COMPLETED_SCRIPT, scriptFile.getPath()); - assertEquals(scriptFile.getPath(), parameters.getDataCompletedScript()); + assertEquals(scriptFile, parameters.getDataCompletedScript()); } @Test