package org.fluxtream.connectors.sleep_as_android; import org.fluxtream.core.domain.AbstractFacet; import org.fluxtream.core.domain.ApiKey; import org.fluxtream.core.domain.ChannelMapping; import org.fluxtream.core.services.impl.BodyTrackHelper; import org.fluxtream.core.services.impl.FieldHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @Component("sleepAsAndroidActiGraph") public class SleepAsAndroidActiGraphFieldHandler implements FieldHandler { @Autowired BodyTrackHelper bodyTrackHelper; @Override public List<BodyTrackHelper.BodyTrackUploadResult> handleField(ApiKey apiKey, AbstractFacet facet) { SleepFacet sleepFacet = (SleepFacet) facet; List<Double> actiGraph = sleepFacet.getActiGraph(); double start = sleepFacet.start / 1000.0; double end = sleepFacet.end / 1000.0; double deltaPerSample = (end - start) / actiGraph.size(); List<List<Object>> data = new ArrayList<List<Object>>(); for (int i = 0; i < actiGraph.size(); i++){ List<Object> sample = new ArrayList<Object>(); sample.add(start + deltaPerSample * i); sample.add(actiGraph.get(i)); data.add(sample); } final List<String> channelNames = Arrays.asList("actiGraph"); return Arrays.asList(bodyTrackHelper.uploadToBodyTrack(apiKey, "Sleep_As_Android", channelNames, data)); } @Override public void addToDeclaredChannelMappings(ApiKey apiKey, List<ChannelMapping> channelMappings) { ChannelMapping.addToDeclaredMappings(apiKey, 1, apiKey.getConnector().getDeviceNickname(), "actiGraph", channelMappings); } }