Dobra Kod poniżej, działa nie wywala błędu, ale czy to jest czysto i poprawnie ? Najbardziej mi się nie podobają implementacje list.
@Service
public class ApiFootballService implements Observer {
private final ApiFootballFacade apiFootballFacade;
private final ApiFootballGameCollection apiFootballGameCollection;
@Autowired
public ApiFootballService(ApiFootballFacade apiFootballFacade, ApiFootballGameCollection apiFootballGameCollection) {
this.apiFootballFacade = apiFootballFacade;
this.apiFootballGameCollection = apiFootballGameCollection;
apiFootballGameCollection.register(this);
}
@Scheduled(cron = "*/30 * * * * *")
public void updateCollectionGame(){
apiFootballFacade.updateGameCollection();
}
@Override
public void update() {
System.out.println("Nowe ukończone mecze");
}
}
@Component
public class ApiFootballFacade {
private final ApiFootballGameCollection apiFootballGameCollection;
@Autowired
public ApiFootballFacade(ApiFootballGameCollection apiFootballGameCollection) {
this.apiFootballGameCollection=apiFootballGameCollection;
}
private final ApiFootballUrls apiFootballUrls = new ApiFootballUrls();
private final ApiFootballPojo apiFootballPojo = new ApiFootballPojo();
private final ApiFootballFilter apiFootballFilter = new ApiFootballFilter();
public void updateGameCollection(){
List<String> urls = apiFootballUrls.createUrl();
List<Game> games = apiFootballPojo.getGameEntityCollection(urls);
System.out.println(apiFootballFilter.getFinishedGames(games).size());
apiFootballGameCollection.setFinishedGames(apiFootballFilter.getFinishedGames(games));
apiFootballGameCollection.setAllGames(apiFootballFilter.getAllGames(games));
}
}
@Getter
@Setter
@Component
public class ApiFootballGameCollection implements Observable{
private List<Observer> observerList = new ArrayList<>();;
private List<Game> finishedGames = new ArrayList<>();
private List<Game> allGames = new ArrayList<>();
public void setFinishedGames(List<Game> finishedGames) {
this.finishedGames = finishedGames;
notifyObserver();
}
@Override
public void register(Observer observer) {
observerList.add(observer);
}
@Override
public void unregister(Observer observer) {
observerList.remove(observer);
}
@Override
public void notifyObserver() {
for(Observer o: observerList){
o.update();
}
}
}