package org.infosec.ismp.manager.syslog.dao; import java.util.HashMap; import java.util.Map; import org.infosec.ismp.manager.model.syslog.SyslogParserEntity; import org.infosec.ismp.model.syslog.SyslogDeepParser; import org.infosec.ismp.model.syslog.SyslogParser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springside.modules.utils.SpringContextHolder; /** * 管理SyslogParser * @author lianglin * */ @Component public class SyslogParserService { private SyslogParserEntityDao m_parserDao; /** * type<->syslogParser */ private Map<String,SyslogParser> m_rawSyslogParsers = new HashMap<String, SyslogParser>(); private Map<String,SyslogDeepParser> m_rawSyslogDeepParsers = new HashMap<String, SyslogDeepParser>(); @Autowired(required=true) public void setParserDao(SyslogParserEntityDao parserDao) { m_parserDao = parserDao; } /** * 找到对应的raw syslog parser * @param type * @return */ @Transactional(readOnly=true) public SyslogParser getRawSyslogParser(String type){ SyslogParser parser = m_rawSyslogParsers.get(type); if(parser==null){ String parserClass = m_parserDao.getRawSyslogParserClass(type); if(parserClass!=null){ try { parser =(SyslogParser)(Class.forName(parserClass).newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } if(parser!=null){ m_rawSyslogParsers.put(type, parser); } } } return parser; } @Transactional public void save(SyslogParserEntity entity){ m_parserDao.save(entity); } public SyslogDeepParser getSyslogDeepParser(String type){ SyslogDeepParser parser = m_rawSyslogDeepParsers.get(type); if(parser==null){ String parserClass = m_parserDao.getSpecialSyslogParserClass(type); if(parserClass!=null){ try { // parser =(SyslogParser)(Class.forName(parserClass).newInstance()); Class c = Class.forName(parserClass); parser = (SyslogDeepParser)SpringContextHolder.getBean(c); } catch (Throwable e) { e.printStackTrace(); } if(parser!=null){ m_rawSyslogDeepParsers.put(type, parser); } } } return parser; } }