int rowsNumber;
int row;
IScanPoint[][] scanPointsMatrix;
try {
// Type
DeviceAttribute scanTypeAttribute = scanServerProxy.read_attribute("scanType");
int scanType = scanTypeAttribute.extractLong();
if(scanType != 2) {
return null;
}
scanResult = new ScanResult2DImpl();
scanResult.setResultType(IScanResult.ResultType.RESULT_2D);
// Name.
DeviceAttribute runNameAttribute = scanServerProxy.read_attribute("runName");
String runName = runNameAttribute.extractString();
scanResult.setRunName(runName);
// Building empty matrix.
DeviceAttribute sensorsTimeStampsAttribute = scanServerProxy.read_attribute("sensorsTimeStamps");
columnsNumber = sensorsTimeStampsAttribute.getDimX();
rowsNumber = sensorsTimeStampsAttribute.getDimY();
scanPointsMatrix = new IScanPoint[rowsNumber][columnsNumber];
for(row = 0; row < rowsNumber; ++row) {
for(column = 0; column < columnsNumber; ++column) {
scanPointsMatrix[row][column] = new ScanPointImpl();
}
}
// Times.
double[] timesArray = sensorsTimeStampsAttribute.extractDoubleArray();
row = 0;
column = 0;
for(double time : timesArray) {
scanPointsMatrix[row][column].setTime(time);
++column;
if(column >= columnsNumber) {
column = 0;
++ row;
}
}
// Sensors
String[] sensorsNamesArrayTmp = scanServerProxy.read_attribute("sensors").extractStringArray();
// The sensorsNamesArrayTmp contains the data twice : once for reading and once for writing.
String[] sensorsNamesArray = new String[sensorsNamesArrayTmp.length / 2];
for(int sensorIndex = 0; sensorIndex < sensorsNamesArray.length; ++sensorIndex) {
sensorsNamesArray[sensorIndex] = sensorsNamesArrayTmp[sensorIndex];
}
String[] sensorsValueKeysArray = scanServerProxy.read_attribute("sensorsDataList").extractStringArray();
ISensor sensor;
String sensorValueKey;
String sensorName;
double[] sensorValuesArray;
DeviceAttribute sensorValueAttribute;
for(int sensorIndex = 0; sensorIndex < sensorsNamesArray.length && sensorIndex < sensorsValueKeysArray.length; ++sensorIndex) {
sensorName = sensorsNamesArray[sensorIndex];
sensor = new SensorImpl();
sensor.setName(sensorName);
sensor.setEnabled(true);
scanResult.getSensorsList().add(sensor);
sensorValueKey = sensorsValueKeysArray[sensorIndex];
sensorValueAttribute = scanServerProxy.read_attribute(sensorValueKey);
sensorValuesArray = AttributeHelper.extractToDoubleArray(sensorValueAttribute);
sensor.setScanServerAttributeName(scanServerProxy.get_name() + "/" + sensorValueKey);
row = 0;
column = 0;
for(double sensorValue : sensorValuesArray) {
scanPointsMatrix[row][column].getSensorsValuesMap().put(sensor, sensorValue);
++column;
if(column >= columnsNumber) {
column = 0;
++ row;
}
}
}
// Actuators dimension X
String[] actuatorsXNamesArrayTmp = scanServerProxy.read_attribute("actuators").extractStringArray();
// The actuatorsXNamesArrayTmp contains the data twice : once for reading and once for writing.
String actuatorXName;
String[] actuatorsXNamesArray = new String[actuatorsXNamesArrayTmp.length / 2];
for(int actuatorXIndex = 0; actuatorXIndex < actuatorsXNamesArray.length; ++actuatorXIndex) {
actuatorsXNamesArray[actuatorXIndex] = actuatorsXNamesArrayTmp[actuatorXIndex];
}
String[] actuatorsXValueKeysArray = scanServerProxy.read_attribute("actuatorsDataList").extractStringArray();
IActuator actuatorX;
String actuatorXValueKey;
double[] actuatorXValuesArray;
DeviceAttribute actuatorXValueAttribute;
for(int actuatorXIndex = 0;
actuatorXIndex < actuatorsXNamesArray.length && actuatorXIndex < actuatorsXValueKeysArray.length;
++actuatorXIndex) {
actuatorXName = actuatorsXNamesArray[actuatorXIndex];
actuatorX = new ActuatorImpl();
actuatorX.setName(actuatorXName);
actuatorX.setEnabled(true);
scanResult.getActuatorsXList().add(actuatorX);
actuatorXValueKey = actuatorsXValueKeysArray[actuatorXIndex];
actuatorXValueAttribute = scanServerProxy.read_attribute(actuatorXValueKey);
actuatorXValuesArray = AttributeHelper.extractToDoubleArray(actuatorXValueAttribute);
actuatorX.setScanServerAttributeName(scanServerProxy.get_name() + "/" + actuatorXValueKey);
row = 0;
column = 0;
for(double actuatorXValue : actuatorXValuesArray) {
scanPointsMatrix[row][column].getActuatorsXValuesMap().put(actuatorX, actuatorXValue);
++column;
if(column >= columnsNumber) {
column = 0;
++ row;
}
}
}
// Actuators dimension Y
String[] actuatorsYNamesArrayTmp = scanServerProxy.read_attribute("actuators2").extractStringArray();
// The actuatorsYNamesArrayTmp contains the data twice : once for reading and once for writing.
String actuatorYName;
String[] actuatorsYNamesArray = new String[actuatorsYNamesArrayTmp.length / 2];
for(int actuatorYIndex = 0; actuatorYIndex < actuatorsYNamesArray.length; ++actuatorYIndex) {
actuatorsYNamesArray[actuatorYIndex] = actuatorsYNamesArrayTmp[actuatorYIndex];
}
String[] actuatorsYValueKeysArray = scanServerProxy.read_attribute("actuators2DataList").extractStringArray();
IActuator actuatorY;
String actuatorYValueKey;
double[] actuatorYValuesArray;
DeviceAttribute actuatorYValueAttribute;
for(int actuatorYIndex = 0;
actuatorYIndex < actuatorsYNamesArray.length && actuatorYIndex < actuatorsYValueKeysArray.length;
++actuatorYIndex) {
actuatorYName = actuatorsYNamesArray[actuatorYIndex];
actuatorY = new ActuatorImpl();