/**
* Copyright 2014-2016 by Metanome Project
*
* 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.
*/
package de.metanome.backend.resources;
import de.metanome.backend.result_receiver.ResultReader;
import de.metanome.backend.results_db.Execution;
import de.metanome.backend.results_db.HibernateUtil;
import de.metanome.backend.results_db.Result;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Path("executions")
public class ExecutionResource {
/**
* Deletes the execution, which has the given id, from the database.
*
* @param id the id of the execution, which should be deleted
*/
@DELETE
@Path("/delete/{id}")
public void delete(@PathParam("id") long id) {
try {
Execution execution = (Execution) HibernateUtil.retrieve(Execution.class, id);
Set<Result> results = execution.getResults();
HibernateUtil.delete(execution);
// delete result files from disk
for (Result result : results) {
File file = new File(result.getFileName());
if (file.exists()) {
file.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
throw new WebException(e, Response.Status.BAD_REQUEST);
}
}
/**
* Retrieves an execution from the database.
*
* @param id the execution's id
* @return the execution
*/
@GET
@Path("/get/{id}")
@Produces("application/json")
public Execution get(@PathParam("id") long id) {
try {
return (Execution) HibernateUtil.retrieve(Execution.class, id);
} catch (Exception e) {
e.printStackTrace();
throw new WebException(e, Response.Status.BAD_REQUEST);
}
}
/**
* @return all executions in the database
*/
@GET
@Produces("application/json")
@SuppressWarnings("unchecked")
public List<Execution> getAll() {
try {
return (List<Execution>) HibernateUtil.queryCriteria(Execution.class);
} catch (Exception e) {
e.printStackTrace();
throw new WebException(e, Response.Status.BAD_REQUEST);
}
}
/**
* Reads counter results from file.
*
* @param id the execution's id
* @return the updated result
*/
@GET
@Path("/count-results/{executionId}")
@Produces("application/json")
public Map<String, Integer> readCounterResult(@PathParam("executionId") long id) {
try {
Map<String, Integer> results = new HashMap<>();
Execution execution = (Execution) HibernateUtil.retrieve(Execution.class, id);
for (Result result : execution.getResults()) {
results.put(result.getType().getName(),
ResultReader.readCounterResultFromFile(result.getFileName()));
}
return results;
} catch (Exception e) {
e.printStackTrace();
throw new WebException(e, Response.Status.BAD_REQUEST);
}
}
}