/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.util;
import java.io.Serializable;
import org.apache.wicket.model.IChainingModel;
import org.apache.wicket.model.IModel;
import org.geoserver.catalog.MetadataMap;
/**
* A model which backs onto an underlying {@link MetadataMap}
* <p>
* The semantics of this model are similar to {@link #PropertyModel} except for that expressions map
* to keys of a map rather than java bean property names.
* </p>
* <p>
* Closely derived from {@link MapModel}
* </p>
*
* @author Andrea Aime - Geosolutions
* @author Justin Deoliveira, The Open Planning Project
*/
@SuppressWarnings("serial")
public class MetadataMapModel implements IModel, IChainingModel {
IModel model;
String expression;
Class<?> target;
public MetadataMapModel(MetadataMap map, String expression, Class<?> target) {
this(new MetadataMapWrappingModel(map), expression, target);
}
public MetadataMapModel(IModel model, String expression, Class<?> target) {
this.model = model;
this.expression = expression;
this.target = target;
}
@SuppressWarnings("unchecked")
public Object getObject() {
return ((MetadataMap) model.getObject()).get(expression, target);
}
@SuppressWarnings("unchecked")
public void setObject(Object object) {
((MetadataMap) model.getObject()).put(expression, (Serializable) object);
}
public void detach() {
model.detach();
}
private static class MetadataMapWrappingModel implements IModel {
private MetadataMap map;
public MetadataMapWrappingModel(MetadataMap m) {
map = m;
}
public Object getObject() {
return map;
}
public void setObject(Object arg0) {
}
public void detach() {
}
}
public IModel getChainedModel() {
return null;
}
public void setChainedModel(IModel arg0) {
}
}