package com.totoro.incardisplay.simulations;
import java.util.ArrayList;
/**
* Efficient decryptor for compressed files.
*/
public class EfficientDecryptor implements Decryptor {
@Override
public TimeSlice[] decrypt(String data) {
ArrayList<TimeSlice> tempList = new ArrayList<TimeSlice>();
while(data.length() > 0) {
String substring = data.substring(0, 96);
data = data.substring(96);
tempList.add(stringToTimeSlice(substring));
}
TimeSlice[] ret = new TimeSlice[tempList.size()];
return tempList.toArray(ret);
}
private TimeSlice stringToTimeSlice(String substring) {
ArrayList<Datum> list = new ArrayList<Datum>();
list.add(new Datum("currentSpeed", extract(substring.substring(0,8))));
list.add(new Datum("acceleration", extract(substring.substring(8,16))));
list.add(new Datum("airConditioning", extract(substring.substring(16,24))));
list.add(new Datum("steering", extract(substring.substring(24,32))));
list.add(new Datum("odometer", extract(substring.substring(32,40))));
list.add(new Datum("brakingPressure", extract(substring.substring(40,48))));
list.add(new Datum("pedalForce", extract(substring.substring(48,56))));
list.add(new Datum("altitude", extract(substring.substring(56,64))));
list.add(new Datum("fuelUsage", extract(substring.substring(64,72))));
list.add(new Datum("mpg", extract(substring.substring(72,80))));
list.add(new Datum("tripLength", extract(substring.substring(80,88))));
list.add(new Datum("ecoScore", extract(substring.substring(88,96))));
return new TimeSlice(list);
}
private double extract(String str) {
long ret = 0;
for(int i = 0; i < str.length(); i++) {
ret |= ((long)str.charAt(i)) << (8*i);
}
double ans = Double.longBitsToDouble(ret);
return ans;
}
}