/** * WattDepotImpl.java This file is part of WattDepot. * * Copyright (C) 2013 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 java.security.InvalidKeyException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import javax.xml.datatype.XMLGregorianCalendar; import org.hibernate.Session; import org.hibernate.Transaction; import org.wattdepot.common.domainmodel.CollectorProcessDefinition; import org.wattdepot.common.domainmodel.Depository; import org.wattdepot.common.domainmodel.Labels; import org.wattdepot.common.domainmodel.MeasurementList; import org.wattdepot.common.domainmodel.MeasurementPruningDefinition; import org.wattdepot.common.domainmodel.InterpolatedValue; import org.wattdepot.common.domainmodel.Measurement; import org.wattdepot.common.domainmodel.MeasurementRateSummary; import org.wattdepot.common.domainmodel.MeasurementType; import org.wattdepot.common.domainmodel.Organization; import org.wattdepot.common.domainmodel.Property; import org.wattdepot.common.domainmodel.Sensor; import org.wattdepot.common.domainmodel.SensorGroup; import org.wattdepot.common.domainmodel.SensorMeasurementSummary; import org.wattdepot.common.domainmodel.SensorModel; import org.wattdepot.common.domainmodel.UserInfo; import org.wattdepot.common.domainmodel.UserPassword; import org.wattdepot.common.exception.BadSlugException; import org.wattdepot.common.exception.IdNotFoundException; import org.wattdepot.common.exception.MeasurementGapException; import org.wattdepot.common.exception.MeasurementTypeException; import org.wattdepot.common.exception.MisMatchedOwnerException; import org.wattdepot.common.exception.NoMeasurementException; import org.wattdepot.common.exception.UniqueIdException; import org.wattdepot.common.util.DateConvert; import org.wattdepot.common.util.SensorModelHelper; import org.wattdepot.common.util.Slug; import org.wattdepot.common.util.tstamp.Tstamp; import org.wattdepot.server.ServerProperties; import org.wattdepot.server.StrongAES; import org.wattdepot.server.WattDepotPersistence; /** * WattDepotImpl - Hibernate implementation of the WattDepot abstract class. * * @author Cam Moore * */ public class WattDepotPersistenceImpl extends WattDepotPersistence { private boolean checkSession; private int sessionOpen = 0; private int sessionClose = 0; private boolean timingp; private Logger timingLogger; private String padding = ""; private PersistenceCache cache; /** * Creates a new WattDepotImpl instance with the given ServerProperties. * * @param properties The ServerProperties. */ public WattDepotPersistenceImpl(ServerProperties properties) { super(); this.cache = new PersistenceCache(); // try { // Session validate = Manager.getValidateFactory(properties).openSession(); // validate.close(); // } // catch (HibernateException e) { // NOPMD // // e.printStackTrace(); // // might be able to just use the 'update' sessionFactory. // // Session create = Manager.getCreateFactory(properties).openSession(); // // create.close(); // } setServerProperties(properties); this.checkSession = properties.get(ServerProperties.CHECK_SESSIONS).equals("true"); timingp = properties.get(ServerProperties.SERVER_TIMING_KEY).equals(ServerProperties.TRUE); if (timingp) { this.timingLogger = Logger.getLogger(getClass().getName()); } // Start with the Organizations Organization pub = null; try { pub = getOrganization(Organization.PUBLIC_GROUP.getId(), false); } catch (IdNotFoundException e1) { // NOPMD // this is ok. We may need to create the Organization. } if (pub == null) { try { defineOrganization(Organization.PUBLIC_GROUP.getId(), Organization.PUBLIC_GROUP.getName(), new HashSet<String>()); if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } catch (UniqueIdException e) { // what do we do here? e.printStackTrace(); } catch (BadSlugException e) { // what do we do here? e.printStackTrace(); } catch (IdNotFoundException e) { // What do we do here? e.printStackTrace(); } } else { try { updateOrganization(pub); } catch (IdNotFoundException e) { // Should not happen. e.printStackTrace(); } if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } Organization admin = null; try { admin = getOrganization(Organization.ADMIN_GROUP.getId(), false); } catch (IdNotFoundException e1) { // NOPMD // this is ok, we might need to create the organization. } if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } if (admin == null) { try { defineOrganization(Organization.ADMIN_GROUP.getId(), Organization.ADMIN_GROUP.getName(), new HashSet<String>()); if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } catch (UniqueIdException e) { // what do we do here? e.printStackTrace(); } catch (BadSlugException e) { // what do we do here? e.printStackTrace(); } catch (IdNotFoundException e) { // what do we do here? e.printStackTrace(); } } else { try { updateOrganization(admin); } catch (IdNotFoundException e) { // Should not happen. e.printStackTrace(); } if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } UserInfo adminUser = null; try { adminUser = getUser(UserInfo.ROOT.getUid(), Organization.ADMIN_GROUP.getId(), false); } catch (IdNotFoundException e) { try { defineUserInfo(UserInfo.ROOT.getUid(), UserInfo.ROOT.getFirstName(), UserInfo.ROOT.getLastName(), UserInfo.ROOT.getEmail(), Organization.ADMIN_GROUP.getId(), UserInfo.ROOT.getProperties(), StrongAES .getInstance().decrypt(UserPassword.ROOT.getEncryptedPassword())); if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } catch (UniqueIdException e1) { // what do we do here? e1.printStackTrace(); } catch (IdNotFoundException e1) { // this shouldn't happen e1.printStackTrace(); } catch (IllegalBlockSizeException e1) { e1.printStackTrace(); } catch (BadPaddingException e1) { e1.printStackTrace(); } catch (InvalidKeyException e1) { e1.printStackTrace(); } } if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } if (adminUser != null) { try { updateUserInfo(UserInfo.ROOT); } catch (IdNotFoundException e) { e.printStackTrace(); } if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } if (!Organization.ADMIN_GROUP.getUsers().contains(UserInfo.ROOT.getUid())) { Organization.ADMIN_GROUP.add(UserInfo.ROOT.getUid()); try { updateOrganization(Organization.ADMIN_GROUP); } catch (IdNotFoundException e) { // NOPMD // There is a problem } } UserPassword adminPassword; try { adminPassword = getUserPassword(UserInfo.ROOT.getUid(), UserInfo.ROOT.getOrganizationId(), false); updateUserPassword(adminPassword); if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } catch (IdNotFoundException e2) { // NOPMD // adminPassword no defined. // we are in trouble. } if (checkSession && getSessionClose() != getSessionOpen()) { throw new RuntimeException("opens and closed mismatched."); } } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#defineCollectorProcessDefinition(java.lang * .String, java.lang.String, java.lang.Long, java.lang.String, * java.lang.String) */ @Override public CollectorProcessDefinition defineCollectorProcessDefinition(String id, String name, String sensorId, Long pollingInterval, String depositoryId, Set<Property> properties, String orgId) throws UniqueIdException, MisMatchedOwnerException, IdNotFoundException, BadSlugException { getOrganization(orgId, true); getSensor(sensorId, orgId, true); getDepository(depositoryId, orgId, true); if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid slug."); } try { CollectorProcessDefinition cpd = getCollectorProcessDefinition(id, orgId, true); if (cpd != null) { throw new UniqueIdException(id + " is already a CollectorProcessDefinition id."); } } catch (IdNotFoundException e) { // NOPMD // this is expected. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl org = retrieveOrganization(session, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); DepositoryImpl depot = retrieveDepository(session, depositoryId, orgId); Set<PropertyImpl> props = new HashSet<PropertyImpl>(); for (Property p : properties) { props.add(new PropertyImpl(p)); } CollectorProcessDefinitionImpl impl = new CollectorProcessDefinitionImpl(id, name, sensor, pollingInterval, depot, props, org); storeCollectorProcessDefinition(session, impl); session.getTransaction().commit(); session.close(); sessionClose++; return impl.toCPD(); } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#defineWattDepository(java.lang.String, * java.lang.String, java.lang.String, org.wattdepot.datamodel.Organization) */ @Override public Depository defineDepository(String id, String name, MeasurementType measurementType, String orgId) throws UniqueIdException, IdNotFoundException, BadSlugException { if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid id."); } getOrganization(orgId, true); getMeasurementType(measurementType.getId(), true); Depository d = null; try { d = getDepository(id, orgId, true); if (d != null) { throw new UniqueIdException(name + " is already a Depository name."); } } catch (IdNotFoundException e) { // NOPMD // ok since we are defining it. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl org = retrieveOrganization(session, orgId); MeasurementTypeImpl type = retrieveMeasurementType(session, measurementType.getId()); DepositoryImpl impl = new DepositoryImpl(id, name, type, org); d = impl.toDepository(); session.save(impl); session.getTransaction().commit(); session.close(); sessionClose++; cache.putDepository(d); return d; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#defineMeasurementPruningDefinition * (java.lang.String, java.lang.String, java.lang.String, java.lang.String, * java.lang.String, java.lang.Integer, java.lang.Integer, java.lang.Integer) */ @Override public MeasurementPruningDefinition defineMeasurementPruningDefinition(String id, String name, String depositoryId, String sensorId, String orgId, Integer ignore, Integer collect, Integer gap) throws UniqueIdException, BadSlugException, IdNotFoundException { if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid id."); } getOrganization(orgId, true); getDepository(depositoryId, orgId, true); try { getSensor(sensorId, orgId, true); } catch (IdNotFoundException e) { getSensorGroup(sensorId, orgId, true); } MeasurementPruningDefinition gcd = null; try { gcd = getMeasurementPruningDefinition(id, orgId, true); if (gcd != null) { throw new UniqueIdException(name + " is already a MeasurementPruningDefinition name."); } } catch (IdNotFoundException e) { // NOPMD // ok since we are defining it. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); DepositoryImpl dep = retrieveDepository(session, depositoryId, orgId); OrganizationImpl org = retrieveOrganization(session, orgId); MeasurementPruningDefinitionImpl impl = new MeasurementPruningDefinitionImpl(id, name, dep, sensorId, org, ignore, collect, gap); gcd = impl.toMPD(); session.save(impl); session.getTransaction().commit(); session.close(); sessionClose++; return gcd; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#defineMeasurementType(java.lang.String, * java.lang.String) */ @Override public MeasurementType defineMeasurementType(String id, String name, String units) throws UniqueIdException, BadSlugException { if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid slug."); } MeasurementType mt = null; try { mt = getMeasurementType(id, true); if (mt != null) { throw new UniqueIdException(id + " is already a MeasurementType id."); } } catch (IdNotFoundException e) { // NOPMD // expected. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); MeasurementTypeImpl impl = new MeasurementTypeImpl(id, name, units); session.save(impl); session.getTransaction().commit(); session.close(); sessionClose++; return mt; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#defineOrganization(java.lang.String, * java.util.Set<String>) */ @Override public Organization defineOrganization(String id, String name, Set<String> users) throws UniqueIdException, BadSlugException, IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start defineOrganizations()"); padding += " "; startTime = System.nanoTime(); } Organization ret = null; if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid slug."); } Organization g; try { g = getOrganization(id, true); if (g != null) { throw new UniqueIdException(id + " is already a Organization id."); } } catch (IdNotFoundException e) { // NOPMD // is ok. } for (String uid : users) { getUser(uid, id, true); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); Set<UserInfoImpl> u = new HashSet<UserInfoImpl>(); for (String uid : users) { u.add(retrieveUser(session, uid, id)); } OrganizationImpl impl = new OrganizationImpl(id, name, u); ret = impl.toOrganization(); session.save(impl); session.getTransaction().commit(); session.close(); sessionClose++; cache.putOrganization(ret); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger .log(Level.SEVERE, padding + "defineOrganization() took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#defineSensor(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, java.lang.String) */ @Override public Sensor defineSensor(String id, String name, String uri, String modelId, Set<Property> properties, String orgId) throws UniqueIdException, MisMatchedOwnerException, IdNotFoundException, BadSlugException { if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid slug."); } getOrganization(orgId, true); getSensorModel(modelId, true); Sensor s = null; try { s = getSensor(id, orgId, true); if (s != null) { throw new UniqueIdException(id + " is already a defined Sensor."); } } catch (IdNotFoundException e) { // NOPMD // this is expected. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl org = retrieveOrganization(session, orgId); SensorModelImpl model = retrieveSensorModel(session, modelId); Set<PropertyImpl> prop = new HashSet<PropertyImpl>(); for (Property p : properties) { prop.add(new PropertyImpl(p)); } SensorImpl impl = new SensorImpl(id, name, uri, model, prop, org); s = impl.toSensor(); storeSensor(session, impl); session.getTransaction().commit(); session.close(); sessionClose++; cache.putSensor(s); return s; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#defineSensorGroup(java.lang.String, * java.util.List, org.wattdepot.datamodel.Organization) */ @Override public SensorGroup defineSensorGroup(String id, String name, Set<String> sensorIds, String orgId) throws UniqueIdException, MisMatchedOwnerException, IdNotFoundException, BadSlugException { if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid slug."); } Organization owner = getOrganization(orgId, true); for (String sensorId : sensorIds) { Sensor sensor = getSensor(sensorId, orgId, true); if (!orgId.equals(sensor.getOrganizationId())) { throw new MisMatchedOwnerException(orgId + " is not the owner of all the sensors."); } } SensorGroup sg = null; try { sg = getSensorGroup(id, owner.getId(), true); if (sg != null) { throw new UniqueIdException(id + " is already a SensorGroup id."); } } catch (IdNotFoundException e) { // NOPMD // this is ok since we are defining it. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl org = retrieveOrganization(session, orgId); Set<SensorImpl> sensors = new HashSet<SensorImpl>(); for (String sensorId : sensorIds) { sensors.add(retrieveSensor(session, sensorId, orgId)); } SensorGroupImpl impl = new SensorGroupImpl(id, name, sensors, org); session.save(impl); session.getTransaction().commit(); session.close(); sessionClose++; return sg; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#defineSensorModel(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, * org.wattdepot.datamodel.Organization) */ @Override public SensorModel defineSensorModel(String id, String name, String protocol, String type, String version) throws UniqueIdException, BadSlugException { if (!Slug.validateSlug(id)) { throw new BadSlugException(id + " is not a valid id."); } SensorModel sm = null; try { sm = getSensorModel(id, true); if (sm != null) { throw new UniqueIdException(id + " is already a SensorModel id."); } } catch (IdNotFoundException e) { // NOPMD // expected. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorModelImpl impl = new SensorModelImpl(id, name, protocol, type, version); session.save(impl); session.getTransaction().commit(); session.close(); sessionClose++; return sm; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#defineUserInfo(java.lang.String, * java.lang.String, java.lang.String, java.lang.String, java.lang.String, * java.lang.Boolean, java.util.Set) */ @Override public UserInfo defineUserInfo(String id, String firstName, String lastName, String email, String orgId, Set<Property> properties, String password) throws UniqueIdException, IdNotFoundException { getOrganization(orgId, true); UserInfo u = null; try { u = getUser(id, orgId, true); if (u != null) { throw new UniqueIdException(id + " is already a UserInfo id."); } } catch (IdNotFoundException e) { // NOPMD // excpected since we are defining a new user. } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl org = retrieveOrganization(session, orgId); Set<PropertyImpl> props = new HashSet<PropertyImpl>(); for (Property p : properties) { PropertyImpl pi = new PropertyImpl(p); props.add(pi); session.saveOrUpdate(pi); } UserInfoImpl impl = new UserInfoImpl(id, firstName, lastName, email, props, org); session.saveOrUpdate(impl); u = impl.toUserInfo(); UserPasswordImpl up = new UserPasswordImpl(impl, password, org); session.saveOrUpdate(up); session.getTransaction().commit(); session.close(); sessionClose++; return u; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#deleteCollectorProcessDefinition(java.lang * .String, java.lang.String) */ @Override public void deleteCollectorProcessDefinition(String id, String orgId) throws IdNotFoundException, MisMatchedOwnerException { getCollectorProcessDefinition(id, orgId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); CollectorProcessDefinitionImpl impl = retrieveCollectorProcessDefinition(session, id, orgId); session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteWattDepository(java.lang.String, * java.lang.String) */ @Override public void deleteDepository(String id, String orgId) throws IdNotFoundException, MisMatchedOwnerException { Depository d = getDepository(id, orgId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); DepositoryImpl impl = retrieveDepository(session, id, orgId); for (DepositorySensorContribution dsc : retrieveContributions(session, impl)) { session.delete(dsc); } session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; if (d != null) { cache.deleteDepository(d); } } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#deleteMeasurementPruningDefinition * (java.lang.String) */ @Override public void deleteMeasurementPruningDefinition(String id, String orgId) throws IdNotFoundException { getMeasurementPruningDefinition(id, orgId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); MeasurementPruningDefinitionImpl impl = retrieveMeasurementPruningDefinition(session, id, orgId); session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#deleteMeasurement(java.lang.String * , java.lang.String) */ @Override public void deleteMeasurement(String depotId, String orgId, String measId) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start deleteMeasurement(" + depotId + ", " + orgId + ", " + measId + ")"); padding += " "; startTime = System.nanoTime(); } // getOrganization(orgId, true); // getDepository(depotId, orgId, true); // getMeasurement(depotId, orgId, measId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); MeasurementImpl impl = retrieveMeasurement(session, depotId, orgId, measId); if (impl != null) { session.delete(impl); } else { throw new IdNotFoundException(measId + " is not a valid measurment id."); } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "deleteMeasurement(" + depotId + ", " + orgId + ", " + measId + ") took " + (diff / 1E9) + " secs."); } } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteMeasurementType(java.lang.String) */ @Override public void deleteMeasurementType(String id) throws IdNotFoundException { getMeasurementType(id, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); MeasurementTypeImpl impl = retrieveMeasurementType(session, id); List<DepositoryImpl> depositories = retrieveDepositories(session, impl); session.getTransaction().commit(); session.close(); sessionClose++; for (DepositoryImpl depository : depositories) { try { deleteDepository(depository.getId(), depository.getOrg().getId()); } catch (MisMatchedOwnerException e) { // Shouldn't happen e.printStackTrace(); } } session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); impl = retrieveMeasurementType(session, id); session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteOrganization(java.lang.String) */ @Override public void deleteOrganization(String id) throws IdNotFoundException { Organization o = getOrganization(id, true); // Remove Organization owned CollectorProcessDefinitions Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); for (CollectorProcessDefinitionImpl sp : retrieveCollectorProcessDefinitions(session, id)) { session.delete(sp); } session.getTransaction().commit(); session.close(); sessionClose++; // Remove Organization owned MeasurementPruningDefinitions session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); for (MeasurementPruningDefinitionImpl sp : retrieveMeasurementPruningDefinitions(session, id)) { session.delete(sp); } session.getTransaction().commit(); session.close(); sessionClose++; // Remove Organization owned SensorGroups session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); for (SensorGroupImpl sg : retrieveSensorGroups(session, id)) { session.delete(sg); } session.getTransaction().commit(); session.close(); sessionClose++; // Remove Organization owned Measurements session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); for (DepositoryImpl d : retrieveDepositories(session, id)) { for (String sensorId : listSensors(d.getId(), id, true)) { for (Measurement m : getMeasurements(d.getId(), id, sensorId, true)) { MeasurementImpl mi = retrieveMeasurement(session, d.getId(), id, m.getId()); if (mi != null) { session.delete(mi); } } } } session.getTransaction().commit(); session.close(); sessionClose++; // Remove Organization owned Depositories and Sensors session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<DepositoryImpl> depositories = retrieveDepositories(session, id); for (DepositoryImpl d : depositories) { for (DepositorySensorContribution dsc : retrieveContributions(session, d)) { session.delete(dsc); } session.delete(d); } for (SensorImpl s : retrieveSensors(session, id)) { session.delete(s); } session.getTransaction().commit(); session.close(); sessionClose++; // Remove Organization owned SensorModels session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); for (SensorModelImpl sm : retrieveSensorModels(session)) { if (!SensorModelHelper.models.containsKey(sm.getName())) { session.delete(sm); } } session.getTransaction().commit(); session.close(); sessionClose++; // Remove Users in the Organization session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl orgImpl = retrieveOrganization(session, id); for (UserInfoImpl u : retrieveUsers(session, id)) { orgImpl.getUsers().remove(u); session.delete(u); } session.update(orgImpl); for (UserPasswordImpl u : retrieveUserPasswords(session, id)) { session.delete(u); } session.getTransaction().commit(); session.close(); sessionClose++; // Remove the organization session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); orgImpl = retrieveOrganization(session, id); session.delete(orgImpl); session.getTransaction().commit(); session.close(); sessionClose++; if (o != null) { cache.deleteOrganization(o); } } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteSensor(java.lang.String, * java.lang.String) */ @Override public void deleteSensor(String id, String orgId) throws IdNotFoundException, MisMatchedOwnerException { Sensor s = getSensor(id, orgId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorImpl impl = retrieveSensor(session, id, orgId); for (DepositorySensorContribution dsc : retrieveContributions(session, impl)) { session.delete(dsc); } session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; if (s != null) { cache.deleteSensor(s); } } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteSensorGroup(java.lang.String, * java.lang.String) */ @Override public void deleteSensorGroup(String id, String orgId) throws IdNotFoundException, MisMatchedOwnerException { getSensorGroup(id, orgId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorGroupImpl impl = retrieveSensorGroup(session, id, orgId); session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteSensorModel(java.lang.String, * java.lang.String) */ @Override public void deleteSensorModel(String id) throws IdNotFoundException { getSensorModel(id, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorModelImpl impl = retrieveSensorModel(session, id); session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteUser(java.lang.String) */ @Override public void deleteUser(String id, String orgId) throws IdNotFoundException { getUser(id, orgId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl orgImpl = retrieveOrganization(session, orgId); UserInfoImpl impl = retrieveUser(session, id, orgId); UserPasswordImpl up = retrieveUserPassword(session, id, orgId); orgImpl.removeUser(impl); session.saveOrUpdate(orgImpl); session.delete(up); session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#deleteUserPassword(java.lang.String) */ @Override public void deleteUserPassword(String userId, String orgId) throws IdNotFoundException { getUserPassword(userId, orgId, true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); UserPasswordImpl impl = retrieveUserPassword(session, userId, orgId); session.delete(impl); session.getTransaction().commit(); session.close(); sessionClose++; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#getCollectorProcessDefinition(java.lang. * String, java.lang.String) */ @Override public CollectorProcessDefinition getCollectorProcessDefinition(String id, String orgId, boolean check) throws IdNotFoundException { if (check) { getOrganization(orgId, check); } CollectorProcessDefinition ret = getCollectorProcessDefinitionNoCheck(id, orgId); if (check && ret == null) { throw new IdNotFoundException(id + " is not a defined CollectorProcessDefinition's id."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getCollectorProcessDefinitionIds() */ @Override public List<String> getCollectorProcessDefinitionIds(String orgId, boolean check) throws IdNotFoundException { ArrayList<String> ret = new ArrayList<String>(); for (CollectorProcessDefinition s : getCollectorProcessDefinitions(orgId, check)) { ret.add(s.getId()); } return ret; } /** * @param id The CollectorProcessDefinition's id * @param orgId The Organization's id. * @return The defined CollectorProcessDefinition or null. */ private CollectorProcessDefinition getCollectorProcessDefinitionNoCheck(String id, String orgId) { CollectorProcessDefinition ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); CollectorProcessDefinitionImpl cpd = retrieveCollectorProcessDefinition(session, id, orgId); if (cpd != null) { ret = cpd.toCPD(); } session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#getCollectorProcessDefinitions(java.lang * .String) */ @Override public List<CollectorProcessDefinition> getCollectorProcessDefinitions(String orgId, boolean check) throws IdNotFoundException { if (check) { getOrganization(orgId, check); } return getCollectorProcessDefinitionsNoCheck(orgId); } /** * @param orgId The Organization's id. * @return A list of the defined CollectorProcessDefinitions. */ private List<CollectorProcessDefinition> getCollectorProcessDefinitionsNoCheck(String orgId) { Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<CollectorProcessDefinitionImpl> r = retrieveCollectorProcessDefinitions(session, orgId); List<CollectorProcessDefinition> ret = new ArrayList<CollectorProcessDefinition>(); for (CollectorProcessDefinitionImpl cpd : r) { ret.add(cpd.toCPD()); } session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getWattDepositories(java.lang.String) */ @Override public List<Depository> getDepositories(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getDepositories(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } List<Depository> ret = getDepositoriesNoCheck(orgId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getDepositories(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param orgId The Organization's id. * @return A list of the defined Depositories. */ private List<Depository> getDepositoriesNoCheck(String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getDepositoriesNoCheck(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<DepositoryImpl> r = retrieveDepositories(session, orgId); List<Depository> ret = new ArrayList<Depository>(); for (DepositoryImpl d : r) { ret.add(d.toDepository()); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getDepositoriesNoCheck(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getWattDeposiory(java.lang.String, * java.lang.String) */ @Override public Depository getDepository(String id, String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getDepository(" + id + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } Depository ret = cache.getDepository(id, orgId); if (ret == null) { ret = getDepositoryNoCheck(id, orgId); if (ret != null) { cache.putDepository(ret); } } if (check && ret == null) { throw new IdNotFoundException(id + " is not a defined Depository's id."); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getDepository(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getWattDepositoryIds() */ @Override public List<String> getDepositoryIds(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getDepositoryIds(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } ArrayList<String> ret = new ArrayList<String>(); for (Depository d : getDepositoriesNoCheck(orgId)) { ret.add(d.getId()); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getDepositoryIds(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param id The Depository's id. * @param orgId The Organization's id. * @return The defined Depository or null. */ private Depository getDepositoryNoCheck(String id, String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getDepositoryNoCheck(" + id + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } Depository ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); DepositoryImpl impl = retrieveDepository(session, id, orgId); if (impl != null) { ret = impl.toDepository(); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getDepositoryNoCheck(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getEarliestMeasuredValue(java * .lang.String, java.lang.String) */ @Override public InterpolatedValue getEarliestMeasuredValue(String depotId, String orgId, String sensorId, boolean check) throws NoMeasurementException, IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getEarliestMeasuredValue(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } InterpolatedValue value = getEarliestMeasuredValueNoCheck(depotId, orgId, sensorId); if (value == null) { throw new NoMeasurementException("No " + depotId + " measurements for " + sensorId); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getEarliestMeasuredValue(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return value; } /** * @param depotId The Depository's id. * @param orgId The Organization's id. * @param sensorId The Sensor id. * @return The earliest MeasuredValue for the given depository, organization * and sensor. */ private InterpolatedValue getEarliestMeasuredValueNoCheck(String depotId, String orgId, String sensorId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getEarliestMeasuredValueNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } InterpolatedValue value = null; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> result = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE depository = :depot AND sensor = :sensor ORDER BY timestamp asc") .setParameter("depot", depot).setParameter("sensor", sensor).setMaxResults(1).list(); // List<MeasurementImpl> result = (List<MeasurementImpl>) session // .createQuery( // "FROM MeasurementImpl WHERE depository = :depot AND sensor = :sensor " // + "AND timestamp IN (SELECT min(timestamp) FROM MeasurementImpl WHERE " // + "depository = :depot AND sensor = :sensor)").setParameter("depot", // depot) // .setParameter("sensor", sensor).list(); if (result.size() > 0) { MeasurementImpl meas = result.get(0); value = new InterpolatedValue(sensorId, meas.getValue(), depot.getType().toMeasurementType(), meas.getTimestamp()); } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getEarliestMeasuredValueNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return value; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurementPruningDefinition * (java.lang.String, java.lang.String, boolean) */ @Override public MeasurementPruningDefinition getMeasurementPruningDefinition(String id, String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementPruningDefinition(" + id + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } MeasurementPruningDefinition gcd = getMeasurementPruningDefinitionNoCheck(id, orgId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementPruningDefinition(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } if (gcd == null) { throw new IdNotFoundException(id + " is not a defined MeasurementPruningDefinition id."); } return gcd; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurementPruningDefinitionIds * (java.lang.String, boolean) */ @Override public List<String> getMeasurementPruningDefinitionIds(String orgId, boolean check) throws IdNotFoundException { ArrayList<String> ret = new ArrayList<String>(); for (MeasurementPruningDefinition gcd : getMeasurementPruningDefinitions(orgId, check)) { ret.add(gcd.getId()); } return ret; } /** * @param orgId The Organization's id. * @param id The MeasurementPruningDefinition's id. * @return The MeasurementPruningDefinition with the given id and orgId, or * null if not defined. */ private MeasurementPruningDefinition getMeasurementPruningDefinitionNoCheck(String id, String orgId) { MeasurementPruningDefinition ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); MeasurementPruningDefinitionImpl gcd = retrieveMeasurementPruningDefinition(session, id, orgId); if (gcd != null) { ret = gcd.toMPD(); } session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurementPruningDefinitions * (java.lang.String, boolean) */ @Override public List<MeasurementPruningDefinition> getMeasurementPruningDefinitions(String orgId, boolean check) throws IdNotFoundException { if (check) { getOrganization(orgId, check); } return getMeasurementPruningDefinitionsNoCheck(orgId); } /** * @param orgId The Organization's id. * @return A list of defined MeasurementPruningDefinitions. */ private List<MeasurementPruningDefinition> getMeasurementPruningDefinitionsNoCheck(String orgId) { Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<MeasurementPruningDefinitionImpl> r = retrieveMeasurementPruningDefinitions(session, orgId); List<MeasurementPruningDefinition> ret = new ArrayList<MeasurementPruningDefinition>(); for (MeasurementPruningDefinitionImpl gcd : r) { ret.add(gcd.toMPD()); } session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getLatestMeasuredValue(java.lang * .String, java.lang.String) */ @Override public InterpolatedValue getLatestMeasuredValue(String depotId, String orgId, String sensorId, boolean check) throws NoMeasurementException, IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getLaestMeasuredValue(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } InterpolatedValue value = getLatestMeasuredValueNoCheck(depotId, orgId, sensorId); if (value == null) { throw new NoMeasurementException("No " + depotId + " measurements for " + sensorId); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getLatestMeasuredValue(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } value.addReportingSensor(sensorId); value.addDefinedSensor(sensorId); return value; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getLatestMeasuredValue(java.lang * .String, java.lang.String) */ @Override public InterpolatedValue getLatestMeasuredValue(String depotId, String orgId, String sensorId, Long window, boolean check) throws NoMeasurementException, IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getLatestMeasuredValue(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } InterpolatedValue value = getLatestMeasuredValueNoCheck(depotId, orgId, sensorId); if (value == null) { throw new NoMeasurementException("No " + depotId + " measurements for " + sensorId); } Date now = new Date(); Long deltaT = now.getTime() - value.getEnd().getTime(); if (Math.abs(deltaT) > window * 1000) { throw new NoMeasurementException("No recent " + depotId + " measurements for " + sensorId); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getLatestMeasuredValue(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } value.addDefinedSensor(sensorId); value.addReportingSensor(sensorId); return value; } /** * @param depotId The depository's id. * @param orgId The organization's id. * @param sensorId The sensors's id. * @return The latest measured value or null if no measurements. */ private InterpolatedValue getLatestMeasuredValueNoCheck(String depotId, String orgId, String sensorId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getLatestMeasuredValueNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } InterpolatedValue value = null; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> result = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE depository = :depot AND sensor = :sensor ORDER BY timestamp desc") .setParameter("depot", depot).setParameter("sensor", sensor).setMaxResults(1).list(); // List<MeasurementImpl> result = (List<MeasurementImpl>) session // .createQuery( // "FROM MeasurementImpl WHERE depository = :depot AND sensor = :sensor " // + "AND timestamp IN (SELECT max(timestamp) FROM MeasurementImpl WHERE " // + "depository = :depot AND sensor = :sensor)").setParameter("depot", // depot) // .setParameter("sensor", sensor).list(); if (result.size() > 0) { MeasurementImpl meas = result.get(0); value = new InterpolatedValue(sensorId, meas.getValue(), depot.getType().toMeasurementType(), meas.getTimestamp()); } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getLatestMeasuredValueNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return value; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurement(java.lang.String, * java.lang.String) */ @Override public Measurement getMeasurement(String depotId, String orgId, String measId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurement(" + depotId + ", " + orgId + ", " + measId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); } Measurement ret = getMeasurementNoCheck(depotId, orgId, measId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurement(" + depotId + ", " + orgId + ", " + measId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param depotId The depository's id. * @param orgId The organization's id. * @param measId The measurement's id. * @return The Measurement with the given ids or null. */ private Measurement getMeasurementNoCheck(String depotId, String orgId, String measId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementNoCheck(" + depotId + ", " + orgId + ", " + measId + ")"); padding += " "; startTime = System.nanoTime(); } Measurement ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> result = (List<MeasurementImpl>) session .createQuery("FROM MeasurementImpl WHERE depository = :depot AND id = :id") .setParameter("depot", depot).setParameter("id", measId).list(); if (result.size() == 1) { ret = result.get(0).toMeasurement(); } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementNoCheck(" + depotId + ", " + orgId + ", " + measId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurements(java.lang.String, * java.lang.String) */ @Override public List<Measurement> getMeasurements(String depotId, String orgId, String sensorId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurements(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } List<Measurement> ret = getMeasurementsNoCheck(depotId, orgId, sensorId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurements(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurements(java.lang.String, * java.lang.String, java.util.Date, java.util.Date) */ @Override public List<Measurement> getMeasurements(String depotId, String orgId, String sensorId, Date start, Date end, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementsNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } List<Measurement> ret = getMeasurementsNoCheck(depotId, orgId, sensorId, start, end); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurementsCount(java.lang * .String, boolean) */ @Override public Long getMeasurementsCount(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementsCount(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } Long ret = 0l; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); for (DepositoryImpl depot : retrieveDepositories(session, orgId)) { @SuppressWarnings("unchecked") List<Long> result = (List<Long>) session .createQuery("SELECT count(*) FROM MeasurementImpl WHERE depository = :depot") .setParameter("depot", depot).list(); ret += result.get(0); } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsCount(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurementsCount(java.lang * .String, java.lang.String, java.lang.String) */ @Override public Long getMeasurementsCount(String depotId, String orgId, String sensorId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementsCount(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } Long ret = getMeasurementsCountNoCheck(depotId, orgId, sensorId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsCount(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getMeasurementsCount(java.lang * .String, java.lang.String, java.lang.String, java.util.Date, * java.util.Date) */ @Override public Long getMeasurementsCount(String depotId, String orgId, String sensorId, Date start, Date end, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { startTime = System.nanoTime(); timingLogger.log(Level.SEVERE, padding + "Starting getMeasurementsCount(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } Long ret = getMeasurementsCountNoCheck(depotId, orgId, sensorId, start, end); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsCount(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param depotId The depository's id. * @param orgId The organization's id. * @param sensorId The sensor's id. * @return the number of measurements made by the given sensor stored in the * given depository. */ private Long getMeasurementsCountNoCheck(String depotId, String orgId, String sensorId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementsCountNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } Long ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); @SuppressWarnings("unchecked") List<Long> result = (List<Long>) session .createQuery( "SELECT count(*) FROM MeasurementImpl WHERE depository = :depot AND sensor = :sensor") .setParameter("depot", depot).setParameter("sensor", sensor).list(); ret = result.get(0); session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsCountNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param depotId The depository's id. * @param orgId The organization's id. * @param sensorId The sensor's id. * @param start The start of the interval. * @param end The end of the interval. * @return a list of the measurements made by the given sensor stored in the * given depository during the interval. */ private Long getMeasurementsCountNoCheck(String depotId, String orgId, String sensorId, Date start, Date end) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { startTime = System.nanoTime(); timingLogger.log(Level.SEVERE, padding + "Starting getMeasurementsCountNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; } Long ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); Long result = (Long) session .createQuery( "SELECT count(*) FROM MeasurementImpl WHERE timestamp >= :start AND timestamp <= :end AND depository = :depository AND sensor = :sensor") .setParameter("start", start).setParameter("end", end).setParameter("depository", depot) .setParameter("sensor", sensor).iterate().next(); ret = result; session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsCountNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param depotId The depository's id. * @param orgId The Organization's id. * @param sensorId The sensor's id. * @return a List of all the Measurements. */ private List<Measurement> getMeasurementsNoCheck(String depotId, String orgId, String sensorId) { List<Measurement> ret = new ArrayList<Measurement>(); Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementsNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> result = (List<MeasurementImpl>) session .createQuery("FROM MeasurementImpl WHERE depository = :depot AND sensor = :sensor") .setParameter("depot", depot).setParameter("sensor", sensor).list(); for (MeasurementImpl mi : result) { ret.add(mi.toMeasurement()); } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param depotId The depository's id. * @param orgId The organization's id. * @param sensorId The sensor's id. * @param start The start of the interval. * @param end The end of the interval. * @return All the measurements during the interval for the given depository, * organization and sensor. */ private List<Measurement> getMeasurementsNoCheck(String depotId, String orgId, String sensorId, Date start, Date end) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementsNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } List<Measurement> ret = new ArrayList<Measurement>(); Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> measurements = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE timestamp >= :start AND timestamp <= :end AND depository = :depository AND sensor = :sensor") .setParameter("start", start).setParameter("end", end).setParameter("depository", depot) .setParameter("sensor", sensor).list(); for (MeasurementImpl mi : measurements) { ret.add(mi.toMeasurement()); } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementsNoCheck(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getMeasurementType(java.lang.String) */ @Override public MeasurementType getMeasurementType(String id, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementType(" + id + ")"); padding += " "; startTime = System.nanoTime(); } MeasurementType ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); MeasurementTypeImpl impl = retrieveMeasurementType(session, id); if (impl != null) { ret = impl.toMeasurementType(); } session.getTransaction().commit(); session.close(); sessionClose++; if (ret == null) { throw new IdNotFoundException(id + " is not a defined MeasurementType."); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementType(" + id + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getMeasurementTypes() */ @Override public List<MeasurementType> getMeasurementTypes() { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getMeasurementTypes()"); padding += " "; startTime = System.nanoTime(); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<MeasurementTypeImpl> ret = retrieveMeasurementTypes(session); List<MeasurementType> types = new ArrayList<MeasurementType>(); for (MeasurementTypeImpl i : ret) { types.add(i.toMeasurementType()); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getMeasurementTypes() took " + (diff / 1E9) + " secs."); } return types; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getOrganization(java.lang.String) */ @Override public Organization getOrganization(String id, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getOrganization(" + id + ")"); startTime = System.nanoTime(); } Organization ret = cache.getOrganization(id); if (ret == null) { Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl org = retrieveOrganization(session, id); if (org != null) { ret = org.toOrganization(); } session.getTransaction().commit(); session.close(); sessionClose++; if (ret == null) { throw new IdNotFoundException(id + " isn't a defined Organization's id."); } cache.putOrganization(ret); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; timingLogger.log(Level.SEVERE, padding + "getOrganization(" + id + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc)m * * @see org.wattdepot.server.WattDepot#getOrganizationIds() */ @Override public List<String> getOrganizationIds() { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getOrganizationIds()"); padding += " "; startTime = System.nanoTime(); } ArrayList<String> ret = new ArrayList<String>(); for (Organization u : getOrganizations()) { ret.add(u.getId()); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getOrganizationIds() took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getOrganizations() */ @Override public List<Organization> getOrganizations() { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getOrganizations()"); padding += " "; startTime = System.nanoTime(); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<OrganizationImpl> r = retrieveOrganizations(session); List<Organization> ret = new ArrayList<Organization>(); for (OrganizationImpl o : r) { ret.add(o.toOrganization()); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger .log(Level.SEVERE, padding + "getOrganizations() took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#getRateSummary(java.lang.String, * java.lang.String, java.lang.String) */ @Override public MeasurementRateSummary getRateSummary(String depotId, String orgId, String sensorId, boolean check) throws IdNotFoundException, NoMeasurementException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { startTime = System.nanoTime(); timingLogger.log(Level.SEVERE, padding + "Starting getRateSummary(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } XMLGregorianCalendar now = Tstamp.makeTimestamp(); XMLGregorianCalendar minAgo = Tstamp.incrementMinutes(now, -1); MeasurementRateSummary ret = new MeasurementRateSummary(); ret.setDepositoryId(depotId); ret.setSensorId(sensorId); ret.setTimestamp(DateConvert.convertXMLCal(now)); Long count = getMeasurementsCountNoCheck(depotId, orgId, sensorId, DateConvert.convertXMLCal(minAgo), DateConvert.convertXMLCal(now)); ret.setOneMinuteCount(count); ret.setOneMinuteRate(count / 60.0); InterpolatedValue val = getLatestMeasuredValueNoCheck(depotId, orgId, sensorId); ret.setLatestValue(val.getValue()); ret.setType(val.getMeasurementType()); count = getMeasurementsCountNoCheck(depotId, orgId, sensorId); ret.setTotalCount(count); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getRateSummary(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensor(java.lang.String, * java.lang.String) */ @Override public Sensor getSensor(String id, String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensor(" + id + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } Sensor ret = cache.getSensor(id, orgId); if (ret == null) { ret = getSensorNoCheck(id, orgId); if (ret != null) { cache.putSensor(ret); } } if (check && ret == null) { throw new IdNotFoundException(id + " is not a defined Sensor id."); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensor(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensorGroup(java.lang.String, * java.lang.String) */ @Override public SensorGroup getSensorGroup(String id, String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorGroup(" + id + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } SensorGroup ret = getSensorGroupNoCheck(id, orgId); if (check && ret == null) { throw new IdNotFoundException(id + " is not a defined SensorGroup id."); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorGroup(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensorGroupIds() */ @Override public List<String> getSensorGroupIds(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorGroupIds(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } List<String> ret = getSensorGroupIdsNoCheck(orgId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorGroupIds(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param orgId The organization's id. * @return A List of the SensorGroups' ids. */ private List<String> getSensorGroupIdsNoCheck(String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorGroupIds(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } ArrayList<String> ret = new ArrayList<String>(); for (SensorGroup s : getSensorGroupsNoCheck(orgId)) { ret.add(s.getId()); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorGroupIds(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param id The sensor group's id. * @param orgId The organization's id. * @return The defined SensorGroup or null. */ private SensorGroup getSensorGroupNoCheck(String id, String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorGroupNoCheck(" + id + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } SensorGroup ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorGroupImpl impl = retrieveSensorGroup(session, id, orgId); if (impl != null) { ret = impl.toSensorGroup(); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorGroupNoCheck(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensorGroups(java.lang.String) */ @Override public List<SensorGroup> getSensorGroups(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorGroups(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } List<SensorGroup> ret = getSensorGroupsNoCheck(orgId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorGroups(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param orgId The organization's id. * @return All the defined SensorGroups. */ private List<SensorGroup> getSensorGroupsNoCheck(String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorGroupsNoCheck(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<SensorGroupImpl> r = retrieveSensorGroups(session, orgId); List<SensorGroup> ret = new ArrayList<SensorGroup>(); for (SensorGroupImpl s : r) { ret.add(s.toSensorGroup()); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorGroupsNoCheck(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensorIds() */ @Override public List<String> getSensorIds(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorIds(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } List<String> ret = getSensorIdsNoCheck(orgId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorIds(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param orgId The organization's id. * @return The defined Sensors' ids. */ private List<String> getSensorIdsNoCheck(String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorIdsNoCheck(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } ArrayList<String> ret = new ArrayList<String>(); for (Sensor s : getSensorsNoCheck(orgId)) { ret.add(s.getId()); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorIdsNoCheck(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensorModel(java.lang.String, * java.lang.String) */ @Override public SensorModel getSensorModel(String id, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorModel(" + id + ")"); padding += " "; startTime = System.nanoTime(); } SensorModel ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorModelImpl impl = retrieveSensorModel(session, id); if (impl != null) { ret = impl.toSensorModel(); } session.getTransaction().commit(); session.close(); sessionClose++; if (ret == null) { throw new IdNotFoundException(id + " is not a valid SensorModel id."); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorModel(" + id + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensorModelIds() */ @Override public List<String> getSensorModelIds() { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorModelIds()"); padding += " "; startTime = System.nanoTime(); } ArrayList<String> ret = new ArrayList<String>(); for (SensorModel s : getSensorModels()) { ret.add(s.getId()); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorModelIds() took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensorModels(java.lang.String) */ @Override public List<SensorModel> getSensorModels() { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorModels()"); padding += " "; startTime = System.nanoTime(); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<SensorModelImpl> r = retrieveSensorModels(session); List<SensorModel> ret = new ArrayList<SensorModel>(); for (SensorModelImpl s : r) { ret.add(s.toSensorModel()); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorModels() took " + (diff / 1E9) + " secs."); } return ret; } /** * @param id The sensor's id. * @param orgId The organization's id. * @return The defined Sensor or null. */ private Sensor getSensorNoCheck(String id, String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorNoCheck(" + id + ", " + orgId + ")"); startTime = System.nanoTime(); } Sensor ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorImpl impl = retrieveSensor(session, id, orgId); if (impl != null) { ret = impl.toSensor(); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; timingLogger.log(Level.SEVERE, padding + "getSensorNoCheck(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getSensors(java.lang.String) */ @Override public List<Sensor> getSensors(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensors(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } List<Sensor> ret = getSensorsNoCheck(orgId); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensors(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @param orgId The organization's id. * @return A list of the defined Sensors. */ private List<Sensor> getSensorsNoCheck(String orgId) { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSensorsNoCheck(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<SensorImpl> r = retrieveSensors(session, orgId); List<Sensor> ret = new ArrayList<Sensor>(); for (SensorImpl s : r) { ret.add(s.toSensor()); } session.getTransaction().commit(); session.close(); sessionClose++; if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSensorsNoCheck(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /** * @return the sessionClose */ public int getSessionClose() { return sessionClose; } /** * @return the sessionOpen */ public int getSessionOpen() { return sessionOpen; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepotPersistence#getSummary(java.lang.String, * java.lang.String, java.lang.String, java.util.Date, java.util.Date) */ @Override public SensorMeasurementSummary getSummary(String depotId, String orgId, String sensorId, Date start, Date end, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getSummary(" + depotId + ", " + orgId + ", " + sensorId + ")"); padding += " "; startTime = System.nanoTime(); } List<Measurement> list = getMeasurements(depotId, orgId, sensorId, start, end, check); SensorMeasurementSummary ret = new SensorMeasurementSummary(sensorId, depotId, start, end, list.size()); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getSummary(" + depotId + ", " + orgId + ", " + sensorId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getUser(java.lang.String) */ @Override public UserInfo getUser(String id, String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getUser(" + id + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); } UserInfo ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); UserInfoImpl impl = retrieveUser(session, id, orgId); if (impl != null) { ret = impl.toUserInfo(); } session.getTransaction().commit(); session.close(); sessionClose++; if (check && ret == null) { throw new IdNotFoundException(id + " is not a defined user id."); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getUser(" + id + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getUserIds() */ @Override public List<String> getUserIds(String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start getUserIds(" + orgId + ")"); padding += " "; startTime = System.nanoTime(); } ArrayList<String> ret = new ArrayList<String>(); for (UserInfo u : getUsers(orgId, check)) { ret.add(u.getUid()); } if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "getUserIds(" + orgId + ") took " + (diff / 1E9) + " secs."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getUserPassword(java.lang.String) */ @Override public UserPassword getUserPassword(String id, String orgId, boolean check) throws IdNotFoundException { UserPassword ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); UserPasswordImpl impl = retrieveUserPassword(session, id, orgId); if (impl != null) { ret = impl.toUserPassword(); } session.getTransaction().commit(); session.close(); sessionClose++; if (ret == null) { throw new IdNotFoundException(id + " is not a valid UserPassword id."); } return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getUsers() */ @Override public List<UserInfo> getUsers() { Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<UserInfoImpl> result = retrieveUsers(session); ArrayList<UserInfo> ret = new ArrayList<UserInfo>(); for (UserInfoImpl u : result) { ret.add(u.toUserInfo()); } session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#getUsers() */ @Override public List<UserInfo> getUsers(String orgId, boolean check) throws IdNotFoundException { if (check) { getOrganization(orgId, check); } Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); List<UserInfoImpl> result = retrieveUsers(session, orgId); ArrayList<UserInfo> ret = new ArrayList<UserInfo>(); for (UserInfoImpl u : result) { ret.add(u.toUserInfo()); } session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepotPersistence#getValue(java.lang.String, * java.lang.String, java.util.Date) */ @Override public Double getValue(String depotId, String orgId, String sensorId, Date timestamp, boolean check) throws NoMeasurementException, IdNotFoundException { if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } Double ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> result = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE timestamp = :time AND depository = :depot AND sensor = :sensor") .setParameter("time", timestamp).setParameter("depot", depot) .setParameter("sensor", sensor).setMaxResults(1).list(); if (result.size() > 0) { ret = result.get(0).getValue(); } else { // need to get the stradle @SuppressWarnings("unchecked") List<MeasurementImpl> before = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE timestamp <= :time AND depository = :depot AND sensor = :sensor ORDER BY timestamp desc") .setParameter("time", timestamp).setParameter("depot", depot) .setParameter("sensor", sensor).setMaxResults(1).list(); @SuppressWarnings("unchecked") List<MeasurementImpl> after = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE timestamp >= :time AND depository = :depot AND sensor = :sensor ORDER BY timestamp asc") .setParameter("time", timestamp).setMaxResults(1).setParameter("depot", depot) .setParameter("sensor", sensor).list(); MeasurementImpl justBefore = null; for (MeasurementImpl b : before) { if (b.getSensor().getId().equals(sensorId)) { if (justBefore == null) { justBefore = b; } else if (b.getTimestamp().compareTo(justBefore.getTimestamp()) > 0) { justBefore = b; } } } if (justBefore == null) { session.getTransaction().commit(); session.close(); throw new NoMeasurementException("Cannot find measurement before " + timestamp); } MeasurementImpl justAfter = null; for (MeasurementImpl a : after) { if (a.getSensor().getId().equals(sensorId)) { if (justAfter == null) { justAfter = a; } else if (a.getTimestamp().compareTo(justBefore.getTimestamp()) > 0) { justAfter = a; } } } if (justAfter == null) { session.getTransaction().commit(); session.close(); throw new NoMeasurementException("Cannot find measurement after " + timestamp); } Double val1 = justBefore.getValue(); Double val2 = justAfter.getValue(); Double deltaV = val2 - val1; Long t1 = justBefore.getTimestamp().getTime(); Long t2 = justAfter.getTimestamp().getTime(); Long deltaT = t2 - t1; Long t3 = timestamp.getTime(); Long toDate = t3 - t1; Double slope = deltaV / deltaT; ret = val1 + slope * toDate; } session.getTransaction().commit(); session.close(); return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepotPersistence#getValue(java.lang.String, * java.lang.String, java.util.Date, java.util.Date) */ @Override public Double getValue(String depotId, String orgId, String sensorId, Date start, Date end, boolean check) throws NoMeasurementException, IdNotFoundException { Boolean generatePower = false; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); for (PropertyImpl p : sensor.getProperties()) { if (p.getKey().equals(Labels.GENERATE_POWER)) { generatePower = Boolean.parseBoolean(p.getValue()); } } session.getTransaction().commit(); session.close(); Double endVal = getValue(depotId, orgId, sensorId, end, check); Double startVal = getValue(depotId, orgId, sensorId, start, check); if (endVal != null && startVal != null) { Double returnVal = endVal - startVal; if (returnVal < 0 && !generatePower) { Double max = Double.MIN_NORMAL; Double min = Double.MAX_VALUE; List<Measurement> measurements = getMeasurements(depotId, orgId, sensorId, start, end, false); for (Measurement m : measurements) { Double value = m.getValue(); if (max < value) { max = value; } if (min > value) { min = value; } returnVal = endVal - startVal + max - min; } } return returnVal; } return null; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepotPersistence#getValue(java.lang.String, * java.lang.String, java.util.Date, java.util.Date, java.lang.Long) */ @Override public Double getValue(String depotId, String orgId, String sensorId, Date start, Date end, Long gapSeconds, boolean check) throws NoMeasurementException, MeasurementGapException, IdNotFoundException { Boolean generatePower = false; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); for (PropertyImpl p : sensor.getProperties()) { if (p.getKey().equals(Labels.GENERATE_POWER)) { generatePower = Boolean.parseBoolean(p.getValue()); } } session.getTransaction().commit(); session.close(); Double endVal = getValue(depotId, orgId, sensorId, end, gapSeconds, check); Double startVal = getValue(depotId, orgId, sensorId, start, gapSeconds, check); if (endVal != null && startVal != null) { Double returnVal = endVal - startVal; if (returnVal < 0 && !generatePower) { Double max = Double.MIN_NORMAL; Double min = Double.MAX_VALUE; List<Measurement> measurements = getMeasurements(depotId, orgId, sensorId, start, end, false); for (Measurement m : measurements) { Double value = m.getValue(); if (max < value) { max = value; } if (min > value) { min = value; } returnVal = endVal - startVal + max - min; } } return returnVal; } return null; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepotPersistence#getValue(java.lang.String, * java.lang.String, java.util.Date, java.lang.Long) */ @Override public Double getValue(String depotId, String orgId, String sensorId, Date timestamp, Long gapSeconds, boolean check) throws NoMeasurementException, MeasurementGapException, IdNotFoundException { if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); getSensor(sensorId, orgId, check); } Double ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, sensorId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> result = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE timestamp = :time AND depository = :depot AND sensor = :sensor") .setParameter("time", timestamp).setParameter("depot", depot) .setParameter("sensor", sensor).list(); if (result.size() > 0) { ret = result.get(0).getValue(); } else { // need to get the stradle @SuppressWarnings("unchecked") List<MeasurementImpl> before = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE timestamp <= :time AND depository = :depot AND sensor = :sensor ORDER BY timestamp desc") .setParameter("time", timestamp).setParameter("depot", depot) .setParameter("sensor", sensor).setMaxResults(1).list(); @SuppressWarnings("unchecked") List<MeasurementImpl> after = (List<MeasurementImpl>) session .createQuery( "FROM MeasurementImpl WHERE timestamp >= :time AND depository = :depot AND sensor = :sensor ORDER BY timestamp asc") .setParameter("time", timestamp).setMaxResults(1).setParameter("depot", depot) .setParameter("sensor", sensor).list(); MeasurementImpl justBefore = null; for (MeasurementImpl b : before) { if (b.getSensor().getId().equals(sensorId)) { if (justBefore == null) { justBefore = b; } else if (b.getTimestamp().compareTo(justBefore.getTimestamp()) > 0) { justBefore = b; } } } if (justBefore == null) { session.getTransaction().commit(); session.close(); throw new NoMeasurementException("Cannot find measurement before " + timestamp + " in " + depot.getName() + " for " + sensor.getName()); } MeasurementImpl justAfter = null; for (MeasurementImpl a : after) { if (a.getSensor().getId().equals(sensorId)) { if (justAfter == null) { justAfter = a; } else if (a.getTimestamp().compareTo(justBefore.getTimestamp()) > 0) { justAfter = a; } } } if (justAfter == null) { session.getTransaction().commit(); session.close(); throw new NoMeasurementException("Cannot find measurement after " + timestamp + " in " + depot.getName() + " for " + sensor.getName()); } Double val1 = justBefore.getValue(); Double val2 = justAfter.getValue(); Double deltaV = val2 - val1; Long t1 = justBefore.getTimestamp().getTime(); Long t2 = justAfter.getTimestamp().getTime(); Long deltaT = t2 - t1; if ((deltaT / 1000) > gapSeconds) { session.getTransaction().commit(); session.close(); throw new MeasurementGapException("Gap of " + (deltaT / 1000) + "s is longer than " + gapSeconds + " for " + sensor.getName() + " in " + depot.getName()); } Long t3 = timestamp.getTime(); Long toDate = t3 - t1; Double slope = deltaV / deltaT; ret = val1 + slope * toDate; } session.getTransaction().commit(); session.close(); return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#listSensors(java.lang.String) */ @Override public List<String> listSensors(String depotId, String orgId, boolean check) throws IdNotFoundException { Long startTime = 0l; Long endTime = 0l; Long diff = 0l; if (timingp) { timingLogger.log(Level.SEVERE, padding + "Start listSensors(" + depotId + ", " + orgId + ")"); padding += " "; startTime = System.nanoTime(); } if (check) { getOrganization(orgId, check); getDepository(depotId, orgId, check); } Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); @SuppressWarnings("unchecked") // List<SensorImpl> result = (List<SensorImpl>) session // .createQuery( // "select distinct meas.sensor FROM MeasurementImpl meas WHERE meas.depository = :depot") // .setParameter("depot", depot).list(); List<DepositorySensorContribution> result = (List<DepositorySensorContribution>) session .createQuery("from DepositorySensorContribution where depository = :depository") .setParameter("depository", depot).list(); ArrayList<String> sensorIds = new ArrayList<String>(); for (DepositorySensorContribution contrib : result) { sensorIds.add(contrib.getSensor().getId()); } // for (SensorImpl sensor : result) { // if (!sensorIds.contains(sensor.getId())) { // sensorIds.add(sensor.getId()); // } // } session.getTransaction().commit(); session.close(); if (timingp) { endTime = System.nanoTime(); diff = endTime - startTime; padding = padding.substring(0, padding.length() - 2); timingLogger.log(Level.SEVERE, padding + "listSensors(" + depotId + ", " + orgId + ") took " + (diff / 1E9) + " secs."); } return sensorIds; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#putMeasurement(java.lang.String, * org.wattdepot.common.domainmodel.Measurement) */ @Override public void putMeasurement(String depotId, String orgId, Measurement meas) throws MeasurementTypeException, IdNotFoundException { getOrganization(orgId, true); Depository d = getDepository(depotId, orgId, true); if (!meas.getMeasurementType().equals(d.getMeasurementType().getUnits())) { throw new MeasurementTypeException("Measurement's type " + meas.getMeasurementType() + " does not match " + d.getMeasurementType()); } Session session = Manager.getFactory(getServerProperties()).openSession(); session.beginTransaction(); DepositoryImpl depot = retrieveDepository(session, depotId, orgId); SensorImpl sensor = retrieveSensor(session, meas.getSensorId(), orgId); DepositorySensorContribution contrib = retrieveContribution(session, depot, sensor); if (contrib == null) { contrib = new DepositorySensorContribution(); contrib.setDepository(depot); contrib.setSensor(sensor); session.saveOrUpdate(contrib); } MeasurementImpl impl = new MeasurementImpl(); impl.setDepository(depot); impl.setSensor(sensor); impl.setId(meas.getId()); impl.setTimestamp(meas.getDate()); impl.setValue(meas.getValue()); impl.setUnits(meas.getMeasurementType().toString()); // InterpolatedValue iv = new InterpolatedValue(sensor.getId(), meas.getValue(), d.getMeasurementType(), meas.getDate()); // depotSensorInfo.update(orgId, depotId, meas.getSensorId(), iv); session.saveOrUpdate(impl); session.getTransaction().commit(); session.close(); } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#putMeasurement(java.lang.String, * org.wattdepot.common.domainmodel.MeasurementList) */ @Override public void putMeasurementList(String depotId, String orgId, MeasurementList measurementList) throws MeasurementTypeException, IdNotFoundException { getOrganization(orgId, true); //We just checked the organisation, no reason to do it again. Depository d = getDepository(depotId, orgId, false); Session session = Manager.getFactory(getServerProperties()).openSession(); Transaction transaction = session.beginTransaction(); OrganizationImpl organization = retrieveOrganization(session, orgId); DepositoryImpl depository = retrieveDepository(session, depotId, organization); //Cache all sensors for organization in a map List<SensorImpl> sensors = retrieveSensors(session, organization); Map<String, SensorImpl> sensorMap = new HashMap<>(); for (SensorImpl sensor : sensors) { sensorMap.put(sensor.getId(), sensor); } //Cache all depository sensor contributions for this depository List<DepositorySensorContribution> depositorySensorContributions = retrieveContributions( session, depository); Map<String, DepositorySensorContribution> depositorySensorContributionsMap = new HashMap<>(); for (DepositorySensorContribution depositorySensorContribution : depositorySensorContributions) { depositorySensorContributionsMap.put(depositorySensorContribution.getSensor().getId(), depositorySensorContribution); } for (int i = 0; i < measurementList.getMeasurements().size(); i++) { //for (Measurement measurement : measurementList.getMeasurements()) { Measurement measurement = measurementList.getMeasurements().get(i); if (!measurement.getMeasurementType().equals(d.getMeasurementType().getUnits())) { throw new MeasurementTypeException("Measurement's type " + measurement.getMeasurementType() + " does not match " + d.getMeasurementType()); } SensorImpl sensor = sensorMap.get(measurement.getSensorId()); DepositorySensorContribution contrib = depositorySensorContributionsMap.get(sensor.getId()); if (contrib == null) { contrib = new DepositorySensorContribution(); contrib.setDepository(depository); contrib.setSensor(sensor); session.saveOrUpdate(contrib); depositorySensorContributionsMap.put(sensor.getId(), contrib); } MeasurementImpl impl = new MeasurementImpl(); impl.setDepository(depository); impl.setSensor(sensor); impl.setId(measurement.getId()); impl.setTimestamp(measurement.getDate()); impl.setValue(measurement.getValue()); impl.setUnits(measurement.getMeasurementType().toString()); session.saveOrUpdate(impl); if ( i % 50 == 0 ) { //50, same as the JDBC batch size //flush a batch of inserts and release memory: session.flush(); session.clear(); } } transaction.commit(); session.close(); } /** * @param session The session with an open transaction. * @param id The CollectorProcessDefinition's id. * @param orgId The owner Organization's id. * @return the CollectorProcessDefinition if defined. */ @SuppressWarnings("unchecked") private CollectorProcessDefinitionImpl retrieveCollectorProcessDefinition(Session session, String id, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<CollectorProcessDefinitionImpl> cpds = (List<CollectorProcessDefinitionImpl>) session .createQuery("FROM CollectorProcessDefinitionImpl WHERE id = :id AND org = :org") .setParameter("id", id).setParameter("org", org).list(); if (cpds.size() == 1) { return cpds.get(0); } else { return null; } } /** * @param session The session with an open transaction. * @param orgId The owner's Organization id. * @return a List of CollectorProcessDefinitions owned by orgId. */ @SuppressWarnings("unchecked") private List<CollectorProcessDefinitionImpl> retrieveCollectorProcessDefinitions(Session session, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<CollectorProcessDefinitionImpl> ret = (List<CollectorProcessDefinitionImpl>) session .createQuery("FROM CollectorProcessDefinitionImpl WHERE org = :org") .setParameter("org", org).list(); return ret; } /** * @param session The session with an open transaction. * @param depo The Depository. * @param sensor The Sensor. * @return The DepositorySensorContribution if the sensor has contributed * measurements to the depository, or null. */ @SuppressWarnings("unchecked") private DepositorySensorContribution retrieveContribution(Session session, DepositoryImpl depo, SensorImpl sensor) { List<DepositorySensorContribution> ret = (List<DepositorySensorContribution>) session .createQuery( "from DepositorySensorContribution where sensor = :sensor and depository = :depository") .setParameter("sensor", sensor).setParameter("depository", depo).list(); if (ret.size() == 1) { return ret.get(0); } return null; } /** * @param session A session with an open transaction. * @param depository The depository to search for. * @return A List of DepositorySensorContributions for the given depository. */ @SuppressWarnings("unchecked") private List<DepositorySensorContribution> retrieveContributions(Session session, DepositoryImpl depository) { List<DepositorySensorContribution> ret = (List<DepositorySensorContribution>) session .createQuery("from DepositorySensorContribution where depository = :depository") .setParameter("depository", depository).list(); return ret; } /** * @param session A session with an open transaction. * @param sensor The sensor to search for. * @return A List of DepositorySensorContributions for the given sensor. */ @SuppressWarnings("unchecked") private List<DepositorySensorContribution> retrieveContributions(Session session, SensorImpl sensor) { List<DepositorySensorContribution> ret = (List<DepositorySensorContribution>) session .createQuery("from DepositorySensorContribution where sensor = :sensor") .setParameter("sensor", sensor).list(); return ret; } /** * @param session The session with an open transaction. * @param type The measurement type of the depository. * @return A List of all the depositories with the given measurment type. */ @SuppressWarnings("unchecked") private List<DepositoryImpl> retrieveDepositories(Session session, MeasurementTypeImpl type) { List<DepositoryImpl> ret = (List<DepositoryImpl>) session .createQuery("from DepositoryImpl WHERE type = :type").setParameter("type", type).list(); return ret; } /** * @param session The session with an open transaction. * @param orgId The owner's Organization id. * @return A List of the Depositories owned by orgId. */ @SuppressWarnings("unchecked") private List<DepositoryImpl> retrieveDepositories(Session session, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<DepositoryImpl> ret = (List<DepositoryImpl>) session .createQuery("from DepositoryImpl WHERE org = :org").setParameter("org", org).list(); return ret; } /** * @param session The session with an open transaction. * @param id the Depository's id. * @param orgId The owner's Organization id. * @return A List of the Depositories owned by orgId. */ @SuppressWarnings("unchecked") private DepositoryImpl retrieveDepository(Session session, String id, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); return retrieveDepository(session, id, org); } /** * @param session The session with an open transaction. * @param id the Depository's id. * @param org The owner's Organization id. * @return A List of the Depositories owned by orgId. */ @SuppressWarnings("unchecked") private DepositoryImpl retrieveDepository(Session session, String id, OrganizationImpl org) { List<DepositoryImpl> ret = (List<DepositoryImpl>) session .createQuery("from DepositoryImpl WHERE id = :id AND org = :org").setParameter("id", id) .setParameter("org", org).list(); if (ret.size() == 1) { return ret.get(0); } return null; } /** * @param session The session with an open transaction. * @param id the MeasurementPruningDefinition's id. * @param orgId The Organization's id. * @return The MeasurementPruningDefinitionImpl or null if not defined. */ private MeasurementPruningDefinitionImpl retrieveMeasurementPruningDefinition(Session session, String id, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); @SuppressWarnings("unchecked") List<MeasurementPruningDefinitionImpl> result = (List<MeasurementPruningDefinitionImpl>) session .createQuery("FROM MeasurementPruningDefinitionImpl WHERE id = :id AND org = :org") .setParameter("id", id).setParameter("org", org).list(); if (result.size() == 1) { return result.get(0); } return null; } /** * @param session The Session with an open transaction. * @param orgId The Organization's id. * @return A list of the defined MeasurementPruningDefinitionImpls. */ private List<MeasurementPruningDefinitionImpl> retrieveMeasurementPruningDefinitions( Session session, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); @SuppressWarnings("unchecked") List<MeasurementPruningDefinitionImpl> result = (List<MeasurementPruningDefinitionImpl>) session .createQuery("FROM MeasurementPruningDefinitionImpl WHERE org = :org") .setParameter("org", org).list(); return result; } /** * @param session The session with an open transaction. * @param depotId the id of the Depository. * @param orgId the organization's id. * @param measId the measurement's id. * @return the MeasurementImpl. */ private MeasurementImpl retrieveMeasurement(Session session, String depotId, String orgId, String measId) { DepositoryImpl depot = retrieveDepository(session, depotId, orgId); @SuppressWarnings("unchecked") List<MeasurementImpl> result = (List<MeasurementImpl>) session .createQuery("FROM MeasurementImpl WHERE depository = :depository AND id = :id") .setParameter("depository", depot).setParameter("id", measId).list(); if (result.size() == 1) { return result.get(0); } return null; } /** * @param session A Session with an open transaction. * @param id The id of the MeasurementType. * @return The MeasurementType with the given id. */ @SuppressWarnings("unchecked") private MeasurementTypeImpl retrieveMeasurementType(Session session, String id) { List<MeasurementTypeImpl> ret = (List<MeasurementTypeImpl>) session .createQuery("FROM MeasurementTypeImpl WHERE id = :id").setParameter("id", id).list(); if (ret.size() == 1) { return ret.get(0); } return null; } /** * @param session A Session with an open transaction. * @return The list of defined MeasurementTypes. */ @SuppressWarnings("unchecked") private List<MeasurementTypeImpl> retrieveMeasurementTypes(Session session) { List<MeasurementTypeImpl> ret = (List<MeasurementTypeImpl>) session.createQuery( "FROM MeasurementTypeImpl").list(); return ret; } /** * @param session A Session with an open transaction. * @param id The id of the Organization. * @return The Organization with the given id. */ @SuppressWarnings("unchecked") private OrganizationImpl retrieveOrganization(Session session, String id) { List<OrganizationImpl> ret = (List<OrganizationImpl>) session .createQuery("from OrganizationImpl WHERE id = :id").setParameter("id", id).list(); if (ret.size() == 1) { return ret.get(0); } return null; } /** * @param session A Session with an open transaction. * @return The List of defined Organizations. */ @SuppressWarnings("unchecked") private List<OrganizationImpl> retrieveOrganizations(Session session) { List<OrganizationImpl> ret = (List<OrganizationImpl>) session.createQuery( "from OrganizationImpl").list(); return ret; } /** * @param session The session with an open transaction. * @param id the Sensor's id. * @param orgId The owner's Organization id. * @return The Sensor with the given id and owned by orgId. */ @SuppressWarnings("unchecked") private SensorImpl retrieveSensor(Session session, String id, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); return retrieveSensor(session, id, org); } /** * @param session The session with an open transaction. * @param id the Sensor's id. * @param org The owner's OrganizationImpl. * @return The Sensor with the given id and owned by orgId. */ @SuppressWarnings("unchecked") private SensorImpl retrieveSensor(Session session, String id, OrganizationImpl org) { List<SensorImpl> ret = (List<SensorImpl>) session .createQuery("FROM SensorImpl WHERE id = :id AND org = :org").setParameter("id", id) .setParameter("org", org).list(); if (ret.size() == 1) { return ret.get(0); } return null; } /** * @param session The session with an open transaction. * @param org The owner's OrganizationImpl. * @return The Sensor with the given id and owned by orgId. */ @SuppressWarnings("unchecked") private List<SensorImpl> retrieveSensors(Session session, OrganizationImpl org) { List<SensorImpl> ret = (List<SensorImpl>) session .createQuery("FROM SensorImpl WHERE org = :org").setParameter("org", org).list(); return ret; } /** * @param session The session with an open transaction. * @param id the SensorGroup's id. * @param orgId The owner's Organization id. * @return The SensorGroup with the given id, owned by orgId. */ @SuppressWarnings("unchecked") private SensorGroupImpl retrieveSensorGroup(Session session, String id, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<SensorGroupImpl> result = (List<SensorGroupImpl>) session .createQuery("FROM SensorGroupImpl WHERE id = :id AND org = :org").setParameter("id", id) .setParameter("org", org).list(); if (result.size() == 1) { return result.get(0); } return null; } /** * @param session The session with an open transaction. * @param orgId The owner's Organization id. * @return a List of the SensorGroups owned by orgId. */ @SuppressWarnings("unchecked") private List<SensorGroupImpl> retrieveSensorGroups(Session session, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<SensorGroupImpl> result = (List<SensorGroupImpl>) session .createQuery("FROM SensorGroupImpl WHERE org = :org").setParameter("org", org).list(); return result; } /** * @param session The Session with an open transaction. * @param id the id of the SensorModel to retrieve. * @return A List of the SensorModels owned by the orgId. */ @SuppressWarnings("unchecked") private SensorModelImpl retrieveSensorModel(Session session, String id) { List<SensorModelImpl> result = (List<SensorModelImpl>) session .createQuery("FROM SensorModelImpl WHERE id = :id").setParameter("id", id).list(); if (result.size() == 1) { return result.get(0); } return null; } /** * @param session The Session with an open transaction. * @return A List of the SensorModels owned by the orgId. */ @SuppressWarnings("unchecked") private List<SensorModelImpl> retrieveSensorModels(Session session) { List<SensorModelImpl> ret = (List<SensorModelImpl>) session.createQuery("FROM SensorModelImpl") .list(); return ret; } /** * @param session The session with an open transaction. * @param orgId The owner's Organization id. * @return A List of the Sensors owned by orgId. */ @SuppressWarnings("unchecked") private List<SensorImpl> retrieveSensors(Session session, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<SensorImpl> ret = (List<SensorImpl>) session .createQuery("FROM SensorImpl WHERE org = :org").setParameter("org", org).list(); return ret; } /** * @param session The session with an open transaction. * @param uid the User's id. * @param orgId the Organziation's id. * @return the UserInfoImpl. */ @SuppressWarnings("unchecked") private UserInfoImpl retrieveUser(Session session, String uid, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<UserInfoImpl> result = (List<UserInfoImpl>) session .createQuery("FROM UserInfoImpl WHERE uid = :uid AND org = :org").setParameter("uid", uid) .setParameter("org", org).list(); if (result.size() == 1) { return result.get(0); } return null; } /** * @param session The Session with an open transaction. * @param id the user's id. * @param orgId the organization's id. * @return the UserPasswordImpl. */ @SuppressWarnings("unchecked") private UserPasswordImpl retrieveUserPassword(Session session, String id, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); UserInfoImpl user = retrieveUser(session, id, orgId); List<UserPasswordImpl> result = (List<UserPasswordImpl>) session .createQuery("FROM UserPasswordImpl WHERE user = :user AND org = :org") .setParameter("user", user).setParameter("org", org).list(); if (result.size() == 1) { return result.get(0); } return null; } /** * @param session The Session with an open transaction. * @param orgId The organization id. * @return a List of the user passwords in the given organization. */ @SuppressWarnings("unchecked") private List<UserPasswordImpl> retrieveUserPasswords(Session session, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<UserPasswordImpl> result = (List<UserPasswordImpl>) session .createQuery("FROM UserPasswordImpl WHERE org = :org").setParameter("org", org).list(); return result; } /** * @param session The Session with an open transaction. * @return A List of all the defined users. */ @SuppressWarnings("unchecked") private List<UserInfoImpl> retrieveUsers(Session session) { List<UserInfoImpl> result = (List<UserInfoImpl>) session.createQuery("FROM UserInfoImpl") .list(); return result; } /** * @param session The Session with an open transaction. * @param orgId The organization id. * @return a List of the users in the given organization. */ @SuppressWarnings("unchecked") private List<UserInfoImpl> retrieveUsers(Session session, String orgId) { OrganizationImpl org = retrieveOrganization(session, orgId); List<UserInfoImpl> result = (List<UserInfoImpl>) session .createQuery("FROM UserInfoImpl WHERE org = :org").setParameter("org", org).list(); return result; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepotPersistence#stop() */ @Override public void stop() { Manager.closeSession(); } /** * Use this method after beginning a transaction. * * @param session The Session, a transaction must be in progress. * @param cpd The CollectorProcessDefinitionImpl to save. */ private void storeCollectorProcessDefinition(Session session, CollectorProcessDefinitionImpl cpd) { for (PropertyImpl p : cpd.getProperties()) { session.saveOrUpdate(p); } session.saveOrUpdate(cpd); } /** * Use this method after beginning a transaction. * * @param session The Session, a transaction must be in progress. * @param sensor The SensorImpl to save. */ private void storeSensor(Session session, SensorImpl sensor) { for (PropertyImpl p : sensor.getProperties()) { session.saveOrUpdate(p); } session.saveOrUpdate(sensor); } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#updateCollectorProcessDefinition(org.wattdepot * . datamodel .CollectorProcessDefinition) */ @Override public CollectorProcessDefinition updateCollectorProcessDefinition( CollectorProcessDefinition process) throws IdNotFoundException { getCollectorProcessDefinition(process.getId(), process.getOrganizationId(), true); getDepository(process.getDepositoryId(), process.getOrganizationId(), true); getSensor(process.getSensorId(), process.getOrganizationId(), true); CollectorProcessDefinition ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); CollectorProcessDefinitionImpl impl = retrieveCollectorProcessDefinition(session, process.getId(), process.getOrganizationId()); impl.setId(process.getId()); impl.setName(process.getName()); impl.setPollingInterval(process.getPollingInterval()); impl.setDepository(retrieveDepository(session, process.getDepositoryId(), process.getOrganizationId())); impl.setSensor(retrieveSensor(session, process.getSensorId(), process.getOrganizationId())); impl.setOrg(retrieveOrganization(session, process.getOrganizationId())); Set<PropertyImpl> props = new HashSet<PropertyImpl>(); for (Property p : process.getProperties()) { props.add(new PropertyImpl(p)); } impl.setProperties(props); storeCollectorProcessDefinition(session, impl); ret = impl.toCPD(); session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepotPersistence#updateMeasurementPruningDefinition * (org.wattdepot.common.domainmodel.MeasurementPruningDefinition) */ @Override public MeasurementPruningDefinition updateMeasurementPruningDefinition( MeasurementPruningDefinition gcd) throws IdNotFoundException { getMeasurementPruningDefinition(gcd.getId(), gcd.getOrganizationId(), true); getDepository(gcd.getDepositoryId(), gcd.getOrganizationId(), true); MeasurementPruningDefinition ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); MeasurementPruningDefinitionImpl impl = retrieveMeasurementPruningDefinition(session, gcd.getId(), gcd.getOrganizationId()); impl.setName(gcd.getName()); impl.setDepository(retrieveDepository(session, gcd.getDepositoryId(), gcd.getOrganizationId())); impl.setSensor(gcd.getSensorId()); impl.setIgnoreWindowDays(gcd.getIgnoreWindowDays()); impl.setCollectWindowDays(gcd.getCollectWindowDays()); impl.setMinGapSeconds(gcd.getMinGapSeconds()); impl.setLastStarted(gcd.getLastStarted()); impl.setLastCompleted(gcd.getLastCompleted()); impl.setNumMeasurementsCollected(gcd.getNumMeasurementsCollected()); session.saveOrUpdate(impl); ret = impl.toMPD(); session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#updateMeasurementType(org.wattdepot.datamodel * .MeasurementType) */ @Override public MeasurementType updateMeasurementType(MeasurementType type) { Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); MeasurementTypeImpl impl = retrieveMeasurementType(session, type.getId()); impl.setName(type.getName()); impl.setUnits(type.getUnits()); session.saveOrUpdate(impl); session.getTransaction().commit(); session.close(); sessionClose++; return type; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#updateOrganization(org.wattdepot.datamodel * .Organization) */ @Override public Organization updateOrganization(Organization org) throws IdNotFoundException { getOrganization(org.getId(), true); for (String s : org.getUsers()) { getUser(s, org.getId(), true); } Organization ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl impl = retrieveOrganization(session, org.getId()); impl.setId(org.getId()); impl.setName(org.getName()); for (String s : org.getUsers()) { UserInfoImpl u = retrieveUser(session, s, org.getId()); if (u != null) { impl.getUsers().add(u); } } session.saveOrUpdate(impl); ret = impl.toOrganization(); session.getTransaction().commit(); session.close(); sessionClose++; cache.putOrganization(ret); return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#updateSensor(org.wattdepot.datamodel.Sensor * ) */ @Override public Sensor updateSensor(Sensor sensor) throws IdNotFoundException { getOrganization(sensor.getOrganizationId(), true); getSensorModel(sensor.getModelId(), true); Sensor ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorImpl impl = retrieveSensor(session, sensor.getId(), sensor.getOrganizationId()); impl.setId(sensor.getId()); impl.setName(sensor.getName()); impl.setOrg(retrieveOrganization(session, sensor.getOrganizationId())); impl.setModel(retrieveSensorModel(session, sensor.getModelId())); Set<PropertyImpl> props = new HashSet<PropertyImpl>(); for (Property p : sensor.getProperties()) { props.add(new PropertyImpl(p)); } impl.setProperties(props); storeSensor(session, impl); ret = impl.toSensor(); session.getTransaction().commit(); session.close(); sessionClose++; cache.putSensor(ret); return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#updateSensorGroup(org.wattdepot.datamodel * .SensorGroup) */ @Override public SensorGroup updateSensorGroup(SensorGroup group) throws IdNotFoundException { getOrganization(group.getOrganizationId(), true); getSensorGroup(group.getId(), group.getOrganizationId(), true); // validate the list of sensor ids. for (String id : group.getSensors()) { getSensor(id, group.getOrganizationId(), true); } SensorGroup ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl org = retrieveOrganization(session, group.getOrganizationId()); SensorGroupImpl impl = retrieveSensorGroup(session, group.getId(), group.getOrganizationId()); impl.setId(group.getId()); impl.setName(group.getName()); impl.setOrg(org); Set<SensorImpl> sensors = new HashSet<SensorImpl>(); for (String s : group.getSensors()) { sensors.add(retrieveSensor(session, s, group.getOrganizationId())); } impl.setSensors(sensors); session.saveOrUpdate(impl); ret = impl.toSensorGroup(); session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#updateSensorModel(org.wattdepot.datamodel * .SensorModel) */ @Override public SensorModel updateSensorModel(SensorModel model) throws IdNotFoundException { getSensorModel(model.getId(), true); SensorModel ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); SensorModelImpl impl = retrieveSensorModel(session, model.getId()); impl.setName(model.getName()); impl.setProtocol(model.getProtocol()); impl.setId(model.getId()); impl.setType(model.getType()); impl.setVersion(model.getVersion()); session.saveOrUpdate(impl); ret = impl.toSensorModel(); session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see org.wattdepot.server.WattDepot#updateUserInfo(org.wattdepot.datamodel * .UserInfo) */ @Override public UserInfo updateUserInfo(UserInfo user) throws IdNotFoundException { getUser(user.getUid(), user.getOrganizationId(), true); UserInfo ret = null; Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); OrganizationImpl orgImpl = retrieveOrganization(session, user.getOrganizationId()); UserInfoImpl impl = retrieveUser(session, user.getUid(), user.getOrganizationId()); impl.setUid(user.getUid()); impl.setFirstName(user.getFirstName()); impl.setLastName(user.getLastName()); impl.setEmail(user.getEmail()); Set<PropertyImpl> props = new HashSet<PropertyImpl>(); for (Property p : user.getProperties()) { PropertyImpl pi = new PropertyImpl(p); props.add(pi); session.saveOrUpdate(pi); } impl.setProperties(props); impl.setOrg(orgImpl); session.saveOrUpdate(orgImpl); session.saveOrUpdate(impl); ret = impl.toUserInfo(); session.getTransaction().commit(); session.close(); sessionClose++; return ret; } /* * (non-Javadoc) * * @see * org.wattdepot.server.WattDepot#updateUserPassword(org.wattdepot.datamodel * .UserPassword) */ @Override public UserPassword updateUserPassword(UserPassword password) throws IdNotFoundException { UserPassword ret = null; getUserPassword(password.getUid(), password.getOrganizationId(), true); Session session = Manager.getFactory(getServerProperties()).openSession(); sessionOpen++; session.beginTransaction(); UserPasswordImpl impl = retrieveUserPassword(session, password.getUid(), password.getOrganizationId()); impl.setEncryptedPassword(password.getEncryptedPassword()); impl.setOrg(retrieveOrganization(session, password.getOrganizationId())); impl.setUser(retrieveUser(session, password.getUid(), password.getOrganizationId())); session.saveOrUpdate(impl); ret = impl.toUserPassword(); session.getTransaction().commit(); session.close(); sessionClose++; return ret; } }