Merge pull request #40 from schrom01/feature_plantList_M2
Feature plant list m2
This commit is contained in:
commit
f452b73233
|
@ -27,3 +27,6 @@ These branches are for bugfixes.
|
||||||
|
|
||||||
These branches are for javadoc and project documentation (such as the readme, class diagrams etc.).
|
These branches are for javadoc and project documentation (such as the readme, class diagrams etc.).
|
||||||
|
|
||||||
|
|
||||||
|
## User Manual
|
||||||
|
- Search Plant List: if first Char is '#': only exact match in ID.
|
||||||
|
|
|
@ -3,10 +3,12 @@ package ch.zhaw.gartenverwaltung.plantList;
|
||||||
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||||
import ch.zhaw.gartenverwaltung.io.JsonPlantDatabase;
|
import ch.zhaw.gartenverwaltung.io.JsonPlantDatabase;
|
||||||
import ch.zhaw.gartenverwaltung.io.PlantDatabase;
|
import ch.zhaw.gartenverwaltung.io.PlantDatabase;
|
||||||
|
import ch.zhaw.gartenverwaltung.types.GrowthPhaseType;
|
||||||
import ch.zhaw.gartenverwaltung.types.HardinessZone;
|
import ch.zhaw.gartenverwaltung.types.HardinessZone;
|
||||||
import ch.zhaw.gartenverwaltung.types.Plant;
|
import ch.zhaw.gartenverwaltung.types.Plant;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.time.MonthDay;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -20,8 +22,8 @@ public class PlantListModel {
|
||||||
/**
|
/**
|
||||||
* Comparators to create sorted Plant List
|
* Comparators to create sorted Plant List
|
||||||
*/
|
*/
|
||||||
static final Comparator<Plant> sortByName = (Plant o1, Plant o2) -> o1.name().compareTo(o2.name());
|
static final Comparator<Plant> sortByName = Comparator.comparing(Plant::name);
|
||||||
static final Comparator<Plant> SortById = (Plant o1, Plant o2) -> Long.compare(o1.id(), o2.id());
|
static final Comparator<Plant> SortById = Comparator.comparingLong(Plant::id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor to create Database Object.
|
* Constructor to create Database Object.
|
||||||
|
@ -98,4 +100,64 @@ public class PlantListModel {
|
||||||
plantDatabase.getPlantById(zone, id).ifPresent(plantList::add);
|
plantDatabase.getPlantById(zone, id).ifPresent(plantList::add);
|
||||||
return plantList;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,14 +3,14 @@ package ch.zhaw.gartenverwaltung.plantList;
|
||||||
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||||
import ch.zhaw.gartenverwaltung.io.JsonPlantDatabase;
|
import ch.zhaw.gartenverwaltung.io.JsonPlantDatabase;
|
||||||
import ch.zhaw.gartenverwaltung.io.PlantDatabase;
|
import ch.zhaw.gartenverwaltung.io.PlantDatabase;
|
||||||
import ch.zhaw.gartenverwaltung.types.HardinessZone;
|
import ch.zhaw.gartenverwaltung.types.*;
|
||||||
import ch.zhaw.gartenverwaltung.types.Plant;
|
|
||||||
import org.junit.jupiter.api.AfterEach;
|
import org.junit.jupiter.api.AfterEach;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.time.MonthDay;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -48,7 +48,11 @@ class PlantListModelTest {
|
||||||
0,
|
0,
|
||||||
"sandy to loamy, loose soil, free of stones",
|
"sandy to loamy, loose soil, free of stones",
|
||||||
new ArrayList<>(),
|
new ArrayList<>(),
|
||||||
new ArrayList<>())
|
List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(8, 5), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(2, 8), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(10, 2), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>())))
|
||||||
);
|
);
|
||||||
examplePlantList.add(new Plant(
|
examplePlantList.add(new Plant(
|
||||||
0,
|
0,
|
||||||
|
@ -59,7 +63,8 @@ class PlantListModelTest {
|
||||||
6,
|
6,
|
||||||
"sandy",
|
"sandy",
|
||||||
new ArrayList<>(),
|
new ArrayList<>(),
|
||||||
new ArrayList<>())
|
List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>())))
|
||||||
);
|
);
|
||||||
examplePlantList.add(new Plant(
|
examplePlantList.add(new Plant(
|
||||||
1,
|
1,
|
||||||
|
@ -70,7 +75,7 @@ class PlantListModelTest {
|
||||||
0,
|
0,
|
||||||
"sandy to loamy, loose soil, free of stones",
|
"sandy to loamy, loose soil, free of stones",
|
||||||
new ArrayList<>(),
|
new ArrayList<>(),
|
||||||
new ArrayList<>())
|
List.of(new GrowthPhase(MonthDay.of(4, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>())))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,4 +154,44 @@ class PlantListModelTest {
|
||||||
assertEquals(1, plantListResult.size());
|
assertEquals(1, plantListResult.size());
|
||||||
assertEquals(examplePlantList.get(0), plantListResult.get(0));
|
assertEquals(examplePlantList.get(0), plantListResult.get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFilteredPlantListByString() throws HardinessZoneNotSetException, IOException {
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
List<Plant> plantListResult = model.getFilteredPlantListByString(HardinessZone.ZONE_8A, "#2");
|
||||||
|
assertEquals(0, plantListResult.size());
|
||||||
|
plantListResult = model.getFilteredPlantListByString(HardinessZone.ZONE_8A, "#20");
|
||||||
|
assertEquals(1, plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(0));
|
||||||
|
plantListResult = model.getFilteredPlantListByString(HardinessZone.ZONE_8A, "#a2");
|
||||||
|
assertEquals(0, plantListResult.size());
|
||||||
|
plantListResult = model.getFilteredPlantListByString(HardinessZone.ZONE_8A, "onion");
|
||||||
|
assertEquals(1, plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(0));
|
||||||
|
plantListResult = model.getFilteredPlantListByString(HardinessZone.ZONE_8A, "white roots");
|
||||||
|
assertEquals(1, plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(1), plantListResult.get(0));
|
||||||
|
plantListResult = model.getFilteredPlantListByString(HardinessZone.ZONE_8A, "apple");
|
||||||
|
assertEquals(0, plantListResult.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFilteredPlantListByPlantingSaison() throws HardinessZoneNotSetException, IOException {
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
List<Plant> plantListResult = model.getFilteredPlantListByPlantingSaison(HardinessZone.ZONE_8A, MonthDay.of(4, 4), MonthDay.of(8, 4));
|
||||||
|
assertEquals(2, plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(2), plantListResult.get(0));
|
||||||
|
assertEquals(examplePlantList.get(1), plantListResult.get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFilteredPlantListByHarvestSaison() throws HardinessZoneNotSetException, IOException {
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
List<Plant> plantListResult = model.getFilteredPlantListByHarvestSaison(HardinessZone.ZONE_8A, MonthDay.of(4, 4), MonthDay.of(8, 4));
|
||||||
|
assertEquals(2, plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(1), plantListResult.get(0));
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue