/*******************************************************************************
 * Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se).
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser Public License v3
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/lgpl-3.0-standalone.html
 ******************************************************************************/
package se.unlogic.standardutils.dao;

import java.util.Collection;


public class QueryParameter<BeanType,ColumnType> {

   private final ColumnType value;
   private final Collection<ColumnType> values;
   private Column<BeanType, ? super ColumnType> column;
   private String operator = QueryOperators.EQUALS.getOperator();

   QueryParameter(Column<BeanType,? super ColumnType> column, ColumnType value) {
      super();
      this.column = column;
      this.value = value;
      this.values = null;
   }

   QueryParameter(Column<BeanType,? super ColumnType> column, ColumnType value, String operator) {
      super();
      this.column = column;
      this.value = value;
      this.operator = operator;
      this.values = null;
   }

   QueryParameter(Column<BeanType,? super ColumnType> column, String operator) {
      super();
      this.column = column;
      this.operator = operator;
      this.value = null;
      this.values = null;
   }

   QueryParameter(Column<BeanType, ? super ColumnType> column, Collection<ColumnType> values, String operator) {

      this.column = column;
      this.operator = operator;
      this.value = null;
      this.values = values;
   }

   public ColumnType getValue() {
      return value;
   }

   public Collection<ColumnType> getValues() {
      return values;
   }

   public Column<BeanType,? super ColumnType> getColumn() {
      return column;
   }

   public String getOperator() {
      return operator;
   }

   public boolean hasValues(){

      return this.value != null || this.values != null;
   }

   public boolean hasMultipleValues(){

      return this.values != null;
   }
}
