pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/ProtocolCache.java
New file
@@ -0,0 +1,121 @@
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<String, Driver> drivers = new HashMap<>() ;
   //注解与处理类的映射
   private static final HashMap<String, AnnotationDriverVo> driverMap = new HashMap<>() ;
   private static final HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = new HashMap<>() ;
   private static final HashMap<String, AnnotationOnLineVo> 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<String, Driver> ent = drivers.entrySet().iterator().next() ;
         dri = ent.getValue();
      }
      return dri ;
   }
   /**
    * 得到所有协议名称
    * @return 协议名称集合
    */
   @SuppressWarnings("unused")
   public static List<String> getProtocolList() {
      return new ArrayList<>(driverMap.keySet()) ;
   }
   protected static HashMap<String, AnnotationDriverVo> getDriverMap() {
      return driverMap;
   }
   protected static HashMap<String, AnnotationPrefixedDataAvailableVo> getPrefixedDataAvailableMap() {
      return prefixedDataAvailableMap;
   }
   protected static HashMap<String, AnnotationOnLineVo> 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<String, Integer> mp = new HashMap<>() ;
        mp.put("a1", 1) ;
        mp.put("a2", 2) ;
        List<String> list = new ArrayList<>(mp.keySet()) ;
        System.out.println(list);
    }
    */
}