package com.turtleplayer.persistance.framework.query;
import com.turtleplayer.persistance.framework.filter.Filter;
import com.turtleplayer.persistance.framework.filter.FilterVisitor;
import com.turtleplayer.persistance.framework.sort.Order;
import com.turtleplayer.persistance.framework.sort.OrderVisitor;
/**
* TURTLE PLAYER
* <p/>
* Licensed under MIT & GPL
* <p/>
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
* <p/>
* More Information @ www.turtle-player.co.uk
*
* @author Simon Honegger (Hoene84)
*/
public abstract class Query<QUERY, WHERE, ORDER, RESULT, CURSOR, TARGET, PROJECTION> implements FilterVisitor<PROJECTION, WHERE>, OperationRead<QUERY, CURSOR, RESULT>, OrderVisitor<PROJECTION, ORDER>
{
private final Filter<? super PROJECTION> filter;
private final Order<? super PROJECTION> order;
protected Query()
{
this.filter = null;
order = null;
}
protected Query(Filter<? super PROJECTION> filter)
{
this.filter = filter;
order = null;
}
protected Query(Order<? super PROJECTION> order)
{
this.order = order;
this.filter = null;
}
public Query(Filter<? super PROJECTION> filter, Order<? super PROJECTION> order)
{
this.filter = filter;
this.order = order;
}
/**
* @return can be null
*/
public Filter<? super PROJECTION> getFilter()
{
return filter;
}
/**
* @return can be null
*/
public Order<? super PROJECTION> getOrder()
{
return order;
}
}