From f3b3cd79fbcd6d5d496ae2d7f2b28fa110359993 Mon Sep 17 00:00:00 2001
From: gwen-soleil <gwenaelle.abeille@gmail.com>
Date: Mon, 4 Mar 2024 17:18:22 +0100
Subject: [PATCH] recommit e55b35389611a6721f78b016633a598b4c3aa01d that was
 removed by commit 0c5e16e1ca49274865160314cc7ffa2d8f666f28

---
 .../tangowrapping/DeviceAttributeWrapper.java |   4 +-
 .../plugin/persistance/AnyAttribute.java      | 231 ++++++++++--------
 2 files changed, 129 insertions(+), 106 deletions(-)

diff --git a/src/main/java/fr/soleil/actiongroup/collectiveaction/components/tangowrapping/DeviceAttributeWrapper.java b/src/main/java/fr/soleil/actiongroup/collectiveaction/components/tangowrapping/DeviceAttributeWrapper.java
index 9b3fc57..e345b29 100644
--- a/src/main/java/fr/soleil/actiongroup/collectiveaction/components/tangowrapping/DeviceAttributeWrapper.java
+++ b/src/main/java/fr/soleil/actiongroup/collectiveaction/components/tangowrapping/DeviceAttributeWrapper.java
@@ -122,7 +122,7 @@ public class DeviceAttributeWrapper {
         return this.attribute.getQuality();
     }
 
-    public DevState extractState() throws DevFailed {
-        return attribute.extractState();
+    public DevState[] extractDevStateArray() throws DevFailed {
+        return attribute.extractDevStateArray();
     }
 }
diff --git a/src/main/java/fr/soleil/actiongroup/collectiveaction/onattributes/plugin/persistance/AnyAttribute.java b/src/main/java/fr/soleil/actiongroup/collectiveaction/onattributes/plugin/persistance/AnyAttribute.java
index a18dca1..aae5838 100644
--- a/src/main/java/fr/soleil/actiongroup/collectiveaction/onattributes/plugin/persistance/AnyAttribute.java
+++ b/src/main/java/fr/soleil/actiongroup/collectiveaction/onattributes/plugin/persistance/AnyAttribute.java
@@ -1,3 +1,27 @@
+/*	Synchrotron Soleil 
+ *  
+ *   File          :  AnyAttribute.java
+ *  
+ *   Project       :  TangoParser
+ *  
+ *   Description   :  
+ *  
+ *   Author        :  CLAISSE
+ *  
+ *   Original      :  17 janv. 07 
+ *  
+ *   Revision:  					Author:  
+ *   Date: 							State:  
+ *  
+ *   Log: AnyAttribute.java,v 
+ *
+ */
+/*
+ * Created on 17 janv. 07
+ *
+ * To change the template for this generated file go to
+ * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
+ */
 package fr.soleil.actiongroup.collectiveaction.onattributes.plugin.persistance;
 
 import org.slf4j.Logger;
