/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.web.util; import java.util.Map; import org.apache.wicket.model.IChainingModel; import org.apache.wicket.model.IModel; /** * A model which backs onto an underlying map. * <p> * The semantics of this model are similar to {@link org.apache.wicket.model.PropertyModel} except for * that expressions map to keys of a map rather than java bean property names. * </p> * @author Justin Deoliveira, The Open Planning Project * */ public class MapModel<T> implements IModel<T>, IChainingModel<T> { private static final long serialVersionUID = 3122822158252376260L; IModel<? extends Map<String,?>> model; String expression; public MapModel( Map<String,? extends Object> map, String expression ) { this(new MapWrappingModel(map), expression); } public MapModel(IModel<? extends Map<String,? extends Object>> model, String expression){ this.model = model; this.expression = expression; } @SuppressWarnings("unchecked") public T getObject() { return (T) model.getObject().get(expression); } @SuppressWarnings("unchecked") public void setObject(T val) { ((Map<String, Object>) model.getObject()).put(expression, val); } public void detach() { model.detach(); } private static class MapWrappingModel implements IModel<Map<String,?>>{ private static final long serialVersionUID = -1474150801738143281L; private Map<String,?> myMap; public MapWrappingModel(Map<String,?> m){ myMap = m; } public Map<String, ?> getObject() { return myMap; } public void setObject(Map<String,?> arg0) { } public void detach() { } } public IModel<?> getChainedModel() { return null; } public void setChainedModel(IModel<?> arg0) { } }