package com.datascience.core.results;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
* User: artur
*/
public class ResultsFactory {
protected static interface Creator<T> {
T create();
}
public static abstract class DatumResultCreator<T>{
String clazz;
abstract T create();
public DatumResultCreator(){
clazz = this.getClass().toString();
}
}
public static class DatumResultFactoryCreator {
final static Map<String, Creator<DatumResultCreator>> FACTORY_CREATOR= new HashMap();
{
FACTORY_CREATOR.put("class com.datascience.core.results.ResultsFactory$DatumResultFactory", new Creator<DatumResultCreator>(){
@Override
public DatumResultCreator create() {
return new DatumResultFactory();
}
});
FACTORY_CREATOR.put("class com.datascience.core.results.ResultsFactory$DatumContResultFactory", new Creator<DatumResultCreator>(){
@Override
public DatumResultCreator create() {
return new DatumContResultFactory();
}
});
};
public DatumResultCreator create(String clazz){
return FACTORY_CREATOR.get(clazz).create();
}
}
public static class DatumResultFactory extends DatumResultCreator<DatumResult> {
public DatumResult create(){
return new DatumResult();
}
}
public static class DatumContResultFactory extends DatumResultCreator<DatumContResults> {
public DatumContResults create(){
return new DatumContResults();
}
}
/////////////////////////////////////////////////////////////////////////////////////////
public static abstract class WorkerResultCreator<T>{
String clazz;
abstract T create();
public WorkerResultCreator(){
clazz = this.getClass().toString();
}
}
public static class WorkerResultFactoryCreator {
final static Map<String, Creator<WorkerResultCreator>> FACTORY_CREATOR= new HashMap();
{
FACTORY_CREATOR.put("class com.datascience.core.results.ResultsFactory$WorkerResultNominalFactory", new Creator<WorkerResultCreator>(){
@Override
public WorkerResultCreator create() {
return new WorkerResultNominalFactory();
}
});
FACTORY_CREATOR.put("class com.datascience.core.results.ResultsFactory$WorkerContResultFactory", new Creator<WorkerResultCreator>(){
@Override
public WorkerResultCreator create() {
return new WorkerContResultFactory();
}
});
};
public WorkerResultCreator create(String clazz){
return FACTORY_CREATOR.get(clazz).create();
}
}
public static class WorkerResultNominalFactory extends WorkerResultCreator<WorkerResult> {
protected Collection<String> categories;
public void setCategories(Collection<String> categories){
this.categories = categories;
}
public WorkerResult create(){
return new WorkerResult(categories);
}
}
public static class WorkerContResultFactory extends WorkerResultCreator<WorkerContResults>{
public WorkerContResults create(){
return new WorkerContResults();
}
}
}