I have a DTO, which looks a bit like this:
class Response {
Long id;
Locale locale;
Map<Integer,QuestionResponse> questionResponses=new HashMap<Integer,QuestionResponse>();
...
}
But I'm having trouble mapping a ColumnConfig
to the value
property of a questionResponses
map entry. For example, I want something like this:
beanModel.get("questionResponses[15].value")
I can see from the get method in BeanModelData
that I should be able to get a property of a Map but can't figure out the syntax. Any help would be really appreciated.
One solution is to use a DataReader to map your Response to a new Model
final ListLoader<BaseListLoadResult<BeanModel>> loader = new BaseListLoader<BaseListLoadResult<BeanModel>>(
proxy, new MyBeanModelReader());
loader.load();
new ListStore<BeanModel>(loader); //TODO
public class MyBeanModelReader implements DataReader<List<BeanModel>> {
private BeanModelReader reader = new BeanModelReader();
public boolean isFactoryForEachBean() {
return reader.isFactoryForEachBean();
}
public List<BeanModel> read(Object loadConfig, Object data) {
List<BeanModel> newModelsData = new ArrayList<BeanModel>();
ListLoadResult<ModelData> models = reader.read(loadConfig, data);
List<ModelData> modelsData = models.getData();
for (ModelData modelData : modelsData) {
BeanModel model = (BeanModel) modelData;
Response response = (Response) model.getBean();
model.set("id", response.getId());
model.set("locale", response.getLocale());
model.set("QuestionResponse15", response.getQuestionResponse().get(...)); //retrieve the QR you want
newModelsData.add(model);
}
return newModelsData;
}
public void setFactoryForEachBean(boolean factoryForEachBean) {
reader.setFactoryForEachBean(factoryForEachBean);
}
}