package org.geotools.filter.v2_0.bindings; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.TimeZone; import javax.xml.namespace.QName; import org.geotools.filter.v2_0.FES; import org.geotools.xml.InstanceComponent; import org.geotools.xml.SimpleBinding; import org.geotools.xml.impl.DatatypeConverterImpl; import org.opengis.filter.identity.Version; /** * Binding for FES 2.0 {@code VersionType} mapping to {@link Version} * */ public class VersionTypeBinding implements SimpleBinding { @Override public QName getTarget() { return FES.VersionType; } @Override public Class<?> getType() { return Version.class; } @Override public int getExecutionMode() { return OVERRIDE; } @Override public Object parse(InstanceComponent instance, Object value) throws Exception { final String content = (String) value; if(null == content || content.length() == 0){ return new Version(); } try { Version.Action versionAction = Version.Action.valueOf(content); return new Version(versionAction); } catch (IllegalArgumentException e) { try { Integer index = Integer.valueOf(content); return new Version(index); } catch (NumberFormatException nfe) { Calendar dateTime = DatatypeConverterImpl.getInstance().parseDateTime(content); return new Version(dateTime.getTime()); } } } @Override public String encode(Object object, String value) throws Exception { Version version = (Version) object; if(version.isEmpty()){ return null; } if(version.isDateTime()){ Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT")); cal.setTimeInMillis(version.getDateTime().getTime()); String dateTime = DatatypeConverterImpl.getInstance().printDateTime(cal); return dateTime; } if(version.isIndex()){ return String.valueOf(version.getIndex()); } if(version.isVersionAction()){ return String.valueOf(version.getVersionAction()); } throw new IllegalArgumentException("Empty version union"); } }