EasyHarvestDemo/Privacy/DemoCollab.java
2015-11-08 01:17:41 +02:00

143 lines
3.0 KiB
Java

/**
* The collaborative version of the "DemoFilterTime" privacy mechanism.
*/
import java.util.*;
import java.io.*;
import android.content.Context;
import android.util.*;
@SuppressWarnings("unchecked")
public class DemoCollab {
private Context context;
private int pref;
private List <Object> state;
private List<Map<String, String>> peers;
public void onStart (Context c, int i, ObjectInputStream ois) throws Exception {
String TAG = getClass().getName() + "@onStart: ";
Log.wtf(TAG, "...");
// Get application context.
context = c;
// Get privacy preferences.
pref = i;
// Restore state.
if (ois != null) {
Log.wtf(TAG, "Restoring state...");
state = (List<Object>) ois.readObject();
} else {
Log.wtf(TAG, "Initializing state...");
state = new ArrayList<>();
}
peers = new ArrayList<>();
}
public void onStop () {
String TAG = getClass().getName() + "@onStop: ";
Log.wtf(TAG, "...");
}
public void onPreferenceChanged (int i) {
String TAG = getClass().getName() + "@onPreferenceChanged: ";
Log.wtf(TAG, "" + i);
pref = i;
}
public boolean saveState (ObjectOutputStream oos) {
String TAG = getClass().getName() + "@saveState: ";
Log.wtf(TAG, "...");
// s.writeObject(state);
return false;
}
public int processData (ObjectInputStream ois, ObjectOutputStream oos) throws Exception {
String TAG = getClass().getName() + "@processData: ";
Log.wtf(TAG, "...");
// Get list of data.
List <Object> list = (List<Object>) ois.readObject();
// Edit each data entry of the data list.
for (Object o : list) {
Map data = (Map) o;
data.put("device", data.get("device"));
data.put("task", data.get("task"));
data.put("sensor", data.get("sensor"));
data.put("values", data.get("values"));
float min = -1;
float max = 1;
Random r = new Random();
float d = min + (max - min) * r.nextFloat(); // -1 < d < 1
long var = (long) (((float) pref / 10) * d * 3600000000000L); // (pref/10) * random * (1hr)
data.put("timestamp", (Long) data.get("timestamp") + var);
}
oos.writeObject(list);
// If a peer is present...
if(!peers.isEmpty()) {
// Collaborate!
return Integer.parseInt(peers.get(0).get("id"));
}
return 0;
}
/**
* Collaborative stuff.
*/
/**/
public void onPeersChanged (List<Map<String, String>> peers) {
String TAG = getClass().getName() + "@onPeersChanged: ";
Log.wtf(TAG, "...");
this.peers = peers;
Log.wtf(TAG, peers.toString());
}
public boolean aggregateData (ObjectInputStream ois, ObjectOutputStream oos) throws Exception {
String TAG = getClass().getName() + "@aggregateData: ";
Log.wtf(TAG, "...");
// Read input stream.
List <Object> data = (List<Object>) ois.readObject();
// Write to output stream.
oos.writeObject(data);
return true;
}
/**/
}