/******************************************************************************* * Copyright (c) 2012-2015 INRIA. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Generoso Pagano - initial API and implementation ******************************************************************************/ package fr.inria.soctrace.lib.query; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import fr.inria.soctrace.lib.model.AnalysisResultData; import fr.inria.soctrace.lib.model.AnalysisResultProcessedTraceData; import fr.inria.soctrace.lib.model.Trace; import fr.inria.soctrace.lib.model.utils.SoCTraceException; import fr.inria.soctrace.lib.query.conditions.ConditionsConstants.ComparisonOperation; import fr.inria.soctrace.lib.query.conditions.SimpleCondition; import fr.inria.soctrace.lib.storage.SystemDBObject; import fr.inria.soctrace.lib.storage.TraceDBObject; import fr.inria.soctrace.lib.storage.utils.SQLConstants.FramesocTable; /** * Query class for Processed Trace analysis results. * * @author "Generoso Pagano <generoso.pagano@inria.fr>" * */ public class AnalysisResultProcessedTraceDataQuery extends AnalysisResultDataQuery { private SystemDBObject sysDB; private Trace sourceTrace; /** * The constructor. * * @param traceDB Trace DB Object containing the result (it's the source trace DB) * @param sysDB System DB Object * @param sourceTrace Source Trace object */ public AnalysisResultProcessedTraceDataQuery(TraceDBObject traceDB, SystemDBObject sysDB, Trace sourceTrace) { super(traceDB); this.sysDB = sysDB; this.sourceTrace = sourceTrace; } @Override public AnalysisResultData getAnalysisResultData(int analysisResultId) throws SoCTraceException { AnalysisResultProcessedTraceData processedTraceData = new AnalysisResultProcessedTraceData(); try { String query = "SELECT * FROM " + FramesocTable.PROCESSED_TRACE + " WHERE ANALYSIS_RESULT_ID = " + analysisResultId; debug(query); Statement stm = traceDB.getConnection().createStatement(); ResultSet rs = stm.executeQuery(query); int processedId; if (rs.next()) { processedId = rs.getInt(2); } else { return null; } stm.close(); TraceQuery traceQuery = new TraceQuery(sysDB); traceQuery.setElementWhere(new SimpleCondition("ID", ComparisonOperation.EQ, String.valueOf(processedId))); List<Trace> traces = traceQuery.getList(); if (traces.size()==0) throw new SoCTraceException("Trace with id " + processedId + " has not been found!"); if (traces.size()>1) throw new SoCTraceException("More than one trace with the same id ("+ processedId +")"); processedTraceData.setProcessedTrace(traces.get(0)); processedTraceData.setSourceTrace(sourceTrace); return processedTraceData; } catch (SQLException e) { throw new SoCTraceException(e); } } }