package br.gov.frameworkdemoiselle.behave.internal.dataprovider;
import java.util.Hashtable;
import br.gov.frameworkdemoiselle.behave.config.BehaveConfig;
import br.gov.frameworkdemoiselle.behave.dataprovider.DataProvider;
import br.gov.frameworkdemoiselle.behave.dataprovider.DatasetLoader;
import br.gov.frameworkdemoiselle.behave.dataprovider.DatasetProvider;
import br.gov.frameworkdemoiselle.behave.dataprovider.dto.DataItem;
import br.gov.frameworkdemoiselle.behave.dataprovider.dto.DataRecord;
import br.gov.frameworkdemoiselle.behave.dataprovider.dto.Dataset;
import br.gov.frameworkdemoiselle.behave.exception.BehaveException;
import br.gov.frameworkdemoiselle.behave.internal.spi.InjectionManager;
import br.gov.frameworkdemoiselle.behave.message.BehaveMessage;
/**
*
* @author SERPRO
*
*/
public class DefaultDatasetProvider implements DatasetProvider {
private static DatasetLoader datasetLoader = (DatasetLoader) InjectionManager.getInstance().getInstanceDependecy(DatasetLoader.class);
private static DataProvider dataProvider = (DataProvider) InjectionManager.getInstance().getInstanceDependecy(DataProvider.class);
private static Hashtable<String, Dataset> dataSets;
private static BehaveMessage bm = new BehaveMessage(BehaveConfig.MESSAGEBUNDLE);
public DefaultDatasetProvider() {
super();
dataSets = new Hashtable<String, Dataset>();
}
public void load(String typeName, String source) {
Dataset dataSet = datasetLoader.load(source);
put(typeName, dataSet);
}
public void put(String typeName, Dataset dataSet) {
dataSets.put(typeName, dataSet);
}
public void setDataProviderCurrentRecord(String dataSetType, String recordId){
DataRecord dataRecord = findDataRecord(dataSetType, recordId);
for(DataItem dataItem : dataRecord.getDataItems()){
dataProvider.put(dataItem.getKey(), dataItem.getValue());
}
}
private DataRecord findDataRecord(String dataSetType, String recordId) {
int dataRecordIndex = dataSets.get(dataSetType).getDataRecords().indexOf(new DataRecord(recordId));
if(dataRecordIndex<0){
throw new BehaveException(bm.getString("exception-record-id-not-found", recordId, dataSetType));
}
return dataSets.get(dataSetType).getDataRecords().get(dataRecordIndex);
}
}