package com.megatim.fdxconvert.viewmodel;
|
|
import com.megatim.dynamicjsonparser.enums.TypeDonnee;
|
import com.megatim.fdxconvert.App;
|
import com.megatim.fdxconvert.dao.JsonStructureDAO;
|
import com.megatim.fdxconvert.model.JsonStructure;
|
import com.megatim.fdxconvert.model.TypeFichierJson;
|
import com.megatim.fdxconvert.service.TypeFichierJsonService;
|
import javafx.application.Platform;
|
import javafx.beans.binding.Bindings;
|
import javafx.beans.binding.StringBinding;
|
import javafx.beans.property.*;
|
import javafx.collections.FXCollections;
|
import javafx.collections.ObservableList;
|
import javafx.concurrent.Task;
|
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.function.Consumer;
|
|
public class JsonStructureTableViewModel {
|
|
private final ObservableList<TypeFichierJson> data = FXCollections.observableArrayList();
|
private final ObjectProperty<TypeFichierJson> selectedItem = new SimpleObjectProperty<>(null);
|
|
private final BooleanProperty loading = new SimpleBooleanProperty(false);
|
private final IntegerProperty pageNumber = new SimpleIntegerProperty(0);
|
private final LongProperty totalElements = new SimpleLongProperty(0);
|
private final LongProperty numberPerPage = new SimpleLongProperty(0);
|
private final BooleanProperty last = new SimpleBooleanProperty(false);
|
private final BooleanProperty first = new SimpleBooleanProperty(false);
|
|
private final StringBinding paginationNumberInfo = Bindings.createStringBinding(() -> evalString(), pageNumber, numberPerPage, totalElements);
|
|
public void init() {
|
loadData(pageNumber.get());
|
pageNumber.addListener((observable, oldValue, newValue) -> {
|
loadData(newValue.intValue());
|
});
|
}
|
|
public void reloadData() {
|
loadData(pageNumber.get());
|
}
|
|
public void loadSelectedItemChildren(Consumer<TypeFichierJson> consumer) {
|
Task<JsonStructure> task = new Task<JsonStructure>() {
|
@Override
|
protected JsonStructure call() throws Exception {
|
loading.set(true);
|
JsonStructure jsonStructure = JsonStructureDAO.loadSubJsonStructure(selectedItem.get().getJsonStructure());
|
setDelimiteurDate(jsonStructure.getFields());
|
return jsonStructure;
|
}
|
};
|
task.setOnSucceeded(e -> {
|
loading.set(false);
|
selectedItem.get().setJsonStructure(task.getValue());
|
consumer.accept(selectedItem.get());
|
});
|
task.setOnFailed(e -> loading.set(false));
|
task.setOnCancelled(e -> loading.set(false));
|
Thread thread = new Thread(task);
|
thread.setDaemon(true);
|
thread.start();
|
}
|
|
public void deleteSelectedItem() {
|
Task<Void> task = new Task<Void>() {
|
@Override
|
protected Void call() throws Exception {
|
loading.set(true);
|
TypeFichierJsonService.getInstance().delete(selectedItem.get());
|
return null;
|
}
|
};
|
task.setOnSucceeded(e -> {
|
loading.set(false);
|
pageNumber.set(0);
|
loadData(pageNumber.get());
|
});
|
task.setOnFailed(e -> loading.set(false));
|
task.setOnCancelled(e -> loading.set(false));
|
Thread thread = new Thread(task);
|
thread.setDaemon(true);
|
thread.start();
|
}
|
|
public void nextPage() {
|
if (!last.get()) {
|
pageNumber.set(pageNumber.get() + 1);
|
}
|
}
|
|
public void previousPage() {
|
if (!first.get()) {
|
pageNumber.set(pageNumber.get() - 1);
|
}
|
}
|
|
private void setDelimiteurDate(List<JsonStructure> jsonStructures) {
|
jsonStructures.stream().forEach(j -> {
|
if (j.getTypeDonnee().equals(TypeDonnee.OBJET)) {
|
setDelimiteurDate(j.getFields());
|
} else if (j.getTypeDonnee().equals(TypeDonnee.DATE) && j.getCodeDelimiteurDate() != null) {
|
j.setDelimiteurDate(App.SEPARATEURS_DATE.get(j.getCodeDelimiteurDate()));
|
}
|
});
|
}
|
|
private void loadData(int page) {
|
|
Task<Void> task = new Task<Void>() {
|
@Override
|
protected Void call() throws Exception {
|
|
loading.set(true);
|
|
List<TypeFichierJson> typeFichierJsons = TypeFichierJsonService.getInstance().getAllByPage(page, Arrays.asList());
|
|
Platform.runLater(() -> {
|
data.clear();
|
data.addAll(typeFichierJsons);
|
totalElements.set(TypeFichierJsonService.getInstance().getTotalElements());
|
numberPerPage.set(TypeFichierJsonService.getInstance().getNumberPerPage());
|
last.set(TypeFichierJsonService.getInstance().isLast());
|
first.set(TypeFichierJsonService.getInstance().isFirst());
|
});
|
|
return null;
|
}
|
};
|
|
task.setOnSucceeded(e -> loading.set(false));
|
task.setOnFailed(e -> loading.set(false));
|
task.setOnCancelled(e -> loading.set(false));
|
Thread thread = new Thread(task);
|
thread.setDaemon(true);
|
thread.start();
|
|
}
|
|
public ObservableList<TypeFichierJson> getData() {
|
return data;
|
}
|
|
public BooleanProperty getLoadingProperty() {
|
return loading;
|
}
|
|
public StringBinding getPaginationNumberInfo() {
|
return paginationNumberInfo;
|
}
|
|
public BooleanProperty getLastProperty() {
|
return last;
|
}
|
|
public BooleanProperty getFirstProperty() {
|
return first;
|
}
|
|
public ObjectProperty<TypeFichierJson> selectedItemProperty() {
|
return selectedItem;
|
}
|
|
private String evalString() {
|
long currentNumber = (pageNumber.get() + 1) * numberPerPage.get();
|
return (currentNumber < totalElements.get() ? currentNumber : totalElements.get()) + "/" + totalElements.get();
|
}
|
}
|