Skip to content
Snippets Groups Projects
Commit ff40fe1a authored by Jan Kožusznik's avatar Jan Kožusznik
Browse files

optimize ObservableValue

parent 9c715737
Branches
Tags
No related merge requests found
...@@ -3,7 +3,6 @@ package cz.it4i.fiji.haas; ...@@ -3,7 +3,6 @@ package cz.it4i.fiji.haas;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Calendar;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
...@@ -12,6 +11,7 @@ import org.scijava.Context; ...@@ -12,6 +11,7 @@ import org.scijava.Context;
import cz.it4i.fiji.haas_java_client.HaaSClient; import cz.it4i.fiji.haas_java_client.HaaSClient;
import cz.it4i.fiji.haas_java_client.JobState; import cz.it4i.fiji.haas_java_client.JobState;
import javafx.beans.value.ObservableValueBase;
public class JobManager { public class JobManager {
...@@ -74,7 +74,7 @@ public class JobManager { ...@@ -74,7 +74,7 @@ public class JobManager {
return haasClient; return haasClient;
} }
public static class JobInfo { public static class JobInfo extends ObservableValueBase<JobInfo> {
private Job job; private Job job;
...@@ -102,5 +102,10 @@ public class JobManager { ...@@ -102,5 +102,10 @@ public class JobManager {
public String getEndTime() { public String getEndTime() {
return job.getEndTime().getTime().toString(); return job.getEndTime().getTime().toString();
} }
@Override
public JobInfo getValue() {
return this;
}
} }
} }
...@@ -2,12 +2,12 @@ package cz.it4i.fiji.haas.ui; ...@@ -2,12 +2,12 @@ package cz.it4i.fiji.haas.ui;
import java.util.function.Function;
import org.scijava.log.LogService; import org.scijava.log.LogService;
import org.scijava.plugin.Parameter; import org.scijava.plugin.Parameter;
import cz.it4i.fiji.haas.JobManager.JobInfo; import cz.it4i.fiji.haas.JobManager.JobInfo;
import javafx.beans.InvalidationListener;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
...@@ -16,9 +16,7 @@ import javafx.scene.control.MenuItem; ...@@ -16,9 +16,7 @@ import javafx.scene.control.MenuItem;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures; import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.ContextMenuEvent; import javafx.scene.input.ContextMenuEvent;
import javafx.util.Callback;
public class CheckStatusOfHaaSController { public class CheckStatusOfHaaSController {
...@@ -37,15 +35,14 @@ public class CheckStatusOfHaaSController { ...@@ -37,15 +35,14 @@ public class CheckStatusOfHaaSController {
jobs.getItems().add(job); jobs.getItems().add(job);
} }
@SuppressWarnings("unchecked")
public void init() { public void init() {
ContextMenu cm = new ContextMenu(); ContextMenu cm = new ContextMenu();
MenuItem download = new MenuItem("Download"); MenuItem download = new MenuItem("Download");
cm.getItems().add(download); cm.getItems().add(download);
((TableColumn<JobInfo, String>)jobs.getColumns().get(0)).setCellValueFactory(new PropertyValueFactory<JobInfo,String>("id")); setCellValueFactory(0,j->j.getId().toString());
((TableColumn<JobInfo, String>)jobs.getColumns().get(1)).setCellValueFactory(new P_Factory()); setCellValueFactory(1,j->j.getState().toString() + (j.needsDownload()?" - needs download":""));
((TableColumn<JobInfo, String>)jobs.getColumns().get(2)).setCellValueFactory(new PropertyValueFactory<JobInfo,String>("startTime")); setCellValueFactory(2,j->j.getStartTime().toString());
((TableColumn<JobInfo, String>)jobs.getColumns().get(3)).setCellValueFactory(new PropertyValueFactory<JobInfo,String>("endTime")); setCellValueFactory(3,j->j.getEndTime().toString());
jobs.setContextMenu(cm); jobs.setContextMenu(cm);
jobs.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() { jobs.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
...@@ -68,45 +65,13 @@ public class CheckStatusOfHaaSController { ...@@ -68,45 +65,13 @@ public class CheckStatusOfHaaSController {
logService.info("init"); logService.info("init");
} }
@SuppressWarnings("unchecked")
private void setCellValueFactory(int index, Function<JobInfo,String> mapper) {
((TableColumn<JobInfo, String>)jobs.getColumns().get(index)).setCellValueFactory(f->getObservableValue(f, mapper));
private class P_Factory implements Callback<CellDataFeatures<JobInfo, String>, ObservableValue<String>> {
@Override
public ObservableValue<String> call(final CellDataFeatures<JobInfo, String> param) {
return new ObservableValue<String>() {
@Override
public void addListener(InvalidationListener listener) {
}
@Override
public void removeListener(InvalidationListener listener) {
}
@Override
public void addListener(ChangeListener<? super String> listener) {
}
@Override
public void removeListener(ChangeListener<? super String> listener) {
}
@Override
public String getValue() {
JobInfo ji = param.getValue();
return ji.getState().toString() + (ji.needsDownload()?" - needs download":"");
}
};
} }
private ObservableValue<String> getObservableValue(CellDataFeatures<JobInfo, String> feature, Function<JobInfo,String> mapper) {
return new ObservableValueAdapter<JobInfo,String>(feature.getValue(), mapper);
} }
} }
package cz.it4i.fiji.haas.ui;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import javafx.beans.InvalidationListener;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
public class ObservableValueAdapter<S, T> implements ObservableValue<T> {
private ObservableValue<S> adapted;
private Function<S, T> transformation;
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;
}
@Override
public void addListener(InvalidationListener listener) {
adapted.addListener(listener);
}
@Override
public void removeListener(InvalidationListener listener) {
adapted.removeListener(listener);
}
@Override
public void addListener(ChangeListener<? super T> listener) {
ChangeListener<S> wrapped = new ChangeListener<S>() {
@Override
public void changed(ObservableValue<? extends S> observable, S oldValue, S newValue) {
listener.changed(ObservableValueAdapter.this, transformation.apply(oldValue),
transformation.apply(newValue));
}
};
mapOfListeners.put(listener, wrapped);
adapted.addListener(wrapped);
}
@Override
public void removeListener(ChangeListener<? super T> listener) {
adapted.removeListener(mapOfListeners.get(listener));
}
@Override
public T getValue() {
return transformation.apply(adapted.getValue());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment