Java Examples for ac.simons.bikingFX.api.JsonRetrievalTask
The following java examples will help you to understand the usage of ac.simons.bikingFX.api.JsonRetrievalTask. These source code samples are taken from different open source projects.
Example 1
| Project: bikingFX-master File: RootController.java View source code |
@Override
public void initialize(URL location, ResourceBundle resources) {
this.resources = resources;
bikingPictures = JsonRetrievalTask.get(BikingPicture::new, "/bikingPictures.json");
// Start loading image views when pictures are available
bikingPictures.addListener((Change<? extends BikingPicture> change) -> {
if (!change.getList().isEmpty()) {
loadPictures();
}
});
// Load more images when size changes
bikingPicturesContainer.widthProperty().addListener(( observable, oldValue, newValue) -> {
loadPictures();
});
// Prepare flipservice, depends on container so don't initialise in constructor
this.flipImageService = new FlipImageService(this.bikingPictures, this.bikingPicturesContainer, this.random);
// Prepare listener for milage property
this.milageChangeListener = new MilageChangeListener(this::retrievePassword, this::storePassword, this.resources);
// Display a simple popup when adding milage fails
this.milageChangeListener.setOnFailed( state -> {
final Alert alert = new Alert(AlertType.ERROR);
alert.setTitle(resources.getString("common.error"));
alert.setHeaderText(null);
alert.setContentText(state.getSource().getException().getMessage());
alert.showAndWait();
});
// Prepare bike graph
chartMilagePerBike.setData(FXCollections.observableArrayList());
chartMilagePerBike.setLegendVisible(false);
// Get all bikes
final ObservableList<Bike> bikes = JsonRetrievalTask.get(Bike::new, "/bikes.json?all=true");
// Configure milage controller for each bike
bikes.addListener(this::watchChangesToBikeList);
viewBikes.setItems(bikes);
viewBikeName.setCellValueFactory(new PropertyValueFactory<>("name"));
viewBikeColor.setCellValueFactory(new PropertyValueFactory<>("color"));
viewBikeColor.setCellFactory(ColorTableCell::new);
viewBikeBoughtOn.setCellValueFactory(new PropertyValueFactory<>("boughtOn"));
viewBikeBoughtOn.setCellFactory(LocalDateTableCell::new);
viewBikeDecommissionedOn.setCellValueFactory(new PropertyValueFactory<>("decommissionedOn"));
viewBikeDecommissionedOn.setCellFactory(LocalDateTableCell::new);
viewBikeMilage.setCellValueFactory(new PropertyValueFactory<>("milage"));
viewBikeMilage.setCellFactory(TextFieldTableCell.forTableColumn(new IntegerStringConverter()));
viewGalleryPictures.setItems(JsonRetrievalTask.get(GalleryPicture::new, "/galleryPictures.json"));
viewGalleryPictureTakenOn.setCellValueFactory(new PropertyValueFactory<>("takenOn"));
viewGalleryPictureTakenOn.setCellFactory(LocalDateTableCell::new);
viewGalleryPictureDescription.setCellValueFactory(new PropertyValueFactory<>("description"));
viewGalleryPictureDescription.setCellFactory((TableColumn<GalleryPicture, String> column) -> {
final TableCell<GalleryPicture, String> cell = new TableCell<>();
final Text text = new Text();
cell.setGraphic(text);
cell.setPrefHeight(Control.USE_COMPUTED_SIZE);
// Bind wrapping width of the text to the actual width of the cell
text.wrappingWidthProperty().bind(cell.widthProperty());
// Update text with content from cell
text.textProperty().bind(cell.itemProperty());
return cell;
});
// Bind prefered width of column to width of table minus the first column to fill up the remaining space.
viewGalleryPictureDescription.prefWidthProperty().bind(viewGalleryPictures.widthProperty().subtract(viewGalleryPictureTakenOn.prefWidthProperty()).subtract(viewGalleryPictureImage.widthProperty()));
viewGalleryPictureImage.setCellValueFactory(new PropertyValueFactory<>("id"));
viewGalleryPictureImage.setCellFactory(GalleryPictureTableCell::new);
// Fill the remainig space of the table
viewGalleryPictureImage.prefWidthProperty().bind(viewGalleryPictures.widthProperty().subtract(viewGalleryPictureTakenOn.widthProperty()).subtract(viewGalleryPictureDescription.widthProperty()));
// This is necessary because the filtered list is immutable and therefor
// not sortable, so we wrap it.
final SortedList<Track> tracks = new SortedList<>(JsonRetrievalTask.get(Track::new, "/tracks.json").filtered( track -> track.getType() == Type.biking));
viewTracks.setItems(tracks);
tracks.comparatorProperty().bind(viewTracks.comparatorProperty());
viewTrackCoveredOn.setCellFactory(LocalDateTableCell::new);
viewTrackCoveredOn.setCellValueFactory(new PropertyValueFactory<>("coveredOn"));
viewTrackName.setCellValueFactory(new PropertyValueFactory<>("name"));
viewTrackName.prefWidthProperty().bind(viewTracks.widthProperty().subtract(viewTrackCoveredOn.widthProperty()));
// Establish default sort order
viewTracks.getSortOrder().add(viewTrackCoveredOn);
// HTML view of selected track
viewTrackMap.setContextMenuEnabled(false);
final WebEngine webEngine = viewTrackMap.getEngine();
webEngine.setJavaScriptEnabled(true);
// Watch loading of map data
webEngine.getLoadWorker().stateProperty().addListener(( observable, oldState, newState) -> {
if (newState == State.SUCCEEDED) {
logger.log(Level.FINE, "Loading done, now preparing map.");
// enable javascript and set every relevant width and height to 100%
// so that the webview is automatically filled
webEngine.executeScript("$('html').height('100%'); $('body').height('100%'); $('#map').css('width', '100%').css('height', '100%'); ");
}
});
viewTracks.getSelectionModel().selectedItemProperty().addListener(( observable, oldTrack, newTrack) -> {
if (newTrack != null) {
final String mapUrl = String.format("%s/tracks/%s/embed?width=%d&height=%d", JsonRetrievalTask.HOST_AND_PORT, newTrack.getId(), viewTrackMap.widthProperty().intValue(), viewTrackMap.heightProperty().intValue());
logger.log(Level.FINE, "Loading embedded map {0}", new Object[] { mapUrl });
webEngine.load(mapUrl);
}
});
}