Merge pull request #40 from schrom01/feature_plantList_M2
Feature plant list m2
This commit is contained in:
@@ -3,10 +3,12 @@ package ch.zhaw.gartenverwaltung.plantList;
|
||||
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||
import ch.zhaw.gartenverwaltung.io.JsonPlantDatabase;
|
||||
import ch.zhaw.gartenverwaltung.io.PlantDatabase;
|
||||
import ch.zhaw.gartenverwaltung.types.GrowthPhaseType;
|
||||
import ch.zhaw.gartenverwaltung.types.HardinessZone;
|
||||
import ch.zhaw.gartenverwaltung.types.Plant;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.MonthDay;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
@@ -20,8 +22,8 @@ public class PlantListModel {
|
||||
/**
|
||||
* Comparators to create sorted Plant List
|
||||
*/
|
||||
static final Comparator<Plant> sortByName = (Plant o1, Plant o2) -> o1.name().compareTo(o2.name());
|
||||
static final Comparator<Plant> SortById = (Plant o1, Plant o2) -> Long.compare(o1.id(), o2.id());
|
||||
static final Comparator<Plant> sortByName = Comparator.comparing(Plant::name);
|
||||
static final Comparator<Plant> SortById = Comparator.comparingLong(Plant::id);
|
||||
|
||||
/**
|
||||
* Constructor to create Database Object.
|
||||
@@ -98,4 +100,64 @@ public class PlantListModel {
|
||||
plantDatabase.getPlantById(zone, id).ifPresent(plantList::add);
|
||||
return plantList;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param zone selected hardiness zone
|
||||
* @param searchString the string to search plant List, set '#' as first char the search by id.
|
||||
* @return List of plants found in Plant List which contain the search String in the name or description
|
||||
* @throws HardinessZoneNotSetException If no {@link HardinessZone} was specified
|
||||
* @throws IOException If the database cannot be accessed
|
||||
*/
|
||||
public List<Plant> getFilteredPlantListByString(HardinessZone zone, String searchString) throws HardinessZoneNotSetException, IOException {
|
||||
if(searchString.charAt(0) == '#') {
|
||||
try {
|
||||
return getFilteredPlantListById(zone, Long.parseLong(searchString.substring(1)));
|
||||
} catch (NumberFormatException e) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
} else {
|
||||
return getFilteredPlantList(zone, plant -> plant.name().contains(searchString) || plant.description().contains(searchString));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param type GrowPhaseType to filter
|
||||
* @param zone selected hardiness zone
|
||||
* @param from the earliest date to for the filter
|
||||
* @param to the lastest date for the filter
|
||||
* @return List of Plants with selected saison
|
||||
* @throws HardinessZoneNotSetException If no {@link HardinessZone} was specified
|
||||
* @throws IOException If the database cannot be accessed
|
||||
*/
|
||||
private List<Plant> getFilteredPlantListBySaison(GrowthPhaseType type, 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) && growthPhase.type() == type));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param zone selected hardiness zone
|
||||
* @param from the earliest date to for the filter
|
||||
* @param to the lastest date for the filter
|
||||
* @return List of Plants with selected saison
|
||||
* @throws HardinessZoneNotSetException If no {@link HardinessZone} was specified
|
||||
* @throws IOException If the database cannot be accessed
|
||||
*/
|
||||
public List<Plant> getFilteredPlantListByPlantingSaison(HardinessZone zone, MonthDay from, MonthDay to) throws HardinessZoneNotSetException, IOException {
|
||||
return getFilteredPlantListBySaison(GrowthPhaseType.PLANT, zone, from, to);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param zone selected hardiness zone
|
||||
* @param from the earliest date to for the filter
|
||||
* @param to the lastest date for the filter
|
||||
* @return List of Plants with selected saison
|
||||
* @throws HardinessZoneNotSetException If no {@link HardinessZone} was specified
|
||||
* @throws IOException If the database cannot be accessed
|
||||
*/
|
||||
public List<Plant> getFilteredPlantListByHarvestSaison(HardinessZone zone, MonthDay from, MonthDay to) throws HardinessZoneNotSetException, IOException {
|
||||
return getFilteredPlantListBySaison(GrowthPhaseType.HARVEST, zone, from, to);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user