package com.datascience.core.base;
import com.datascience.core.algorithms.INewDataObserver;
import java.util.Collection;
/**
* @Author: konrad
*/
public interface IData<T> {
void addWorker(Worker worker);
Worker getWorker(String workerId);
Worker getOrCreateWorker(String workerId);
Collection<Worker> getWorkers();
/** Should check whether object is gold or evaluation one */
void addObject(LObject<T> object);
LObject<T> getObject(String objectId);
LObject<T> getOrCreateObject(String objectId);
Collection<LObject<T>> getObjects();
LObject<T> getGoldObject(String objectId);
Collection<LObject<T>> getGoldObjects();
void markObjectAsGold(LObject<T> object, T label);
LObject<T> getEvaluationObject(String objectId);
Collection<LObject<T>> getEvaluationObjects();
void addAssign(AssignedLabel<T> assign);
Collection<AssignedLabel<T>> getAssigns();
/** This assumes that assigns are compared only on object and worker */
boolean hasAssign(LObject<T> object, Worker worker);
Collection<AssignedLabel<T>> getWorkerAssigns(Worker worker);
Collection<AssignedLabel<T>> getAssignsForObject(LObject<T> lObject);
void addNewUpdatableAlgorithm(INewDataObserver<T> updatableAlgorithm);
}