package com.datascience.core.base; import com.datascience.core.algorithms.INewDataObserver; import com.datascience.core.results.IResults; import com.datascience.scheduler.IScheduler; import com.google.gson.JsonObject; import java.util.HashMap; import java.util.Map; /** * User: artur * T - object class * U - data class * V - datum results class * W - worker results class */ public abstract class Project<T, U extends IData<T>, V, W> { protected Algorithm<T, U, V, W> algorithm; protected U data; protected IResults<T, V, W> results; protected JsonObject initializationData; protected IScheduler<T> scheduler; public Project(Algorithm<T, U, V, W> alg, U data, IResults<T, V, W> results){ this.algorithm = alg; this.data = data; this.results = results; } public U getData(){ return data; } public IResults<T, V, W> getResults(){ return results; } public W getWorkerResults(Worker worker){ return results.getWorkerResult(worker); } public V getObjectResults(LObject<T> object){ return results.getDatumResult(object); } public Algorithm<T, U, V, W> getAlgorithm(){ return algorithm; } public void setInitializationData(JsonObject jo){ initializationData = jo; } public void setData(U data){ this.data = data; if (algorithm instanceof INewDataObserver) { this.data.addNewUpdatableAlgorithm((INewDataObserver) algorithm); } algorithm.setData(this.data); } public void setResults(IResults<T, V, W> results){ this.results = results; algorithm.setResults(results); } public JsonObject getInitializationData(){ return initializationData; } public void setScheduler(IScheduler<T> scheduler){ this.scheduler = scheduler; this.scheduler.registerOnProject(this); this.scheduler.update(); } public IScheduler<T> getScheduler(){ return scheduler; } public abstract String getKind(); public Map<String, Object> getInfo() { Map<String, Object> ret = new HashMap<String, Object>(); ret.put("assigns", data.getAssigns().size()); ret.put("objects", data.getObjects().size()); ret.put("goldObjects", data.getGoldObjects().size()); ret.put("workers", data.getWorkers().size()); ret.put("initializationData", getInitializationData()); ret.putAll(getAdditionalInfo()); return ret; } protected abstract Map<String, Object> getAdditionalInfo(); }