package codeine;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import codeine.configuration.IConfigurationManager;
import codeine.db.ProjectsConfigurationConnector;
import codeine.jsons.nodes.NodesManager;
import codeine.jsons.project.ProjectJson;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
public class ConfigurationManagerPeer implements IConfigurationManager {
private static final Logger log = Logger.getLogger(ConfigurationManagerPeer.class);
private Map<String, ProjectJson> projects;
private NodesManager nodesManager;
private ProjectsConfigurationConnector projectsConfigurationGetter;
@Inject
public ConfigurationManagerPeer(NodesManager nodesManager, ProjectsConfigurationConnector projectsConfigurationGetter) {
this.nodesManager = nodesManager;
this.projectsConfigurationGetter = projectsConfigurationGetter;
}
@Override
public synchronized void refresh() {
log.info("refresh configuration.");
Map<String, ProjectJson> newProjects = getProjectsFromMysql();
//find changed projects?
projects = newProjects;
for (ProjectJson projectJson : newProjects.values()) {
try {
nodesManager.init(projectJson);
} catch (Exception e) {
log.warn("failed to refresh nodes in project " + projectJson.name(), e);
}
}
}
private Map<String, ProjectJson> getProjectsFromMysql() {
return projectsConfigurationGetter.getAllProjects();
}
@Override
public List<ProjectJson> getConfiguredProjects() {
if (null == projects) {
refresh();
}
return Lists.newArrayList(projects.values());
}
@Override
public ProjectJson getProjectForName(String projectName) {
if (!projects.containsKey(projectName)){
throw new IllegalArgumentException("project not found " + projectName);
}
return projects.get(projectName);
}
@Override
public boolean hasProject(String projectName) {
return projects.containsKey(projectName);
}
}