package com.c2c.style; import org.geotools.factory.Hints; import org.geotools.filter.expression.PropertyAccessor; import org.geotools.filter.expression.PropertyAccessorFactory; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; /** * User: jeichar * Date: Jul 9, 2010 * Time: 1:36:21 PM */ public class OlapPropertyAccessorFactory implements PropertyAccessorFactory { private static final OlapPropertyAccessor ACCESSOR = new OlapPropertyAccessor(); @Override public PropertyAccessor createPropertyAccessor(Class type, String xpath, Class target, Hints hints) { if(canHandle(type,xpath)) { return ACCESSOR; } return null; // not a olap property } static boolean canHandle(Class type, String xpath) { return xpath != null && (SimpleFeature.class.isAssignableFrom(type) || SimpleFeatureType.class.isAssignableFrom(type)) && xpath.startsWith("{[") && xpath.endsWith("]}"); } private static class OlapPropertyAccessor implements PropertyAccessor { @Override public boolean canHandle(Object obj, String xpath, Class target) { return OlapPropertyAccessorFactory.canHandle(obj.getClass(), xpath); //To change body of implemented methods use File | Settings | File Templates. } @Override public Object get(Object obj, String xpath, Class target) throws IllegalArgumentException { return ((SimpleFeature)obj).getAttribute(xpath); } @Override public void set(Object object, String xpath, Object value, Class target) throws IllegalArgumentException { ((SimpleFeature)object).setAttribute(xpath,value); } } }