/*
This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program; if not, see http://www.gnu.org/licenses or write to the Free
Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
*/
package com.servoy.base.query;
import java.util.ArrayList;
import java.util.List;
/**
* Base condition class for AndCondition and OrCondition.
*
* @author rgansevles
*
*/
public abstract class BaseAndOrCondition<C extends IBaseSQLCondition> implements IBaseSQLCondition
{
protected List<C> conditions;
public BaseAndOrCondition()
{
this.conditions = new ArrayList<C>();
}
public BaseAndOrCondition(List<C> conditions)
{
this.conditions = conditions;
}
public void addCondition(C condition)
{
if (condition == null)
{
return;
}
if (getClass() == condition.getClass())
{
conditions.addAll(((BaseAndOrCondition)condition).getConditions());
}
else
{
conditions.add(condition);
}
}
public List<C> getConditions()
{
return conditions;
}
public abstract C negate();
public abstract String getInfix();
@Override
public int hashCode()
{
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((this.conditions == null) ? 0 : this.conditions.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final BaseAndOrCondition other = (BaseAndOrCondition)obj;
if (this.conditions == null)
{
if (other.conditions != null) return false;
}
else if (!this.conditions.equals(other.conditions)) return false;
return true;
}
@Override
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append('(');
for (int i = 0; i < conditions.size(); i++)
{
if (i > 0)
{
sb.append(' ').append(getInfix().toUpperCase()).append(' ');
}
sb.append(conditions.get(i).toString());
}
return sb.append(')').toString();
}
}