package com.vistatec.ocelot.config; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.vistatec.ocelot.config.ConfigTransferService.TransferException; import com.vistatec.ocelot.config.xml.OcelotRootConfig; import com.vistatec.ocelot.config.xml.PluginConfig; import com.vistatec.ocelot.config.xml.ProvenanceConfig; import com.vistatec.ocelot.config.xml.TmManagement; import com.vistatec.ocelot.config.xml.TmManagement.TmConfig; import com.vistatec.ocelot.config.xml.TmManagement.TmConfig.TmxFiles; import com.vistatec.ocelot.plugins.Plugin; /** * Service for reading/saving configuration values. */ public class OcelotConfigService implements ConfigService { private static final Logger LOG = LoggerFactory.getLogger(OcelotConfigService.class); private final ConfigTransferService cfgXservice; private OcelotRootConfig config; public OcelotConfigService(ConfigTransferService cfgXService) throws ConfigTransferService.TransferException { this.cfgXservice = cfgXService; this.config = (OcelotRootConfig) cfgXService.parse(); } @Override public void saveConfig() throws ConfigTransferService.TransferException { cfgXservice.save(config); } @Override public boolean wasPluginEnabled(Plugin plugin) { PluginConfig pcfg = findPluginConfig(plugin); return pcfg.getEnabled(); } @Override public void enablePlugin(Plugin plugin, boolean enabled) { PluginConfig pcfg = findPluginConfig(plugin); pcfg.setEnabled(enabled); } @Override public void savePluginEnabled(Plugin plugin, boolean enabled) throws ConfigTransferService.TransferException { enablePlugin(plugin, enabled); cfgXservice.save(config); } @Override public PluginConfig findPluginConfig(Plugin plugin) { PluginConfig foundPluginConfig = null; for (PluginConfig pcfg : config.getPlugins()) { if (pcfg.matches(plugin)) { foundPluginConfig = pcfg; } } if (foundPluginConfig == null) { foundPluginConfig = new PluginConfig(plugin, false); config.getPlugins().add(foundPluginConfig); } return foundPluginConfig; } @Override public UserProvenance getUserProvenance() { return new UserProvenance(config.getUserProvenance().getRevPerson(), config.getUserProvenance().getRevOrganization(), config.getUserProvenance().getExternalReference()); } @Override public void saveUserProvenance(UserProvenance prov) throws ConfigTransferService.TransferException { ProvenanceConfig pConfig = config.getUserProvenance(); pConfig.setRevPerson(prov.getRevPerson()); pConfig.setRevOrganization(prov.getRevOrg()); pConfig.setExternalReference(prov.getProvRef()); cfgXservice.save(config); } @Override public double getFuzzyThreshold() { return config.getTmManagement().getFuzzyThreshold(); } @Override public void saveFuzzyThreshold(float threshold) throws ConfigTransferService.TransferException { config.getTmManagement().setFuzzyThreshold(threshold); cfgXservice.save(config); } @Override public int getMaxResults() { return config.getTmManagement().getMaxResults(); } @Override public void saveMaxResults(int maxResults) throws ConfigTransferService.TransferException { config.getTmManagement().setMaxResults(maxResults); cfgXservice.save(config); } @Override public List<TmManagement.TmConfig> getTms() { return config.getTmManagement().getTms(); } @Override public void saveTms(List<TmManagement.TmConfig> tmConfig) throws ConfigTransferService.TransferException { config.getTmManagement().setTm(tmConfig); cfgXservice.save(config); } @Override public TmManagement.TmConfig getTmConfig(String tmName) { for (TmManagement.TmConfig tm : config.getTmManagement().getTms()) { if (tm.getTmName().equals(tmName)) { return tm; } } return null; } @Override public void enableTm(String tmName, boolean enable) throws ConfigTransferService.TransferException { TmManagement.TmConfig tmConfig = getTmConfig(tmName); if (tmConfig == null) { LOG.error("Missing TM configuration for '{}'", tmName); throw new IllegalStateException("Missing TM configuration for '"+tmName+"'"); } tmConfig.setEnabled(enable); cfgXservice.save(config); } @Override public void saveTmDataDir(TmManagement.TmConfig tm, String tmDataDir) throws ConfigTransferService.TransferException { tm.setTmDataDir(tmDataDir); cfgXservice.save(config); } @Override public TmManagement.TmConfig createNewTmConfig(String tmName, boolean enabled, String tmDataDir) throws ConfigTransferService.TransferException { TmManagement.TmConfig newTmConfig = new TmManagement.TmConfig(); newTmConfig.setTmName(tmName); newTmConfig.setEnabled(enabled); newTmConfig.setTmDataDir(tmDataDir); config.getTmManagement().getTms().add(newTmConfig); cfgXservice.save(config); return newTmConfig; } public TmConfig createNewTmConfig(String tmName, boolean enabled, String tmDataDir, List<String> tmxFiles) throws TransferException { TmManagement.TmConfig newTmConfig = new TmManagement.TmConfig(); newTmConfig.setTmName(tmName); newTmConfig.setEnabled(enabled); newTmConfig.setTmDataDir(tmDataDir); if (tmxFiles != null) { TmxFiles tmxFilesConf = new TmxFiles(); tmxFilesConf.setTmxFile(tmxFiles); newTmConfig.setTmxFiles(tmxFilesConf); } config.getTmManagement().getTms().add(newTmConfig); cfgXservice.save(config); return newTmConfig; } @Override public TmConfig createNewTmConfig(String tmName, boolean enabled, List<String> tmxFiles) throws TransferException { TmManagement.TmConfig newTmConfig = new TmManagement.TmConfig(); newTmConfig.setTmName(tmName); newTmConfig.setEnabled(enabled); if (tmxFiles != null) { TmxFiles tmxFilesConf = new TmxFiles(); tmxFilesConf.setTmxFile(tmxFiles); newTmConfig.setTmxFiles(tmxFilesConf); } config.getTmManagement().getTms().add(newTmConfig); cfgXservice.save(config); return newTmConfig; } // @Override // public void saveLQIConfig(LQIGrid lqiGrid) throws TransferException { // // config.getLQIGrid().clear(); // if(lqiGrid != null){ // config.getLQIGrid().setMinor(lqiGrid.getMinorScore()); // config.getLQIGrid().setSerious(lqiGrid.getSeriousScore()); // config.getLQIGrid().setCritical(lqiGrid.getCriticalScore()); // if(lqiGrid.getErrorCategories() != null && !lqiGrid.getErrorCategories().isEmpty()){ // List<LQIGridConfig.LQICategory> lqiCategories = new ArrayList<LQIGridConfig.LQICategory>(); // LQIGridConfig.LQICategory configCategory = null; // LQIErrorCategory errorCat = null; // for(int i = 0; i<lqiGrid.getErrorCategories().size(); i++){ // errorCat = lqiGrid.getErrorCategories().get(i); // configCategory = new LQIGridConfig.LQICategory(); // configCategory.setName(errorCat.getName()); // configCategory.setWeight(errorCat.getWeight()); // configCategory.setPosition(i); // if (errorCat.getMinorShortcut() != null) { // Shortcut minor = new Shortcut(); // minor.setKeyCode(errorCat.getMinorShortcut() // .getKeyCode()); // minor.setModifiers(errorCat.getMinorShortcut() // .getModifiersString()); // configCategory.setMinor(minor); // } // if (errorCat.getSeriousShortcut() != null) { // Shortcut serious = new Shortcut(); // serious.setKeyCode(errorCat.getSeriousShortcut() // .getKeyCode()); // serious.setModifiers(errorCat.getSeriousShortcut() // .getModifiersString()); // configCategory.setSerious(serious); // } // if (errorCat.getCriticalShortcut() != null) { // Shortcut critical = new Shortcut(); // critical.setKeyCode(errorCat.getCriticalShortcut() // .getKeyCode()); // critical.setModifiers(errorCat.getCriticalShortcut() // .getModifiersString()); // configCategory.setCritical(critical); // } // lqiCategories.add(configCategory); // } // config.getLQIGrid().setLqiCategories(lqiCategories); // } // } // cfgXservice.save(config); // } // @Override // public LQIGrid readLQIConfig() throws TransferException { // LQIGridConfig confLqiGrid = config.getLQIGrid(); // LQIGrid grid = null; // if(confLqiGrid != null){ // grid = new LQIGrid(); // grid.setCriticalScore(confLqiGrid.getCritical()); // grid.setMinorScore(confLqiGrid.getMinor()); // grid.setSeriousScore(confLqiGrid.getSerious()); // if(confLqiGrid.getLqiCategories() != null){ // Collections.sort(confLqiGrid.getLqiCategories(), new LQICategoriesComparator()); // List<LQIErrorCategory> errCategories = new ArrayList<LQIErrorCategory>(); // LQIErrorCategory errCat = null; // for (LQICategory cat : confLqiGrid.getLqiCategories()) { // errCat = new LQIErrorCategory(cat.getName()); // errCat.setWeight(cat.getWeight()); // if (cat.getMinor() != null) { // errCat.setMinorShortcut(new LQIShortCut(cat.getMinor() // .getKeyCode(), cat.getMinor().getModifiers())); // } // if (cat.getSerious() != null) { // errCat.setSeriousShortcut(new LQIShortCut(cat // .getSerious().getKeyCode(), cat.getSerious() // .getModifiers())); // } // if (cat.getCritical() != null) { // errCat.setCriticalShortcut(new LQIShortCut(cat // .getCritical().getKeyCode(), cat.getCritical() // .getModifiers())); // } // errCategories.add(errCat); // } // grid.setErrorCategories(errCategories); // } // } // return grid; // } }