/** Copyright 2014 ATOS SPAIN S.A. Licensed under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Authors Contact: Francisco Javier Nieto. Atos Research and Innovation, Atos SPAIN SA @email francisco.nieto@atos.net **/ package eu.betaas.taas.contextmanager.linkeddata.clients; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.util.ArrayList; import org.apache.log4j.Logger; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.util.tracker.ServiceTracker; import eu.betaas.taas.bigdatamanager.database.hibernate.data.ThingInformation; import eu.betaas.taas.bigdatamanager.database.service.IBigDataDatabaseService; public class TaaSBDMClient { private IBigDataDatabaseService myClient; private Logger logger= Logger.getLogger("betaas.taas"); static private TaaSBDMClient _instance = null; private TaaSBDMClient () { // Retrieve the BundleContext from the OSGi Framework BundleContext context = FrameworkUtil.getBundle(TaaSBDMClient.class).getBundleContext(); // Open tracker in order to retrieve BD Manager services ServiceTracker myTracker = new ServiceTracker(context, IBigDataDatabaseService.class.getName(), null); myTracker.open(); Object [] providers = myTracker.getServices(); // Select a provider int n = 0; if ( providers != null && providers.length > 0 ) { logger.debug("Number of providers found for TaaS BDM: " + providers.length); myClient = (IBigDataDatabaseService) providers[n]; logger.info("Taas Big Data Manager Service found!"); } else { logger.error("No providers were found for the TaaS BD Manager"); } // Close the tracker myTracker.close(); } public static synchronized TaaSBDMClient instance() { Logger myLogger= Logger.getLogger("betaas.taas"); if (null == _instance) { _instance = new TaaSBDMClient(); if (_instance.myClient == null) { myLogger.error("No TaaS BDM client was created!"); _instance = null; return null; } myLogger.info("A new instance of the Big Data Manager Client was created!"); } return _instance; } public ArrayList<ThingDatasetData> getThingData (String idThing) { ArrayList<ThingDatasetData> myResult = new ArrayList<ThingDatasetData>(); // We need to access directly to the connection and send a SQL query to the DB for getting data generated the last 24h try { Connection myConn = myClient.getConnection(); PreparedStatement myQuery = myConn.prepareStatement("SELECT timestamp, measurement, battery_cost, memory_status FROM T_THING_DATA WHERE thingID='" + idThing + "'"); ResultSet results = myQuery.executeQuery(); while(results.next()) { // Add all the results to the array list Timestamp theTime = results.getTimestamp(1); String theValue = results.getString(2); String battery = results.getString(3); String memory = results.getString(4); ThingDatasetData currentData = new ThingDatasetData (theTime, theValue, battery, memory); myResult.add(currentData); } myConn.close(); logger.debug("Data retreived from " + myResult.size() + " records."); } catch (Exception ex) { logger.error("Error retrieving data generated by " + idThing + " during the last 24 hours!"); logger.error(ex.toString()); return null; } return myResult; } public ThingInformation getThingInformation (String idThing) throws Exception { logger.debug("Retrieving basic data for thing " + idThing); ThingInformation mySearch = new ThingInformation (); mySearch.setThingID(idThing); return myClient.searchThingInformation(mySearch); } }