diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java index b2a5b68aab9b4e281678297c6d00f14ed97990fb..f127a6f8ad2cf99234a7d324ebe236dc3184720f 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/HaaSOutputHolderImpl.java @@ -10,7 +10,6 @@ public class HaaSOutputHolderImpl implements HaaSOutputHolder { private HaaSOutputSource source; private SynchronizableFileType type; public HaaSOutputHolderImpl(HaaSOutputSource source, SynchronizableFileType typeForHold) { - super(); this.source = source; this.type = typeForHold; } diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java index cecce16bc731b00f077ef5e3ff05b9dc43e088cd..aae1edd108273f5c0373a786f85c77e709ca6786 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java @@ -5,6 +5,7 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.Calendar; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -213,7 +214,6 @@ public class Job { private Progress progress; public P_ProgressNotifierAdapter(Progress progress) { - super(); this.progress = progress; } @@ -243,6 +243,10 @@ public class Job { } + public Collection<String> getChangedFiles() { + return haasClientSupplier.get().getChangedFiles(getId()); + } + diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java index 118fc52193e8a90bbec09c7cb0b955802672969d..0c627041ded87e945909f82191b9dc3aaf8eeeeb 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java @@ -102,7 +102,6 @@ public class JobManager { private long offset; public JobSynchronizableFile(SynchronizableFileType type, long offset) { - super(); this.type = type; this.offset = offset; } diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java index f3ccf7bc6614ed7551dac840b3efb355468df364..b57471fe24dcf5f9fa16d430b00ef68f93e98a64 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/PropertyHolder.java @@ -13,7 +13,6 @@ public class PropertyHolder { private Properties properties; public PropertyHolder(Path storage) { - super(); this.storage = storage; } diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java index 116c0290b8d361942928c6d1298bcd01a386d3a8..e06944a29f196186c71e00b41f3f163931a70418 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueAdapter.java @@ -17,7 +17,6 @@ public class ObservableValueAdapter<S, T> implements ObservableValue<T> { private Map<ChangeListener<? super T>, ChangeListener<? super S>> mapOfListeners = new HashMap<>(); public ObservableValueAdapter(ObservableValue<S> decorated, Function<S, T> map) { - super(); this.adapted = decorated; this.transformation = map; } diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java index abd2d4ec3d4816db0201e8a5dcd67bdd4c796896..a2d273ab1996b6482fb22d71831bcbf46b737741 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java @@ -18,7 +18,6 @@ public class ObservableValueRegistry<T> { public ObservableValueRegistry(Function<T, UpdateStatus> updateFunction,Function<T,Object> stateProvider, Consumer<T> removeConsumer) { - super(); this.updateFunction = updateFunction; this.stateProvider = stateProvider; this.removeConsumer = t-> { diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java index 1fbcf4eed3fb2bf331ab8d0e68c7463ddb379c5d..ed828856dc41ca8c3f311de33f0fc5849d26a362 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/TableViewContextMenu.java @@ -55,7 +55,6 @@ public class TableViewContextMenu<T> { private Predicate<T> enableHandler; public P_MenuItem(String text, Consumer<T> eventHandler, Predicate<T> enableHandler) { - super(); this.enableHandler = enableHandler; item = new MenuItem(text); item.setOnAction(e -> eventHandler.accept(getSelectedItem())); diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java index c1cb5c2295529e68bf04583ed6dee602bddaa7ec..a4c41a15cfa241aa801cfcf6a7b5a5d33e906d30 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/UpdatableObservableValue.java @@ -17,7 +17,6 @@ public class UpdatableObservableValue<T> extends ObservableValueBase<T> { public UpdatableObservableValue(T wrapped, Function<T, UpdateStatus> updateFunction, Function<T, Object> stateProvider) { - super(); this.wrapped = wrapped; this.updateFunction = updateFunction; this.stateProvider = stateProvider; diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java index 62a5211c87463cf51b677d7099e9e368c88830af..97c7d31ef4b95b06af252393f7e63a9d297df049 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java @@ -207,7 +207,6 @@ public class HaaSClient { } public HaaSClient(Settings settings) { - super(); this.settings = settings; this.templateId = settings.getTemplateId(); this.timeOut = settings.getTimeout(); @@ -434,7 +433,6 @@ public class HaaSClient { private ProgressNotifier notifier; public P_ProgressNotifierDecorator(ProgressNotifier notifier) { - super(); this.notifier = notifier; } diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java index ca8b6e99760b45f5ea0f129c988bf9a07067196d..6d59b42f6240640ab78a8f692f43d17e00e39bad 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java @@ -32,7 +32,6 @@ class HaaSFileTransferImp implements HaaSFileTransfer { public HaaSFileTransferImp(FileTransferMethodExt ft, String sessionId, long jobId, FileTransferWsSoap fileTransfer, ScpClient scpClient, ProgressNotifier notifier) { - super(); this.ft = ft; this.scpClient = scpClient; this.fileTransfer = fileTransfer; diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java index 74a1fe5d18e69e58a468b24f95d04bc4d05d1f25..40fec855c342e8740f64aded4faf2f3c795a4b1c 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/TransferFileProgressForHaaSClient.java @@ -15,7 +15,6 @@ class TransferFileProgressForHaaSClient implements TransferFileProgress { public TransferFileProgressForHaaSClient(long totalSize, ProgressNotifier notifier) { - super(); this.totalSize = totalSize; this.notifier = notifier; } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java index 756073c43933a14686576fb86313b30fa7a9e0cf..54e47a725e4c1abb97015b31b8717e6524c83b0c 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java @@ -1,7 +1,12 @@ package cz.it4i.fiji.haas_spim_benchmark.core; +import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.BENCHMARK_RESULT_FILE; +import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.HAAS_UPDATE_TIMEOUT; +import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.SPIM_OUTPUT_FILENAME_PATTERN; +import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.STATISTICS_TASK_NAME_MAP; +import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.UI_TO_HAAS_FREQUENCY_UPDATE_RATIO; + import java.io.BufferedReader; -import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; @@ -56,34 +61,34 @@ public class BenchmarkJobManager { private List<Task> tasks; - private SPIMComputationAccessor computationAccessor = new SPIMComputationAccessor() { - - private HaaSOutputHolder outputOfSnakemake = - new HaaSOutputHolderImpl(BenchmarkJob.this, SynchronizableFileType.StandardErrorFile); - - @Override - public String getActualOutput() { - return outputOfSnakemake.getActualOutput(); - } - - @Override - public boolean fileExists(String filePath) { - File f = new File(job.getDirectory().resolve(filePath).toString()); - return f.exists() && !f.isDirectory(); - } - }; + private SPIMComputationAccessor computationAccessor; public BenchmarkJob(Job job) { - super(); this.job = job; + computationAccessor = new SPIMComputationAccessor() { + + private HaaSOutputHolder outputOfSnakemake = + new HaaSOutputHolderImpl(BenchmarkJob.this, SynchronizableFileType.StandardErrorFile); + + @Override + public String getActualOutput() { + return outputOfSnakemake.getActualOutput(); + } + + public java.util.Collection<String> getChangedFiles() { + return job.getChangedFiles(); + }; + }; + + computationAccessor = new SPIMComputationAccessorDecoratorWithTimeout(computationAccessor, HAAS_UPDATE_TIMEOUT/UI_TO_HAAS_FREQUENCY_UPDATE_RATIO); } public void startJob(Progress progress) throws IOException { job.uploadFilesByName(Arrays.asList(Constants.CONFIG_YAML), progress); String outputName = getOutputName(job.openLocalFile(Constants.CONFIG_YAML)); job.submit(); - job.setProperty(Constants.SPIM_OUTPUT_FILENAME_PATTERN, outputName); + job.setProperty(SPIM_OUTPUT_FILENAME_PATTERN, outputName); setDownloaded(false); } @@ -93,7 +98,7 @@ public class BenchmarkJobManager { public void downloadData(Progress progress) throws IOException { if (job.getState() == JobState.Finished) { - String filePattern = job.getProperty(Constants.SPIM_OUTPUT_FILENAME_PATTERN); + String filePattern = job.getProperty(SPIM_OUTPUT_FILENAME_PATTERN); job.download(downloadFinishedData(filePattern), progress); } else if (job.getState() == JobState.Failed) { job.download(downloadFailedData(), progress); @@ -104,7 +109,7 @@ public class BenchmarkJobManager { public void downloadStatistics(Progress progress) throws IOException { job.download(BenchmarkJobManager.downloadStatistics(), progress); - Path resultFile = job.getDirectory().resolve(Constants.BENCHMARK_RESULT_FILE); + Path resultFile = job.getDirectory().resolve(BENCHMARK_RESULT_FILE); if (resultFile != null) BenchmarkJobManager.formatResultFile(resultFile); } @@ -193,7 +198,7 @@ public class BenchmarkJobManager { scanner.close(); // Order tasks chronologically - List<String> chronologicList = Constants.STATISTICS_TASK_NAME_MAP.keySet().stream().collect(Collectors.toList()); + List<String> chronologicList = STATISTICS_TASK_NAME_MAP.keySet().stream().collect(Collectors.toList()); Collections.sort(tasks, Comparator.comparingInt(task -> chronologicList.indexOf(task.getDescription()))); } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java index 9ecfeb47fe8183f8c78e75466f97ce1cd173ba26..300159a1dfd7ede7ee2323dbfb2b548cf99704ea 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/Constants.java @@ -4,7 +4,8 @@ import java.util.LinkedHashMap; import java.util.Map; public interface Constants { - long HAAS_UPDATE_TIMEOUT = 30000; + int HAAS_UPDATE_TIMEOUT = 30000; + short UI_TO_HAAS_FREQUENCY_UPDATE_RATIO = 10; String HAAS_JOB_NAME = "HaaSSPIMBenchmark"; int HAAS_CLUSTER_NODE_TYPE = 6; int HAAS_TEMPLATE_ID = 4; @@ -39,4 +40,5 @@ public interface Constants { put("done", "Done"); }}; String STATISTICS_SUMMARY_FILENAME = "summary.csv"; + } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/PipelineBase.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/PipelineBase.java index 1e3fc82ddf6815d1058d3832643cf6407409bb86..3de8b024c2eba53fcbd2009c254449537f77842f 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/PipelineBase.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/PipelineBase.java @@ -9,7 +9,6 @@ abstract public class PipelineBase<T extends PipelineBase<?,?>,S> { public PipelineBase( S id) { - super(); this.id = id; } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java index 5c01528dc5befd2462c2ee6c0eb1f7ca205181e6..b1dc0c1610248f7a639bc8106958db13622d74e7 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessor.java @@ -1,9 +1,13 @@ package cz.it4i.fiji.haas_spim_benchmark.core; -import java.nio.file.Path; +import java.util.Collection; import cz.it4i.fiji.haas.HaaSOutputHolder; public interface SPIMComputationAccessor extends HaaSOutputHolder { - boolean fileExists(String fileName); + default boolean fileExists(String fileName) { + return getChangedFiles().contains(fileName); + } + + Collection<String> getChangedFiles(); } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java new file mode 100644 index 0000000000000000000000000000000000000000..80fe9fcb2aa36496ef016fbe1af51bb6f5afb561 --- /dev/null +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/SPIMComputationAccessorDecoratorWithTimeout.java @@ -0,0 +1,59 @@ +package cz.it4i.fiji.haas_spim_benchmark.core; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Function; + +public class SPIMComputationAccessorDecoratorWithTimeout implements SPIMComputationAccessor { + private long intervalForQueryInMs; + + private P_ResultCacheHolder<String> outputCache; + + private P_ResultCacheHolder<Set<String>> changedFilesCache; + + public SPIMComputationAccessorDecoratorWithTimeout(SPIMComputationAccessor decorated, long intervalForQueryInMs) { + this.intervalForQueryInMs = intervalForQueryInMs; + outputCache = new P_ResultCacheHolder<>(x -> decorated.getActualOutput()); + changedFilesCache = new P_ResultCacheHolder<>(set -> { + if (set == null) { + set = new HashSet<>(); + } else { + set.clear(); + } + set.addAll(decorated.getChangedFiles()); + return set; + }); + } + + @Override + public String getActualOutput() { + + return outputCache.getResult(); + } + + @Override + public Collection<String> getChangedFiles() { + return changedFilesCache.getResult(); + } + + private class P_ResultCacheHolder<T> { + private Long lastQuery; + private T value; + private Function<T, T> producer; + + public P_ResultCacheHolder(Function<T, T> producer) { + this.producer = producer; + } + + public T getResult() { + long time = System.currentTimeMillis(); + + if (lastQuery == null || (time - lastQuery) > intervalForQueryInMs) { + value = producer.apply(value); + lastQuery = time; + } + return value; + } + } +} diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java index c69cc99751738d145c6ba8859fe52239f30d1731..1c9d27ab2760c3a3120103476d1a3f3a0e4de2cc 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/SPIMPipelineProgressViewController.java @@ -3,7 +3,10 @@ package cz.it4i.fiji.haas_spim_benchmark.ui; import java.awt.Window; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.Timer; import java.util.TimerTask; import java.util.function.Function; @@ -20,9 +23,40 @@ import javafx.fxml.FXML; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.paint.Color; public class SPIMPipelineProgressViewController implements FXFrame.Controller { + protected static final String RUNNING_STATE_COMPUTATION = Color.YELLOW.toString(); + + protected static final String FINISHED_STATE_COMPUTATION = null; + + protected static final String UNKNOWN_STATE_COMPUTATION = Color.GRAY.toString(); + + private static final Map<JobState, Color> taskExecutionState2Color = new HashMap<>(); + static { + taskExecutionState2Color.put(JobState.Running, Color.YELLOW); + taskExecutionState2Color.put(JobState.Finished, Color.GREEN); + taskExecutionState2Color.put(JobState.Failed, Color.RED); + taskExecutionState2Color.put(JobState.Unknown, Color.GRAY); + } + + private static String getColorTaskExecState(JobState jobState) { + Color result = null; + if(jobState == null) { + result = Color.GRAY; + } else { + result = taskExecutionState2Color.get(jobState); + } + return toCss(result != null? result : Color.ORANGE); + } + + private static String toCss(Color color) { + return "rgb(" + Math.round(color.getRed() * 255.0) + "," + + Math.round(color.getGreen() * 255.0) + "," + + Math.round(color.getBlue() * 255.0) + ")"; + } + @FXML private TableView<ObservableValue<Task>> tasks; @@ -49,7 +83,6 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller { this.job = job; } - @SuppressWarnings("unchecked") private void fillTable() { List<Task> tasks = job.getTasks(); if (tasks == null) { @@ -58,7 +91,7 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller { public void run() { fillTable(); } - }, Constants.HAAS_UPDATE_TIMEOUT / 10); + }, Constants.HAAS_UPDATE_TIMEOUT / Constants.UI_TO_HAAS_FREQUENCY_UPDATE_RATIO); } else { List<TaskComputation> computations = tasks.stream().map(task -> task.getComputations()) .collect(Collectors.<List<TaskComputation>>maxBy((a, b) -> a.size() - b.size())).get(); @@ -69,29 +102,7 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller { this.tasks.getColumns().add(new TableColumn<>(tc.getTimepoint() + "")); int index = i++; - FXFrame.Controller.setCellValueFactory(this.tasks, index, (Function<Task, JobState>) v -> { - if (v.getComputations().size() >= index) { - return v.getComputations().get(index - 1).getState(); - } else { - return null; - } - }); - ((TableColumn<ObservableValue<Task>, JobState>)this.tasks.getColumns().get(index)).setCellFactory(column->new TableCell<ObservableValue<Task>,JobState>(){ - @Override - protected void updateItem(JobState state, boolean empty) { - if (state == null || empty) { - setText(null); - setStyle(""); - } else { - // Format date. - setText(state + ""); - if(state == JobState.Unknown) { - setStyle("-fx-background-color: yellow"); - } - } - - } - }); + constructCellFactory(index); } @@ -107,6 +118,30 @@ public class SPIMPipelineProgressViewController implements FXFrame.Controller { } } + @SuppressWarnings("unchecked") + private void constructCellFactory(int index) { + FXFrame.Controller.setCellValueFactory(this.tasks, index, (Function<Task, Optional<JobState>>) v -> { + if (v.getComputations().size() >= index) { + return Optional.of(v.getComputations().get(index - 1).getState()); + } else { + return null; + } + }); + ((TableColumn<ObservableValue<Task>, Optional<JobState>>)this.tasks.getColumns().get(index)).setCellFactory(column->new TableCell<ObservableValue<Task>,Optional<JobState>>(){ + @Override + protected void updateItem(Optional<JobState> state, boolean empty) { + if (state == null || empty) { + setText(null); + setStyle(""); + } else { + // Format date. + setText( "" + (state.isPresent()?state.get():"N/A")); + setStyle("-fx-background-color: " + getColorTaskExecState(state.get())); + } + } + }); + } + private void updateTable() { registry.update(); } diff --git a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java index 092a4a48a7a148c82d81d46b5acfc817cbb52431..49247986b3fd2a1234021e7647ea23366173ad1c 100644 --- a/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java +++ b/java-scpclient/src/main/java/cz/it4i/fiji/scpclient/ScpClient.java @@ -40,7 +40,6 @@ public class ScpClient implements Closeable { } public ScpClient(String hostName, String username, Identity privateKeyFile) throws JSchException { - super(); init(hostName, username, privateKeyFile); }