Search code examples
javagwtgxt

GXT How to Get Map property of BeanModel


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.


Solution

  • 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);
        }
    
    }