/** * Copyright (C) 2014 KAIST * @author Wondeuk Yoon <wdyoon@resl.kaist.ac.kr> * */ package org.fosstrak.ale.server.cc.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.cc.ALECC; import org.fosstrak.ale.server.cc.ReportsGenerator; import org.fosstrak.ale.server.readers.LogicalReader; import org.fosstrak.ale.server.readers.LogicalReaderManager; import org.fosstrak.alecc.server.controller.ALECCController; 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 ALECCControllerImpl implements ALECCController { /** logger. */ private static final Logger LOG = Logger.getLogger(ALECCControllerImpl.class.getName()); //FIXME => modifier tous les NoSuchNameGPIOException avec les bons NoSuchNameException @Autowired private ALECC alecc; @Autowired private LogicalReaderManager logicalReaderManager; @Override public boolean ccSpecIsStarted(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("check if " + specName + " CCSpec is started"); if (!alecc.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } boolean result = false; ReportsGenerator reportsGenerator = alecc.getReportGenerators().get(specName); if (reportsGenerator != null) { if (reportsGenerator.isStateRequested()){ result = true; } } LOG.debug("CCSpec" + specName + " is started = " + result); return result; } @Override public List<String> getAllCCSpecNameStarted() { LOG.info("get all CCSpec started"); List<String> result = new ArrayList<String>(); Map<String, ReportsGenerator> reportGeneratorList = alecc.getReportGenerators(); Set<String> reportGeneratorNameList = reportGeneratorList.keySet(); for (String reportGeneratorName : reportGeneratorNameList) { if (reportGeneratorList.get(reportGeneratorName).isStateRequested()){ result.add(reportGeneratorName); } } LOG.debug("list of all CCSpec started = " + result); return result; } @Override public void startCCSpec(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("start CCSpec " + specName); if (!alecc.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } ReportsGenerator reportsGenerator = alecc.getReportGenerators().get(specName); if (reportsGenerator != null) { reportsGenerator.setStateRequested(); } } @Override public void stopCCSpec(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("stop CCSpec " + specName); if (!alecc.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } ReportsGenerator reportsGenerator = alecc.getReportGenerators().get(specName); if (reportsGenerator != null) { reportsGenerator.setStateUnRequested(); } } @Override public void stopAllCCSpec() { LOG.info("stop all CCSpec"); List<String> ccSpecsName = getAllCCSpecNameStarted(); for (String ccSpecName : ccSpecsName) { try { LOG.info("stop ECSepcs " + ccSpecName); stopCCSpec(ccSpecName); } catch (org.fosstrak.ale.exception.NoSuchNameException e) { LOG.error("error to stop ecspec at startup", e); } } } @Override public void stopAllCCSpec4LogicalReader(String logicalReaderName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("stop all CCSpec for the logical reader " + logicalReaderName); boolean logicalReaderFind = false; Map<String, ReportsGenerator> reportGeneratorList = alecc.getReportGenerators(); Set<String> reportGeneratorNameList = reportGeneratorList.keySet(); for (String reportGeneratorName : reportGeneratorNameList) { ReportsGenerator reportsGenerator = reportGeneratorList.get(reportGeneratorName); List<String> logicalReaderList = reportsGenerator.getCCSpec().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 stopAllCCSpec4LogicalReaderByCCSpecName(String specName) throws org.fosstrak.ale.exception.NoSuchNameException { LOG.info("stop all CCSpec for the logical reader by spec name " + specName); if (!alecc.getReportGenerators().containsKey(specName)) { throw new org.fosstrak.ale.exception.NoSuchNameException(); } List<String> logicalReaderList = alecc.getReportGenerators().get(specName).getCCSpec().getLogicalReaders().getLogicalReader(); if (logicalReaderList.size() > 0) { String logicalReaderName = logicalReaderList.get(0); Map<String, ReportsGenerator> reportGeneratorList = alecc.getReportGenerators(); Set<String> reportGeneratorNameList = reportGeneratorList.keySet(); for (String reportGeneratorName : reportGeneratorNameList) { ReportsGenerator reportsGenerator = reportGeneratorList.get(reportGeneratorName); List<String> logicalReaderList_for = reportsGenerator.getCCSpec().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]); } }