package es.tid.pce.computingEngine.algorithms.vlan; import java.util.Enumeration; import java.util.Hashtable; import java.util.LinkedList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import es.tid.pce.computingEngine.ComputingResponse; import es.tid.pce.computingEngine.algorithms.AlgorithmReservation; import es.tid.pce.pcep.objects.Reservation; import es.tid.pce.pcep.objects.ReservationConf; import es.tid.pce.server.wson.ReservationManager; /** * Similar class GenericLambdaReservation but for WLANs * @author jaume * */ public class GenericWLANReservation implements AlgorithmReservation { private ComputingResponse resp; private LinkedList<Object> sourceVertexList=new LinkedList<Object>(); private LinkedList<Object> targetVertexList=new LinkedList<Object>(); private LinkedList<Integer> WLANList = new LinkedList<Integer>(); private Reservation reservation; private Logger log; private ReservationManager reservationManager; private boolean bidirectional; public boolean isBidirectional() { return bidirectional; } public void setBidirectional(boolean bidirectional) { this.bidirectional = bidirectional; } public GenericWLANReservation(){ log=LoggerFactory.getLogger("PCEServer"); } public ComputingResponse call() throws Exception { if (reservation!=null){ long reservationID = 0; Hashtable<Integer,ReserveStruct> hTable = new Hashtable<Integer,ReserveStruct>(); for (int i = 0 ; i < sourceVertexList.size() ; i++ ) { log.info("Reserving lambda: "+WLANList.get(i)); if (hTable.get(WLANList.get(i)) == null) { ReserveStruct reserve = new ReserveStruct(); reserve.sourceVertexList.add(sourceVertexList.get(i)); reserve.targetVertexList.add(targetVertexList.get(i)); reserve.wlan = WLANList.get(i); } else { ReserveStruct reserve = hTable.get(WLANList.get(i)); reserve.sourceVertexList.add(sourceVertexList.get(i)); reserve.targetVertexList.add(targetVertexList.get(i)); } } Enumeration<Integer> enumKey = hTable.keys(); while(enumKey.hasMoreElements()) { Integer key = enumKey.nextElement(); ReserveStruct val = hTable.get(key); reservationManager.reserve(val.sourceVertexList, val.targetVertexList, val.wlan, reservation.getTimer(), this.bidirectional); log.info("Reservin value for WLAN:"+val.wlan); } ReservationConf resConf= new ReservationConf(); resConf.setReservationID(reservationID); resp.getResponse(0).setResConf(resConf); return resp; } else { return null; } } public ComputingResponse getResp() { return resp; } public void setResp(ComputingResponse resp) { this.resp = resp; } public LinkedList<Object> getSourceVertexList() { return sourceVertexList; } public void setSourceVertexList(LinkedList<Object> sourceVertexList) { this.sourceVertexList = sourceVertexList; } public LinkedList<Object> getTargetVertexList() { return targetVertexList; } public void setTargetVertexList(LinkedList<Object> targetVertexList) { this.targetVertexList = targetVertexList; } public void setWLANList(LinkedList<Integer> WLANList) { this.WLANList = WLANList; } public Reservation getReservation() { return reservation; } public void setReservation(Reservation reservation) { this.reservation = reservation; } public ReservationManager getReservationManager() { return reservationManager; } public void setReservationManager(ReservationManager reservationManager) { this.reservationManager = reservationManager; } private class ReserveStruct { private LinkedList<Object> sourceVertexList=new LinkedList<Object>(); private LinkedList<Object> targetVertexList=new LinkedList<Object>(); int wlan; } }