PersistenceCache.java
/*
* This file is part of WattDepot.
*
* Copyright (C) 2014 Cam Moore
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.wattdepot.server.depository.impl.hibernate;
import org.wattdepot.common.domainmodel.Depository;
import org.wattdepot.common.domainmodel.Organization;
import org.wattdepot.common.domainmodel.Sensor;
import java.util.HashMap;
/**
* In memory cache of Organizations, Depositories, and Sensors. Intended to speed up WattDepotPersistence. It is a lazy cache.
* @author Cam Moore
*/
public class PersistenceCache {
private HashMap<String, Organization> orgMap;
private HashMap<String, HashMap<String, Depository>> orgDepoMap;
private HashMap<String, HashMap<String, Sensor>> orgSensorMap;
/** Creates a new PersistenceCache. */
public PersistenceCache() {
this.orgMap = new HashMap<String, Organization>();
this.orgDepoMap = new HashMap<String, HashMap<String, Depository>>();
this.orgSensorMap = new HashMap<String, HashMap<String, Sensor>>();
}
/**
* Gets the Organization for the given orgId.
* @param orgId the organizations id.
* @return The Organization for the given id or null if the id is not in the cache.
*/
public Organization getOrganization(String orgId) {
return orgMap.get(orgId);
}
/**
* Stores the Organization in the cache.
* @param org The organization to store.
* @return The old Organization in the cache or null if the organization is new to the cache.
*/
public Organization putOrganization(Organization org) {
return orgMap.put(org.getId(), org);
}
/**
* Deletes the organization from the cache.
* @param org The organization to delete.
* @return The old organization from the cache or null if the organization wasn't in the cache.
*/
public Organization deleteOrganization(Organization org) {
return orgMap.remove(org.getId());
}
/**
* Gets the Depository defined by the depId and orgId.
* @param depId The depository id.
* @param orgId The organization id.
* @return The Depository for the given ids, or null if it is undefined.
*/
public Depository getDepository(String depId, String orgId) {
HashMap<String, Depository> depMap = orgDepoMap.get(orgId);
if (depMap != null) {
return depMap.get(depId);
}
return null;
}
/**
* Stores the Depository in the cache.
* @param dep The Depository to store.
* @return The old Depository in the cache or null if the depository wasn't in the cache.
*/
public Depository putDepository(Depository dep) {
HashMap<String, Depository> depMap = orgDepoMap.get(dep.getOrganizationId());
if (depMap == null) {
depMap = new HashMap<String, Depository>();
orgDepoMap.put(dep.getOrganizationId(), depMap);
}
return depMap.put(dep.getId(), dep);
}
/**
* Deletes the depository from the cache.
* @param depository The Depository to delete.
* @return The old Depository or null if the depository wasn't in the cache.
*/
public Depository deleteDepository(Depository depository) {
HashMap<String, Depository> depMap = orgDepoMap.get(depository.getOrganizationId());
if (depMap == null) {
return null;
}
return depMap.remove(depository.getId());
}
/**
* Gets the Sensor defined by the sensorId and orgId.
* @param sensorId The sensor id.
* @param orgId the organizations id.
* @return The Sensor from the cache or null if the sensor isn't defined.
*/
public Sensor getSensor(String sensorId, String orgId) {
HashMap<String, Sensor> sensorMap = orgSensorMap.get(orgId);
if (sensorMap != null) {
return sensorMap.get(sensorId);
}
return null;
}
/**
* Stores the sensor in the cache.
* @param sensor The Sensor to store.
* @return The old Sensor from the cache or null if the Sensor wasn't in the cache.
*/
public Sensor putSensor(Sensor sensor) {
HashMap<String, Sensor> sensorMap = orgSensorMap.get(sensor.getOrganizationId());
if (sensorMap == null) {
sensorMap = new HashMap<String, Sensor>();
orgSensorMap.put(sensor.getOrganizationId(), sensorMap);
}
return sensorMap.put(sensor.getId(), sensor);
}
/**
* Deletes the Sensor from the cache.
* @param sensor The Sensor to delete.
* @return The old sensor from the cache or null if the sensor wasn't in the cache.
*/
public Sensor deleteSensor(Sensor sensor) {
HashMap<String, Sensor> sensorMap = orgSensorMap.get(sensor.getOrganizationId());
if (sensorMap == null) {
return null;
}
return sensorMap.remove(sensor.getId());
}
}