package de.tudarmstadt.informatik.hostage.ui; import android.os.Parcel; import android.os.Parcelable; import java.util.ArrayList; import java.util.HashMap; import de.tudarmstadt.informatik.hostage.logging.UglyDbHelper; public class LogFilter implements Parcelable{ public final static String LOG_FILTER_INTENT_KEY = "de.tudarmstadt.informatik.hostage.logfilter"; private static final String TIMESTAMP_BELOW_KEY = "de.tudarmstadt.informatik.hostage.logfilter.timestampbelow"; private static final String TIMESTAMP_ABOVE_KEY = "de.tudarmstadt.informatik.hostage.logfilter.timestampabove"; private static final String PROTOCOLS_KEY = "de.tudarmstadt.informatik.hostage.logfilter.protocols"; private static final String ESSID_KEY = "de.tudarmstadt.informatik.hostage.logfilter.essid"; private static final String BSSID_KEY = "de.tudarmstadt.informatik.hostage.logfilter.bssid"; private static final String SORTTYPE_KEY = "de.tudarmstadt.informatik.hostage.logfilter.sorttype"; public enum SortType{ timestamp(0), protocol(1), _bssid(1), ssid(3), //remoteHostName(5), //lcaolHostName(6), _attack_id(7), _id(8); private final int id; SortType(int id) { this.id = id; } public int getValue() { return id; } } public ArrayList BSSIDs; public ArrayList ESSIDs; public ArrayList protocols; public boolean isNotEditable; public SortType sorttype; public long belowTimestamp; public long aboveTimestamp; public LogFilter(){ this.clear(); } public void clear(){ this.belowTimestamp = Long.MAX_VALUE; this.aboveTimestamp = Long.MIN_VALUE; this.sorttype = SortType.timestamp; this.BSSIDs = new ArrayList(); this.ESSIDs = new ArrayList(); this.protocols = new ArrayList(); } public int describeContents() { return 0; } // write your object's data to the passed-in Parcel public void writeToParcel(Parcel out, int flags) { HashMap> values =new HashMap>(); if(this.BSSIDs != null && this.BSSIDs.size() > 0){ values.put(BSSID_KEY , this.getBSSIDs() ); } if(this.ESSIDs != null && this.ESSIDs.size() > 0){ values.put(ESSID_KEY , this.getESSIDs() ); } if(this.protocols != null && this.protocols.size() > 0){ values.put(PROTOCOLS_KEY , this.getProtocols() ); } long timeArray[] = new long[] {this.aboveTimestamp, this.belowTimestamp}; out.writeMap(values); out.writeInt(this.sorttype.getValue()); out.writeDouble(timeArray.length); out.writeLongArray(timeArray); out.writeString(this.isNotEditable? "true" : "false"); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public LogFilter createFromParcel(Parcel in) { return new LogFilter(in); } public LogFilter[] newArray(int size) { return new LogFilter[size]; } }; // example constructor that takes a Parcel and gives you an object populated with it's values private LogFilter(Parcel in) { //mData = in.readInt(); HashMap> values = new HashMap>(); in.readMap(values, ArrayList.class.getClassLoader()); this.BSSIDs = values.get(BSSID_KEY); this.ESSIDs = values.get(ESSID_KEY); this.protocols = values.get(protocols); if(this.BSSIDs == null) this.BSSIDs = new ArrayList(); if(this.ESSIDs == null) this.ESSIDs = new ArrayList(); if(this.protocols == null) this.protocols = new ArrayList(); this.sorttype = SortType.values()[Math.min(in.readInt(), SortType.values().length)]; int size = (int)in.readDouble(); long timeArray[] = new long[size]; in.readLongArray(timeArray); this.belowTimestamp = timeArray[1]; this.aboveTimestamp = timeArray[0]; String bool = in.readString(); if(bool.equals("true")) this.isNotEditable = true; } public boolean isNotEditable(){ return this.isNotEditable; } public SortType getSorttype(){ return this.sorttype; } public ArrayList getBSSIDs(){ return this.BSSIDs; } public ArrayList getESSIDs(){ return this.ESSIDs; } public ArrayList getProtocols(){ return this.protocols; } public void setIsNotEditable(boolean b){ this.isNotEditable = b; } public long getBelowTimestamp(){ return this.belowTimestamp; } public long getAboveTimestamp(){ return this.aboveTimestamp; } public void setProtocols(ArrayList protocols){ this.protocols = protocols; } public void setBSSIDs(ArrayList bssids){ this.BSSIDs = bssids; } public void setESSIDs(ArrayList essids){ this.ESSIDs = essids; } public void setAboveTimestamp(long timestamp){ this.aboveTimestamp = timestamp; } public void setBelowTimestamp(long timestamp){ this.belowTimestamp = timestamp; } public void setSorttype(SortType type){ this.sorttype = type; } public String getBSSIDQueryStatement(String key){ return this.convertArrayListToQueryString(this.BSSIDs, UglyDbHelper.TABLE_BSSIDS, key); } public String getESSIDQueryStatement(String key){ return this.convertArrayListToQueryString(this.ESSIDs, UglyDbHelper.TABLE_BSSIDS ,key); } public String getProtocolsQueryStatement(String key){ return this.convertArrayListToQueryString(this.protocols,UglyDbHelper.TABLE_ATTACK_INFO, key); } public boolean isSet(){ boolean hasTime = this.belowTimestamp != Long.MAX_VALUE|| this.aboveTimestamp != Long.MIN_VALUE; boolean hasBSSIDs = this.getBSSIDs().size() > 0; boolean hasESSIDs = this.getESSIDs().size() > 0; boolean hasProtocols = this.getProtocols().size() > 0; return hasBSSIDs || hasESSIDs || hasProtocols | hasTime; } public String convertArrayListToQueryString(ArrayList list, String table, String key){ String statement = ""; if (list == null) return statement; statement = " ( "; int i = 0, max = list.size(); for (String element : list){ i++; statement = statement + table + "." + key + " = " + "'" + element + "'"; if (i == max) continue; statement = statement +" OR "; } statement = statement + " ) "; return statement; } }