blob: 05007a9e4b122b9a0fd202922feadd59183f01cb [file] [log] [blame]
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;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.uml2.uml.Package;
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;
}
}
}
/**
* Runs the init() of the selected checkers.
* @param checkersTags
* @throws Exception
*/
public void initSync(Set<String> checkersTags) throws Exception {
for (Checker checker : checkers) {
if (checker.belongsTo(checkersTags)) {
logger.debug("init " + checker.getUnifiedName());
checker.init();
}
}
}
/**
* Runs the check() of the selected checkers and returns the scheduled jobs.
* @param checkersTags
* @return the list of scheduled jobs
*/
public List<Job> checkSync(Set<String> checkersTags, Package pkg) {
final List<Job> jobs = new ArrayList<Job>();
for (Checker checker : checkers) {
checkerManager.updateCheckerStatus(checker.unifiedName, false);
if (checker.belongsTo(checkersTags)) {
logger.debug("run " + checker.getUnifiedName());
jobs.add(checker.syncCheck(pkg));
}
}
return jobs;
}
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;
}
}