package ch.zhaw.gartenverwaltung; import ch.zhaw.gartenverwaltung.bootstrap.Inject; import ch.zhaw.gartenverwaltung.io.PlantList; import ch.zhaw.gartenverwaltung.models.Garden; import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException; import ch.zhaw.gartenverwaltung.models.GardenSchedule; import ch.zhaw.gartenverwaltung.models.PlantNotFoundException; import ch.zhaw.gartenverwaltung.types.Crop; import ch.zhaw.gartenverwaltung.types.Pest; import ch.zhaw.gartenverwaltung.types.Plant; import ch.zhaw.gartenverwaltung.types.Task; import javafx.fxml.FXML; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import java.io.IOException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public class CropDetailController { private Crop crop; @Inject private PlantList plantList; @Inject private GardenSchedule gardenSchedule; @Inject private Garden garden; private static final Logger LOG = Logger.getLogger(CropDetailController.class.getName()); @FXML private ImageView imageView; @FXML private Button area_button; @FXML private Label area_label; @FXML private Label cropName_label; @FXML private Label description_label; @FXML private VBox growthPhases_vbox; @FXML private Label location_label; @FXML private Label light_label; @FXML private Button location_button; @FXML private VBox pests_vbox; @FXML private Label soil_label; @FXML private Label spacing_label; @FXML private Button editTaskList_button; @FXML void editTaskList() { } /** * close Window */ @FXML void goBack() { Stage stage = (Stage) imageView.getScene().getWindow(); stage.close(); } /** * open dialog to set area */ @FXML void setArea() { } /** * open dialog to set location */ @FXML void setLocation() { } /** * set labels and image from selected {@link Crop} * set icons for buttons * @param crop {@link Crop} which will be displayed * @throws PlantNotFoundException exception */ public void setPlantFromCrop(Crop crop) throws PlantNotFoundException { this.crop = crop; try { Plant plant = plantList.getPlantById(Settings.getInstance().getCurrentHardinessZone(), crop.getPlantId()) .orElseThrow(PlantNotFoundException::new); cropName_label.setText(plant.name()); description_label.setText(plant.description()); light_label.setText(String.valueOf(plant.light())); soil_label.setText(plant.soil()); spacing_label.setText(plant.spacing()); if (plant.image() != null) { imageView.setImage(plant.image()); } area_label.setText(""); location_label.setText(""); createTaskLists(crop); createPestList(plant); } catch (HardinessZoneNotSetException | IOException e) { throw new PlantNotFoundException(); } setIconToButton(editTaskList_button, "editIcon.png"); setIconToButton(area_button, "areaIcon.png"); setIconToButton(location_button, "locationIcon.png"); } private void createTaskLists(Crop crop) { crop.getCropId().ifPresent(id -> { List taskList; try { taskList = gardenSchedule.getTaskListForCrop(id); for (Task task : taskList) { Label label = new Label(task.getDescription()); growthPhases_vbox.getChildren().add(label); } } catch (IOException e) { // TODO: Alert LOG.log(Level.SEVERE, "Could not get task list for crop", e.getCause()); } }); } private void createPestList(Plant plant) { List pests = plant.pests(); for (Pest pest : pests) { Label label = new Label(pest.name() + ":"); label.setStyle("-fx-font-weight: bold"); HBox hBox = new HBox(); hBox.fillHeightProperty(); Label label1 = new Label(pest.description()); label1.setAlignment(Pos.TOP_LEFT); label1.setWrapText(true); label1.setMaxWidth(600); label1.setMaxHeight(100); Button button = new Button("Get Counter Measures"); hBox.getChildren().addAll(label1, button); pests_vbox.getChildren().addAll(label, hBox); } } /** * adds icon to button * @param button the button which get the icon * @param iconFileName file name of icon */ private void setIconToButton(Button button, String iconFileName) { Image img = new Image(String.valueOf(getClass().getResource("icons/" + iconFileName))); ImageView imageView = new ImageView(img); imageView.setFitHeight(20); imageView.setPreserveRatio(true); button.setGraphic(imageView); } }