package com.datascience.datastoring.datamodels.full; import java.lang.reflect.Type; import java.sql.SQLException; import java.util.Collection; import com.datascience.core.base.ContValue; import com.datascience.core.base.IData; import com.datascience.core.base.Project; import com.datascience.datastoring.datamodels.memory.*; import com.datascience.datastoring.datamodels.memory.IncrementalNominalModel; import com.datascience.datastoring.adapters.db.DBFullAdapter; import com.datascience.core.nominal.INominalData; import com.datascience.core.results.*; import com.datascience.datastoring.jobs.BaseJobStorage; import com.datascience.serialization.ISerializer; import com.datascience.datastoring.jobs.Job; import com.google.gson.reflect.TypeToken; /** * @author konrad */ public class DBJobStorage extends BaseJobStorage { private DBFullAdapter adapter; private ISerializer serializer; public DBJobStorage(DBFullAdapter adapter, ISerializer serializer) throws SQLException{ super(adapter, serializer); this.adapter = adapter; this.serializer = serializer; } @Override public <T extends Project> Job<T> get(String id) throws SQLException { String[] params = adapter.get(id); if (params != null) return jobFactory.create(params[0], params[1], params[2], params[3], params[4], id); return null; } @Override public void add(Job job) throws SQLException{ adapter.add(new String[]{ job.getId(), job.getProject().getKind(), serializer.serialize(job.getProject().getData()), serializer.serialize(job.getProject().getResults()), job.getProject().getInitializationData().toString(), serializer.serialize(job.getProject().getAlgorithm().getModel()) }); } @Override public void remove(Job job) throws Exception { adapter.remove(job.getId()); } @Override public void flush(Job job) throws Exception { add(job); } @Override protected void finalize() throws Throwable { super.finalize(); // adapter.close(); } @Override public void test() throws Exception{ adapter.test(); } @Override public IData<ContValue> getContData(String id) { return new InMemoryData<ContValue>(); } @Override public INominalData getNominalData(String id) { return new InMemoryNominalData(); } @Override public IResults getContResults(String id) { return new InMemoryResults<ContValue, DatumContResults, WorkerContResults>( new ResultsFactory.DatumContResultFactory(), new ResultsFactory.WorkerContResultFactory()); } @Override public IResults getNominalResults(String id, Collection<String> categories){ ResultsFactory.WorkerResultNominalFactory wrnf = new ResultsFactory.WorkerResultNominalFactory(); wrnf.setCategories(categories); return new InMemoryResults<String, DatumResult, WorkerResult>(new ResultsFactory.DatumResultFactory(), wrnf); } @Override public NominalModel getNominalModel(String id, Type t){ if (t.equals(new TypeToken<NominalModel>(){}.getType())) return new NominalModel(); else return new IncrementalNominalModel(); } @Override public String toString(){ return "DB_FULL"; } }