package org.fog.placement; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.cloudbus.cloudsim.core.CloudSim; import org.fog.application.AppModule; import org.fog.application.Application; import org.fog.entities.FogDevice; public abstract class ModulePlacement { public static int ONLY_CLOUD = 1; public static int EDGEWARDS = 2; public static int USER_MAPPING = 3; private List fogDevices; private Application application; private Map> moduleToDeviceMap; private Map> deviceToModuleMap; private Map> moduleInstanceCountMap; protected abstract void mapModules(); protected boolean canBeCreated(FogDevice fogDevice, AppModule module){ return fogDevice.getVmAllocationPolicy().allocateHostForVm(module); } protected int getParentDevice(int fogDeviceId){ return ((FogDevice)CloudSim.getEntity(fogDeviceId)).getParentId(); } protected FogDevice getFogDeviceById(int fogDeviceId){ return (FogDevice)CloudSim.getEntity(fogDeviceId); } protected boolean createModuleInstanceOnDevice(AppModule _module, final FogDevice device, int instanceCount){ return false; } protected boolean createModuleInstanceOnDevice(AppModule _module, final FogDevice device){ AppModule module = null; if(getModuleToDeviceMap().containsKey(_module.getName())) module = new AppModule(_module); else module = _module; if(canBeCreated(device, module)){ System.out.println("Creating "+module.getName()+" on device "+device.getName()); if(!getDeviceToModuleMap().containsKey(device.getId())) getDeviceToModuleMap().put(device.getId(), new ArrayList()); getDeviceToModuleMap().get(device.getId()).add(module); if(!getModuleToDeviceMap().containsKey(module.getName())) getModuleToDeviceMap().put(module.getName(), new ArrayList()); getModuleToDeviceMap().get(module.getName()).add(device.getId()); return true; } else { System.err.println("Module "+module.getName()+" cannot be created on device "+device.getName()); System.err.println("Terminating"); return false; } } protected FogDevice getDeviceByName(String deviceName) { for(FogDevice dev : getFogDevices()){ if(dev.getName().equals(deviceName)) return dev; } return null; } protected FogDevice getDeviceById(int id){ for(FogDevice dev : getFogDevices()){ if(dev.getId() == id) return dev; } return null; } public List getFogDevices() { return fogDevices; } public void setFogDevices(List fogDevices) { this.fogDevices = fogDevices; } public Application getApplication() { return application; } public void setApplication(Application application) { this.application = application; } public Map> getModuleToDeviceMap() { return moduleToDeviceMap; } public void setModuleToDeviceMap(Map> moduleToDeviceMap) { this.moduleToDeviceMap = moduleToDeviceMap; } public Map> getDeviceToModuleMap() { return deviceToModuleMap; } public void setDeviceToModuleMap(Map> deviceToModuleMap) { this.deviceToModuleMap = deviceToModuleMap; } public Map> getModuleInstanceCountMap() { return moduleInstanceCountMap; } public void setModuleInstanceCountMap(Map> moduleInstanceCountMap) { this.moduleInstanceCountMap = moduleInstanceCountMap; } }