package cgl.iotcloud.core.sensorsite;
import cgl.iotcloud.core.sensorsite.events.SensorEvent;
import cgl.iotcloud.core.utils.MasterClientCache;
import com.google.common.eventbus.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MasterUpdater {
private static Logger LOG = LoggerFactory.getLogger(MasterUpdater.class);
private SiteContext siteContext;
private MasterClientCache clientCache;
public MasterUpdater(SiteContext context) {
this.siteContext = context;
this.clientCache = new MasterClientCache(siteContext);
}
@Subscribe
public void updateMaster(SensorEvent event) {
if (event.getState() == SensorState.DEPLOY) {
registerSensor(event);
} else if (event.getState() == SensorState.ACTIVATE) {
activateSensor(event);
} else if (event.getState() == SensorState.DEACTIVATE) {
deActivateSensor(event);
} else if (event.getState() == SensorState.UN_DEPLOY) {
unRegisterSensor(event);
}
}
public void unRegisterSite() {
MasterClient client = null;
try {
client = clientCache.getMasterClient();
client.unRegisterSite();
} catch (Exception e) {
LOG.error("Failed to un-register the site: " + siteContext.getSiteId(), e);
} finally {
if (client != null) {
clientCache.done(client);
}
}
}
private void registerSensor(SensorEvent event) {
MasterClient client = null;
try {
client = clientCache.getMasterClient();
client.registerSensor(siteContext.getSiteId(), siteContext.getSensorDescriptor(event.getSensorId()));
} catch (Exception e) {
LOG.error("Failed to register the sensor: " + event.getSensorId(), e);
} finally {
if (client != null) {
clientCache.done(client);
}
}
}
private void unRegisterSensor(SensorEvent event) {
MasterClient client = null;
try {
client = clientCache.getMasterClient();
client.unRegisterSensor(siteContext.getSiteId(), siteContext.getSensorDescriptor(event.getSensorId()));
// now we remove the sensor records
siteContext.removeSensor(event.getSensorId());
} catch (Exception e) {
LOG.error("Failed to un-register the sensor: " + event.getSensorId(), e);
} finally {
if (client != null) {
clientCache.done(client);
}
}
}
private void activateSensor(SensorEvent event) {
MasterClient client = null;
try {
client = clientCache.getMasterClient();
client.updateSensor(siteContext.getSiteId(), siteContext.getSensorDescriptor(event.getSensorId()), SensorState.ACTIVATE);
} catch (Exception e) {
LOG.error("Failed to activate the sensor: " + event.getSensorId(), e);
} finally {
if (client != null) {
clientCache.done(client);
}
}
}
private void deActivateSensor(SensorEvent event) {
MasterClient client = null;
try {
client = clientCache.getMasterClient();
client.updateSensor(siteContext.getSiteId(), siteContext.getSensorDescriptor(event.getSensorId()), SensorState.DEACTIVATE);
} catch (Exception e) {
LOG.error("Failed to de-activate the sensor: " + event.getSensorId(), e);
} finally {
if (client != null) {
clientCache.done(client);
}
}
}
}