Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2be9df6094 | ||
|
|
5faf61089a | ||
|
|
8e23124c6b | ||
|
|
78a27499a8 | ||
|
|
590049b9cf | ||
|
|
ad05e9e95a |
@@ -1,16 +1,34 @@
|
||||
package ch.zhaw.gartenverwaltung;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.gardenplan.Gardenplanmodel;
|
||||
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||
import ch.zhaw.gartenverwaltung.plantList.PlantListModel;
|
||||
import ch.zhaw.gartenverwaltung.taskList.TaskListModel;
|
||||
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.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
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;
|
||||
|
||||
public class CropDetailController {
|
||||
private Crop crop = null;
|
||||
private Plant plant = null;
|
||||
private final PlantListModel plantListModel = new PlantListModel();
|
||||
private final TaskListModel taskListModel = new TaskListModel();
|
||||
private final Gardenplanmodel gardenplanmodel = new Gardenplanmodel(taskListModel);
|
||||
|
||||
@FXML
|
||||
private ImageView imageView;
|
||||
|
||||
@FXML
|
||||
private Button area_button;
|
||||
@@ -45,6 +63,9 @@ public class CropDetailController {
|
||||
@FXML
|
||||
private Label spacing_label;
|
||||
|
||||
public CropDetailController() throws IOException {
|
||||
}
|
||||
|
||||
@FXML
|
||||
void editTaskList(ActionEvent event) {
|
||||
|
||||
@@ -52,7 +73,8 @@ public class CropDetailController {
|
||||
|
||||
@FXML
|
||||
void goBack(ActionEvent event) {
|
||||
|
||||
Stage stage = (Stage) imageView.getScene().getWindow();
|
||||
stage.close();
|
||||
}
|
||||
|
||||
@FXML
|
||||
@@ -65,8 +87,46 @@ public class CropDetailController {
|
||||
|
||||
}
|
||||
|
||||
public void setPlantFromCrop(Crop crop) {
|
||||
public void setPlantFromCrop(Crop crop) throws HardinessZoneNotSetException, IOException {
|
||||
this.crop = crop;
|
||||
this.plant = null;
|
||||
Plant plant = plantListModel.getFilteredPlantListById(Config.getCurrentHardinessZone(), crop.getPlantId()).get(0);
|
||||
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);
|
||||
}
|
||||
|
||||
private void createTaskLists(Crop crop) throws IOException {
|
||||
List<Task> taskList = taskListModel.getTaskListForCrop(crop.getCropId().get());
|
||||
for (Task task : taskList) {
|
||||
Label label = new Label(task.getDescription());
|
||||
growthPhases_vbox.getChildren().add(label);
|
||||
}
|
||||
}
|
||||
|
||||
private void createPestList(Plant plant) {
|
||||
List<Pest> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.fxml.Initializable;
|
||||
import javafx.scene.Node;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
|
||||
@@ -14,12 +13,15 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MainFXMLController implements Initializable {
|
||||
/**
|
||||
* Caching the panes
|
||||
*/
|
||||
private final Map<String, AnchorPane> panes = new HashMap<>();
|
||||
private static final Logger LOG = Logger.getLogger(MainFXMLController.class.getName());
|
||||
|
||||
@FXML
|
||||
private Button home_button;
|
||||
@@ -100,7 +102,7 @@ public class MainFXMLController implements Initializable {
|
||||
loadPane("Home.fxml");
|
||||
styleChangeButton(home_button);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
LOG.log(Level.SEVERE, "Failed to load FXML-Pane!", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package ch.zhaw.gartenverwaltung;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.gardenplan.Gardenplanmodel;
|
||||
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||
import ch.zhaw.gartenverwaltung.plantList.PlantListModel;
|
||||
import ch.zhaw.gartenverwaltung.taskList.TaskListModel;
|
||||
import ch.zhaw.gartenverwaltung.types.Crop;
|
||||
import ch.zhaw.gartenverwaltung.types.Plant;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.fxml.FXML;
|
||||
@@ -14,7 +17,9 @@ import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.ButtonType;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
@@ -27,6 +32,7 @@ public class MyPlantsController implements Initializable {
|
||||
MainFXMLController mainController;
|
||||
private final TaskListModel taskListModel = new TaskListModel();
|
||||
private final Gardenplanmodel gardenplanmodel = new Gardenplanmodel(taskListModel);
|
||||
private final PlantListModel plantListModel = new PlantListModel();
|
||||
|
||||
@FXML
|
||||
private VBox myPlants_vbox;
|
||||
@@ -41,10 +47,15 @@ public class MyPlantsController implements Initializable {
|
||||
|
||||
@Override
|
||||
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||
//ToDo update, when new crops are added
|
||||
try {
|
||||
loadCropList();
|
||||
} catch (HardinessZoneNotSetException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void loadCropList() {
|
||||
private void loadCropList() throws HardinessZoneNotSetException, IOException {
|
||||
List<Crop> cropList = new LinkedList<>();
|
||||
try {
|
||||
cropList = getCropList();
|
||||
@@ -54,7 +65,7 @@ public class MyPlantsController implements Initializable {
|
||||
createPlantView(cropList);
|
||||
}
|
||||
|
||||
private void createPlantView(List<Crop> crops) {
|
||||
private void createPlantView(List<Crop> crops) throws HardinessZoneNotSetException, IOException {
|
||||
myPlants_vbox.getChildren().clear();
|
||||
for(Crop crop : crops) {
|
||||
HBox hBox = createPlantView(crop);
|
||||
@@ -72,16 +83,27 @@ public class MyPlantsController implements Initializable {
|
||||
return cropList;
|
||||
}
|
||||
|
||||
private HBox createPlantView(Crop crop) {
|
||||
//ToDo add good design
|
||||
//ToDo get plant information from crop
|
||||
HBox hBox = new HBox();
|
||||
Label label = new Label("Placeholder");
|
||||
private HBox createPlantView(Crop crop) throws HardinessZoneNotSetException, IOException {
|
||||
//ToDo add better design
|
||||
Plant plant = plantListModel.getFilteredPlantListById(Config.getCurrentHardinessZone(), crop.getPlantId()).get(0);
|
||||
HBox hBox = new HBox(10);
|
||||
ImageView imageView = new ImageView();
|
||||
imageView.setPreserveRatio(false);
|
||||
imageView.setFitHeight(100);
|
||||
imageView.setFitWidth(100);
|
||||
imageView.maxHeight(100);
|
||||
if (plant.image() != null) {
|
||||
imageView.setImage(plant.image());
|
||||
}
|
||||
hBox.setMinHeight(100);
|
||||
Label label = new Label(plant.name());
|
||||
label.setMaxWidth(2000);
|
||||
HBox.setHgrow(label, Priority.ALWAYS);
|
||||
Button details = new Button("Details");
|
||||
Button delete = new Button("delete");
|
||||
details.setOnAction(getGoToCropDetailEvent(crop));
|
||||
delete.setOnAction(getDeleteCropEvent(crop));
|
||||
hBox.getChildren().addAll(label, details, delete);
|
||||
hBox.getChildren().addAll(imageView, label, details, delete);
|
||||
return hBox;
|
||||
}
|
||||
|
||||
@@ -100,7 +122,7 @@ public class MyPlantsController implements Initializable {
|
||||
stage.initModality(Modality.APPLICATION_MODAL);
|
||||
stage.setResizable(true);
|
||||
stage.showAndWait();
|
||||
} catch (IOException e) {
|
||||
} catch (IOException | HardinessZoneNotSetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -114,7 +136,7 @@ public class MyPlantsController implements Initializable {
|
||||
public void handle(ActionEvent event) {
|
||||
try {
|
||||
showConfirmation(crop);
|
||||
} catch (IOException e) {
|
||||
} catch (IOException | HardinessZoneNotSetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -122,7 +144,7 @@ public class MyPlantsController implements Initializable {
|
||||
return event;
|
||||
}
|
||||
|
||||
private void showConfirmation(Crop crop) throws IOException {
|
||||
private void showConfirmation(Crop crop) throws IOException, HardinessZoneNotSetException {
|
||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||
alert.setTitle("Delete Crop");
|
||||
alert.setHeaderText("Are you sure want to delete this Crop?");
|
||||
@@ -131,10 +153,8 @@ public class MyPlantsController implements Initializable {
|
||||
Optional<ButtonType> option = alert.showAndWait();
|
||||
|
||||
if (option.get() == ButtonType.OK) {
|
||||
//ToDo uncomment, when error from JsonTaskDatabase.java loadTaskListFromFile() is fixed.
|
||||
//gardenplanmodel.removeCrop(crop);
|
||||
gardenplanmodel.removeCrop(crop);
|
||||
loadCropList();
|
||||
System.out.println("Delete Crop");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package ch.zhaw.gartenverwaltung;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.gardenplan.Gardenplanmodel;
|
||||
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||
import ch.zhaw.gartenverwaltung.plantList.PlantListModel;
|
||||
import ch.zhaw.gartenverwaltung.taskList.TaskListModel;
|
||||
import ch.zhaw.gartenverwaltung.types.Crop;
|
||||
import ch.zhaw.gartenverwaltung.types.Task;
|
||||
@@ -28,6 +30,7 @@ public class MyScheduleController implements Initializable {
|
||||
private Crop selectedCrop = null;
|
||||
private final TaskListModel taskListModel = new TaskListModel();
|
||||
private final Gardenplanmodel gardenplanmodel = new Gardenplanmodel(taskListModel);
|
||||
private final PlantListModel plantListModel = new PlantListModel();
|
||||
|
||||
private final ListProperty<Crop> cropListProperty = new SimpleListProperty<>(FXCollections.observableArrayList());
|
||||
|
||||
@@ -84,7 +87,6 @@ public class MyScheduleController implements Initializable {
|
||||
|
||||
@Override
|
||||
public void initialize(URL location, ResourceBundle resources) {
|
||||
//ToDo method to load crop list
|
||||
List<Crop> cropList;
|
||||
try {
|
||||
cropList = gardenplanmodel.getCrops();
|
||||
@@ -138,7 +140,11 @@ public class MyScheduleController implements Initializable {
|
||||
if (empty || crop == null) {
|
||||
setText(null);
|
||||
} else {
|
||||
setText("placeholder");
|
||||
try {
|
||||
setText(plantListModel.getFilteredPlantListById(Config.getCurrentHardinessZone(), crop.getPlantId()).get(0).name());
|
||||
} catch (HardinessZoneNotSetException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -146,11 +152,10 @@ public class MyScheduleController implements Initializable {
|
||||
|
||||
private void loadTaskList() throws IOException {
|
||||
List<List<Task>> taskLists = new LinkedList<>();
|
||||
//ToDo uncomment, when error from JsonTaskDatabase.java loadTaskListFromFile() is fixed.
|
||||
if (selectedCrop != null) {
|
||||
//taskLists = taskListModel.getTasksUpcomingWeekForCrop(selectedCrop.getCropId().get());
|
||||
taskLists = taskListModel.getTasksUpcomingWeekForCrop(selectedCrop.getCropId().get());
|
||||
} else {
|
||||
//taskLists = taskListModel.getTasksUpcomingWeek();
|
||||
taskLists = taskListModel.getTasksUpcomingWeek();
|
||||
}
|
||||
if (!taskLists.isEmpty()) {
|
||||
viewTaskListOfDay(day1_pane, taskLists.get(0));
|
||||
@@ -167,7 +172,7 @@ public class MyScheduleController implements Initializable {
|
||||
//ToDo update pane with task list
|
||||
VBox vBox = new VBox();
|
||||
for (Task task : tasks) {
|
||||
Label label = new Label("placeholder");
|
||||
Label label = new Label(task.getDescription());
|
||||
vBox.getChildren().add(label);
|
||||
}
|
||||
pane.getChildren().add(vBox);
|
||||
|
||||
@@ -7,8 +7,6 @@ import ch.zhaw.gartenverwaltung.types.Plant;
|
||||
import ch.zhaw.gartenverwaltung.types.Seasons;
|
||||
import javafx.beans.property.ListProperty;
|
||||
import javafx.beans.property.SimpleListProperty;
|
||||
import javafx.beans.value.ChangeListener;
|
||||
import javafx.beans.value.ObservableValue;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
@@ -29,8 +27,11 @@ import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class PlantsController implements Initializable {
|
||||
private static final Logger LOG = Logger.getLogger(PlantsController.class.getName());
|
||||
private final PlantListModel plantListModel = new PlantListModel();
|
||||
private Plant selectedPlant = null;
|
||||
private final HardinessZone DEFAULT_HARDINESS_ZONE = HardinessZone.ZONE_8A;
|
||||
@@ -98,8 +99,10 @@ public class PlantsController implements Initializable {
|
||||
lookForSelectedListEntry();
|
||||
try {
|
||||
viewFilteredListBySearch();
|
||||
} catch (HardinessZoneNotSetException | IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (HardinessZoneNotSetException e) {
|
||||
LOG.log(Level.WARNING, "Hardiness Zone not set!");
|
||||
} catch (IOException e) {
|
||||
LOG.log(Level.WARNING, "Could not retrieve data!", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +110,7 @@ public class PlantsController implements Initializable {
|
||||
* set text of list view to plant name
|
||||
*/
|
||||
private void setListCellFactory() {
|
||||
list_plants.setCellFactory(param -> new ListCell<Plant>() {
|
||||
list_plants.setCellFactory(param -> new ListCell<>() {
|
||||
@Override
|
||||
protected void updateItem(Plant plant, boolean empty) {
|
||||
super.updateItem(plant, empty);
|
||||
@@ -148,8 +151,10 @@ public class PlantsController implements Initializable {
|
||||
List<Plant> filteredPlants = plantListModel.getFilteredPlantListByString(DEFAULT_HARDINESS_ZONE, newValue);
|
||||
clearListView();
|
||||
plantListProperty.addAll(filteredPlants);
|
||||
} catch (HardinessZoneNotSetException | IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (HardinessZoneNotSetException e) {
|
||||
LOG.log(Level.WARNING, "Hardiness Zone not set!");
|
||||
} catch (IOException e) {
|
||||
LOG.log(Level.WARNING, "Could not retrieve data!", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -163,8 +168,10 @@ public class PlantsController implements Initializable {
|
||||
try {
|
||||
clearListView();
|
||||
plantListProperty.addAll(plantListModel.getPlantList(plantListModel.getCurrentZone()));
|
||||
} catch (HardinessZoneNotSetException | IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (HardinessZoneNotSetException e) {
|
||||
LOG.log(Level.WARNING, "Hardiness Zone not set!");
|
||||
} catch (IOException e) {
|
||||
LOG.log(Level.WARNING, "Could not retrieve data!", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -182,12 +189,9 @@ public class PlantsController implements Initializable {
|
||||
if (zone.equals(DEFAULT_HARDINESS_ZONE)) {
|
||||
radioButton.setSelected(true);
|
||||
}
|
||||
radioButton.selectedProperty().addListener(new ChangeListener<Boolean>() {
|
||||
@Override
|
||||
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
|
||||
radioButton.selectedProperty().addListener((observable, oldValue, newValue) -> {
|
||||
plantListModel.setCurrentZone(zone);
|
||||
fillPlantListWithHardinessZone();
|
||||
}
|
||||
});
|
||||
climate_zones.getChildren().add(radioButton);
|
||||
}
|
||||
@@ -207,20 +211,19 @@ public class PlantsController implements Initializable {
|
||||
if (season.equals(Seasons.AllSEASONS)) {
|
||||
radioButton.setSelected(true);
|
||||
}
|
||||
radioButton.selectedProperty().addListener(new ChangeListener<Boolean>() {
|
||||
@Override
|
||||
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
|
||||
radioButton.selectedProperty().addListener((observable, oldValue, newValue) -> {
|
||||
if (season.equals(Seasons.AllSEASONS)) {
|
||||
fillPlantListWithHardinessZone();
|
||||
} else {
|
||||
try {
|
||||
viewFilteredListBySeason(season);
|
||||
} catch (HardinessZoneNotSetException | IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (HardinessZoneNotSetException e) {
|
||||
LOG.log(Level.WARNING, "Hardiness Zone not set!");
|
||||
} catch (IOException e) {
|
||||
LOG.log(Level.WARNING, "Could not retrieve data!", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
seasons.getChildren().add(radioButton);
|
||||
}
|
||||
@@ -237,27 +240,24 @@ public class PlantsController implements Initializable {
|
||||
selectSowDay_button.setDisable(true);
|
||||
Image img = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png")));
|
||||
img_plant.setImage(img);
|
||||
list_plants.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Plant>() {
|
||||
@Override
|
||||
public void changed(ObservableValue<? extends Plant> observable, Plant oldValue, Plant newValue) {
|
||||
list_plants.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
|
||||
if(newValue != null) {
|
||||
selectedPlant = newValue;
|
||||
description_plant.setText(selectedPlant.description());
|
||||
selectSowDay_button.setDisable(false);
|
||||
Image img;
|
||||
Image img1;
|
||||
if(selectedPlant.image() != null) {
|
||||
img = selectedPlant.image();
|
||||
img1 = selectedPlant.image();
|
||||
} else {
|
||||
img = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png")));
|
||||
img1 = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png")));
|
||||
}
|
||||
img_plant.setImage(img);
|
||||
img_plant.setImage(img1);
|
||||
} else {
|
||||
selectedPlant = null;
|
||||
description_plant.setText("");
|
||||
selectSowDay_button.setDisable(true);
|
||||
Image img = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png")));
|
||||
img_plant.setImage(img);
|
||||
}
|
||||
Image img1 = new Image(String.valueOf(PlantsController.class.getResource("placeholder.png")));
|
||||
img_plant.setImage(img1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -63,8 +63,7 @@ public class SelectSowDayController implements Initializable {
|
||||
//ToDo method to get current lifecycle group in plant
|
||||
sowDate = selectedPlant.sowDateFromHarvestDate(datepicker.getValue(), 0);
|
||||
}
|
||||
//ToDo uncomment, when error from JsonTaskDatabase.java loadTaskListFromFile() is fixed.
|
||||
//gardenplanmodel.plantAsCrop(selectedPlant, sowDate);
|
||||
gardenplanmodel.plantAsCrop(selectedPlant, sowDate);
|
||||
closeWindow();
|
||||
}
|
||||
|
||||
|
||||
@@ -145,7 +145,6 @@ public class JsonGardenPlan implements GardenPlan {
|
||||
.registerModule(new Jdk8Module())
|
||||
.writeValue(new File(dataSource.toURI()), cropMap.values());
|
||||
} catch (URISyntaxException e) {
|
||||
// TODO: Log
|
||||
throw new IOException(INVALID_DATASOURCE_MSG, e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,13 +16,12 @@ public class GrowthPhaseTypeDeserializer extends StdDeserializer<GrowthPhaseType
|
||||
|
||||
@Override
|
||||
public GrowthPhaseType deserialize(JsonParser parser, DeserializationContext context) throws IOException {
|
||||
GrowthPhaseType result = null;
|
||||
GrowthPhaseType result;
|
||||
String token = parser.getText();
|
||||
try {
|
||||
result = GrowthPhaseType.valueOf(token.toUpperCase());
|
||||
} catch (IllegalArgumentException e) {
|
||||
// TODO: Log
|
||||
System.err.printf("Bad growth phase type \"%s\"\n", token);
|
||||
throw new IOException(String.format("Bad growth phase type \"%s\"\n", token));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -17,13 +17,12 @@ public class HardinessZoneDeserializer extends StdDeserializer<HardinessZone> {
|
||||
|
||||
@Override
|
||||
public HardinessZone deserialize(JsonParser parser, DeserializationContext context) throws IOException {
|
||||
HardinessZone result = null;
|
||||
HardinessZone result;
|
||||
String token = parser.getText();
|
||||
try {
|
||||
result = HardinessZone.valueOf(token.toUpperCase());
|
||||
} catch (IllegalArgumentException e) {
|
||||
// TODO: Log
|
||||
System.err.printf("Unknown Hardiness Zone \"%s\"\n", token);
|
||||
throw new IOException(String.format("Unknown Hardiness Zone \"%s\"\n", token), e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -23,9 +23,7 @@ public class PlantImageDeserializer extends JsonDeserializer<Image> {
|
||||
try (InputStream is = new FileInputStream(new File(imageUrl.toURI()))) {
|
||||
result = new Image(is);
|
||||
} catch (IllegalArgumentException | URISyntaxException e) {
|
||||
// TODO: Log
|
||||
e.printStackTrace();
|
||||
System.err.printf("Cannot find Image \"%s\"\n", imageUrl.getFile());
|
||||
throw new IOException(String.format("Cannot find Image \"%s\"\n", imageUrl.getFile()));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -116,9 +116,10 @@ public class PlantListModel {
|
||||
if (searchString.length() == 0) {
|
||||
return getPlantList(zone);
|
||||
} else if (searchString.charAt(0) == '#') {
|
||||
try {
|
||||
return getFilteredPlantListById(zone, Long.parseLong(searchString.substring(1)));
|
||||
} catch (NumberFormatException e) {
|
||||
if (isPositiveIntegral(searchString.substring(1))) {
|
||||
Long searchId = Long.parseLong(searchString.substring(1));
|
||||
return getFilteredPlantListById(zone, searchId);
|
||||
} else {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
} else {
|
||||
@@ -169,7 +170,6 @@ public class PlantListModel {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param zone selected hardiness zone
|
||||
* @param from the earliest date to for the filter
|
||||
* @param to the lastest date for the filter
|
||||
@@ -180,4 +180,14 @@ public class PlantListModel {
|
||||
public List<Plant> getFilteredPlantListBySaisonWithoutGrowthPhase(HardinessZone zone, MonthDay from, MonthDay to) throws HardinessZoneNotSetException, IOException {
|
||||
return getFilteredPlantList(zone, plant -> plant.lifecycle().stream().anyMatch(growthPhase -> growthPhase.startDate().compareTo(from) >= 0 && (growthPhase.startDate().compareTo(to) <= 0)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a string can safely be parsed as a positive Integral value (short/int/long)
|
||||
*
|
||||
* @param subject The string to be tested
|
||||
* @return Whether the string contains only digits
|
||||
*/
|
||||
private boolean isPositiveIntegral(String subject) {
|
||||
return subject != null && subject.matches("[0-9]+");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,10 @@ public class Task {
|
||||
* default constructor
|
||||
* (used by Json deserializer)
|
||||
*/
|
||||
public Task(long cropId){
|
||||
public Task(){
|
||||
name= "";
|
||||
description= "";
|
||||
startDate = LocalDate.now();
|
||||
this.cropId = cropId;
|
||||
}
|
||||
|
||||
public Task(String name, String description, LocalDate startDate, long cropId) {
|
||||
|
||||
@@ -4,6 +4,7 @@ module ch.zhaw.gartenverwaltung {
|
||||
requires com.fasterxml.jackson.databind;
|
||||
requires com.fasterxml.jackson.datatype.jsr310;
|
||||
requires com.fasterxml.jackson.datatype.jdk8;
|
||||
requires java.logging;
|
||||
|
||||
opens ch.zhaw.gartenverwaltung to javafx.fxml;
|
||||
opens ch.zhaw.gartenverwaltung.types to com.fasterxml.jackson.databind;
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
</Label>
|
||||
</children>
|
||||
</GridPane>
|
||||
<ImageView fitHeight="300.0" fitWidth="300.0" pickOnBounds="true" preserveRatio="true" HBox.hgrow="NEVER" />
|
||||
<ImageView fx:id="imageView" fitHeight="300.0" fitWidth="300.0" pickOnBounds="true" preserveRatio="true" HBox.hgrow="NEVER" />
|
||||
</children>
|
||||
</HBox>
|
||||
<Label text="Growth Phases:">
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.text.Font?>
|
||||
|
||||
|
||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="655.0" prefWidth="1175.0" xmlns="http://javafx.com/javafx/17"
|
||||
xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.zhaw.gartenverwaltung.MyPlantsController">
|
||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="655.0" prefWidth="1175.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.zhaw.gartenverwaltung.MyPlantsController">
|
||||
<children>
|
||||
<VBox layoutY="49.0" prefHeight="655.0" prefWidth="1175.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||
<children>
|
||||
@@ -21,7 +19,7 @@
|
||||
<Insets bottom="10.0" />
|
||||
</VBox.margin>
|
||||
</Label>
|
||||
<VBox fx:id="myPlants_vbox" prefHeight="200.0" prefWidth="100.0" VBox.vgrow="ALWAYS" />
|
||||
<VBox fx:id="myPlants_vbox" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="100.0" VBox.vgrow="ALWAYS" />
|
||||
<Button fx:id="addPlant_button" mnemonicParsing="false" onAction="#addPlant" prefHeight="45.0" prefWidth="155.0" text="Add new Plant">
|
||||
<VBox.margin>
|
||||
<Insets top="10.0" />
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"startDate" : "2022-05-01",
|
||||
"endDate" : "2022-05-01",
|
||||
"interval" : 0,
|
||||
"cropID" : 0
|
||||
"cropId" : 0
|
||||
},
|
||||
{
|
||||
"id" : 2,
|
||||
@@ -15,7 +15,7 @@
|
||||
"startDate" : "2022-05-01",
|
||||
"endDate" : "2022-09-01",
|
||||
"interval" : 2,
|
||||
"cropID" : 0
|
||||
"cropId" : 0
|
||||
},
|
||||
{
|
||||
"id" : 3,
|
||||
@@ -24,7 +24,7 @@
|
||||
"startDate" : "2022-06-01",
|
||||
"endDate" : "2022-08-01",
|
||||
"interval" : 28,
|
||||
"cropID" : 0
|
||||
"cropId" : 0
|
||||
},
|
||||
{
|
||||
"id" : 4,
|
||||
@@ -33,7 +33,7 @@
|
||||
"startDate" : "2022-07-01",
|
||||
"endDate" : "2022-07-01",
|
||||
"interval" : 0,
|
||||
"cropID" : 0
|
||||
"cropId" : 0
|
||||
},
|
||||
{
|
||||
"id" : 5,
|
||||
@@ -42,7 +42,7 @@
|
||||
"startDate" : "2022-05-01",
|
||||
"endDate" : "2022-09-01",
|
||||
"interval" : 5,
|
||||
"cropID" : 0
|
||||
"cropId" : 0
|
||||
},
|
||||
{
|
||||
"id" : 6,
|
||||
@@ -51,6 +51,6 @@
|
||||
"startDate" : "2022-09-01",
|
||||
"endDate" : "2022-09-01",
|
||||
"interval" : 0,
|
||||
"cropID" : 0
|
||||
"cropId" : 0
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user