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);
        }
    });
}