// Path: src/org/dmfs/dav/FilterBase.java
// public abstract class FilterBase
// {
// 	/**
// 	 * Returns the {@link ElementDescriptor} of this filter. Filters can use this to serialize child elements (which are also filters) in a generic manner.
// 	 * 
// 	 * @return An {@link ElementDescriptor}.
// 	 */
// 	public abstract ElementDescriptor<? extends FilterBase> getElementDescriptor();
// }


import java.io.IOException;
import org.dmfs.dav.FilterBase;
import org.dmfs.rfc5545.DateTime;
import org.dmfs.xmlobjects.ElementDescriptor;
import org.dmfs.xmlobjects.QualifiedName;
import org.dmfs.xmlobjects.builder.AbstractObjectBuilder;
import org.dmfs.xmlobjects.serializer.SerializerContext;
import org.dmfs.xmlobjects.serializer.SerializerException;
import org.dmfs.xmlobjects.serializer.XmlObjectSerializer.IXmlAttributeWriter;

		if (start != null)
		{
			if (start.isFloating())
			{
				throw new IllegalArgumentException("start date must have absolute time");
			}
			this.start = new DateTime(DateTime.GREGORIAN_CALENDAR_SCALE, DateTime.UTC, start);
		}
		else
		{
			this.start = null;
		}

		if (end != null)
		{
			if (end.isFloating())
			{
				throw new IllegalArgumentException("end date must have absolute time");
			}
			this.end = new DateTime(DateTime.GREGORIAN_CALENDAR_SCALE, DateTime.UTC, end);
		}
		else
		{
			this.end = null;
		}
	}


	@Override
// Path: src/org/dmfs/dav/FilterBase.java
// public abstract class FilterBase
// {
// 	/**
// 	 * Returns the {@link ElementDescriptor} of this filter. Filters can use this to serialize child elements (which are also filters) in a generic manner.
// 	 * 
// 	 * @return An {@link ElementDescriptor}.
// 	 */
// 	public abstract ElementDescriptor<? extends FilterBase> getElementDescriptor();
// }


// Path: src/org/dmfs/dav/rfc4791/filter/TimeRange.java
import java.io.IOException;
import org.dmfs.dav.FilterBase;
import org.dmfs.rfc5545.DateTime;
import org.dmfs.xmlobjects.ElementDescriptor;
import org.dmfs.xmlobjects.QualifiedName;
import org.dmfs.xmlobjects.builder.AbstractObjectBuilder;
import org.dmfs.xmlobjects.serializer.SerializerContext;
import org.dmfs.xmlobjects.serializer.SerializerException;
import org.dmfs.xmlobjects.serializer.XmlObjectSerializer.IXmlAttributeWriter;


		if (start != null)
		{
			if (start.isFloating())
			{
				throw new IllegalArgumentException("start date must have absolute time");
			}
			this.start = new DateTime(DateTime.GREGORIAN_CALENDAR_SCALE, DateTime.UTC, start);
		}
		else
		{
			this.start = null;
		}

		if (end != null)
		{
			if (end.isFloating())
			{
				throw new IllegalArgumentException("end date must have absolute time");
			}
			this.end = new DateTime(DateTime.GREGORIAN_CALENDAR_SCALE, DateTime.UTC, end);
		}
		else
		{
			this.end = null;
		}
	}


	@Override
	public ElementDescriptor<? extends FilterBase> getElementDescriptor()