package ufit.DatabaseUtilities;
import java.util.ArrayList;
import android.util.Log;
public class MyQueryHelper {
private String filter1; //type
private String filter2; //group
private ArrayList<String> filter3; //equipList
private String filter4; //skill level
private static final String col_x = "type";
private static final String col_y = "muscle_int";
private static final String col_z = "equipment";
private static final String col_s = "skill_level";
private static final String col_id = "_id";
private ArrayList<Integer> storedExerciseIDs;
private ArrayList<Integer> muscleAreas; //building support for multiple muscle Groups
MyQueryHelper(String f1, String f2, String[] f3, String f4)
{
this.setFilter1(f1);
this.setFilter2(f2);
ArrayList<String> temp = new ArrayList<String>();
int size = f3.length;
System.out.println(size);
int i = 0;
while(i < size) //builds array list for later functions;
{
temp.add(f3[i]);
}
this.setFilter3(temp);
this.setFilter4(f4);
}
//this is the constructor most should be using
MyQueryHelper(String f1, ArrayList<Integer> f2, ArrayList<String> f3, String f4)
{
this.setFilter1(f1);
this.setMuscleAreas(f2);
this.setFilter3(f3);
String temp;
if(f4.equalsIgnoreCase("3"))
{
temp = "('1','2','3')";
}
else if(f4.equalsIgnoreCase("2"))
{
temp = "('1','2')";
}
else if(f4.equalsIgnoreCase("1"))
{
temp = "('1')";
}
else
{
temp = "('1')";
Log.wtf("skillLevel out of range", "SkillLevel was set to:" + f4);
}
this.setFilter4(temp);
}
MyQueryHelper(int f1, int f2, ArrayList<String> f3, int f4)
{
String temp;
temp = Integer.toString(f1);
this.setFilter1(temp);
temp = Integer.toString(f2);
this.setFilter2(temp);
this.setFilter3(f3);
if(f4 == 3)
{
temp = "('1','2','3')";
}
else if(f4 == 2)
{
temp = "('1','2')";
}
else if(f4 ==1)
{
temp = "('1')";
}
else
{
temp = "('1')";
Log.wtf("skillLevel out of range", "SkillLevel was set to:" + f4);
}
this.setFilter4(temp);
}
MyQueryHelper(int f1, int f2, String[] f3, int f4)
{
String temp;
temp = Integer.toString(f1);
this.setFilter1(temp);
temp = Integer.toString(f2);
this.setFilter2(temp);
ArrayList<String> tempArr = new ArrayList<String>();
int size = f3.length;
System.out.println(size);
int i = 0;
while(i < size) //builds array list for later functions;
{
tempArr.add(f3[i]);
}
this.setFilter3(tempArr);
if(f4 == 3)
{
temp = "('1','2','3')";
}
else if(f4 == 2)
{
temp = "('1','2')";
}
else if(f4 ==1)
{
temp = "('1')";
}
else
{
temp = "('1')";
Log.wtf("skillLevel out of range", "SkillLevel was set to:" + f4);
}
this.setFilter4(temp);
}
MyQueryHelper(long f1, long f2, ArrayList<String> f3, long f4)
{
String temp;
temp = Long.toString(f1);
this.setFilter1(temp);
temp = Long.toString(f2);
this.setFilter2(temp);
this.setFilter3(f3);
if(f4 == 3)
{
temp = "('1','2','3')";
}
else if(f4 == 2)
{
temp = "('1','2')";
}
else if(f4 ==1)
{
temp = "('1')";
}
else
{
temp = "('1')";
Log.wtf("skillLevel out of range", "SkillLevel was set to:" + f4);
}
this.setFilter4(temp);
}
MyQueryHelper(long f1, long f2, String[] f3, long f4)
{
String temp;
temp = Long.toString(f1);
this.setFilter1(temp);
temp = Long.toString(f2);
this.setFilter2(temp);
ArrayList<String> tempArr = new ArrayList<String>();
int size = f3.length;
System.out.println(size);
int i = 0;
while(i < size) //builds array list for later functions;
{
tempArr.add(f3[i]);
}
this.setFilter3(tempArr);
if(f4 == 3)
{
temp = "('1','2','3')";
}
else if(f4 == 2)
{
temp = "('1','2')";
}
else if(f4 ==1)
{
temp = "('1')";
}
else
{
temp = "('1')";
Log.wtf("skillLevel out of range", "SkillLevel was set to:" + f4);
}
this.setFilter4(temp);
}
MyQueryHelper(int f1, ArrayList<Integer> f2, ArrayList<String> f3, int f4)
{
this.setFilter1(Integer.toString(f1));
this.setMuscleAreas(f2);
this.setFilter3(f3);
this.setFilter4(Integer.toString(f4));
}
MyQueryHelper(ArrayList<Integer> storedIDs)
{
this.storedExerciseIDs = storedIDs;
}
public void setFilter3(ArrayList<String> filter3) {
this.filter3 = filter3;
}
public ArrayList<String> getFilter3() {
return filter3;
}
public void setFilter1(String f1) {
//adding a check for general option (type =3) to prevent the main query from returning nothing
// this will cause the else query to return no results instead...preference?
String temp;
if(f1.equalsIgnoreCase("3"))
{
temp = "1','2";
}
else
{
temp = f1;
}
this.filter1 = temp;
}
public String getFilter1() {
return filter1;
}
public void setFilter2(String filter2) {
this.filter2 = filter2;
}
public String getFilter2() {
return filter2;
}
public String buildMainWhere()
{
ArrayList<String> temp = this.getFilter3();
ArrayList<Integer> Areas = this.getMuscleAreas();
int size = temp.size();
int sizeAreas = Areas.size();
temp.add("None"); // if not, search the database for exercises with "None" for required equip
size = temp.size(); //update to new size
//if we make them click something this isn't needed and there's probably a better way to implement it lol;
if(sizeAreas <= 0) //if no muscleAreas were selected;
{
if(this.getFilter1().contains("1")) //if strength or general
{
for(int i = 0; i < 12; i++) //add all of the muscle integers to the list (0:11) inclusive
{
Areas.add(i);
}
}
}
//
if(this.getFilter1().contains("2")) //if the user selected cardio or general
{
Areas.add(11);
Areas.add(-1);
}
sizeAreas = Areas.size(); //update to new size
String out;
/* //migrating to new method
if(size != 0)
{
*/
out = "("+ col_x +" IN ('"+this.getFilter1() +"')) AND (" +col_y+ " IN ('";
for(int i = 0; i <=sizeAreas-2;i++) //stop one before last element
{
out = out + Areas.get(i) + "','";
}
out = out + Areas.get(sizeAreas-1) + "')) AND ("+col_s+" IN "+this.getFilter4()+") AND (" +col_z+ " IN ('";
for(int i = 0; i<=size-2; i++) //stop one before last element
{
out = out + temp.get(i) + "','";
}
out = out + temp.get(temp.size()-1) + "'))";
/* }
else
{
out = "("+ col_x +" IN ('"+this.getFilter1() +"')) AND (" +col_y+ "=" + this.getFilter2() +") AND ("+col_s+" IN "+this.getFilter4()+") AND (" +col_z+ " IN ('None'))";
}
*/
return out;
//example filter1 = 1, muscleAreas = <2,3,4,5> filter3[] = {Barbell, Machine} filter4 = ('1','2')
//out = (type IN ('1')) AND (muscle_int IN ('2','3','4','5') AND (skill_level IN ('1','2') AND (equipment IN ('Barbells','Machine'))
//example2 filter1 = 1, muscleAreas = <0,1,3,>, filter3[] = {}, filter4 = ('1','2')
//out = (type=1) AND (muscle_int IN ('0','1','3') AND (skill_level IN ('1','2') AND (equipment IN ('None'))
}
public String buildElseWhere()
{
ArrayList<Integer> Areas = this.getMuscleAreas();
ArrayList<String> temp = this.getFilter3();
int size = temp.size();
temp.add("None"); // if not, search the database for exercises with "None" for required equip
size = temp.size(); //update to new size
int sizeAreas = Areas.size();
//if we make them click something this isn't needed and there's probably a better way to implement cardio lol;
if(sizeAreas <= 0) //if no muscleAreas were selected;
{
if(this.getFilter1().contains("1")) // if strength or genearl
{
for(int i = 0; i < 12; i++) //add all of the muscle integers to the list (0:11) inclusive
{
Areas.add(i);
}
}
}
if(this.getFilter1().contains("2")) //if cardio or general
{
Areas.add(11);
Areas.add(-1);
}
sizeAreas = Areas.size(); //update to new size
//
String out;
/* if(size != 0) //migrating to other method
{
*/ if (this.getFilter1().equalsIgnoreCase("1','2"))
{
out = "((" +col_x+ " IN ('"+this.getFilter1() +"')) OR (" +col_y+ " NOT IN('";
}
else
{
out = "((" +col_x+ " NOT IN ('"+this.getFilter1() +"')) OR (" +col_y+ " NOT IN('";
}
for(int i = 0; i <=sizeAreas-2;i++) //stop one before last element
{
out = out + Areas.get(i) + "','";
}
out = out + Areas.get(sizeAreas-1) +"'))) AND ("+col_s+" IN "+this.getFilter4()+") AND (" +col_z+ " IN ('";
for(int i = 0; i<=size-2; i++) //stop one before last element
{
out = out + temp.get(i) + "','";
}
out = out + temp.get(temp.size()-1) + "'))";
/* }
else
{
out = "((" +col_x+ " NOT IN ('"+this.getFilter1() +"')) OR (" +col_y+ " NOT IN('" + this.getFilter2() +"'))) AND ("+col_s+" IN "+this.getFilter4()+") AND (" +col_z+ " IN ('None'))";
}
*/
return out;
//example filter1 = strength, muscleAreas = <0,1,3>, filter3[] = {barbells, machine)
// out = ((type NOT IN('strength')) OR (muscle_int NOT IN ('0','1','3'))) AND (equipment IN ('barbells','machine'))
}
public String buildStoredWhere()
{
String out;
out = col_id + " IN ('";
ArrayList<Integer> temp = this.storedExerciseIDs;
if(temp != null && temp.size() > 0)
{
int size = temp.size();
for(int i = 0; i <= size-2; i++) //stop one before the end
{
out = out + temp.get(i)+ "','";
}
out = out + temp.get(temp.size()-1) +"')"; //add last element and finish
}
else out = null;
return out;
//example storedExerciseIDs = {1, 2, 3, 4, 5}
// out = _id IN ('1','2','3','4','5')
}
public void setFilter4(String filter4) {
this.filter4 = filter4;
}
public String getFilter4() {
return filter4;
}
public ArrayList<Integer> getMuscleAreas() {
return muscleAreas;
}
public void setMuscleAreas(ArrayList<Integer> muscleAreas) {
this.muscleAreas = muscleAreas;
}
}