// 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.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;
import org.dmfs.xmlobjects.serializer.XmlObjectSerializer.IXmlChildWriter;


	/**
	 * Creates a filter for a spcecific component with subfilters and a time range filter to match.
	 * 
	 * @param name
	 *            the name of the component to match, must not be empty.
	 * @param timeRange
	 *            the {@link TimeRange} to match. May be <code>null</code>.
	 * @param filters
	 *            Optional subfilters to match.
	 */
	public CompFilter(String name, TimeRange timeRange, StructuredFilter... filters)
	{
		if (name == null)
		{
			throw new NullPointerException("the component name of a comp filter must not be null");
		}
		if (name.length() == 0)
		{
			throw new IllegalArgumentException("the component name of a comp filter must not be empty");
		}
		this.name = name;
		this.isNotDefined = false;
		this.timeRange = timeRange;
		this.filters = filters;
	}


	@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/CompFilter.java
import java.io.IOException;
import org.dmfs.dav.FilterBase;
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;
import org.dmfs.xmlobjects.serializer.XmlObjectSerializer.IXmlChildWriter;



	/**
	 * Creates a filter for a spcecific component with subfilters and a time range filter to match.
	 * 
	 * @param name
	 *            the name of the component to match, must not be empty.
	 * @param timeRange
	 *            the {@link TimeRange} to match. May be <code>null</code>.
	 * @param filters
	 *            Optional subfilters to match.
	 */
	public CompFilter(String name, TimeRange timeRange, StructuredFilter... filters)
	{
		if (name == null)
		{
			throw new NullPointerException("the component name of a comp filter must not be null");
		}
		if (name.length() == 0)
		{
			throw new IllegalArgumentException("the component name of a comp filter must not be empty");
		}
		this.name = name;
		this.isNotDefined = false;
		this.timeRange = timeRange;
		this.filters = filters;
	}


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