package com.netifera.platform.internal.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.db4o.ObjectContainer;
import com.db4o.query.Predicate;
import com.netifera.platform.api.tasks.ITaskRecord;
public class TaskManager {
private final static boolean QUERY_DEBUG = false;
private final ModelService model;
private final ObjectContainer database;
TaskManager(ObjectContainer database, ModelService model) {
this.database = database;
this.model = model;
}
public ITaskRecord findTaskById(long taskId) {
if(QUERY_DEBUG) {
model.getLogger().info("findTaskById(" + taskId + ")");
}
final ITaskRecord task = lookupTaskById(taskId);
if(task == null) {
model.getLogger().debug("No task found for taskId(" + taskId + ")");
}
return task;
}
@SuppressWarnings("serial")
private ITaskRecord lookupTaskById(final long taskId) {
List<TaskRecord> results = database.query(new Predicate<TaskRecord>() {
public boolean match(TaskRecord candidate) {
return candidate.getTaskId() == taskId;
}
});
if(results.size() == 0) {
return null;
} else if (results.size() > 1){
model.getLogger().error("Database corrupted, duplicate task found for id = " + taskId);
return null;
} else {
return results.get(0);
}
}
@SuppressWarnings("serial")
public List<ITaskRecord> findTaskByProbeId(final long probeId) {
if(QUERY_DEBUG) {
model.getLogger().info("findTaskByProbeId(" + probeId + ")");
}
List<TaskRecord> results = database.query(new Predicate<TaskRecord>() {
public boolean match(TaskRecord candidate) {
return candidate.getTaskId() == probeId;
}
});
if(results.size() == 0) {
model.getLogger().debug("No TaskRecord found for probeId = " + probeId);
return Collections.emptyList();
}
return new ArrayList<ITaskRecord>(results);
}
}