Witam. Ostatnio zastanawiałem się jak w projekcie: widok w html i js, a kontroler w Springu możnaby przekazać zestaw funkcji, które mogą być użyte, ale nie muszą przez użytkownika.
https://zapodaj.net/2dce187a10d43.png.html
Tak więc nie wybierając nic, program pokazywałby wszystkie miasta na świecie. Dla wybranego języka i wskaźnika przestępczości, mogłyby to być np. miasta w państwach hiszpańskojęzycznych o określonym współczynniku przestępczości itd. Nie wiem czy słusznie, ale zacząłem od kontrolera. Uznałem, że dobrze gdyby wszystkie polecenia, które chcę przekazać w widoku były w klasach dziedziczących po jednej klasie abstrakcyjnej, tak żeby można było po nich iterować. Klasa abstrakcyjna wyglądałaby w ten sposób:
import java.util.List;
public abstract class Task <T> {
T t;
public Task(T t){
this.t = t;
}
public T getT(){
return t;
}
public abstract List<City> filter (T t, List<City> list);
}
a jej implementacje:
public class CountryNameFilter extends Task<String> {
public CountryNameFilter(String country){
super(country);
}
@Override
public List<City> filter(String country, List <City> list) {
return list.stream().filter(a->a.getCountry()==country).collect(Collectors.toList());
}
}
public class PopulationFilter extends Task<Integer> {
public PopulationFilter(int population){
super(population);
}
@Override
public List<City> filter(Integer population, List <City> list) {
return list.stream().filter(a->a.getPopulation()>population).collect(Collectors.toList());
}
}
W kontrolerze metoda, która na wszystkich miastach wywołuje wybrane polecenia wygląda tak:
public List<City> getSelectedCities(List<City> allCities, List<Task> allFunctions){
if(allFunctions.isEmpty())
return allCities;
else{
Task function = allFunctions.get(0);
allCities=function.filter(function.getT(),allCities);
allFunctions.remove(0);
return getSelectedCities(allCities, allFunctions);
}
}
Teraz mam jeden problem. W międzyczasie połapałem się, że nie wiem jak i nie wiem czy w ogóle się da przedstawić w JSonie listę implementacji jakiegoś interfejsu, albo klasy abstrakcyjnej. Na próbę chciałem zobaczyć jakby wyglądało zrobienie JSona za pomocą JSonArray i wyglądało to tak:
[{"t":"Spain"},{"t":50000}]
Więc gdybym coś takiego próbował z powrotem przekształcić w listę obiektów, to na bank by się wszystko rozlazło. Ktoś by mi mógł podpowiedzieć czy jednak by się dało jakoś przekazać przez JSona taką listę, albo czy w ogóle cały sposób w jaki próbuję to zrobić ma sens?