package de.tudarmstadt.informatik.hostage.ui; import java.util.ArrayList; import java.util.HashMap; import android.os.Parcel; import android.os.Parcelable; 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 { packet_timestamp(0), protocol(1), _bssid(1), ssid(3), _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.packet_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 tablename, String key) { return this.convertArrayListToQueryString(this.BSSIDs, tablename, key); } public String getESSIDQueryStatement(String tablename, String key) { return this.convertArrayListToQueryString(this.ESSIDs, tablename, key); } public String getProtocolsQueryStatement(String tablename, String key) { return this.convertArrayListToQueryString(this.protocols, tablename, key); } public boolean isSet() { boolean hasTime = this.hasATimestamp(); boolean hasBSSIDs = this.hasBSSIDs(); boolean hasESSIDs = this.hasESSIDs(); boolean hasProtocols = this.hasProtocols(); return hasBSSIDs || hasESSIDs || hasProtocols | hasTime; } public boolean hasBSSIDs() { return this.getBSSIDs().size() > 0; } public boolean hasESSIDs() { return this.getESSIDs().size() > 0; } public boolean hasProtocols() { return this.getProtocols().size() > 0; } public boolean hasAboveTimestamp() { return this.aboveTimestamp != Long.MIN_VALUE; } public boolean hasBelowTimestamp() { return this.belowTimestamp != Long.MAX_VALUE; } public boolean hasATimestamp() { return this.hasBelowTimestamp() || this.hasAboveTimestamp(); } 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; } }