package org.fog.placement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.cloudbus.cloudsim.core.CloudSim; import org.fog.application.AppModule; import org.fog.application.MyApplication; import org.fog.entities.MyActuator; import org.fog.entities.MyFogDevice; import org.fog.entities.MySensor; public class MyModulePlacement extends MyPlacement{ protected ModuleMapping moduleMapping; protected List sensors; protected List actuators; protected String moduleToPlace; protected Map deviceMipsInfo; public MyModulePlacement(List fogDevices, List sensors, List actuators, MyApplication application, ModuleMapping moduleMapping, String moduleToPlace){ this.setMyFogDevices(fogDevices); this.setMyApplication(application); this.setModuleMapping(moduleMapping); this.setModuleToDeviceMap(new HashMap>()); this.setDeviceToModuleMap(new HashMap>()); setMySensors(sensors); setMyActuators(actuators); this.moduleToPlace = moduleToPlace; this.deviceMipsInfo = new HashMap(); mapModules(); } @Override protected void mapModules() { for(String deviceName : getModuleMapping().getModuleMapping().keySet()){ for(String moduleName : getModuleMapping().getModuleMapping().get(deviceName)){ int deviceId = CloudSim.getEntityId(deviceName); AppModule appModule = getMyApplication().getModuleByName(moduleName); if(!getDeviceToModuleMap().containsKey(deviceId)) { ListplacedModules = new ArrayList(); placedModules.add(appModule); getDeviceToModuleMap().put(deviceId, placedModules); } else { ListplacedModules = getDeviceToModuleMap().get(deviceId); placedModules.add(appModule); getDeviceToModuleMap().put(deviceId, placedModules); } } } for(MyFogDevice device:getMyFogDevices()) { int deviceParent = -1; Listchildren = new ArrayList(); if(device.getLevel()==1) { if(!deviceMipsInfo.containsKey(device.getId())) deviceMipsInfo.put(device.getId(), 0); deviceParent = device.getParentId(); for(MyFogDevice deviceChild:getMyFogDevices()) { if(deviceChild.getParentId()==device.getId()) { children.add(deviceChild.getId()); } } MapchildDeadline = new HashMap(); for(int childId:children) childDeadline.put(childId,getMyApplication().getDeadlineInfo().get(childId).get(moduleToPlace)); List keys = new ArrayList(childDeadline.keySet()); for(int i = 0; ichildDeadline.get(keys.get(j+1))) { int tempJ = keys.get(j); int tempJn = keys.get(j+1); keys.set(j, tempJn); keys.set(j+1, tempJ); } } } int baseMipsOfPlacingModule = (int)getMyApplication().getModuleByName(moduleToPlace).getMips(); for(int key:keys) { int currentMips = deviceMipsInfo.get(device.getId()); AppModule appModule = getMyApplication().getModuleByName(moduleToPlace); int additionalMips = getMyApplication().getAdditionalMipsInfo().get(key).get(moduleToPlace); if(currentMips+baseMipsOfPlacingModule+additionalMipsplacedModules = new ArrayList(); placedModules.add(appModule); getDeviceToModuleMap().put(device.getId(), placedModules); } else { ListplacedModules = getDeviceToModuleMap().get(device.getId()); placedModules.add(appModule); getDeviceToModuleMap().put(device.getId(), placedModules); } } else { ListplacedModules = getDeviceToModuleMap().get(deviceParent); placedModules.add(appModule); getDeviceToModuleMap().put(deviceParent, placedModules); } } } } } public ModuleMapping getModuleMapping() { return moduleMapping; } public void setModuleMapping(ModuleMapping moduleMapping) { this.moduleMapping = moduleMapping; } public List getMySensors() { return sensors; } public void setMySensors(List sensors) { this.sensors = sensors; } public List getMyActuators() { return actuators; } public void setMyActuators(List actuators) { this.actuators = actuators; } }