package io.vivarium.persistence; import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; import java.util.List; import java.util.Optional; import io.vivarium.util.UUID; public class PersistenceModule { private final Connection _databaseConnection; public PersistenceModule(Connection databaseConnection) { _databaseConnection = databaseConnection; } public boolean persist(PersistenceModel model) { try { model.persistToDatabase(_databaseConnection); return true; } catch (SQLException e) { e.printStackTrace(); return false; } } public boolean persist(Collection<PersistenceModel> models) { try { for (PersistenceModel model : models) { model.persistToDatabase(_databaseConnection); } return true; } catch (SQLException e) { e.printStackTrace(); return false; } } @SuppressWarnings("unchecked") public <T extends PersistenceModel> Optional<T> fetch(UUID id, Class<T> clazz) { try { if (clazz == ResourceModel.class) { return (Optional<T>) ResourceModel.getFromDatabase(_databaseConnection, id); } if (clazz == WorkerModel.class) { return (Optional<T>) WorkerModel.getFromDatabase(_databaseConnection, id); } if (clazz == JobModel.class) { return (Optional<T>) JobModel.getFromDatabase(_databaseConnection, id); } else { throw new IllegalArgumentException("Unknown class" + clazz); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } public List<JobModel> fetchJobsWithStatus(JobStatus status) { try { return JobModel.getFromDatabase(_databaseConnection, status); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } public List<WorkerModel> fetchAllWorkers() { try { return WorkerModel.getFromDatabase(_databaseConnection); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } public void updateJobStatuses() { try { JobModel.updateJobStatuses(_databaseConnection); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } }