package org.geotools.filter.v2_0.bindings; import java.util.Date; import javax.xml.namespace.QName; import org.geotools.filter.v2_0.FES; import org.geotools.xml.AbstractComplexBinding; import org.geotools.xml.ElementInstance; import org.geotools.xml.Node; import org.opengis.filter.FilterFactory; import org.opengis.filter.identity.FeatureId; import org.opengis.filter.identity.ResourceId; import org.opengis.filter.identity.Version; public class ResourceIdTypeBinding extends AbstractComplexBinding { FilterFactory factory; public ResourceIdTypeBinding(FilterFactory factory) { this.factory = factory; } /** * @return {@code FeatureId.class}, meant to catch {@code ResourceId.class} too */ public Class<?> getType() { return FeatureId.class; } public QName getTarget() { return FES.ResourceIdType; } @Override public Object parse(ElementInstance instance, Node node, Object value) throws Exception { final String rid = (String) node.getAttributeValue("rid"); //final String previousRid = (String) node.getAttributeValue("previousRid"); final Version version = (Version) node.getAttributeValue("version"); final Date startTime = (Date) node.getAttributeValue("startDate"); final Date endTime = (Date) node.getAttributeValue("endDate"); String fid; String featureVersion = null; int idx = rid.indexOf(ResourceId.VERSION_SEPARATOR); if (idx == -1) { fid = rid; } else { fid = rid.substring(0, idx); featureVersion = rid.substring(idx + 1); } ResourceId resourceId; if (startTime != null || endTime != null) { resourceId = factory.resourceId(fid, startTime, endTime); } else { resourceId = factory.resourceId(fid, featureVersion, version); } //resourceId.setPreviousRid(previousRid); return resourceId; } @Override public Object getProperty(Object object, QName name) throws Exception { if (object == null) { return null; } final FeatureId fid = (FeatureId) object; final String localName = name.getLocalPart(); if ("id".equals(localName)) { return fid.getID(); } if ("rid".equals(localName)) { return fid.getRid(); } if ("previousRid".equals(localName)) { return fid.getPreviousRid(); } if ("version".equals(localName) && fid instanceof ResourceId) { return ((ResourceId) fid).getVersion(); } if ("startDate".equals(localName) && fid instanceof ResourceId) { return ((ResourceId) fid).getStartTime(); } if ("endDate".equals(localName) && fid instanceof ResourceId) { return ((ResourceId) fid).getEndTime(); } return null; } }