/*
* Copyright (C) 2012-2016 The Android Money Manager Ex Project Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.money.manager.ex.database;
import android.database.DatabaseUtils;
import android.text.TextUtils;
import java.util.ArrayList;
import info.javaperformance.money.Money;
/**
* A new database query helper. Uses direct statements, not arguments.
*
* Created by Alen Siljak on 08/09/2015.
*/
public class WhereStatementGenerator {
public WhereStatementGenerator() {
this.statements = new ArrayList<>();
}
private ArrayList<String> statements;
public void addStatement(String statement) {
this.statements.add(statement);
}
public void addStatement(String field, String operator, Integer argument) {
this.statements.add(getStatement(field, operator, argument));
}
public void addStatement(String field, String operator, Money argument) {
this.statements.add(getStatement(field, operator, argument));
}
public void addStatement(String field, String operator, Object argument) {
this.statements.add(getStatement(field, operator, argument));
}
public void clear() {
this.statements.clear();
}
public String getWhere() {
String where = "";
for (String statement : this.statements) {
where = DatabaseUtils.concatenateWhere(where, statement);
}
return where;
}
public String getStatement(String field, String operator, Integer argument) {
StringBuilder sb = new StringBuilder();
sb.append(field);
sb.append(operator);
sb.append(argument);
return sb.toString();
}
public String getStatement(String field, String operator, Money argument) {
StringBuilder sb = new StringBuilder();
sb.append(field);
sb.append(operator);
sb.append(argument);
return sb.toString();
}
public String getStatement(String field, String operator, Object argument) {
StringBuilder sb = new StringBuilder();
sb.append(field);
sb.append(" ");
sb.append(operator);
sb.append(" ");
if (operator.equalsIgnoreCase("in")) {
sb.append(argument);
} else {
DatabaseUtils.appendValueToSql(sb, argument);
}
return sb.toString();
}
public String concatenateOr(String a, String b) {
if (TextUtils.isEmpty(a)) {
return b;
}
if (TextUtils.isEmpty(b)) {
return a;
}
return "( (" + a + ") OR (" + b + ") )";
}
}