package org.signalml.app.worker.monitor.messages.parsing; import java.util.LinkedHashMap; import java.util.List; import java.util.StringTokenizer; import org.apache.log4j.Logger; import org.signalml.app.model.document.opensignal.ExperimentDescriptor; import org.signalml.app.model.document.opensignal.elements.Amplifier; import org.signalml.app.model.document.opensignal.elements.AmplifierChannel; import org.signalml.app.model.document.opensignal.elements.ExperimentStatus; public class FindEEGExperimentsResponseJSonReader extends AbstractResponseJSonReader { protected static final Logger logger = Logger.getLogger(FindEEGExperimentsResponseJSonReader.class); @Override protected String getExperimentsListFieldName() { return "experiment_list"; } public ExperimentDescriptor parseSingleExperiment(LinkedHashMap<String, Object> map) { ExperimentDescriptor experiment = new ExperimentDescriptor(); //experiment info LinkedHashMap<String, Object> experimentInfo = (LinkedHashMap<String, Object>) map.get("experiment_info"); experiment.setName((String) experimentInfo.get("name")); experiment.setId((String) experimentInfo.get("uuid")); LinkedHashMap<String, Object> experimentStatus = (LinkedHashMap<String, Object>) experimentInfo.get("experiment_status"); String statusName = (String) experimentStatus.get("status_name"); experiment.setStatus(ExperimentStatus.valueOf(statusName.toUpperCase())); //amplifier_peer_info LinkedHashMap<String, Object> amplifierPeerInfo = (LinkedHashMap<String, Object>) map.get("amplifier_peer_info"); String path = (String) amplifierPeerInfo.get("path"); experiment.setPath(path); //amplifier LinkedHashMap<String, Object> amplifierParams = (LinkedHashMap<String, Object>) map.get("amplifier_params"); Amplifier amplifier = experiment.getAmplifier(); amplifier.setName((String) amplifierParams.get("amplifier_name")); amplifier.setSamplesPerPacket(Integer.parseInt((String) amplifierParams.get("samples_per_packet"))); readSamplingFrequencies(amplifierParams, experiment); experiment.getSignalParameters().setSamplingFrequency(new Float((String) amplifierParams.get("sampling_rate"))); List<Object> channelsInfo = (List<Object>) amplifierParams.get("channels_info"); readChannelsList(channelsInfo, experiment); //active channels String activeChannels = (String) amplifierParams.get("active_channels"); StringTokenizer tokenizer = new StringTokenizer(activeChannels, ";"); while (tokenizer.hasMoreTokens()) { String channelName = tokenizer.nextToken(); try { int channelNumber = Integer.parseInt(channelName); amplifier.getChannels().get(channelNumber).setSelected(true); } catch (NumberFormatException ex) { for (AmplifierChannel channel: amplifier.getChannels()) { if (channel.getLabel().equalsIgnoreCase(channelName)) channel.setSelected(true); } } } //channel names String channelNames = (String) amplifierParams.get("channel_names"); tokenizer = new StringTokenizer(channelNames, ";"); List<AmplifierChannel> selectedChannels = amplifier.getSelectedChannels(); int i = 0; while (tokenizer.hasMoreTokens()) { String channelName = tokenizer.nextToken(); selectedChannels.get(i).setLabel(channelName); i++; } List<Object> tcpAddress = (List<Object>) ((List<Object>) map.get("tcp_addrs")).get(0); experiment.setExperimentIPAddress((String) tcpAddress.get(0)); experiment.setExperimentPort((Integer) tcpAddress.get(1)); return experiment; } }