| package org.polarsys.chess.checkers.core.checkerManager; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Optional; |
| import java.util.Set; |
| |
| import org.apache.log4j.Logger; |
| |
| public class CheckersContainer { |
| |
| private static final Logger logger = Logger.getLogger(CheckersContainer.class); |
| |
| List<Checker> checkers; |
| CheckerManager checkerManager; |
| |
| public CheckersContainer(CheckerManager checkerManager) { |
| this.checkers = new ArrayList<Checker>(); |
| this.checkerManager = checkerManager; |
| checkerManager.register(this); |
| } |
| |
| public void run(Set<String> checkersTags) throws Exception { |
| |
| boolean isFirstChecker = true; |
| |
| for (Checker checker : checkers) { |
| |
| checkerManager.updateCheckerStatus(checker.unifiedName, false); |
| |
| if (checker.belongsTo(checkersTags)) { |
| logger.debug("run " + checker.getUnifiedName()); |
| checker.asyncCheck(isFirstChecker); |
| isFirstChecker=false; |
| } |
| } |
| |
| } |
| |
| public void register(Checker checker) { |
| Optional<Checker> alreadyRegisteredChecker = find(this.checkers,checker.unifiedName); |
| if(!alreadyRegisteredChecker.isPresent()){ |
| logger.debug("register checker not present: "+checker.registerPriority); |
| this.checkers.add(checker); |
| }else if((alreadyRegisteredChecker.get().registerPriority < checker.registerPriority)){ |
| logger.debug("register checker already registered with priority: "+alreadyRegisteredChecker.get().registerPriority); |
| logger.debug("checker to register with priority: "+checker.registerPriority); |
| |
| this.checkers.remove(alreadyRegisteredChecker.get()); |
| this.checkers.add(checker); |
| //return; |
| } |
| //this.checkers.add(checker); |
| } |
| |
| public Optional<Checker> find(final List<Checker> list, final String name){ |
| return list.stream().filter(o -> o.unifiedName.equals(name)).findFirst(); |
| } |
| |
| public Collection<? extends String> getTags() { |
| Set<String> tags = new HashSet<String>(); |
| for (Checker checker : checkers) { |
| tags.addAll(checker.getCheckerTags()); |
| } |
| return tags; |
| } |
| |
| |
| |
| } |