package com.datascience.datastoring.transforms;
import com.datascience.core.base.AssignedLabel;
import com.datascience.core.base.ContValue;
import com.datascience.core.base.LObject;
import com.datascience.core.base.Worker;
import com.datascience.datastoring.datamodels.memory.IncrementalNominalModel;
import com.datascience.datastoring.datamodels.memory.NominalModel;
import com.datascience.core.results.*;
import com.datascience.utils.ITransformation;
import com.google.gson.JsonObject;
import java.lang.reflect.Type;
import java.util.Collection;
/**
* Wrapper to make sure that we won't create transforms over and over.
* @Author: konrad
*/
public class SingletonsCoreTransformsFactory<V> implements ICoreTransformsFactory<V> {
protected ICoreTransformsFactory<V> inner;
protected ITransformation<JsonObject, V> settingsTransform;
protected ITransformation<String, V> kindTransform;
protected ITransformation<Collection<AssignedLabel<String>>, V> nominalAssignsTransformation;
protected ITransformation<Collection<LObject<String>>, V> nominalObjectsTransformation;
protected ITransformation<NominalModel, V> nominalModelTransformation;
protected ITransformation<IncrementalNominalModel, V> incrementalNominalModelVITransformation;
protected ITransformation<Collection<AssignedLabel<ContValue>>, V> contAssignsTransformation;
protected ITransformation<Collection<LObject<ContValue>>, V> contObjectsTransformation;
protected ITransformation<Collection<Worker>, V> workersTransformation;
protected ITransformation<DatumContResults, V> datumContResultsTransformation;
protected ITransformation<WorkerContResults, V> workerContResultsTransformation;
protected ITransformation<DatumResult, V> datumStringResultsTransformation;
public SingletonsCoreTransformsFactory(ICoreTransformsFactory<V> inner){
this.inner = inner;
initialize();
}
protected void initialize(){
settingsTransform = inner.createSettingsTransform();
kindTransform = inner.createKindTransform();
nominalAssignsTransformation = inner.createNominalAssignsTransformation();
nominalObjectsTransformation = inner.createNominalObjectsTransformation();
nominalModelTransformation = inner.createNominalModelTransformation();
incrementalNominalModelVITransformation = inner.createIncrementalNominalModelTransformation();
contAssignsTransformation = inner.createContAssignsTransformation();
contObjectsTransformation = inner.createContObjectsTransformation();
workersTransformation = inner.createWorkersTransformation();
datumContResultsTransformation = inner.createDatumContResultsTransformation();
workerContResultsTransformation = inner.createWorkerContResultsTransformation();
datumStringResultsTransformation = inner.createDatumStringResultsTransformation();
}
@Override
public ITransformation<JsonObject, V> createSettingsTransform() {
return settingsTransform;
}
@Override
public ITransformation<String, V> createKindTransform() {
return kindTransform;
}
@Override
public ITransformation<Collection<AssignedLabel<String>>, V> createNominalAssignsTransformation() {
return nominalAssignsTransformation;
}
@Override
public ITransformation<Collection<LObject<String>>, V> createNominalObjectsTransformation() {
return nominalObjectsTransformation;
}
@Override
public ITransformation<NominalModel, V> createNominalModelTransformation() {
return nominalModelTransformation;
}
@Override
public ITransformation<IncrementalNominalModel, V> createIncrementalNominalModelTransformation() {
return incrementalNominalModelVITransformation;
}
@Override
public ITransformation<Collection<AssignedLabel<ContValue>>, V> createContAssignsTransformation() {
return contAssignsTransformation;
}
@Override
public ITransformation<Collection<LObject<ContValue>>, V> createContObjectsTransformation() {
return contObjectsTransformation;
}
@Override
public ITransformation<Collection<Worker>, V> createWorkersTransformation() {
return workersTransformation;
}
@Override
public ITransformation<DatumContResults, V> createDatumContResultsTransformation() {
return datumContResultsTransformation;
}
@Override
public ITransformation<WorkerContResults, V> createWorkerContResultsTransformation() {
return workerContResultsTransformation;
}
@Override
public ITransformation<DatumResult, V> createDatumStringResultsTransformation() {
return datumStringResultsTransformation;
}
@Override
public ITransformation<WorkerResult, V> createWorkerStringResultsTransformation(ResultsFactory.WorkerResultNominalFactory wrnf) {
return inner.createWorkerStringResultsTransformation(wrnf);
}
@Override
public String getID() {
return inner.getID();
}
}