/**
  * Creates a new DbManager which manages access to the underlying persistency layer(s).
  * Instantiates the underlying storage system to use.
  *
  * @param server The Restlet server instance.
  */
 public DbManager(Server server) {
   // Defaults to: "org.hackystat.sensorbase.db.derby.DerbyImplementation"
   String dbClassName = server.getServerProperties().get(DB_IMPL_KEY);
   Class<?> dbClass = null;
   // First, try to find the class specified in the sensorbase.properties file (or the default)
   try {
     dbClass = Class.forName(dbClassName);
   } catch (ClassNotFoundException e) {
     String msg = "DB error instantiating " + dbClassName + ". Could not find this class.";
     server.getLogger().warning(msg + "\n" + StackTrace.toString(e));
     throw new IllegalArgumentException(e);
   }
   // Next, try to find a constructor that accepts a Server as its parameter.
   Class<?>[] constructorParam = {org.itu.thesis.server.Server.class};
   Constructor<?> dbConstructor = null;
   try {
     dbConstructor = dbClass.getConstructor(constructorParam);
   } catch (Exception e) {
     String msg = "DB error instantiating " + dbClassName + ". Could not find Constructor(server)";
     server.getLogger().warning(msg + "\n" + StackTrace.toString(e));
     throw new IllegalArgumentException(e);
   }
   // Next, try to create an instance of DbImplementation from the Constructor.
   Object[] serverArg = {server};
   try {
     this.dbImpl = (DbImplementation) dbConstructor.newInstance(serverArg);
   } catch (Exception e) {
     String msg = "DB error instantiating " + dbClassName + ". Could not create instance.";
     server.getLogger().warning(msg + "\n" + StackTrace.toString(e));
     throw new IllegalArgumentException(e);
   }
   this.dbImpl.initialize();
 }
 /**
  * Used by the SdtSummary link to indicate how the model should be updated.
  *
  * @param sdtName The sdtName.
  * @param tool The tool.
  * @param start The start time.
  */
 public void setSensorDataDetailsProvider(String sdtName, String tool, long start) {
   detailsList.clear();
   SensorBaseClient client = ProjectBrowserSession.get().getSensorBaseClient();
   SensorDataSession session = ProjectBrowserSession.get().getSensorDataSession();
   String projectName = session.getProject().getName();
   String owner = session.getProject().getOwner();
   XMLGregorianCalendar startTime = Tstamp.makeTimestamp(start);
   XMLGregorianCalendar endTime = Tstamp.incrementDays(startTime, 1);
   try {
     SensorDataIndex index =
         client.getProjectSensorData(owner, projectName, startTime, endTime, sdtName, tool);
     for (SensorDataRef ref : index.getSensorDataRef()) {
       detailsList.add(new SensorDataDetails(ref));
     }
   } catch (Exception e) {
     System.out.println("Error getting sensor data: " + StackTrace.toString(e));
   }
 }