User Tools

Site Tools


zalozeni:experiment:settingsservice

SettingsService

Nastaveni ohledne experimentu se mota jednak kolem ExperimentType (defaultni nastaveni) a ExperimentInstance (nastaveni specificke pro danou ExperimentInstance).

Kazda ExperimentInstance obdrzi pri vytvoreni defaultni nastaveni. Toto nastaveni ma ale moznost prepsat svym vlastnim. Stejne tak se k ExperimentInstance vazi nektera nastaveni, ktere neni mozno definovat jako defaultni (napr. pocatecni velikost vzorku, sub-status experimentu…).

Defaultni nastaveni zprostredkovava trida ExpTypeSettingsService, ktera jako klic pri ukladani do DB pouziva id konkretniho ExperimentType a Stringem pojmenovanou hodnotu. Nastaveni pro ExperimentInstance zprostredkovava trida ExpInstanceSettingsService, ktera jako klic pouziva id ExperimentInstance a Stringem pojmenovanou hodnotu. I kdyz obe SettingsServicy poskytuji stejne metody pro ukladani/nacitani, svoji implementaci se lisi.

Osvedcilo se mi organizovat tridy zprostredkovavajici nastaveni dle nasledneho UML

Konkreni implementace jednotlivych trid/interface nasleduje

Nejprve interface poskytujici metody spolecne pro obe nastaveni

public interface DokuwikiExperimentSettingsInterface {
	public double getStartT();
	public void setStartT(double temp);
}

Nyni trida pro nastaveni ExperimentInstance. V constructoru ji predavam defaultni nastaveni a pri volani metody getStartT(), pokud tato hodnota u dane ExperimentInstance neni nalezena, deleguji povinnost teto tridy na defaultni nastaveni. V pripade metody getInitSize() vyhodim vyjimku, ze hodnota nebyla nalezena.

public class DokuwikiExpInstanceSettignsService extends ExpInstanceSettingsService implements DokuwikiExperimentSettingsInterface {
 
	private final static String START_T = "startT";
	private final static String INIT_SIZE = "initSize";
 
	private DokuwikiExpTypeSettingsService defaultSS;
 
	public DokuwikiExpInstanceSettignsService(ExperimentInstance expInstance) {
		super(expInstance);
		defaultSS = (DokuwikiExpTypeSettingsService) expInstance.getExperimentType().getExpDefaultSettingsService();
	}
 
	public double getStartT() {
		try {
			return loadDoubleValue(START_T);
		} catch (ValueNotFoundException e) {
			return defaultSS.getStartT();
		}
	}
 
	public void setStartT(double temp) {
		saveDoubleValue(temp, START_T);
	}
 
	public double getInitSize() throws ValueNotFoundException {
		return loadDoubleValue(INIT_SIZE);
	}
 
	public void setInitSize(double size) {
		saveDoubleValue(size, INIT_SIZE);
	}
 
}

defaultni nastaveni. Pokud zadana hodnota neni nalezena, muzu si zde vybrat, zda vyhodim vyjimku nebo vratim nejakou konretni hodnotu (metoda getStartT()).

public class DokuwikiExpTypeSettingsService extends ExpTypeSettingsService implements DokuwikiExperimentSettingsInterface {
 
	private final static String START_T = "startT";
 
	public DokuwikiExpTypeSettingsService(ExperimentType expType) {
		super(expType);
	}
 
	public double getStartT() {
		try {
			return loadDoubleValue(START_T);
		} catch (ValueNotFoundException e) {
			return 300.;
		}
	}
 
	public void setStartT(double temp) {
		saveDoubleValue(temp, START_T);
	}
 
}
zalozeni/experiment/settingsservice.txt · Last modified: 2016/07/22 14:10 by jlochman