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

optimize ObservableValue

parent 9c715737
No related branches found
No related tags found
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) {
private class P_Factory implements Callback<CellDataFeatures<JobInfo, String>, ObservableValue<String>> { ((TableColumn<JobInfo, String>)jobs.getColumns().get(index)).setCellValueFactory(f->getObservableValue(f, mapper));
@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