import java.util.Vector;
import org.oransc.enrichment.configuration.ApplicationConfig;
+import org.oransc.enrichment.controllers.r1producer.ProducerCallbacks;
import org.oransc.enrichment.exceptions.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final ApplicationConfig config;
private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- public EiJobs(ApplicationConfig config) {
+ private final ProducerCallbacks producerCallbacks;
+
+ public EiJobs(ApplicationConfig config, ProducerCallbacks producerCallbacks) {
this.config = config;
GsonBuilder gsonBuilder = new GsonBuilder();
ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory);
this.gson = gsonBuilder.create();
+ this.producerCallbacks = producerCallbacks;
}
public synchronized void restoreJobsFromDatabase() throws IOException {
for (File file : dbDir.listFiles()) {
String json = Files.readString(file.toPath());
EiJob job = gson.fromJson(json, EiJob.class);
- this.put(job, false);
+ this.doPut(job);
}
-
}
public synchronized void put(EiJob job) {
- this.put(job, true);
+ this.doPut(job);
+ storeJobInFile(job);
}
public synchronized Collection<EiJob> getJobs() {
public synchronized EiJob getJob(String id) throws ServiceException {
EiJob ric = allEiJobs.get(id);
if (ric == null) {
- throw new ServiceException("Could not find EI job: " + id);
+ throw new ServiceException("Could not find Information job: " + id);
}
return ric;
}
return allEiJobs.get(id);
}
- public synchronized EiJob remove(String id) {
+ public synchronized EiJob remove(String id, EiProducers eiProducers) {
EiJob job = allEiJobs.get(id);
if (job != null) {
- remove(job);
+ remove(job, eiProducers);
}
return job;
}
- public synchronized void remove(EiJob job) {
+ public synchronized void remove(EiJob job, EiProducers eiProducers) {
this.allEiJobs.remove(job.getId());
jobsByType.remove(job.getTypeId(), job.getId());
jobsByOwner.remove(job.getOwner(), job.getId());
} catch (IOException e) {
logger.warn("Could not remove file: {}", e.getMessage());
}
-
+ this.producerCallbacks.stopEiJob(job, eiProducers);
}
public synchronized int size() {
this.allEiJobs.clear();
this.jobsByType.clear();
jobsByOwner.clear();
+ clearDatabase();
+ }
+
+ private void clearDatabase() {
try {
FileSystemUtils.deleteRecursively(Path.of(getDatabaseDirectory()));
Files.createDirectories(Paths.get(getDatabaseDirectory()));
}
}
- private void put(EiJob job, boolean storePersistently) {
+ private void doPut(EiJob job) {
allEiJobs.put(job.getId(), job);
jobsByType.put(job.getTypeId(), job.getId(), job);
jobsByOwner.put(job.getOwner(), job.getId(), job);
- if (storePersistently) {
- storeJobInFile(job);
- }
}
private void storeJobInFile(EiJob job) {
out.print(gson.toJson(job));
}
} catch (Exception e) {
- logger.warn("Could not save job: {} {}", job.getId(), e.getMessage());
+ logger.warn("Could not store job: {} {}", job.getId(), e.getMessage());
}
}
}
private String getDatabaseDirectory() {
- return config.getVardataDirectory() + "/database";
+ return config.getVardataDirectory() + "/database/eijobs";
}
}