package com.dy.common.mw.protocol; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ProtocolCache { //本系统中,Driver在单线程中运行,所以只用一个实例 private static final HashMap drivers = new HashMap<>() ; //注解与处理类的映射 private static final HashMap driverMap = new HashMap<>() ; private static final HashMap prefixedDataAvailableMap = new HashMap<>() ; private static final HashMap onLineMap = new HashMap<>() ; /** * 在单线程环境中运行 * 通过协议驱动的类名,得到类单例 * @param protocolName 协议名称 * @param protocolVersion 协议版本号 * @return 驱动 * @throws Exception 异常 */ public static Driver getDriver(String protocolName, short protocolVersion) throws Exception{ Driver dri = drivers.get(protocolName + protocolVersion) ; if(dri == null){ AnnotationDriverVo vo = driverMap.get(protocolName + protocolVersion) ; if(vo != null && vo.clazz != null){ dri = (Driver)vo.clazz.getDeclaredConstructor().newInstance(); drivers.put(protocolName + protocolVersion, dri) ; } } return dri ; } /** * 在单线程环境中运行 * 通过协议驱动的类名,得到类单例 * @param protocolNameVersion 协议名称和版本号 * @return 驱动 * @throws Exception 异常 */ public static Driver getDriver(String protocolNameVersion) throws Exception{ Driver dri = drivers.get(protocolNameVersion) ; if(dri == null){ AnnotationDriverVo vo = driverMap.get(protocolNameVersion) ; if(vo != null && vo.clazz != null){ dri = (Driver)vo.clazz.getDeclaredConstructor().newInstance(); drivers.put(protocolNameVersion, dri) ; } } return dri ; } /** * 得到驱动的数量,即中间件支持的协议数量 * @return 驱动总数 */ public static int driverCount(){ if(drivers.size() == 0){ return 0 ; }else{ return drivers.size() ; } } /** * 得到第一个驱动 * @return 驱动 */ public static Driver getFirstDriver(){ Driver dri = null ; if(drivers.size() > 0){ Map.Entry ent = drivers.entrySet().iterator().next() ; dri = ent.getValue(); } return dri ; } /** * 得到所有协议名称 * @return 协议名称集合 */ @SuppressWarnings("unused") public static List getProtocolList() { return new ArrayList<>(driverMap.keySet()) ; } protected static HashMap getDriverMap() { return driverMap; } protected static HashMap getPrefixedDataAvailableMap() { return prefixedDataAvailableMap; } protected static HashMap getOnLineMap() { return onLineMap; } protected AnnotationDriverVo getAnnotationDriver(String protocolName, Short protocolVersion){ return driverMap.get(protocolName + "" + protocolVersion) ; } protected static AnnotationPrefixedDataAvailableVo getAnnotationPrefixedDataAvailable(String protocolName, Short protocolVersion){ return prefixedDataAvailableMap.get(protocolName + "" + protocolVersion) ; } protected static AnnotationOnLineVo getAnnotationOnLine(String protocolName, Short protocolVersion){ return onLineMap.get(protocolName + "" + protocolVersion) ; } /* public static void main(String[] args){ HashMap mp = new HashMap<>() ; mp.put("a1", 1) ; mp.put("a2", 2) ; List list = new ArrayList<>(mp.keySet()) ; System.out.println(list); } */ }