package es.tid.pce.parentPCE.MDLSPDB; import java.net.Inet4Address; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.Gson; import redis.clients.jedis.Jedis; import es.tid.pce.parentPCE.MD_LSP; import es.tid.pce.pcep.objects.ExplicitRouteObject; import es.tid.pce.server.RedisDatabaseHandler; import es.tid.rsvp.objects.subobjects.EROSubobject; import es.tid.rsvp.objects.subobjects.ETCEROSubobject; import es.tid.rsvp.objects.subobjects.GeneralizedLabelEROSubobject; import es.tid.rsvp.objects.subobjects.LabelEROSubobject; import es.tid.rsvp.objects.subobjects.UnnumberIfIDEROSubobject; import es.tid.tedb.IntraDomainEdge; import es.tid.tedb.MultiDomainTEDB; import es.tid.tedb.SimpleTEDB; public class SaveLSPinRedis implements Runnable { private Hashtable <Integer,MD_LSP> multiDomain_LSP_list; private Hashtable <Integer,MD_LSP> multiDomain_LSP_list_old; private Hashtable <Integer,MD_LSP> multiDomain_LSP_list_to_add; private Hashtable <Integer,MD_LSP> multiDomain_LSP_list_to_del; private Logger log; Jedis jedis; public SaveLSPinRedis () { log = LoggerFactory.getLogger("BGP4Parser"); } public void configure( MultiDomainLSPDB multiDomainLSPDB, String host, int port){ jedis = new Jedis(host,port); jedis.connect(); this.multiDomain_LSP_list=multiDomainLSPDB.getMultiDomain_LSP_list(); } public void run(){ log.info("Going to save LSP in DB"); //LSPs to add multiDomain_LSP_list_to_add=new Hashtable <Integer,MD_LSP>(); multiDomain_LSP_list_to_del=new Hashtable <Integer,MD_LSP>(); if (multiDomain_LSP_list!=null){ if (multiDomain_LSP_list_old==null){ multiDomain_LSP_list_old= new Hashtable <Integer,MD_LSP>(); Enumeration<Integer>ids=multiDomain_LSP_list.keys(); while (ids.hasMoreElements()){ Integer id=ids.nextElement(); multiDomain_LSP_list_old.put(id, multiDomain_LSP_list.get(id)); multiDomain_LSP_list_to_add.put(id, multiDomain_LSP_list.get(id)); } }else { Enumeration<Integer>ids=multiDomain_LSP_list.keys(); while (ids.hasMoreElements()){ Integer id=ids.nextElement(); if (!(multiDomain_LSP_list_old.containsKey(id))){ multiDomain_LSP_list_to_add.put(id, multiDomain_LSP_list.get(id)); multiDomain_LSP_list_old.put(id, multiDomain_LSP_list.get(id)); } } ids=multiDomain_LSP_list_old.keys(); while (ids.hasMoreElements()){ Integer id=ids.nextElement(); if (!(multiDomain_LSP_list.containsKey(id))){ multiDomain_LSP_list_to_del.put(id, multiDomain_LSP_list.get(id)); //multiDomain_LSP_list_old.remove(id); } } ids=multiDomain_LSP_list_to_del.keys(); while (ids.hasMoreElements()){ Integer id=ids.nextElement(); multiDomain_LSP_list_old.remove(id); } } Enumeration<Integer>ids=multiDomain_LSP_list_to_add.keys(); while (ids.hasMoreElements()){ Integer id=ids.nextElement(); String key; String value; key="LSP:"+id; value=lspToJSON(multiDomain_LSP_list_to_add.get(id)); jedis.set(key,value); jedis.sadd("lsps",key); } //LSPs to delete ids=multiDomain_LSP_list_to_del.keys(); while (ids.hasMoreElements()){ Integer id=ids.nextElement(); String key; key="LSP:"+id; jedis.del(key); jedis.srem("lsps",key); } } } public String lspToJSON(MD_LSP lsp){ Gson gson = new Gson(); SimpleLSP slsp=new SimpleLSP(); ExplicitRouteObject ero=lsp.getFullERO(); Iterator <EROSubobject> erosolist= ero.getEROSubobjectList().iterator(); int num=0; while (erosolist.hasNext()){ EROSubobject eroso= erosolist.next(); if (eroso instanceof UnnumberIfIDEROSubobject){ num+=1; } } slsp.data=new SimpleLSPhop[num]; erosolist= ero.getEROSubobjectList().iterator(); int i=-1; while (erosolist.hasNext()){ EROSubobject eroso= erosolist.next(); if (eroso instanceof UnnumberIfIDEROSubobject){ i+=1; slsp.data[i]=new SimpleLSPhop(); slsp.data[i].routerID= ((UnnumberIfIDEROSubobject)eroso).routerID.getHostAddress(); slsp.data[i].ifID= ""+((UnnumberIfIDEROSubobject)eroso).interfaceID; }else if (eroso instanceof GeneralizedLabelEROSubobject){ if (slsp.data[i]!=null){ slsp.data[i].n=""+ ((GeneralizedLabelEROSubobject)eroso).getDwdmWavelengthLabel().getN(); slsp.data[i].m=""+ ((GeneralizedLabelEROSubobject)eroso).getDwdmWavelengthLabel().getM(); } }else if (eroso instanceof ETCEROSubobject){ if (slsp.data[i]!=null){ slsp.data[i].transponder="TX "+((ETCEROSubobject)eroso).getSubTransponderList().get(0).getST_TLV_ModFormat().toString(); } } } String json = gson.toJson(slsp); return json; } public Hashtable<Integer, MD_LSP> getMultiDomain_LSP_list() { return multiDomain_LSP_list; } public void setMultiDomain_LSP_list(Hashtable<Integer, MD_LSP> multiDomain_LSP_list) { this.multiDomain_LSP_list = multiDomain_LSP_list; } }