package context.apps.demos.homeactivity; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import context.arch.storage.Attribute; import context.arch.storage.Attributes; import context.arch.widget.SequenceWidget; public final class SensorsWidget extends SequenceWidget { public static final String CLASSNAME = SensorsWidget.class.getName(); public static String[] FEATURES; static { Properties properties = new Properties(); try { properties.load(new FileInputStream("demos/home-hmm/kasteren-jahmm-header.properties")); Integer.parseInt(properties.getProperty("numObservationValues")); // skip line String[] inputNames = properties.getProperty("observationVector").split(","); FEATURES = new String[inputNames.length]; for (int i = 0; i < inputNames.length; i++) { FEATURES[i] = inputNames[i].trim(); } } catch (IOException e) { } } public SensorsWidget() { super(CLASSNAME, CLASSNAME, HomeModel.SEQUENCE_LENGTH); super.start(true); } @Override protected void init() { //atts.addAttribute(SEQUENCE_LENGTH, Attribute.INT); // init-ed as a constant attribute // non-constant attributes for (String FEATURE : FEATURES) { addAttribute(Attribute.instance(FEATURE, Integer.class)); } } public static class SensorsData extends WidgetData { public final int[] featureValues = new int[FEATURES.length]; public SensorsData(long timestamp) { super(SensorsWidget.class.getName(), timestamp); } @Override public Attributes toAttributes() { Attributes atts = new Attributes(); for (int i = 0; i < FEATURES.length; i++) { atts.addAttribute(FEATURES[i], featureValues[i]); } return atts; } /** * Similar to #toAttributes but prepends names with T marker * @param t * @return */ public Attributes toAttributes(int t) { Attributes atts = new Attributes(); for (int i = 0; i < FEATURES.length; i++) { atts.addAttribute(SequenceWidget.getTPrepend(t) + FEATURES[i], featureValues[i]); } return atts; } } }