package com.turtleplayer.persistance.framework.sort;
import java.util.*;
/**
* 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 class OrderSet<PROJECTION> implements Order<PROJECTION>
{
private final List<Order<? super PROJECTION>> orders = new ArrayList<Order<? super PROJECTION>>();
public OrderSet(Order<? super PROJECTION>... order)
{
Collections.addAll(orders, order);
}
public OrderSet(List<? extends Order<? super PROJECTION>> orders)
{
this.orders.addAll(orders);
}
/**
* @return never null, Set can be empty
*/
public List<Order<? super PROJECTION>> getOrders()
{
return orders;
}
public <R> R accept(OrderVisitor<? extends PROJECTION, R> visitor)
{
return visitor.visit(this);
}
public OrderSet<? super PROJECTION> removeLast()
{
if(orders.size() > 1)
{
return new OrderSet<PROJECTION>(orders.subList(0, orders.size()-1));
}
else
{
return new OrderSet<PROJECTION>(new ArrayList<Order<? super PROJECTION>>());
}
}
public boolean isEmpty()
{
return orders.isEmpty();
}
@Override
public String toString()
{
return Arrays.deepToString(orders.toArray());
}
}