@@ -14,9 +38,8 @@ import fr.soleil.actiongroup.collectiveaction.components.tangowrapping.TangoCons
  * @author CLAISSE
  */
 public class AnyAttribute {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(AnyAttribute.class);
-
+	final static Logger logger = LoggerFactory.getLogger(AnyAttribute.class);
+	
     private static final String SPECTRUM_SEPARATOR = ",";
 
     /**
@@ -88,7 +111,7 @@ public class AnyAttribute {
     /**
      * The attribute's State value
      */
-    private DevState rawValueState;
+    private DevState[] rawValueState;
 
     private final int numberOfComponents;
 
@@ -130,130 +153,130 @@ public class AnyAttribute {
     private int extractValue(final DeviceAttributeWrapper attribute) throws Exception {
         int _numberOfComponents = 0;
         switch (getType()) {
+        case TangoConst.Tango_DEV_BOOLEAN:
+            rawValueBoolean = attribute.extractBooleanArray();
+            _numberOfComponents = rawValueBoolean == null ? 0 : rawValueBoolean.length;
+            break;
+
+        case TangoConst.Tango_DEV_DOUBLE:
+            rawValueDouble = attribute.extractDoubleArray();
+            _numberOfComponents = rawValueDouble == null ? 0 : rawValueDouble.length;
+            break;
+
+        case TangoConst.Tango_DEV_FLOAT:
+            rawValueFloat = attribute.extractFloatArray();
+            _numberOfComponents = rawValueFloat == null ? 0 : rawValueFloat.length;
+            break;
+        case TangoConst.Tango_DEV_LONG:
+        case TangoConst.Tango_DEV_INT:
+            rawValueInt = attribute.extractLongArray();
+            _numberOfComponents = rawValueInt == null ? 0 : rawValueInt.length;
+            break;
+        case TangoConst.Tango_DEV_ULONG:
+            rawValueLong = attribute.extractULongArray();
+            _numberOfComponents = rawValueLong == null ? 0 : rawValueLong.length;
+            break;
+        case TangoConst.Tango_DEV_LONG64:
+            rawValueLong = attribute.extractLong64Array();
+            _numberOfComponents = rawValueLong == null ? 0 : rawValueLong.length;
+            break;
+        case TangoConst.Tango_DEV_ULONG64:
+            rawValueLong = attribute.extractULong64Array();
+            _numberOfComponents = rawValueLong == null ? 0 : rawValueLong.length;
+            break;
+        case TangoConst.Tango_DEV_USHORT:
+            rawValueInt = attribute.extractUShortArray();
+            _numberOfComponents = rawValueInt == null ? 0 : rawValueInt.length;
+            break;
+        case TangoConst.Tango_DEV_SHORT:
+        case TangoConst.Tango_DEV_CHAR:
+            rawValueShort = attribute.extractShortArray();
+            _numberOfComponents = rawValueShort == null ? 0 : rawValueShort.length;
+            break;
+        case TangoConst.Tango_DEV_UCHAR:
+            rawValueShort = attribute.extractUCharArray();
+            _numberOfComponents = rawValueShort == null ? 0 : rawValueShort.length;
+            break;
+
+        case TangoConst.Tango_DEV_STATE:
+            rawValueState = attribute.extractDevStateArray();
+            _numberOfComponents = rawValueState == null ? 0 : rawValueState.length;
+            break;
+
+        case TangoConst.Tango_DEV_STRING:
+            rawValueString = attribute.extractStringArray();
+            _numberOfComponents = rawValueString == null ? 0 : rawValueString.length;
+            break;
+        default:
+            logger.error("NO EXTRACTION " + attribute.getName());
+        }
+        return _numberOfComponents;
+    }
+
+    private void buildPersistableValue() {
+        if (numberOfComponents == 0) {
+            return;
+        }
+        convertedStringValuesTable = new String[numberOfComponents];
+        convertedNumericValuesTable = new double[numberOfComponents];
+
+        for (int i = 0; i < numberOfComponents; i++) {
+            switch (getType()) {
             case TangoConst.Tango_DEV_BOOLEAN:
-                rawValueBoolean = attribute.extractBooleanArray();
-                _numberOfComponents = rawValueBoolean == null ? 0 : rawValueBoolean.length;
+                convertedNumericValuesTable[i] = rawValueBoolean[i] ? 1 : 0; // for
+                // scalars
+                // which
+                // are
+                // stored
+                // as
+                // 0/1
+                convertedStringValuesTable[i] = rawValueBoolean[i] + ""; // for
+                // spectrums
+                // which
+                // are
+                // stored
+                // as
+                // true,false,false,...
                 break;
 
             case TangoConst.Tango_DEV_DOUBLE:
-                rawValueDouble = attribute.extractDoubleArray();
-                _numberOfComponents = rawValueDouble == null ? 0 : rawValueDouble.length;
+                convertedNumericValuesTable[i] = rawValueDouble[i];
+                convertedStringValuesTable[i] = rawValueDouble[i] + "";
                 break;
 
             case TangoConst.Tango_DEV_FLOAT:
-                rawValueFloat = attribute.extractFloatArray();
-                _numberOfComponents = rawValueFloat == null ? 0 : rawValueFloat.length;
+                convertedNumericValuesTable[i] = rawValueFloat[i];
+                convertedStringValuesTable[i] = rawValueFloat[i] + "";
                 break;
+
             case TangoConst.Tango_DEV_LONG:
             case TangoConst.Tango_DEV_INT:
-                rawValueInt = attribute.extractLongArray();
-                _numberOfComponents = rawValueInt == null ? 0 : rawValueInt.length;
+            case TangoConst.Tango_DEV_USHORT:
+                convertedNumericValuesTable[i] = rawValueInt[i];
+                convertedStringValuesTable[i] = rawValueInt[i] + "";
                 break;
             case TangoConst.Tango_DEV_ULONG:
-                rawValueLong = attribute.extractULongArray();
-                _numberOfComponents = rawValueLong == null ? 0 : rawValueLong.length;
-                break;
-            case TangoConst.Tango_DEV_LONG64:
-                rawValueLong = attribute.extractLong64Array();
-                _numberOfComponents = rawValueLong == null ? 0 : rawValueLong.length;
-                break;
             case TangoConst.Tango_DEV_ULONG64:
-                rawValueLong = attribute.extractULong64Array();
-                _numberOfComponents = rawValueLong == null ? 0 : rawValueLong.length;
-                break;
-            case TangoConst.Tango_DEV_USHORT:
-                rawValueInt = attribute.extractUShortArray();
-                _numberOfComponents = rawValueInt == null ? 0 : rawValueInt.length;
+            case TangoConst.Tango_DEV_LONG64:
+                convertedNumericValuesTable[i] = rawValueLong[i];
+                convertedStringValuesTable[i] = rawValueLong[i] + "";
                 break;
+
             case TangoConst.Tango_DEV_SHORT:
             case TangoConst.Tango_DEV_CHAR:
-                rawValueShort = attribute.extractShortArray();
-                _numberOfComponents = rawValueShort == null ? 0 : rawValueShort.length;
-                break;
             case TangoConst.Tango_DEV_UCHAR:
-                rawValueShort = attribute.extractUCharArray();
-                _numberOfComponents = rawValueShort == null ? 0 : rawValueShort.length;
+                convertedNumericValuesTable[i] = rawValueShort[i];
+                convertedStringValuesTable[i] = rawValueShort[i] + "";
                 break;
 
             case TangoConst.Tango_DEV_STATE:
-                rawValueState = attribute.extractState();
-                _numberOfComponents = 1;
+                convertedNumericValuesTable[i] = rawValueState[i].value();
+                convertedStringValuesTable[i] = rawValueState[i].value()+"";
                 break;
 
             case TangoConst.Tango_DEV_STRING:
-                rawValueString = attribute.extractStringArray();
-                _numberOfComponents = rawValueString == null ? 0 : rawValueString.length;
+                convertedStringValuesTable[i] = rawValueString[i];
                 break;
-            default:
-                LOGGER.error("NO EXTRACTION " + attribute.getName());
-        }
-        return _numberOfComponents;
-    }
-
-    private void buildPersistableValue() {
-        if (numberOfComponents == 0) {
-            return;
-        }
-        convertedStringValuesTable = new String[numberOfComponents];
-        convertedNumericValuesTable = new double[numberOfComponents];
-
-        for (int i = 0; i < numberOfComponents; i++) {
-            switch (getType()) {
-                case TangoConst.Tango_DEV_BOOLEAN:
-                    convertedNumericValuesTable[i] = rawValueBoolean[i] ? 1 : 0; // for
-                    // scalars
-                    // which
-                    // are
-                    // stored
-                    // as
-                    // 0/1
-                    convertedStringValuesTable[i] = Boolean.toString(rawValueBoolean[i]); // for
-                    // spectrums
-                    // which
-                    // are
-                    // stored
-                    // as
-                    // true,false,false,...
-                    break;
-
-                case TangoConst.Tango_DEV_DOUBLE:
-                    convertedNumericValuesTable[i] = rawValueDouble[i];
-                    convertedStringValuesTable[i] = Double.toString(rawValueDouble[i]);
-                    break;
-
-                case TangoConst.Tango_DEV_FLOAT:
-                    convertedNumericValuesTable[i] = rawValueFloat[i];
-                    convertedStringValuesTable[i] = Float.toString(rawValueFloat[i]);
-                    break;
-
-                case TangoConst.Tango_DEV_LONG:
-                case TangoConst.Tango_DEV_INT:
-                case TangoConst.Tango_DEV_USHORT:
-                    convertedNumericValuesTable[i] = rawValueInt[i];
-                    convertedStringValuesTable[i] = Integer.toString(rawValueInt[i]);
-                    break;
-                case TangoConst.Tango_DEV_ULONG:
-                case TangoConst.Tango_DEV_ULONG64:
-                case TangoConst.Tango_DEV_LONG64:
-                    convertedNumericValuesTable[i] = rawValueLong[i];
-                    convertedStringValuesTable[i] = Long.toString(rawValueLong[i]);
-                    break;
-
-                case TangoConst.Tango_DEV_SHORT:
-                case TangoConst.Tango_DEV_CHAR:
-                case TangoConst.Tango_DEV_UCHAR:
-                    convertedNumericValuesTable[i] = rawValueShort[i];
-                    convertedStringValuesTable[i] = Short.toString(rawValueShort[i]);
-                    break;
-
-                case TangoConst.Tango_DEV_STATE:
-                    convertedNumericValuesTable[i] = rawValueState.value();
-                    convertedStringValuesTable[i] = TangoConst.Tango_DevStateName[rawValueState.value()];
-                    break;
-
-                case TangoConst.Tango_DEV_STRING:
-                    convertedStringValuesTable[i] = rawValueString[i];
-                    break;
             }
         }
     }
-- 
GitLab