/*******************************************************************************
* 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 fr.inria.soctrace.lib.model.AnalysisResultData;
import fr.inria.soctrace.lib.model.AnalysisResultSearchData;
import fr.inria.soctrace.lib.model.Event;
import fr.inria.soctrace.lib.model.EventProducer;
import fr.inria.soctrace.lib.model.utils.ModelConstants.ModelEntity;
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.TraceDBObject;
import fr.inria.soctrace.lib.storage.utils.SQLConstants.FramesocTable;
/**
* Query class for Search analysis results.
*
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*
*/
public class AnalysisResultSearchDataQuery extends AnalysisResultDataQuery {
/**
* The constructor.
*
* @param traceDB trace DB containing the result this data are associated with.
*/
public AnalysisResultSearchDataQuery(TraceDBObject traceDB) {
super(traceDB);
}
@Override
public AnalysisResultData getAnalysisResultData(int analysisResultId) throws SoCTraceException {
AnalysisResultSearchData searchData = null;
String searchCommand = "";
String targetEntity = "";
try {
String query = "SELECT * FROM " + FramesocTable.SEARCH +
" WHERE ANALYSIS_RESULT_ID = " + analysisResultId;
debug(query);
Statement stm = traceDB.getConnection().createStatement();
ResultSet rs = stm.executeQuery(query);
if (rs.next()) {
searchCommand = rs.getString(2);
targetEntity = rs.getString(3);
}
query = "SELECT * FROM " + FramesocTable.SEARCH_MAPPING +
" WHERE ANALYSIS_RESULT_ID = " + analysisResultId;
debug(query);
rs = stm.executeQuery(query);
ValueListString vls = new ValueListString();
while (rs.next()) {
// add target entity ID to vls
vls.addValue(String.valueOf(rs.getInt(2)));
}
stm.close();
if (targetEntity.equals(ModelEntity.EVENT.name())) {
searchData = new AnalysisResultSearchData(Event.class);
searchData.setSearchCommand(searchCommand);
EventQuery eventQuery = new EventQuery(traceDB);
eventQuery.setElementWhere(new SimpleCondition("ID", ComparisonOperation.IN, vls.getValueString()));
searchData.setElements(eventQuery.getList());
}
else if (targetEntity.equals(ModelEntity.EVENT_PRODUCER.name())) {
searchData = new AnalysisResultSearchData(EventProducer.class);
searchData.setSearchCommand(searchCommand);
EventProducerQuery eventProducerQuery = new EventProducerQuery(traceDB);
eventProducerQuery.setElementWhere(new SimpleCondition("ID", ComparisonOperation.IN, vls.getValueString()));
searchData.setElements(eventProducerQuery.getList());
}
else {
throw new SoCTraceException("Target entity unknown!");
}
return searchData;
} catch (SQLException e) {
throw new SoCTraceException(e);
}
}
}