package org.fosstrak.ale.server.controller; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.log4j.Logger; import org.fosstrak.ale.server.ALE; import org.fosstrak.ale.server.ReportsGenerator; import org.fosstrak.ale.server.readers.LogicalReader; import org.fosstrak.ale.server.readers.LogicalReaderManager; import org.springframework.beans.factory.annotation.Autowired; /** * this class is a webservice wich is control ALE. Can stop/start/... ECSpec. * @author benoit.plomion@orange.com */ public class ALEControllerImpl implements ALEController { /** logger. */ private static final Logger LOG = Logger.getLogger(ALEControllerImpl.class.getName()); //FIXME => modifier tous les NoSuchNameGPIOException avec les bons NoSuchNameException @Autowired private ALE ale; @Autowired private LogicalReaderManager logicalReaderManager; @Override public boolean ecSpecIsStarted(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("check if " + specName + " ECSpec is started"); if (!ale.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } boolean result = false; ReportsGenerator reportsGenerator = ale.getReportGenerators().get(specName); if (reportsGenerator != null) { if (reportsGenerator.isStateRequested()){ result = true; } } LOG.debug("ECSpec" + specName + " is started = " + result); return result; } @Override public List<String> getAllECSpecNameStarted() { LOG.info("get all ECSpec started"); List<String> result = new ArrayList<String>(); Map<String, ReportsGenerator> reportGeneratorList = ale.getReportGenerators(); Set<String> reportGeneratorNameList = reportGeneratorList.keySet(); for (String reportGeneratorName : reportGeneratorNameList) { if (reportGeneratorList.get(reportGeneratorName).isStateRequested()){ result.add(reportGeneratorName); } } LOG.debug("list of all ECSpec started = " + result); return result; } @Override public void startECSpec(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("start ECSpec " + specName); if (!ale.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } ReportsGenerator reportsGenerator = ale.getReportGenerators().get(specName); if (reportsGenerator != null) { reportsGenerator.setStateRequested(); } } @Override public void stopECSpec(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("stop ECSpec " + specName); if (!ale.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } ReportsGenerator reportsGenerator = ale.getReportGenerators().get(specName); if (reportsGenerator != null) { reportsGenerator.setStateUnRequested(); } } @Override public void stopAllECSpec() { LOG.info("stop all ECSpec"); List<String> ecSpecsName = getAllECSpecNameStarted(); for (String ecSpecName : ecSpecsName) { try { LOG.info("stop ECSepcs " + ecSpecName); stopECSpec(ecSpecName); } catch (org.fosstrak.ale.exception.NoSuchNameException e) { LOG.error("error to stop ecspec at startup", e); } } } @Override public void stopAllECSpec4LogicalReader(String logicalReaderName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("stop all ECSpec for the logical reader " + logicalReaderName); boolean logicalReaderFind = false; Map<String, ReportsGenerator> reportGeneratorList = ale.getReportGenerators(); Set<String> reportGeneratorNameList = reportGeneratorList.keySet(); for (String reportGeneratorName : reportGeneratorNameList) { ReportsGenerator reportsGenerator = reportGeneratorList.get(reportGeneratorName); List<String> logicalReaderList = reportsGenerator.getSpec().getLogicalReaders().getLogicalReader(); for (String logicalReaderName_for : logicalReaderList) { if (logicalReaderName.equalsIgnoreCase(logicalReaderName_for)) { reportsGenerator.setStateUnRequested(); logicalReaderFind = true; } } } if (!logicalReaderFind) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } } @Override public void stopAllECSpec4LogicalReaderByECSpecName(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("stop all ECSpec for the logical reader by spec name " + specName); if (!ale.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } List<String> logicalReaderList = ale.getReportGenerators().get(specName).getSpec().getLogicalReaders().getLogicalReader(); if (logicalReaderList.size() > 0) { String logicalReaderName = logicalReaderList.get(0); Map<String, ReportsGenerator> reportGeneratorList = ale.getReportGenerators(); Set<String> reportGeneratorNameList = reportGeneratorList.keySet(); for (String reportGeneratorName : reportGeneratorNameList) { ReportsGenerator reportsGenerator = reportGeneratorList.get(reportGeneratorName); List<String> logicalReaderList_for = reportsGenerator.getSpec().getLogicalReaders().getLogicalReader(); for (String logicalReaderName_for : logicalReaderList_for) { if (logicalReaderName.equalsIgnoreCase(logicalReaderName_for)) { reportsGenerator.setStateUnRequested(); } } } } } @Override public String[] getLogicalReaderNames(boolean isComposite) { ArrayList<String> result = new ArrayList<String>(); Collection<LogicalReader> logicalReaders = logicalReaderManager.getLogicalReaders(); for (LogicalReader logicalReader : logicalReaders) { if (isComposite == logicalReader.getLRSpec().isIsComposite()) { result.add(logicalReader.getName()); } } return result.toArray(new String[0]); } }