package org.fog.placement; import java.util.HashMap; import java.util.List; import java.util.Map; import org.cloudbus.cloudsim.core.CloudSim; import org.fog.application.AppEdge; import org.fog.application.AppModule; import org.fog.application.Application; import org.fog.entities.Actuator; import org.fog.entities.FogDevice; import org.fog.entities.Sensor; import org.fog.entities.Tuple; public class ModulePlacementOnlyCloud extends ModulePlacement{ private List sensors; private List actuators; private int cloudId; public ModulePlacementOnlyCloud(List fogDevices, List sensors, List actuators, Application application){ this.setFogDevices(fogDevices); this.setApplication(application); this.setSensors(sensors); this.setActuators(actuators); this.setModuleToDeviceMap(new HashMap>()); this.setDeviceToModuleMap(new HashMap>()); this.setModuleInstanceCountMap(new HashMap>()); this.cloudId = CloudSim.getEntityId("cloud"); mapModules(); computeModuleInstanceCounts(); } private void computeModuleInstanceCounts(){ FogDevice cloud = getDeviceById(CloudSim.getEntityId("cloud")); getModuleInstanceCountMap().put(cloud.getId(), new HashMap()); for(Sensor sensor : getSensors()){ String sensorType = sensor.getSensorName(); if(!getModuleInstanceCountMap().get(cloud.getId()).containsKey(sensorType)) getModuleInstanceCountMap().get(cloud.getId()).put(sensorType, 0); getModuleInstanceCountMap().get(cloud.getId()).put(sensorType, getModuleInstanceCountMap().get(cloud.getId()).get(sensorType)+1); } for(Actuator actuator : getActuators()){ String actuatorType = actuator.getActuatorType(); if(!getModuleInstanceCountMap().get(cloud.getId()).containsKey(actuatorType)) getModuleInstanceCountMap().get(cloud.getId()).put(actuatorType, 0); getModuleInstanceCountMap().get(cloud.getId()).put(actuatorType, getModuleInstanceCountMap().get(cloud.getId()).get(actuatorType)+1); } while(!isModuleInstanceCalculationComplete()){ for(AppModule module : getApplication().getModules()){ int maxInstances = 0; for(AppEdge edge : getApplication().getEdges()){ if(!getModuleInstanceCountMap().get(cloudId).containsKey(edge.getSource())) continue; if(edge.getDestination().equals(module.getName()) && edge.getDirection()==Tuple.UP){ maxInstances = Math.max(maxInstances, getModuleInstanceCountMap().get(cloudId).get(edge.getSource())); } } getModuleInstanceCountMap().get(cloudId).put(module.getName(), maxInstances); } } System.out.println(getModuleInstanceCountMap()); } private boolean isModuleInstanceCalculationComplete() { for(AppModule module : getApplication().getModules()){ if(!getModuleInstanceCountMap().get(cloudId).containsKey(module.getName())) return false; } return true; } @Override protected void mapModules() { List modules = getApplication().getModules(); for(AppModule module : modules){ FogDevice cloud = getDeviceById(cloudId); createModuleInstanceOnDevice(module, cloud); } } public List getActuators() { return actuators; } public void setActuators(List actuators) { this.actuators = actuators; } public List getSensors() { return sensors; } public void setSensors(List sensors) { this.sensors = sensors; } }