From 3742a9bc02039284ae377e1b44e83c1465f92f10 Mon Sep 17 00:00:00 2001
From: Arnaud Jelmoni <arnaud.jelmoni@keyconsulting.fr>
Date: Thu, 11 Mar 2021 09:44:32 +0000
Subject: [PATCH] Reafact

---
 .../archiving/snap/api/DataBaseAPI.java       | 2067 +++--------------
 .../snap/api/manager/SnapManagerApi.java      |   21 +-
 .../snap/api/tools/AttributeSupport.java      |  378 ---
 .../snap/api/tools/BlobSpectrum.java          |  104 -
 .../archiving/snap/api/tools/ScalarEvent.java |  426 ----
 .../archiving/snap/api/tools/SnapConst.java   |    2 +-
 .../snap/api/tools/SnapImageEvent_RO.java     |  133 --
 .../snap/api/tools/SnapImageEvent_RW.java     |  180 --
 .../snap/api/tools/SnapScalarEvent_RO.java    |   83 -
 .../snap/api/tools/SnapScalarEvent_RW.java    |   98 -
 .../snap/api/tools/SnapScalarEvent_WO.java    |   81 -
 .../snap/api/tools/SnapSpectrumEvent_RO.java  |  114 -
 .../snap/api/tools/SnapSpectrumEvent_RW.java  |  482 ----
 .../snap/api/tools/TangoJAVAUtils.java        |  164 ++
 .../archiving/snap/api/DataBaseAPITest.java   |   17 +-
 15 files changed, 461 insertions(+), 3889 deletions(-)
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/AttributeSupport.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/BlobSpectrum.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/ScalarEvent.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RO.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RW.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RO.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RW.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_WO.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RO.java
 delete mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RW.java
 create mode 100644 src/main/java/fr/soleil/archiving/snap/api/tools/TangoJAVAUtils.java

diff --git a/src/main/java/fr/soleil/archiving/snap/api/DataBaseAPI.java b/src/main/java/fr/soleil/archiving/snap/api/DataBaseAPI.java
index 9c73eb9..9ee352d 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/DataBaseAPI.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/DataBaseAPI.java
@@ -195,7 +195,10 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Random;
 import java.util.StringTokenizer;
+import java.util.stream.Collectors;
 
+import org.jdbi.v3.core.Handle;
+import org.jdbi.v3.core.statement.Query;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -206,7 +209,6 @@ import fr.esrf.TangoDs.TangoConst;
 import fr.soleil.archiving.common.api.ConnectionFactory;
 import fr.soleil.archiving.common.api.exception.ArchivingException;
 import fr.soleil.archiving.common.api.tools.GlobalConst;
-import fr.soleil.archiving.common.api.tools.StringFormater;
 import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
 import fr.soleil.archiving.snap.api.tools.SnapAttributeHeavy;
 import fr.soleil.archiving.snap.api.tools.SnapAttributeLight;
@@ -215,10 +217,10 @@ import fr.soleil.archiving.snap.api.tools.SnapContext;
 import fr.soleil.archiving.snap.api.tools.Snapshot;
 import fr.soleil.archiving.snap.api.tools.SnapshotLight;
 import fr.soleil.archiving.snap.api.tools.SnapshotingException;
+import fr.soleil.archiving.snap.api.tools.TangoJAVAUtils;
 import fr.soleil.database.connection.AbstractDataBaseConnector;
 import fr.soleil.database.connection.DataBaseParameters;
 import fr.soleil.database.connection.DataBaseParameters.DataBaseType;
-import fr.soleil.lib.project.math.MathConst;
 
 /**
  * <b>Description : </b> This class hides the loading of drivers, the
@@ -288,7 +290,6 @@ public class DataBaseAPI {
 			try {
 				connector = ConnectionFactory.connect(params);
 			} catch (ArchivingException e1) {
-				// TODO Auto-generated catch block
 				e1.printStackTrace();
 			}
 		}
@@ -418,20 +419,15 @@ public class DataBaseAPI {
         StringBuilder selectStringBuilder = new StringBuilder();
         try {
             // Preparing statement...
-            selectStringBuilder.append("SELECT ").append(SnapConst.ID).append(" FROM ").append(table_name)
-                    .append(" WHERE ");
+			selectStringBuilder.append("SELECT " + SnapConst.ID + " FROM " + table_name + " WHERE ");
 			if (params.getDbType() == DataBaseType.ORACLE) {
-                selectStringBuilder.append("LOWER(").append(SnapConst.fullName).append(") like LOWER(?)");
+				selectStringBuilder.append("LOWER(" + SnapConst.fullName + ") like LOWER(?)");
             } else {
-                selectStringBuilder.append(SnapConst.fullName).append(" like ?");
+				selectStringBuilder.append(SnapConst.fullName + " like ?");
             }
-            // if (m_dataSource == null) {
 			conn = connector.getConnection();
             ps_get_att_id = conn.prepareStatement(selectStringBuilder.toString());
-            // } else {
-            // conn = m_dataSource.getConnection();
-            // ps_get_att_id = conn.prepareStatement(selectString);
-            // }
+
             final String field1 = att_name.trim();
             ps_get_att_id.setString(1, field1);
             rset = ps_get_att_id.executeQuery();
@@ -521,51 +517,7 @@ public class DataBaseAPI {
         return res;
     }
 
-    /**
-     * This method retrives from the the database, the list of all registered
-     * contexts (or 'snap-patterns)
-     * 
-     * @return The list of all registered contexts (or 'snap-patterns)
-     * @throws SnapshotingException
-     */
-    public List<SnapContext> getAllContext() throws SnapshotingException {
-        List<SnapContext> contextList = new ArrayList<SnapContext>();
-        String query = "";
-        Statement stmt = null;
-		String select_field = String.join(", ", SnapConst.TAB_CONTEXT);
-        final String table_1 = getDbSchema() + "." + SnapConst.CONTEXT;
-        final String clause_1 = " ORDER BY " + SnapConst.ID_CONTEXT;
-        query = "SELECT " + select_field + "  FROM " + table_1 + clause_1;
-
-        ResultSet resultSet = null;
 
-        Connection conn = null;
-        try {
-			conn = connector.getConnection();
-            stmt = conn.createStatement();
-            resultSet = stmt.executeQuery(query.toString());
-            while (resultSet.next()) {
-                final SnapContext snapContext = new SnapContext();
-                snapContext.setId(resultSet.getInt(1));
-                snapContext.setCreation_date(resultSet.getDate(2));
-                snapContext.setName(resultSet.getString(3));
-                snapContext.setAuthor_name(resultSet.getString(4));
-                snapContext.setReason(resultSet.getString(5));
-                snapContext.setDescription(resultSet.getString(6));
-                contextList.add(snapContext);
-            }
-            return contextList;
-        } catch (final SQLException e) {
-            final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.QUERY_FAILURE;
-            final String reason = "Failed while executing DataBaseAPI.getAllContext() method...";
-            final String desc = "";
-            throw new SnapshotingException(message, reason, query.toString(), ErrSeverity.PANIC, desc, "", e);
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(stmt);
-            closeConnection(conn);
-        }
-    }
 
     /**
      * This method retrives from the the database, the list of all registered
@@ -578,129 +530,24 @@ public class DataBaseAPI {
      * @throws SnapshotingException
      */
     public List<SnapContext> getContext(final String clause, final int id_context) throws SnapshotingException {
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        Statement stmt = null;
-        List<SnapContext> contextList = new ArrayList<SnapContext>();
-        String query = "";
 		String select_field = String.join(", ", SnapConst.TAB_CONTEXT);
         // Choix de la table dans laquelle effectuer la requete SQL.
         final String table_1 = getDbSchema() + "." + SnapConst.CONTEXT;
         // Affichage des resusltats par ordre croissant d'ID du context.
-        final String clause_1 = " ORDER BY " + SnapConst.ID_CONTEXT;
-        query = "SELECT " + select_field + " FROM " + table_1;
-        try {
-			conn = connector.getConnection();
-            if (id_context != -1) {
-                // Cas ou l'id_context est donne.
-                query = query + clause;
-
-                preparedStatement = conn.prepareStatement(query);
-                preparedStatement.setInt(1, id_context);
-                resultSet = preparedStatement.executeQuery();
-
-                // Gets the result of the query
-                while (resultSet.next()) {
-                    final SnapContext snapContext = new SnapContext();
-                    snapContext.setId(resultSet.getInt(1));
-                    snapContext.setCreation_date(resultSet.getDate(2));
-                    snapContext.setName(resultSet.getString(3));
-                    snapContext.setAuthor_name(resultSet.getString(4));
-                    snapContext.setReason(resultSet.getString(5));
-                    snapContext.setDescription(resultSet.getString(6));
-                    contextList.add(snapContext);
-                }
-            } else {
-                // cas ou l'id du context n'est pas donne.
-
-                if (clause.equals("")) {
-                    query = query + clause_1;
-                } else {
-                    query = query + clause + clause_1;
-                }
-
-                stmt = conn.createStatement();
-                resultSet = stmt.executeQuery(query.toString());
-                while (resultSet.next()) {
-                    final SnapContext snapContext = new SnapContext();
-                    snapContext.setId(resultSet.getInt(1));
-                    snapContext.setCreation_date(resultSet.getDate(2));
-                    snapContext.setName(resultSet.getString(3));
-                    snapContext.setAuthor_name(resultSet.getString(4));
-                    snapContext.setReason(resultSet.getString(5));
-                    snapContext.setDescription(resultSet.getString(6));
-                    contextList.add(snapContext);
-                }
+        final String orderBy = " ORDER BY " + SnapConst.ID_CONTEXT;
+        
+		String query = "SELECT " + select_field + " FROM " + table_1;
+
+        try (Handle handle = connector.getJdbi().open()) {
+            Query queryBinder = handle.createQuery(query+clause+orderBy);
+            if(id_context != -1) {
+            	queryBinder.bind(0,id_context);
             }
-        } catch (final SQLException e) {
-            final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.QUERY_FAILURE;
-            final String reason = "Failed while executing DataBaseAPI.getContext() method...";
-            final String desc = "";
-            final String queryDebug = query.toString() + " => " + id_context;
-            throw new SnapshotingException(message, reason, queryDebug, ErrSeverity.PANIC, desc, "", e);
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeStatement(stmt);
-            closeConnection(conn);
+			return queryBinder.map((rs, ctx) -> new SnapContext(rs.getString(SnapConst.author),
+					rs.getString(SnapConst.name), rs.getInt(SnapConst.ID_CONTEXT), rs.getDate(SnapConst.time),
+					rs.getString(SnapConst.reason), rs.getString(SnapConst.description))).list();
         }
-        return contextList;
-    }
-
 
-    /**
-     * ************************************************************************
-     * <b>Description : </b> Gets all snapshots from a given context
-     * 
-     * @return array of strings
-     * @throws SnapshotingException
-     * @see SnapshotLight
-     *      ********************************************************************
-     *      * ****
-     */
-    public List<SnapshotLight> getContextAssociatedSnapshots(final int id_context) throws SnapshotingException {
-        final List<SnapshotLight> associatedSnapshots = new ArrayList<SnapshotLight>();
-        PreparedStatement preparedStatement = null;
-        ResultSet rset = null;
-
-        // Create and execute the SQL query string
-        String query;
-        final String select_field = SnapConst.ID_SNAP + ", " +SnapConst.time;
-        final String table_1 = getDbSchema() + "." + SnapConst.SNAPSHOT;
-        final String clause_2 = SnapConst.SNAPSHOT + "." + SnapConst.TAB_SNAP[1] + " = ?";
-
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_2;
-        Connection conn = null;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, id_context);
-            rset = preparedStatement.executeQuery();
-
-            // Gets the result of the query
-            while (rset.next()) {
-                final SnapshotLight snapShotLight = new SnapshotLight();
-                snapShotLight.setId_snap(rset.getInt(1));
-                snapShotLight.setSnap_date(rset.getTimestamp(2));
-                // commentaire
-                associatedSnapshots.add(snapShotLight);
-            }
-        } catch (final SQLException e) {
-            final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.ERROR_RET_SNAP;
-            final String reason = "Failed while executing DataBaseAPI.getContextAssociatedSnapshots() method...";
-            final String desc = "";
-            final String queryDebug = query + " => " + id_context;
-            throw new SnapshotingException(message, reason, queryDebug, ErrSeverity.PANIC, desc, "", e);
-        } finally {
-            closeResultSet(rset);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-
-        // Returns the names list
-
-        return associatedSnapshots;
     }
 
     /**
@@ -717,111 +564,29 @@ public class DataBaseAPI {
      */
     public List<SnapshotLight> getContextAssociatedSnapshots(final String clause, final int id_context,
             final int id_snap) throws SnapshotingException {
-        final List<SnapshotLight> associatedSnapshots = new ArrayList<SnapshotLight>();
-        // First connect with the database
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet rset = null;
-        Statement stmt = null;
-
         // Create and execute the SQL query string
         String query;
 		final String select_field = SnapConst.ID_SNAP + ", " + SnapConst.time + ", " + SnapConst.snap_comment;
         // recuperation de la table des snapshot.
         final String table_1 = getDbSchema() + "." + SnapConst.SNAPSHOT;
-        final String clause_4 = " ORDER BY " + SnapConst.ID_SNAP;
+		final String orderBy = " ORDER BY " + SnapConst.ID_SNAP;
+
+		query = "SELECT " + select_field + " FROM " + table_1 + clause + orderBy;
+
+		try (Handle handle = connector.getJdbi().open()) {
+			Query queryBinder = handle.createQuery(query);
+			if (id_context != -1 && id_snap != -1) {
+				queryBinder.bind(0, id_snap);
+				queryBinder.bind(1, id_context);
+			} else if (id_context != -1) {
+				queryBinder.bind(0, id_context);
+			} else if (id_snap != -1) {
+				queryBinder.bind(0, id_snap);
+			}
+			return queryBinder.map((rs, ctx) -> new SnapshotLight(rs.getInt(SnapConst.ID_SNAP),
+					rs.getTimestamp(SnapConst.time), rs.getString(SnapConst.snap_comment))).list();
+		}
 
-        query = "SELECT " + select_field + " FROM " + table_1 + clause;
-        try {
-			conn = connector.getConnection();
-            if (id_context != -1 && id_snap != -1) {
-                // Cas ou l'id_context et l'id_snap sont donnes.
-                query = query + clause_4;
-
-                preparedStatement = conn.prepareStatement(query);
-                preparedStatement.setInt(1, id_snap);
-                preparedStatement.setInt(2, id_context);
-                rset = preparedStatement.executeQuery();
-
-                // Gets the result of the query
-                while (rset.next()) {
-                    final SnapshotLight snapShotLight = new SnapshotLight();
-                    snapShotLight.setId_snap(rset.getInt(1));
-                    snapShotLight.setSnap_date(rset.getTimestamp(2));
-                    snapShotLight.setComment(rset.getString(3)); // todo
-                    // commentaire
-                    associatedSnapshots.add(snapShotLight);
-                }
-                // preparedStatement.close();
-
-            } else if (id_context != -1) {
-                // Cas ou l'id_context est donne.
-                query = query + clause_4;
-                preparedStatement = conn.prepareStatement(query);
-
-                preparedStatement.setInt(1, id_context);
-                rset = preparedStatement.executeQuery();
-
-                // Gets the result of the query
-                while (rset.next()) {
-                    final SnapshotLight snapShotLight = new SnapshotLight();
-                    snapShotLight.setId_snap(rset.getInt(1));
-                    snapShotLight.setSnap_date(rset.getTimestamp(2));
-                    snapShotLight.setComment(rset.getString(3)); // todo
-                    // commentaire
-                    associatedSnapshots.add(snapShotLight);
-                }
-                // preparedStatement.close();
-            } else if (id_snap != -1) {
-                // Cas ou l'id_snap est donne.
-                query = query + clause_4;
-                preparedStatement = conn.prepareStatement(query);
-                preparedStatement.setInt(1, id_snap);
-                rset = preparedStatement.executeQuery();
-
-                // Gets the result of the query
-                while (rset.next()) {
-                    final SnapshotLight snapShotLight = new SnapshotLight();
-                    snapShotLight.setId_snap(rset.getInt(1));
-                    snapShotLight.setSnap_date(rset.getTimestamp(2));
-                    snapShotLight.setComment(rset.getString(3)); // todo
-                    // commentaire
-                    associatedSnapshots.add(snapShotLight);
-                }
-            } else {
-                // Cas ou ni l'id_context ni l'id_snap ne sont donnes.
-                query = query + clause_4;
-
-                stmt = conn.createStatement();
-
-                rset = stmt.executeQuery(query.toString());
-                while (rset.next()) {
-                    final SnapshotLight snapShotLight = new SnapshotLight();
-                    snapShotLight.setId_snap(rset.getInt(1));
-                    snapShotLight.setSnap_date(rset.getTimestamp(2));
-                    snapShotLight.setComment(rset.getString(3)); // todo
-                    // commentaire
-                    associatedSnapshots.add(snapShotLight);
-                }
-            }
-        } catch (final SQLException e) {
-            final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.ERROR_RET_SNAP;
-            final String reason = "Failed while executing DataBaseAPI.getContextAssociatedSnapshots() method...";
-            final String desc = "";
-            throw new SnapshotingException(message, reason, query.toString(), ErrSeverity.PANIC, desc, "", e);
-        } catch (final Exception e) {
-            final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.ERROR_RET_SNAP;
-            final String reason = "Failed while executing DataBaseAPI.getContextAssociatedSnapshots() method...";
-            final String desc = "";
-            throw new SnapshotingException(message, reason, query.toString(), ErrSeverity.PANIC, desc, "", e);
-        } finally {
-            closeResultSet(rset);
-            closeStatement(preparedStatement);
-            closeStatement(stmt);
-            closeConnection(conn);
-        }
-        // Returns the names list
-        return associatedSnapshots;
     }
 
 
@@ -870,13 +635,20 @@ public class DataBaseAPI {
         return res;
     }
 
-    private void selectNumericScalarRO(final List<SnapAttributeExtract> attributes, final String selectRO,
-            final String where) throws SnapshotingException, SQLException {
+	private void selectScalarRO(final List<SnapAttributeExtract> attributes, int snapID, String table)
+			throws SnapshotingException, SQLException {
+		if(attributes.isEmpty()) {
+			return;
+		}
         Connection conn = null;
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
         // SELECT id_att, value FROM t_sc_num_1val WHERE id_snap = ?
-        final String query = selectRO + getDbSchema() + "." + SnapConst.T_SC_NUM_1VAL + where;
+		final String query = "SELECT " + SnapConst.ID_ATT + "," + SnapConst.value + " FROM " + getDbSchema() + "."
+				+ table + " WHERE " + SnapConst.ID_SNAP + "=" + snapID + " AND " + SnapConst.ID_ATT
+				+ " IN (" + String.join(", ",
+						attributes.stream().map(s -> String.valueOf(s.getAttId())).collect(Collectors.toList()))
+				+ ")";
         try {
 			conn = connector.getConnection();
             preparedStatement = conn.prepareStatement(query);
@@ -885,7 +657,8 @@ public class DataBaseAPI {
             	int attId = resultSet.getInt(1);
 				final SnapAttributeExtract snapAttributeExtract = attributes.stream()
 						.filter(att -> att.getAttId() == attId).findFirst().get();
-				snapAttributeExtract.setValue(castResultSetAsObject(snapAttributeExtract.getDataType(), resultSet, 2),
+				snapAttributeExtract.setValue(
+						TangoJAVAUtils.castResultSetAsObject(snapAttributeExtract.getDataType(), resultSet, 2),
 						Boolean.valueOf(resultSet.wasNull()));
             }
         } finally {
@@ -895,17 +668,27 @@ public class DataBaseAPI {
         }
     }
 
-    private boolean isNullOrNaN(final String value) {
-        return ((value == null) || value.isEmpty() || "null".equals(value) || "NaN".equalsIgnoreCase(value));
-    }
 
-    private void selectRO(final List<SnapAttributeExtract> attributes, final String selectRO, final String where,
+
+	private void selectRO(final List<SnapAttributeExtract> attributes, int snapID,
             final String tableName) throws SnapshotingException, SQLException {
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
+
+		Connection conn = null;
+		PreparedStatement preparedStatement = null;
+		ResultSet resultSet = null;
+
+		List<String> scpectrumROAttId = attributes.stream()
+				.filter(s -> s.getDataFormat() == AttrDataFormat._SPECTRUM
+						&& (s.getWritable() == AttrWriteType._READ || s.getWritable() == AttrWriteType._WRITE))
+				.map(s -> String.valueOf(s.getAttId())).collect(Collectors.toList());
+
+		if (scpectrumROAttId.isEmpty()) {
+			return;
+		}
         // SELECT id_att, value FROM t_sp_1val WHERE id_snap = ?
-        final String query = selectRO + getDbSchema() + "." + tableName + where;
+		final String query = "SELECT " + SnapConst.ID_ATT + "," + SnapConst.value + " FROM " + getDbSchema() + "."
+				+ tableName + " WHERE " + SnapConst.ID_SNAP + "=" + snapID + " AND " + SnapConst.ID_ATT + " IN ("
+				+ String.join(", ", scpectrumROAttId) + ")";
         try {
 			conn = connector.getConnection();
             preparedStatement = conn.prepareStatement(query);
@@ -918,7 +701,7 @@ public class DataBaseAPI {
                 final Clob readClob = resultSet.getClob(2);
                 if (readClob != null) {
                     final String value = readClob.getSubString(1, (int) readClob.length());
-                    NullableData<?, ?> data = getSpectrumValue(value, null, snapAttributeExtract.getDataType(),
+					NullableData<?> data = getSpectrumValue(value, null, snapAttributeExtract.getDataType(),
                             false);
                     snapAttributeExtract.setValue(data.getValue(), data.getNullElements());
                 }
@@ -930,14 +713,24 @@ public class DataBaseAPI {
         }
     }
 
-    private void selectRW(final List<SnapAttributeExtract> attributes, final String selectRW, final String where,
+	private void selectRW(final List<SnapAttributeExtract> attributes, final int snapID,
             final String tableName) throws SnapshotingException, SQLException {
         Connection conn = null;
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
         // SELECT id_att, read_value, write_value, dim_x FROM
         // t_sp_2val WHERE id_snap = ?
-        final String query = selectRW + getDbSchema() + "." + tableName + where;
+
+		List<String> scpectrumRWAttId = attributes.stream().filter(s -> s.getDataFormat() == AttrDataFormat._SPECTRUM
+				&& (s.getWritable() == AttrWriteType._READ_WITH_WRITE || s.getWritable() == AttrWriteType._READ_WRITE))
+				.map(s -> String.valueOf(s.getAttId())).collect(Collectors.toList());
+		if (scpectrumRWAttId.isEmpty()) {
+			return;
+		}
+
+		final String query = "SELECT " + SnapConst.ID_ATT + "," + SnapConst.read_value + "," + SnapConst.write_value
+				+ "," + SnapConst.dim_x + " FROM " + getDbSchema() + "." + tableName + " WHERE " + SnapConst.ID_SNAP
+				+ "=" + snapID + " AND " + SnapConst.ID_ATT + " IN (" + String.join(", ", scpectrumRWAttId) + ")";
         try {
 			conn = connector.getConnection();
             preparedStatement = conn.prepareStatement(query);
@@ -957,7 +750,7 @@ public class DataBaseAPI {
                         if (writeClob != null) {
                             writeValue = writeClob.getSubString(1, (int) writeClob.length());
                         }
-                        NullableData<?, ?> data = getSpectrumValue(readValue, writeValue,
+						NullableData<?> data = getSpectrumValue(readValue, writeValue,
                                 snapAttributeExtract.getDataType(), true);
                         snapAttributeExtract.setValue(data.getValue(), data.getNullElements());
                         snapAttributeExtract.setDimX(resultSet.getInt(4));
@@ -969,14 +762,21 @@ public class DataBaseAPI {
         }
     }
 
-    private void selectNumericScalarRW(final List<SnapAttributeExtract> attributes, final String selectRW,
-            final String where) throws SnapshotingException, SQLException {
+	private void selectScalarRW(final List<SnapAttributeExtract> attributes, int snapID, String table)
+			throws SnapshotingException, SQLException {
+		if (attributes.isEmpty()) {
+			return;
+		}
         Connection conn = null;
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
         // SELECT id_att, read_value, write_value FROM t_sc_num_2val WHERE
         // id_snap = ?
-        final String query = selectRW + getDbSchema() + "." + SnapConst.T_SC_NUM_2VAL + where;
+		final String query = "SELECT " + SnapConst.ID_ATT + "," + SnapConst.read_value + "," + SnapConst.write_value
+				+ " FROM " + getDbSchema() + "." + table + " WHERE " + SnapConst.ID_SNAP + "=" + snapID + " AND "
+				+ SnapConst.ID_ATT + " IN (" + String.join(", ",
+						attributes.stream().map(s -> String.valueOf(s.getAttId())).collect(Collectors.toList()))
+				+ ")";
         try {
 			conn = connector.getConnection();
             preparedStatement = conn.prepareStatement(query);
@@ -986,12 +786,14 @@ public class DataBaseAPI {
 				final SnapAttributeExtract snapAttributeExtract = attributes.stream()
 						.filter(att -> att.getAttId() == attId).findFirst().get();
                         // fill data
-						final Object value = initPrimitiveArray(snapAttributeExtract.getDataType(), 2);
+						final Object value = TangoJAVAUtils.initPrimitiveArray(snapAttributeExtract.getDataType(), 2);
                         final boolean[] nullElements = new boolean[2];
 
-						Array.set(value, 0, castResultSetAsPrimitive(snapAttributeExtract.getDataType(), resultSet, 2));
+						Array.set(value, 0, TangoJAVAUtils.castResultSetAsPrimitive(snapAttributeExtract.getDataType(),
+								resultSet, 2));
 						nullElements[0] = resultSet.wasNull();
-						Array.set(value, 1, castResultSetAsPrimitive(snapAttributeExtract.getDataType(), resultSet, 3));
+						Array.set(value, 1, TangoJAVAUtils.castResultSetAsPrimitive(snapAttributeExtract.getDataType(),
+								resultSet, 3));
 						nullElements[1] = resultSet.wasNull();
 
                         snapAttributeExtract.setValue(value, nullElements);
@@ -1004,66 +806,6 @@ public class DataBaseAPI {
         }
     }
 
-    private void selectStringScalarRO(final List<SnapAttributeExtract> attributes, final String selectRO,
-            final String where) throws SnapshotingException, SQLException {
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        // SELECT id_att, value FROM t_sc_str_1val WHERE id_snap = ?
-        final String query = selectRO + getDbSchema() + "." + SnapConst.T_SC_STR_1VAL + where;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            resultSet = preparedStatement.executeQuery();
-            while (resultSet.next()) {
-                for (final SnapAttributeExtract snapAttributeExtract : attributes) {
-                    if (snapAttributeExtract.getAttId() == resultSet.getInt(1)) {
-                        // fill data
-                        snapAttributeExtract.setValue(resultSet.getString(2), Boolean.valueOf(resultSet.wasNull()));
-                        break;
-                    }
-                }
-            }
-
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-    }
-
-    private void selectStringScalarRW(final List<SnapAttributeExtract> attributes, final String selectRW,
-            final String where) throws SnapshotingException, SQLException {
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        // SELECT id_att, read_value, write_value FROM t_sc_str_2val WHERE
-        // id_snap = ?
-        final String query = selectRW + getDbSchema() + "." + SnapConst.T_SC_STR_2VAL + where;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            resultSet = preparedStatement.executeQuery();
-            while (resultSet.next()) {
-            	int attId = resultSet.getInt(1);
-				final SnapAttributeExtract snapAttributeExtract = attributes.stream()
-						.filter(att -> att.getAttId() == attId).findFirst().get();
-                        // fill data
-                        final Object[] value = new Object[2];
-                        final boolean[] nullElements = new boolean[2];
-                        value[0] = resultSet.getString(2);
-                        nullElements[0] = resultSet.wasNull();
-                        value[1] = resultSet.getString(3);
-                        nullElements[1] = resultSet.wasNull();
-                        snapAttributeExtract.setValue(value, nullElements);
-            }
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-    }
-
     /**
      * Retrieve a snapshot results'
      * 
@@ -1074,180 +816,78 @@ public class DataBaseAPI {
      *            The snap ID
      * @throws SnapshotingException
      */
-    public void getSnapResults(final List<SnapAttributeExtract> attributes, final int snapID)
-            throws SnapshotingException {
-        if (attributes.size() <= 6) {
-            // one sql request per attribute
-            for (SnapAttributeExtract snapAttributeExtract : attributes) {
-                snapAttributeExtract = getSnapResult(snapAttributeExtract, snapID);
-            }
-        } else {
-            // one sql request per table
-			final String selectRO = "SELECT " + SnapConst.ID_ATT + "," + SnapConst.value
-                    + " FROM ";
-			final String selectRW = "SELECT " + SnapConst.ID_ATT + "," + SnapConst.read_value + ","
-					+ SnapConst.write_value + " FROM ";
-			final String selectRWSpectrum = "SELECT " + SnapConst.ID_ATT + "," + SnapConst.read_value + ","
-					+ SnapConst.write_value + "," + SnapConst.dim_x + " FROM ";
-
-			final String where = " WHERE " + SnapConst.ID_SNAP + "=" + snapID;
-            try {
-                // --- Get scalar numeric read only values
-                selectNumericScalarRO(attributes, selectRO, where);
-            } catch (final SQLException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            } catch (final SnapshotingException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            }
-            try {
-                // --- Get scalar numeric read write values
-                selectNumericScalarRW(attributes, selectRW, where);
-            } catch (final SQLException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            } catch (final SnapshotingException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            }
-            try {
-                // --- Get scalar string read only values
-                selectStringScalarRO(attributes, selectRO, where);
-            } catch (final SQLException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            } catch (final SnapshotingException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            }
-            try {
-                // --- Get scalar numeric read write values
-                selectStringScalarRW(attributes, selectRW, where);
-            } catch (final SQLException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            } catch (final SnapshotingException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            }
-            try {
-                // --- Get spectrum read values
-                selectRO(attributes, selectRO, where, SnapConst.T_SP_1VAL);
-            } catch (final SQLException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            } catch (final SnapshotingException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            }
-            try {
-                // --- Get spectrum read write values
-                selectRW(attributes, selectRWSpectrum, where, SnapConst.T_SP_2VAL);
-            } catch (final SQLException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            } catch (final SnapshotingException e) {
-                logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
-            }
-        }
-    }
+	public void getSnapResults(final List<SnapAttributeExtract> attributes, final int snapID)
+			throws SnapshotingException {
+
+		// one sql request per table
+
+		List<SnapAttributeExtract> numericScalarRO = attributes.stream()
+				.filter(s -> s.getDataFormat() == AttrDataFormat._SCALAR
+						&& s.getDataType() != TangoConst.Tango_DEV_STRING
+						&& (s.getWritable() == AttrWriteType._READ || s.getWritable() == AttrWriteType._WRITE))
+				.collect(Collectors.toList());
+
+		List<SnapAttributeExtract> stringScalarRO = attributes.stream()
+				.filter(s -> s.getDataFormat() == AttrDataFormat._SCALAR
+				&& s.getDataType() == TangoConst.Tango_DEV_STRING
+				&& (s.getWritable() == AttrWriteType._READ || s.getWritable() == AttrWriteType._WRITE))
+				.collect(Collectors.toList());
+
+		List<SnapAttributeExtract> numericScalarRW = attributes.stream()
+				.filter(s -> s.getDataFormat() == AttrDataFormat._SCALAR
+				&& s.getDataType() != TangoConst.Tango_DEV_STRING
+				&& (s.getWritable() == AttrWriteType._READ_WITH_WRITE || s.getWritable() == AttrWriteType._READ_WRITE))
+				.collect(Collectors.toList());
+
+		List<SnapAttributeExtract> stringScalarRW = attributes.stream()
+				.filter(s -> s.getDataFormat() == AttrDataFormat._SCALAR
+				&& s.getDataType() == TangoConst.Tango_DEV_STRING
+				&& (s.getWritable() == AttrWriteType._READ_WITH_WRITE || s.getWritable() == AttrWriteType._READ_WRITE))
+				.collect(Collectors.toList());
+
+		try {
+			// --- Get scalar numeric read only values
+			selectScalarRO(numericScalarRO, snapID, SnapConst.T_SC_NUM_1VAL);
+		} catch (SQLException | SnapshotingException e) {
+			logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
+		}
+		try {
+			// --- Get scalar numeric read write values
+			selectScalarRW(numericScalarRW, snapID, SnapConst.T_SC_NUM_2VAL);
+		} catch (SQLException | SnapshotingException e) {
+			logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
+		}
 
-    private SnapAttributeExtract getSnapResult(final SnapAttributeExtract snapAttributeExtract, final int id_snap)
-            throws SnapshotingException {
-        final int attID = snapAttributeExtract.getAttId();
-        switch (snapAttributeExtract.getDataFormat()) {
-            case AttrDataFormat._SCALAR:
-                switch (snapAttributeExtract.getWritable()) {
-                    case AttrWriteType._READ:
-					case AttrWriteType._WRITE:
-                        NullableData<Object, Boolean> roData = extract_ScalarData_RO(id_snap, attID,
-                                snapAttributeExtract.getDataType());
-                        snapAttributeExtract.setValue(roData.getValue(), roData.getNullElements());
-                        break;
-                    case AttrWriteType._READ_WITH_WRITE:
-					case AttrWriteType._READ_WRITE:
-                        NullableData<Object, boolean[]> rwwData = extract_ScalarData_RW(id_snap, attID,
-                                snapAttributeExtract.getDataType());
-                        snapAttributeExtract.setValue(rwwData.getValue(), rwwData.getNullElements());
-                        break;
-                }
-                break;
-            case AttrDataFormat._SPECTRUM:
-                switch (snapAttributeExtract.getWritable()) {
-                    case AttrWriteType._WRITE:
-                    case AttrWriteType._READ:
-                        NullableData<?, ?> roData = extract_SpectrumData_RO(id_snap, attID,
-                                snapAttributeExtract.getDataType());
-                        snapAttributeExtract.setValue(roData.getValue(), roData.getNullElements());
-                        break;
-                    case AttrWriteType._READ_WITH_WRITE:
-                    case AttrWriteType._READ_WRITE:
-                        NullableData<?, ?> rwData = extract_SpectrumData_RW(id_snap, attID,
-                                snapAttributeExtract.getDataType());
-                        snapAttributeExtract.setValue(rwData.getValue(), rwData.getNullElements());
-                        snapAttributeExtract.setDimX(getCurrentSpectrumDimX());
-                        break;
-                }
-                break;
-            case AttrDataFormat._IMAGE:
-                switch (snapAttributeExtract.getWritable()) {
-                    case AttrWriteType._WRITE:
-                    case AttrWriteType._READ:
-                        NullableData<Object[], boolean[][]> roData = extract_ImageData_RO(id_snap, attID,
-                                snapAttributeExtract.getDataType());
-                        snapAttributeExtract.setValue(roData.getValue(), roData.getNullElements());
-                        break;
-                    case AttrWriteType._READ_WITH_WRITE:
-                    case AttrWriteType._READ_WRITE:
-                        NullableData<Object[][], boolean[][][]> rwData = extract_ImageData_RW(id_snap, attID,
-                                snapAttributeExtract.getDataType());
-                        snapAttributeExtract.setValue(rwData.getValue(), rwData.getNullElements());
-                        break;
-                }
-                break;
-        }
-        return snapAttributeExtract;
+		try {
+			// --- Get scalar string read only values
+			selectScalarRO(stringScalarRO, snapID, SnapConst.T_SC_STR_1VAL);
+		} catch (SQLException | SnapshotingException e) {
+			logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
+		}
+
+		try {
+			// --- Get scalar numeric read write values
+			selectScalarRW(stringScalarRW, snapID, SnapConst.T_SC_STR_2VAL);
+		} catch (SQLException | SnapshotingException e) {
+			logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
+		}
+		try {
+			// --- Get spectrum read values
+			selectRO(attributes, snapID, SnapConst.T_SP_1VAL);
+		} catch (SQLException | SnapshotingException e) {
+			logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
+		}
+		try {
+			// --- Get spectrum read write values
+			selectRW(attributes, snapID, SnapConst.T_SP_2VAL);
+		} catch (SQLException | SnapshotingException e) {
+			logger.error(ERROR_EXTRACTING_SNAPSHOT_DATA, e);
+		}
     }
 
-    /**
-     * @param snapID
-     * @param snapAtt
-     * @return
-     * @throws SnapshotingException
-     */
-    private NullableData<Object, Boolean> extract_ScalarData_RO(final int snapID, final int snapAtt, final int data_type)
-            throws SnapshotingException {
-        Object value = null;
-        Boolean nullElements = Boolean.FALSE;
-        String query = "";
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-		String select_field = SnapConst.value;
-        final String table_1 = getDbSchema() + "."
-                + (data_type != TangoConst.Tango_DEV_STRING ? SnapConst.T_SC_NUM_1VAL : SnapConst.T_SC_STR_1VAL);
-		final String clause_1 = (SnapConst.ID_SNAP) + "=?";
-		final String clause_2 = (SnapConst.ID_ATT) + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-        Connection conn = null;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
 
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-				value = castResultSetAsObject(data_type, resultSet, 1);
-				if (resultSet.wasNull()) {
-					value = null;
-					nullElements = Boolean.TRUE;
-				}
-            }
-        } catch (final SQLException e) {
-            e.printStackTrace();
 
-            logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_ScalarData_RO" + "\r\n"
-                    + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-        return new NullableData<Object, Boolean>(value, nullElements);
-    }
+
 
     public void closeResultSet(final ResultSet resultSet) {
         if (resultSet == null) {
@@ -1261,568 +901,45 @@ public class DataBaseAPI {
 
             logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.closeResultSet" + "\r\n"
                     + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage());
-        }
-    }
-
-    public void closeStatement(final Statement preparedStatement) {
-        if (preparedStatement == null) {
-            return;
-        }
-
-        try {
-            preparedStatement.close();
-        } catch (final SQLException e) {
-            e.printStackTrace();
-
-            logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.closeStatement" + "\r\n"
-                    + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage());
-        }
-    }
-
-    private void closeConnection(final Connection conn) {
-        if (conn == null) {
-            return;
-        }
-
-        try {
-            conn.close();
-        } catch (final SQLException e) {
-            e.printStackTrace();
-
-            logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.closeConnection" + "\r\n"
-                    + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage());
-        }
-    }
-
-    private NullableData<Object, boolean[]> extract_ScalarData_RW(final int snapID, final int snapAtt,
-            final int data_type) throws SnapshotingException {
-        Object value = null;
-        final boolean[] nullElements = new boolean[2];
-        String query = "";
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = select_field + SnapConst.read_value + ", " + SnapConst.write_value;
-        final String table_1 = getDbSchema() + "."
-                + (data_type != TangoConst.Tango_DEV_STRING ? SnapConst.T_SC_NUM_2VAL : SnapConst.T_SC_STR_2VAL);
-		final String clause_1 = (SnapConst.ID_SNAP) + "=?";
-		final String clause_2 = (SnapConst.ID_ATT) + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-				value = initPrimitiveArray(data_type, 2);
-				Array.set(value, 0, castResultSetAsPrimitive(data_type, resultSet, 1));
-				if (resultSet.wasNull()) {
-					nullElements[0] = true;
-				}
-				Array.set(value, 1, castResultSetAsPrimitive(data_type, resultSet, 2));
-				if (resultSet.wasNull()) {
-					nullElements[1] = true;
-				}
-            }
-        } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_ScalarData_RW" + "\r\n"
-                    + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-        return new NullableData<Object, boolean[]>(value, nullElements);
-    }
-
-
-
-    private NullableData<?, ?> extract_SpectrumData_RO(final int snapID, final int snapAtt, final int data_type)
-            throws SnapshotingException {
-		if (params.getDbType() == DataBaseType.MYSQL) {
-            return extract_SpectrumData_RO_MySQL(snapID, snapAtt, data_type);
-        } else {
-            return extract_SpectrumData_RO_Oracle(snapID, snapAtt, data_type);
-        }
-    }
-
-    /**
-     * @param snapID
-     * @param snapAtt
-     * @return
-     * @throws SnapshotingException
-     */
-    private NullableData<?, ?> extract_SpectrumData_RO_Oracle(final int snapID, final int snapAtt, final int data_type)
-            throws SnapshotingException {
-        String query = "";
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = select_field + SnapConst.value;
-        final String table_1 = getDbSchema() + "." + SnapConst.T_SP_1VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-
-        String readString = null;
-
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                final Clob readClob = resultSet.getClob(1);
-                if (resultSet.wasNull()) {
-                    readString = null;
-                } else {
-                    readString = readClob.getSubString(1, (int) readClob.length());
-                }
-            }
-        } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_SpectrumData_RO_Oracle"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-        return getSpectrumValue(readString, null, data_type, false);
-    }
-
-    /**
-     * @param snapID
-     * @param snapAtt
-     * @return
-     * @throws SnapshotingException
-     */
-    private NullableData<?, ?> extract_SpectrumData_RO_MySQL(final int snapID, final int snapAtt, final int data_type)
-            throws SnapshotingException {
-        String value = "NaN";
-        String query = "";
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        Connection conn = null;
-		final String select_field = SnapConst.value;
-        final String select_field2 = "CAST(" + select_field + " AS CHAR)";
-        final String table_1 = getDbSchema() + "." + SnapConst.T_SP_1VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field2 + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                value = resultSet.getString(1);
-                if (resultSet.wasNull()) {
-                    value = null;
-                }
-            }
-        } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_SpectrumData_RO_MySQL"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-        return getSpectrumValue(value, null, data_type, false);
-    }
-
-    private NullableData<?, ?> extract_SpectrumData_RW(final int snapID, final int snapAtt, final int data_type)
-            throws SnapshotingException {
-		if (params.getDbType() == DataBaseType.MYSQL) {
-            return extract_SpectrumData_RW_MySQL(snapID, snapAtt, data_type);
-        } else {
-            return extract_SpectrumData_RW_Oracle(snapID, snapAtt, data_type);
-        }
-    }
-
-    private NullableData<?, ?> extract_SpectrumData_RW_MySQL(final int snapID, final int snapAtt, final int data_type)
-            throws SnapshotingException {
-        String read_value = "NaN";
-        String write_value = "NaN";
-        String query = "";
-        Connection conn = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = "CAST(" + SnapConst.read_value + " AS CHAR)" + ", " + "CAST(" + SnapConst.write_value
-				+ " AS CHAR)" + ", " + SnapConst.dim_x;
-        final String table_1 = getDbSchema() + "." + SnapConst.T_SP_2VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                read_value = resultSet.getString(1);
-                if (resultSet.wasNull()) {
-                    read_value = null;
-                }
-                write_value = resultSet.getString(2);
-                if (resultSet.wasNull()) {
-                    write_value = null;
-                }
-                final int dim_x = resultSet.getInt(3);
-                setCurrentSpectrumDimX(dim_x);
-            }
-        } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_SpectrumData_RW_MySQL"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-        return getSpectrumValue(read_value, write_value, data_type, true);
-    }
-
-    private NullableData<?, ?> extract_SpectrumData_RW_Oracle(final int snapID, final int snapAtt, final int data_type)
-            throws SnapshotingException {
-        String query = "";
-        String readString = null, writeString = null;
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = select_field + SnapConst.read_value + ", " + SnapConst.write_value + ", " + SnapConst.dim_x;
-
-        final String table_1 = getDbSchema() + "." + SnapConst.T_SP_2VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-
-        Connection conn = null;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                final Clob readClob = resultSet.getClob(1);
-                if (resultSet.wasNull()) {
-                    readString = null;
-                } else {
-                    readString = readClob.getSubString(1, (int) readClob.length());
-                }
-
-                final Clob writeClob = resultSet.getClob(2);
-                if (resultSet.wasNull()) {
-                    writeString = null;
-                } else {
-                    writeString = writeClob.getSubString(1, (int) writeClob.length());
-                }
-
-                final int dim_x = resultSet.getInt(3);
-                setCurrentSpectrumDimX(dim_x);
-            }
-        } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_SpectrumData_RW_Oracle"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-
-        return getSpectrumValue(readString, writeString, data_type, true);
-    }
-
-    private NullableData<Object[], boolean[][]> extract_ImageData_RO(final int snapID, final int snapAtt,
-            final int data_type) throws SnapshotingException {
-		if (params.getDbType() == DataBaseType.MYSQL) {
-            return extract_ImageData_RO_MySQL(snapID, snapAtt, data_type);
-        } else {
-            return extract_ImageData_RO_Oracle(snapID, snapAtt, data_type);
-        }
-    }
-
-    private NullableData<Object[][], boolean[][][]> extract_ImageData_RW(final int snapID, final int snapAtt,
-            final int data_type) throws SnapshotingException {
-		if (params.getDbType() == DataBaseType.MYSQL) {
-            return extract_ImageData_RW_MySQL(snapID, snapAtt, data_type);
-        } else {
-            return extract_ImageData_RW_Oracle(snapID, snapAtt, data_type);
-        }
-    }
-
-    /**
-     * @param snapID
-     * @param snapAtt
-     * @return
-     * @throws SnapshotingException
-     */
-    private NullableData<Object[], boolean[][]> extract_ImageData_RO_MySQL(final int snapID, final int snapAtt,
-            final int data_type) throws SnapshotingException {
-        String value = null;
-        String query = "";
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = select_field + SnapConst.value;
-        final String table_1 = getDbSchema() + "." + SnapConst.T_IM_1VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-        Connection conn = null;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                value = resultSet.getString(1);
-                if (resultSet.wasNull()) {
-                    value = null;
-                }
-            }
-        } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_ImageData_RO_MySQL"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-
-        if (value != null) {
-            return getImageValue(value, data_type);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * @param snapID
-     * @param snapAtt
-     * @return
-     * @throws SnapshotingException
-     */
-    private NullableData<Object[], boolean[][]> extract_ImageData_RO_Oracle(final int snapID, final int snapAtt,
-            final int data_type) throws SnapshotingException {
-        String query = "";
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = select_field + SnapConst.value;
-        final String table_1 = getDbSchema() + "." + SnapConst.T_IM_1VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-
-        String readString = null;
-        Connection conn = null;
-        try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                final Clob readClob = resultSet.getClob(1);
-                if (resultSet.wasNull()) {
-                    readString = null;
-                } else {
-                    readString = readClob.getSubString(1, (int) readClob.length());
-                }
-            }
-        } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_ImageData_RO_Oracle"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-
-        if (readString != null) {
-            return getImageValue(readString, data_type);
-        } else {
-            return null;
+                    + "\t Description : \t " + e.getMessage());
         }
     }
 
-    private NullableData<Object[][], boolean[][][]> extract_ImageData_RW_MySQL(final int snapID, final int snapAtt,
-            final int data_type) throws SnapshotingException {
-        final Object[][] imageValueRW = new Object[2][];
-        final boolean[][][] nullElements = new boolean[2][][];
+    public void closeStatement(final Statement preparedStatement) {
+        if (preparedStatement == null) {
+            return;
+        }
 
-        String readValue = null;
-        String writeValue = null;
-        String query = "";
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = select_field + "CAST(" + SnapConst.read_value + " AS CHAR)" + ", " + "CAST("
-				+ SnapConst.write_value + " AS CHAR)";
-        final String table_1 = getDbSchema() + "." + SnapConst.T_IM_2VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-        Connection conn = null;
         try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                readValue = resultSet.getString(1);
-                if (resultSet.wasNull()) {
-                    readValue = null;
-                }
-                writeValue = resultSet.getString(2);
-                if (resultSet.wasNull()) {
-                    writeValue = null;
-                }
-            }
+            preparedStatement.close();
         } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_ImageData_RW_MySQL"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
-
-        if (readValue == null) {
-            imageValueRW[0] = null;
-            nullElements[0] = null;
-        } else {
-            NullableData<Object[], boolean[][]> data = getImageValue(readValue, data_type);
-            imageValueRW[0] = data.getValue();
-            nullElements[0] = data.getNullElements();
-        }
+            e.printStackTrace();
 
-        if (writeValue == null) {
-            imageValueRW[1] = null;
-            nullElements[1] = null;
-        } else {
-            NullableData<Object[], boolean[][]> data = getImageValue(writeValue, data_type);
-            imageValueRW[1] = data.getValue();
-            nullElements[1] = data.getNullElements();
+            logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.closeStatement" + "\r\n"
+                    + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
+                    + "\t Description : \t " + e.getMessage());
         }
-
-        return new NullableData<Object[][], boolean[][][]>(imageValueRW, nullElements);
     }
 
-    private NullableData<Object[][], boolean[][][]> extract_ImageData_RW_Oracle(final int snapID, final int snapAtt,
-            final int data_type) throws SnapshotingException {
-        final Object[][] imageValueRW = new Object[2][];
-        final boolean[][][] nullElements = new boolean[2][][];
-
-        String query = "";
-        PreparedStatement preparedStatement = null;
-        ResultSet resultSet = null;
-        String select_field = "";
-		select_field = select_field + SnapConst.read_value + ", " + SnapConst.write_value;
-        final String table_1 = getDbSchema() + "." + SnapConst.T_IM_2VAL;
-		final String clause_1 = SnapConst.ID_SNAP + "=?";
-		final String clause_2 = SnapConst.ID_ATT + "=?";
-        query = "SELECT " + select_field + " FROM " + table_1 + " WHERE " + clause_1 + " AND " + clause_2;
-
-        String readString = null;
-        String writeString = null;
+    private void closeConnection(final Connection conn) {
+        if (conn == null) {
+            return;
+        }
 
-        Connection conn = null;
         try {
-			conn = connector.getConnection();
-            preparedStatement = conn.prepareStatement(query);
-            preparedStatement.setInt(1, snapID);
-            preparedStatement.setInt(2, snapAtt);
-
-            resultSet = preparedStatement.executeQuery();
-            if (resultSet.next()) {
-                final Clob readClob = resultSet.getClob(1);
-                if (resultSet.wasNull()) {
-                    readString = null;
-                } else {
-                    readString = readClob.getSubString(1, (int) readClob.length());
-                }
-                final Clob writeClob = resultSet.getClob(2);
-                if (resultSet.wasNull()) {
-                    writeString = null;
-                } else {
-                    writeString = writeClob.getSubString(1, (int) writeClob.length());
-                }
-            }
+            conn.close();
         } catch (final SQLException e) {
-        	logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.extract_ImageData_RO_Oracle"
-                    + "\r\n" + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
-                    + "\t Description : \t " + e.getMessage() + "\r\n" + "\t Additional information : \r\n"
-                    + "\t\t Statement : " + query + "\r\n");
-            // throw e;
-        } finally {
-            closeResultSet(resultSet);
-            closeStatement(preparedStatement);
-            closeConnection(conn);
-        }
+            e.printStackTrace();
 
-        if (readString == null) {
-            imageValueRW[0] = null;
-            nullElements[0] = null;
-        } else {
-            NullableData<Object[], boolean[][]> data = getImageValue(readString, data_type);
-            imageValueRW[0] = data.getValue();
-            nullElements[0] = data.getNullElements();
+            logger.error("ERROR !! " + "\r\n" + "\t Origin : \t " + "DataBaseAPI.closeConnection" + "\r\n"
+                    + "\t Reason : \t " + getDbSchema().toUpperCase().trim() + "_FAILURE" + "\r\n"
+                    + "\t Description : \t " + e.getMessage());
         }
+    }
 
-        if (writeString == null) {
-            imageValueRW[1] = null;
-            nullElements[1] = null;
-        } else {
-            NullableData<Object[], boolean[][]> data = getImageValue(writeString, data_type);
-            imageValueRW[1] = data.getValue();
-            nullElements[1] = data.getNullElements();
-        }
 
-        return new NullableData<Object[][], boolean[][][]>(imageValueRW, nullElements);
-    }
 
-    private NullableData<?, ?> getSpectrumValue(final String readStr, final String writeStr, final int dataType,
+	private NullableData<?> getSpectrumValue(final String readStr, final String writeStr, final int dataType,
             final boolean returnAsReadWrite) {
         int readSize = 0, writeSize = 0;
         StringTokenizer readTokenizer;
@@ -1855,15 +972,14 @@ public class DataBaseAPI {
         boolean[] nullRead = null;
         boolean[] nullWrite = null;
 
-		Object valueArr_read = initPrimitiveArray(dataType, readSize);
+		Object valueArr_read = TangoJAVAUtils.initPrimitiveArray(dataType, readSize);
 		Object valueArr_write = null;
        
       
         if (returnAsReadWrite) {
-        	valueArr_write =  initPrimitiveArray(dataType, writeSize);
+			valueArr_write = TangoJAVAUtils.initPrimitiveArray(dataType, writeSize);
         }
         int i = 0;
-
         if (readTokenizer != null) {
             nullRead = new boolean[readSize];
             while (readTokenizer.hasMoreTokens()) {
@@ -1871,84 +987,12 @@ public class DataBaseAPI {
                 if (currentValRead == null || currentValRead.trim().equals("")) {
                     break;
                 }
-                switch (dataType) {
-                    case TangoConst.Tango_DEV_BOOLEAN:
-                        try {
-                            if (isNullOrNaN(currentValRead)) {
-                            	Array.set(valueArr_read, i, false);
-                                nullRead[i] = true;
-                            } else {
-                            	Array.set(valueArr_read, i, ((int) Double.parseDouble(currentValRead)) != 0);
-                            }
-                        } catch (final NumberFormatException n) {
-                        	Array.set(valueArr_read, i, "true".equalsIgnoreCase(currentValRead.trim()));
-                        }
-                        break;
-                    case TangoConst.Tango_DEV_CHAR:
-                    case TangoConst.Tango_DEV_UCHAR:
-                        try {
-                            if (isNullOrNaN(currentValRead)) {
-                            	Array.set(valueArr_read, i, (byte)0);
-                                nullRead[i] = true;
-                            } else {
-                            	Array.set(valueArr_read, i,Byte.parseByte(currentValRead));
-                            }
-                        } catch (final NumberFormatException n) {
-                        	Array.set(valueArr_read, i,(byte) Double.parseDouble(currentValRead));
-                        }
-                        break;
-                    case TangoConst.Tango_DEV_STATE:
-                    case TangoConst.Tango_DEV_LONG:
-                    case TangoConst.Tango_DEV_ULONG:
-                        try {
-                            if (isNullOrNaN(currentValRead)) {
-                            	Array.set(valueArr_read, i, (int)0);
-                                nullRead[i] = true;
-                            } else {
-                            	Array.set(valueArr_read, i,Integer.parseInt(currentValRead));
-                            }
-                        } catch (final NumberFormatException n) {
-                        	Array.set(valueArr_read, i,(int) Double.parseDouble(currentValRead));
-                        }
-                        break;
-                    case TangoConst.Tango_DEV_SHORT:
-                    case TangoConst.Tango_DEV_USHORT:
-                        try {
-                            if (isNullOrNaN(currentValRead)) {
-                            	Array.set(valueArr_read, i, (short)0);
-                                nullRead[i] = true;
-                            } else {
-                            	Array.set(valueArr_read, i,Short.parseShort(currentValRead));
-                            }
-                        } catch (final NumberFormatException n) {
-                        	Array.set(valueArr_read, i, (short) Double.parseDouble(currentValRead));
-                        }
-                        break;
-                    case TangoConst.Tango_DEV_FLOAT:
-                        if (isNullOrNaN(currentValRead)) {
-							Array.set(valueArr_read, i, Float.NaN);
-                            nullRead[i] = true;
-                        } else {
-
-                        }
-                        break;
-                    case TangoConst.Tango_DEV_STRING:
-                        if (isNullOrNaN(currentValRead)) {
-							Array.set(valueArr_read, i, null);
-                            nullRead[i] = true;
-                        } else {
-							Array.set(valueArr_read, i, StringFormater.formatStringToRead(new String(currentValRead)));
-                        }
-                        break;
-                    case TangoConst.Tango_DEV_DOUBLE:
-                    default:
-                        if (isNullOrNaN(currentValRead)) {
-							Array.set(valueArr_read, i, MathConst.NAN_FOR_NULL);
-                            nullRead[i] = true;
-                        } else {
-							Array.set(valueArr_read, i, Double.parseDouble(currentValRead));
-                        }
-                }
+				if (TangoJAVAUtils.isNullOrNaN(currentValRead)) {
+					nullRead[i] = true;
+					Array.set(valueArr_read, i, TangoJAVAUtils.defaultValue(dataType));
+				} else {
+					Array.set(valueArr_read, i, TangoJAVAUtils.cast(dataType, currentValRead));
+				}
                 i++;
             }
         }
@@ -1961,85 +1005,12 @@ public class DataBaseAPI {
                 if (currentValWrite == null || currentValWrite.trim().equals("")) {
                     break;
                 }
-                switch (dataType) {
-				case TangoConst.Tango_DEV_BOOLEAN:
-					try {
-						if (isNullOrNaN(currentValWrite)) {
-							Array.set(valueArr_write, i, false);
-							nullRead[i] = true;
-						} else {
-							Array.set(valueArr_write, i, ((int) Double.parseDouble(currentValWrite)) != 0);
-                        }
-					} catch (final NumberFormatException n) {
-						Array.set(valueArr_write, i, "true".equalsIgnoreCase(currentValWrite.trim()));
-					}
-					break;
-				case TangoConst.Tango_DEV_CHAR:
-				case TangoConst.Tango_DEV_UCHAR:
-					try {
-                        if (isNullOrNaN(currentValWrite)) {
-							Array.set(valueArr_write, i, (byte) 0);
-							nullRead[i] = true;
-                        } else {
-							Array.set(valueArr_write, i, Byte.parseByte(currentValWrite));
-                        }
-					} catch (final NumberFormatException n) {
-						Array.set(valueArr_write, i, (byte) Double.parseDouble(currentValWrite));
-					}
-					break;
-				case TangoConst.Tango_DEV_STATE:
-				case TangoConst.Tango_DEV_LONG:
-				case TangoConst.Tango_DEV_ULONG:
-					try {
-                        if (isNullOrNaN(currentValWrite)) {
-							Array.set(valueArr_write, i, (int) 0);
-							nullRead[i] = true;
-                        } else {
-							Array.set(valueArr_write, i, Integer.parseInt(currentValWrite));
-                        }
-					} catch (final NumberFormatException n) {
-						Array.set(valueArr_write, i, (int) Double.parseDouble(currentValWrite));
-					}
-					break;
-				case TangoConst.Tango_DEV_SHORT:
-				case TangoConst.Tango_DEV_USHORT:
-					try {
-                        if (isNullOrNaN(currentValWrite)) {
-							Array.set(valueArr_write, i, (short) 0);
-							nullRead[i] = true;
-                        } else {
-							Array.set(valueArr_write, i, Short.parseShort(currentValWrite));
-                        }
-					} catch (final NumberFormatException n) {
-						Array.set(valueArr_write, i, (short) Double.parseDouble(currentValWrite));
-					}
-					break;
-				case TangoConst.Tango_DEV_FLOAT:
-					if (isNullOrNaN(currentValWrite)) {
-						Array.set(valueArr_write, i, Float.NaN);
-						nullRead[i] = true;
-					} else {
-
-					}
-					break;
-				case TangoConst.Tango_DEV_STRING:
-					if (isNullOrNaN(currentValWrite)) {
-						Array.set(valueArr_write, i, null);
-						nullRead[i] = true;
-					} else {
-						Array.set(valueArr_write, i, StringFormater.formatStringToRead(new String(currentValWrite)));
-					}
-					break;
-				case TangoConst.Tango_DEV_DOUBLE:
-				default:
-					if (isNullOrNaN(currentValWrite)) {
-						Array.set(valueArr_write, i, MathConst.NAN_FOR_NULL);
-						nullRead[i] = true;
-					} else {
-						Array.set(valueArr_write, i, Double.parseDouble(currentValWrite));
-					}
+				if (TangoJAVAUtils.isNullOrNaN(currentValWrite)) {
+					nullWrite[i] = true;
+					Array.set(valueArr_write, i, TangoJAVAUtils.defaultValue(dataType));
+				} else {
+					Array.set(valueArr_write, i, TangoJAVAUtils.cast(dataType, currentValWrite));
 				}
-
                 i++;
             }
         }
@@ -2048,200 +1019,10 @@ public class DataBaseAPI {
 			final Object[] result = new Object[] { valueArr_read, valueArr_write };
             final boolean[][] nullElements = new boolean[][] { nullRead, nullWrite };
 
-            return new NullableData<Object[], boolean[][]>(result, nullElements);
+			return new NullableData<boolean[][]>(result, nullElements);
         } else {
-            switch (dataType) {
-                case TangoConst.Tango_DEV_BOOLEAN:
-					return new NullableData<boolean[], boolean[]>((boolean[]) valueArr_read, nullRead);
-                case TangoConst.Tango_DEV_CHAR:
-                case TangoConst.Tango_DEV_UCHAR:
-					return new NullableData<byte[], boolean[]>((byte[]) valueArr_read, nullRead);
-                case TangoConst.Tango_DEV_STATE:
-                case TangoConst.Tango_DEV_LONG:
-                case TangoConst.Tango_DEV_ULONG:
-					return new NullableData<int[], boolean[]>((int[]) valueArr_read, nullRead);
-                case TangoConst.Tango_DEV_SHORT:
-                case TangoConst.Tango_DEV_USHORT:
-					return new NullableData<short[], boolean[]>((short[]) valueArr_read, nullRead);
-                case TangoConst.Tango_DEV_FLOAT:
-					return new NullableData<float[], boolean[]>((float[]) valueArr_read, nullRead);
-                case TangoConst.Tango_DEV_STRING:
-					return new NullableData<String[], boolean[]>((String[]) valueArr_read, nullRead);
-                case TangoConst.Tango_DEV_DOUBLE:
-                default:
-					return new NullableData<double[], boolean[]>((double[]) valueArr_read, nullRead);
-            }
-        }
-    }
-
-    private NullableData<Object[], boolean[][]> getImageValue(final String dbValue, final int data_type) {
-        if (dbValue == null || "".equals(dbValue) || "null".equals(dbValue)) {
-            return null;
-        }
-        Object[] valArray = null;
-        String value = new String(dbValue);
-        value = value.replaceAll("\\[", "");
-        value = value.replaceAll("\\]", "");
-
-        StringTokenizer readTokenizer = null;
-        int rowSize = 0, colSize = 0;
-
-		readTokenizer = new StringTokenizer(value, GlobalConst.CLOB_SEPARATOR_IMAGE_ROWS);
-        rowSize = readTokenizer.countTokens();
-
-        if (readTokenizer != null) {
-            valArray = new Object[rowSize];
-            int i = 0;
-            while (readTokenizer.hasMoreTokens()) {
-				valArray[i++] = readTokenizer.nextToken().trim().split(GlobalConst.CLOB_SEPARATOR_IMAGE_COLS);
-            }
-            if (rowSize > 0) {
-                colSize = ((String[]) valArray[0]).length;
-            }
-        }
-
-        final boolean[][] nullElements = new boolean[rowSize][colSize];
-        double[][] dvalueArr = null;
-        byte[][] cvalueArr = null;
-        int[][] lvalueArr = null;
-        short[][] svalueArr = null;
-        boolean[][] bvalueArr = null;
-        float[][] fvalueArr = null;
-        String[][] stvalueArr = null;
-        switch (data_type) {
-            case TangoConst.Tango_DEV_BOOLEAN:
-                bvalueArr = new boolean[rowSize][colSize];
-                for (int i = 0; i < rowSize; i++) {
-                    for (int j = 0; j < colSize; j++) {
-                        try {
-                            if (((String[]) valArray[i])[j] == null || "".equals(((String[]) valArray[i])[j])
-                                    || "null".equals(((String[]) valArray[i])[j])
-                                    || "NaN".equalsIgnoreCase(((String[]) valArray[i])[j])) {
-                                bvalueArr[i][j] = false;
-                                nullElements[i][j] = true;
-                            } else {
-                                bvalueArr[i][j] = (((byte) Double.parseDouble(((String[]) valArray[i])[j].trim())) != 0);
-                            }
-                        } catch (final NumberFormatException n) {
-                            bvalueArr[i][j] = new Boolean("true".equalsIgnoreCase(((String[]) valArray[i])[j].trim()));
-                        }
-                    }
-                }
-                return new NullableData<Object[], boolean[][]>(bvalueArr, nullElements);
-            case TangoConst.Tango_DEV_CHAR:
-            case TangoConst.Tango_DEV_UCHAR:
-                cvalueArr = new byte[rowSize][colSize];
-                for (int i = 0; i < valArray.length; i++) {
-                    for (int j = 0; j < colSize; j++) {
-                        try {
-                            if (((String[]) valArray[i])[j] == null || "".equals(((String[]) valArray[i])[j])
-                                    || "null".equals(((String[]) valArray[i])[j])
-                                    || "NaN".equalsIgnoreCase(((String[]) valArray[i])[j])) {
-                                cvalueArr[i][j] = 0;
-                                nullElements[i][j] = true;
-                            } else {
-                                cvalueArr[i][j] = Byte.parseByte(((String[]) valArray[i])[j].trim());
-                            }
-                        } catch (final NumberFormatException n) {
-                            cvalueArr[i][j] = (byte) Double.parseDouble(((String[]) valArray[i])[j].trim());
-                        }
-                    }
-                }
-                return new NullableData<Object[], boolean[][]>(cvalueArr, nullElements);
-            case TangoConst.Tango_DEV_STATE:
-            case TangoConst.Tango_DEV_LONG:
-            case TangoConst.Tango_DEV_ULONG:
-                lvalueArr = new int[rowSize][colSize];
-                for (int i = 0; i < valArray.length; i++) {
-                    for (int j = 0; j < colSize; j++) {
-                        try {
-                            if (((String[]) valArray[i])[j] == null || "".equals(((String[]) valArray[i])[j])
-                                    || "null".equals(((String[]) valArray[i])[j])
-                                    || "NaN".equalsIgnoreCase(((String[]) valArray[i])[j])) {
-                                lvalueArr[i][j] = 0;
-                                nullElements[i][j] = true;
-                            } else {
-                                lvalueArr[i][j] = Integer.parseInt(((String[]) valArray[i])[j].trim());
-                            }
-                        } catch (final NumberFormatException n) {
-                            lvalueArr[i][j] = (int) Double.parseDouble(((String[]) valArray[i])[j].trim());
-                        }
-                    }
-                }
-                return new NullableData<Object[], boolean[][]>(lvalueArr, nullElements);
-            case TangoConst.Tango_DEV_SHORT:
-            case TangoConst.Tango_DEV_USHORT:
-                svalueArr = new short[rowSize][colSize];
-                for (int i = 0; i < valArray.length; i++) {
-                    for (int j = 0; j < colSize; j++) {
-                        try {
-                            if (((String[]) valArray[i])[j] == null || "".equals(((String[]) valArray[i])[j])
-                                    || "null".equals(((String[]) valArray[i])[j])
-                                    || "NaN".equalsIgnoreCase(((String[]) valArray[i])[j])) {
-                                svalueArr[i][j] = 0;
-                                nullElements[i][j] = true;
-                            } else {
-                                svalueArr[i][j] = Short.parseShort(((String[]) valArray[i])[j].trim());
-                            }
-                        } catch (final NumberFormatException n) {
-                            svalueArr[i][j] = (short) Double.parseDouble(((String[]) valArray[i])[j].trim());
-                        }
-                    }
-                }
-                return new NullableData<Object[], boolean[][]>(svalueArr, nullElements);
-            case TangoConst.Tango_DEV_FLOAT:
-                fvalueArr = new float[rowSize][colSize];
-                for (int i = 0; i < valArray.length; i++) {
-                    for (int j = 0; j < colSize; j++) {
-                        try {
-                            if (((String[]) valArray[i])[j] == null || "".equals(((String[]) valArray[i])[j])
-                                    || "null".equals(((String[]) valArray[i])[j])
-                                    || "NaN".equalsIgnoreCase(((String[]) valArray[i])[j])) {
-                                fvalueArr[i][j] = Float.NaN;
-                                nullElements[i][j] = true;
-                            } else {
-                                fvalueArr[i][j] = Float.parseFloat(((String[]) valArray[i])[j].trim());
-                            }
-                        } catch (final NumberFormatException n) {
-                            fvalueArr[i][j] = (float) Double.parseDouble(((String[]) valArray[i])[j].trim());
-                        }
-                    }
-                }
-                return new NullableData<Object[], boolean[][]>(fvalueArr, nullElements);
-            case TangoConst.Tango_DEV_STRING:
-                stvalueArr = new String[rowSize][colSize];
-                for (int i = 0; i < valArray.length; i++) {
-                    for (int j = 0; j < colSize; j++) {
-                        if (((String[]) valArray[i])[j] == null || "".equals(((String[]) valArray[i])[j])
-                                || "null".equals(((String[]) valArray[i])[j])
-                                || "NaN".equalsIgnoreCase(((String[]) valArray[i])[j])) {
-                            stvalueArr[i][j] = null;
-                            nullElements[i][j] = true;
-                        } else {
-                            stvalueArr[i][j] = StringFormater.formatStringToRead(new String(((String[]) valArray[i])[j]
-                                    .trim()));
-                        }
-                    }
-                }
-                return new NullableData<Object[], boolean[][]>(stvalueArr, nullElements);
-            case TangoConst.Tango_DEV_DOUBLE:
-            default:
-                dvalueArr = new double[rowSize][colSize];
-                for (int i = 0; i < valArray.length; i++) {
-                    for (int j = 0; j < colSize; j++) {
-                        if (((String[]) valArray[i])[j] == null || "".equals(((String[]) valArray[i])[j])
-                                || "null".equals(((String[]) valArray[i])[j])
-                                || "NaN".equalsIgnoreCase(((String[]) valArray[i])[j])) {
-                            dvalueArr[i][j] = MathConst.NAN_FOR_NULL;
-                            nullElements[i][j] = true;
-                        } else {
-                            dvalueArr[i][j] = Double.parseDouble(((String[]) valArray[i])[j].trim());
-                        }
-                    }
-                }
-                return new NullableData<Object[], boolean[][]>(dvalueArr, nullElements);
+			return new NullableData<boolean[]>(valueArr_read, nullRead);
         }
-
     }
 
     /*****************************************************************************
@@ -2260,264 +1041,83 @@ public class DataBaseAPI {
      *            the attribute to register
      * @throws SnapshotingException
      */
-    public void registerAttribute(final SnapAttributeHeavy snapAttributeHeavy) throws SnapshotingException {
-        Connection conn = null;
+	public void registerAttribute(final SnapAttributeHeavy snapAttributeHeavy) throws SnapshotingException {
+		Connection conn = null;
+		Object[] listValues = new Object[] { snapAttributeHeavy.getAttributeCompleteName(),
+				snapAttributeHeavy.getAttribute_device_name(), snapAttributeHeavy.getDomain(),
+				snapAttributeHeavy.getFamily(), snapAttributeHeavy.getMember(), snapAttributeHeavy.getAttribute_name(),
+				snapAttributeHeavy.getDataType(), snapAttributeHeavy.getDataFormat(), snapAttributeHeavy.getWritable(),
+				snapAttributeHeavy.getMax_dim_x(), snapAttributeHeavy.getMax_dim_y(), snapAttributeHeavy.getLevel(),
+				snapAttributeHeavy.getCtrl_sys(), snapAttributeHeavy.getArchivable(),
+				snapAttributeHeavy.getSubstitute() };
+
+		StringBuilder valueConcat = new StringBuilder();
+
+		PreparedStatement preparedStatement = null;
+		String query = "";
 		if (params.getDbType() == DataBaseType.MYSQL) {
-            PreparedStatement preparedStatement = null;
-
-            final String tableName = getDbSchema() + "." + SnapConst.AST;
-
-            // Create and execute the SQL query string
-            // Build the query string
-            String insert_fields = "";
-            for (int i = 1; i < SnapConst.TAB_DEF.length - 1; i++) {
-                insert_fields = insert_fields + SnapConst.TAB_DEF[i] + ", ";
-            }
-            insert_fields = insert_fields + SnapConst.TAB_DEF[SnapConst.TAB_DEF.length - 1];
-
-            String insert_values = "";
-            for (int i = 1; i < SnapConst.TAB_DEF.length - 1; i++) {
-                insert_values = insert_values + "?" + ", ";
-            }
-            insert_values = insert_values + "?";
-
-            final String query = "INSERT INTO " + tableName + " (" + insert_fields + ") " + " VALUES(" + insert_values
-                    + " ) ";
-            StringBuilder valueConcat = new StringBuilder();
-
-            try {
-				conn = connector.getConnection();
-                preparedStatement = conn.prepareStatement(query);
-                preparedStatement.setDate(1, new java.sql.Date(snapAttributeHeavy.getRegistration_time().getTime()));
-
-                Object[] listValues = new Object[] { snapAttributeHeavy.getAttributeCompleteName(),
-                        snapAttributeHeavy.getAttribute_device_name(), snapAttributeHeavy.getDomain(),
-                        snapAttributeHeavy.getFamily(), snapAttributeHeavy.getMember(),
-                        snapAttributeHeavy.getAttribute_name(), snapAttributeHeavy.getDataType(),
-                        snapAttributeHeavy.getDataFormat(), snapAttributeHeavy.getWritable(),
-                        snapAttributeHeavy.getMax_dim_x(), snapAttributeHeavy.getMax_dim_y(),
-                        snapAttributeHeavy.getLevel(), snapAttributeHeavy.getCtrl_sys(),
-                        snapAttributeHeavy.getArchivable(), snapAttributeHeavy.getSubstitute() };
-
-                valueConcat.append("(");
-                for (int i = 2; i < listValues.length + 2; ++i) {
-                    Object value = listValues[i - 2];
-                    if (value instanceof Integer) {
-                        int intValue = ((Integer) value).intValue();
-                        preparedStatement.setInt(i, intValue);
-                        valueConcat.append(intValue);
-                    }
-                    if (value instanceof String) {
-                        preparedStatement.setString(i, (String) value);
-                        valueConcat.append((String) value);
-                    }
-                    valueConcat.append(",");
-                }
-                valueConcat.append(")");
-
-                preparedStatement.executeUpdate();
-                listValues = null;
-                valueConcat = null;
 
-                // preparedStatement.close();
-            } catch (final SQLException e) {
-                final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.QUERY_FAILURE;
-                final String reason = "Failed while executing DataBaseAPI.registerAttribute() method...";
-                final String desc = "";
-                final String queryDebug = query + " => " + valueConcat.toString();
-                throw new SnapshotingException(message, reason, queryDebug, ErrSeverity.PANIC, desc, "", e);
-            } finally {
-                closeStatement(preparedStatement);
-                closeConnection(conn);
-            }
-		} else if (params.getDbType() == DataBaseType.ORACLE) {
-            CallableStatement callableStatement = null;
-            final String procName = "RSA";
-            final String query = "{call " + getDbSchema() + "." + procName
-                    + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}";
-            StringBuilder valueConcat = new StringBuilder();
-            try {
-				conn = connector.getConnection();
-                callableStatement = conn.prepareCall(query); // number of
-                // parameters :
-                // 16
-                callableStatement.setTimestamp(1, snapAttributeHeavy.getRegistration_time());
-
-                Object[] listValues = new Object[] { snapAttributeHeavy.getAttributeCompleteName(),
-                        snapAttributeHeavy.getAttribute_device_name(), snapAttributeHeavy.getDomain(),
-                        snapAttributeHeavy.getFamily(), snapAttributeHeavy.getMember(),
-                        snapAttributeHeavy.getAttribute_name(), snapAttributeHeavy.getDataType(),
-                        snapAttributeHeavy.getDataFormat(), snapAttributeHeavy.getWritable(),
-                        snapAttributeHeavy.getMax_dim_x(), snapAttributeHeavy.getMax_dim_y(),
-                        snapAttributeHeavy.getLevel(), snapAttributeHeavy.getCtrl_sys(),
-                        snapAttributeHeavy.getArchivable(), snapAttributeHeavy.getSubstitute() };
-
-                valueConcat.append("(");
-                for (int i = 2; i < listValues.length + 2; ++i) {
-                    Object value = listValues[i - 2];
-                    if (value instanceof Integer) {
-                        int intValue = ((Integer) value).intValue();
-                        callableStatement.setInt(i, intValue);
-                        valueConcat.append(intValue);
-                    }
-                    if (value instanceof String) {
-                        callableStatement.setString(i, (String) value);
-                        valueConcat.append((String) value);
-                    }
-                    valueConcat.append(",");
-                }
-                valueConcat.append(")");
+			final String tableName = getDbSchema() + "." + SnapConst.AST;
 
-                callableStatement.executeUpdate();
-                callableStatement.close();
-            } catch (final SQLException e) {
-                final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.QUERY_FAILURE;
-                final String reason = "Failed while executing DataBaseAPI.registerAttribute() method...";
-                final String desc = "";
-                final String queryDebug = query + " => " + valueConcat.toString();
-                throw new SnapshotingException(message, reason, queryDebug, ErrSeverity.PANIC, desc, "", e);
-            } finally {
-                closeStatement(callableStatement);
-                closeConnection(conn);
-            }
-        }
-    }
+			// Create and execute the SQL query string
+			// Build the query string
+			String insert_fields = String.join(", ", SnapConst.TAB_DEF);
 
-    /**
-     * ************************************************************************
-     * <b>Description : </b> Returns an array containing the differents
-     * definition informations for the given attribute
-     * 
-     * @param att_name
-     *            The attribute's name
-     * @return An array containing the differents definition informations for
-     *         the given attribute
-     * @throws SnapshotingException
-     *             *************************************************************
-     *             * ********
-     */
-    public List<String> getAttDefinitionData(final String att_name) throws SnapshotingException {
-        final List<String> definitionsList = new ArrayList<String>();
-        Connection conn = null;
-        ResultSet rset = null;
-        // PreparedStatement preparedStatement;
-        Statement statement = null;
+			String insert_values = "";
+			for (int i = 1; i < SnapConst.TAB_DEF.length - 1; i++) {
+				insert_values = insert_values + "?" + ", ";
+			}
+			insert_values = insert_values + "?";
 
-        // Create and execute the SQL query string
-        String query = "";
-        final String table_name = getDbSchema() + "." + SnapConst.AST;
-        String select_field_spec = "";
-        // String clause_1 = ConfigConst.fullName + "= ?";
-        final String clause_1 = SnapConst.fullName + "= " + "'" + att_name.trim() + "'";
-		if (params.getDbType() == DataBaseType.MYSQL) {
-            select_field_spec = " * ";
+			query = "INSERT INTO " + tableName + " (" + insert_fields + ") " + " VALUES(" + insert_values + " ) ";
 		} else if (params.getDbType() == DataBaseType.ORACLE) {
-            for (int i = 0; i < SnapConst.TAB_DEF.length - 1; i++) {
-                select_field_spec = select_field_spec + "to_char(" + SnapConst.TAB_DEF[i] + ")" + ", ";
-            }
-            select_field_spec = select_field_spec + "to_char(" + SnapConst.TAB_DEF[SnapConst.TAB_DEF.length - 1] + ")";
-        }
-        query = "SELECT " + select_field_spec + " FROM " + table_name + " WHERE " + clause_1;
-        try {
-			conn = connector.getConnection();
-            statement = conn.createStatement();
-            rset = statement.executeQuery(query);
-            // Gets the result of the query
-            while (rset.next()) {
-                for (int i = 0; i < SnapConst.TAB_DEF.length; i++) {
-                    final String info = SnapConst.TAB_DEF[i] + "::" + rset.getString(i + 1);
-                    definitionsList.add(info);
-                }
-            }
-            statement.close();
-        } catch (final SQLException e) {
-            final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.QUERY_FAILURE;
-            final String reason = "Failed while executing DataBaseAPI.getAttDefinitionData() method...";
-            final String desc = "";
-            throw new SnapshotingException(message, reason, query, ErrSeverity.PANIC, desc, "", e);
-        } finally {
-            closeResultSet(rset);
-            closeStatement(statement);
-            closeConnection(conn);
-        }
-        // Returns the names list
-        return definitionsList;
-    }
-
-    /**
-     * Renvoi les différentes informations de définition de l'attribut passé en
-     * paramètre, qui verifie les conditions donnees. Author : Laure Garda
-     * 
-     * @param att_name
-     * @param clause
-     * @return
-     * @throws SnapshotingException
-     */
-    public List<SnapAttributeHeavy> getAttDefinitionData(final String att_name, final String clause)
-            throws SnapshotingException {
-        final List<SnapAttributeHeavy> definitionsList = new ArrayList<SnapAttributeHeavy>();
-        Connection conn = null;
-        ResultSet rset = null;
-        // PreparedStatement preparedStatement;
-        Statement statement = null;
-
-        // Create and execute the SQL query string
-        String query = "";
-        final String table_name = getDbSchema() + "." + SnapConst.AST;
-        final String clause_1 = SnapConst.fullName + " = " + "'" + att_name.trim() + "'";
-
-        final String select_field_spec = " * ";
-
-        if (clause.equals("")) {
-            query = "SELECT " + select_field_spec + " FROM " + table_name + " WHERE " + clause_1;
-        } else {
-            query = "SELECT " + select_field_spec + " FROM " + table_name + clause + " AND " + clause_1;
-        }
+			final String procName = "RSA";
+			query = "{call " + getDbSchema() + "." + procName + "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}";
+		}
 
-        try {
+		try {
 			conn = connector.getConnection();
-            statement = conn.createStatement();
+			preparedStatement = params.getDbType() == DataBaseType.MYSQL ? conn.prepareStatement(query)
+					: conn.prepareCall(query);
+			if (params.getDbType() == DataBaseType.MYSQL) {
+				preparedStatement.setDate(1, new java.sql.Date(snapAttributeHeavy.getRegistration_time().getTime()));
+			} else {
+				preparedStatement.setTimestamp(1, snapAttributeHeavy.getRegistration_time());
+			}
 
-            rset = statement.executeQuery(query);
-            // Gets the result of the query
-            while (rset.next()) {
-                final SnapAttributeHeavy snapAttributeHeavy = new SnapAttributeHeavy();
-                snapAttributeHeavy.setAttributeId(rset.getInt(1));
-                snapAttributeHeavy.setRegistration_time(rset.getTimestamp(2));
-                snapAttributeHeavy.setAttributeCompleteName(rset.getString(3));
-                snapAttributeHeavy.setAttribute_device_name(rset.getString(4));
-                snapAttributeHeavy.setDomain(rset.getString(5));
-                snapAttributeHeavy.setFamily(rset.getString(6));
-                snapAttributeHeavy.setMember(rset.getString(7));
-                snapAttributeHeavy.setAttribute_name(rset.getString(8));
-                snapAttributeHeavy.setDataType(rset.getInt(9));
-                snapAttributeHeavy.setDataFormat(rset.getInt(10));
-                snapAttributeHeavy.setWritable(rset.getInt(11));
-                snapAttributeHeavy.setMax_dim_x(rset.getInt(12));
-                snapAttributeHeavy.setMax_dim_y(rset.getInt(13));
-                snapAttributeHeavy.setLevel(rset.getInt(14));
-                snapAttributeHeavy.setCtrl_sys(rset.getString(15)); // facility
-                // =
-                // ctrl_sys??
-                snapAttributeHeavy.setArchivable(rset.getInt(16));
-                snapAttributeHeavy.setSubstitute(rset.getInt(17));
-                definitionsList.add(snapAttributeHeavy);
-            }
-            statement.close();
-        } catch (final SQLException e) {
-            final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.QUERY_FAILURE;
-            final String reason = "Failed while executing DataBaseAPI.getAttDefinitionData() method...";
-            final String desc = "";
-            throw new SnapshotingException(message, reason, query, ErrSeverity.PANIC, desc, "", e);
-        } finally {
-            closeResultSet(rset);
-            closeStatement(statement);
-            closeConnection(conn);
-        }
+			valueConcat.append("(");
+			for (int i = 2; i < listValues.length + 2; ++i) {
+				Object value = listValues[i - 2];
+				if (value instanceof Integer) {
+					int intValue = ((Integer) value).intValue();
+					preparedStatement.setInt(i, intValue);
+					valueConcat.append(intValue);
+				}
+				if (value instanceof String) {
+					preparedStatement.setString(i, (String) value);
+					valueConcat.append((String) value);
+				}
+				valueConcat.append(",");
+			}
+			valueConcat.append(")");
+
+			preparedStatement.executeUpdate();
+			listValues = null;
+			valueConcat = null;
+
+			// preparedStatement.close();
+		} catch (final SQLException e) {
+			final String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + SnapConst.QUERY_FAILURE;
+			final String reason = "Failed while executing DataBaseAPI.registerAttribute() method...";
+			final String desc = "";
+			final String queryDebug = query + " => " + valueConcat.toString();
+			throw new SnapshotingException(message, reason, queryDebug, ErrSeverity.PANIC, desc, "", e);
+		} finally {
+			closeStatement(preparedStatement);
+			closeConnection(conn);
+		}
 
-        // Returns the names list
-        return definitionsList;
-    }
+	}
 
     /**
      * This method registers a new context in the database for snapshots.
@@ -2529,6 +1129,7 @@ public class DataBaseAPI {
      * @throws SnapshotingException
      */
     public int create_context(final SnapContext snapContext) throws SnapshotingException {
+		// TODO refact
         int contextID = snapContext.getId();
         final String tableName = getDbSchema() + "." + SnapConst.CONTEXT;
         final java.util.List<Integer> contextIDList = new ArrayList<Integer>();
@@ -2550,8 +1151,8 @@ public class DataBaseAPI {
                 // update snap.context SET name=?, author=?, reason=?,
                 // description=? where id =?;
                 final String updateQuery = "UPDATE " + tableName + " SET " + SnapConst.name + "= ?, "
-                        + SnapConst.TAB_CONTEXT[3] + "= ?, " + SnapConst.TAB_CONTEXT[4] + "= ?, "
-                        + SnapConst.TAB_CONTEXT[5] + "= ? WHERE " + SnapConst.ID_CONTEXT + "= ?";
+						+ SnapConst.author + "= ?, " + SnapConst.reason + "= ?, " + SnapConst.description + "= ? WHERE "
+						+ SnapConst.ID_CONTEXT + "= ?";
                 try {
 
                     preparedStatement = conn.prepareStatement(updateQuery);
@@ -2670,22 +1271,17 @@ public class DataBaseAPI {
 
         // final String selectFields = "*";
         final String clause1 = SnapConst.AST + "." + SnapConst.ID + " = " + SnapConst.LIST + "."
-                + SnapConst.TAB_LIST[1];
-        final String clause2 = SnapConst.LIST + "." + SnapConst.TAB_LIST[0] + " = " + SnapConst.CONTEXT + "."
+				+ SnapConst.ID_ATT;
+		final String clause2 = SnapConst.LIST + "." + SnapConst.ID_CONTEXT + " = " + SnapConst.CONTEXT + "."
                 + SnapConst.ID_CONTEXT;
         final String clause3 = SnapConst.CONTEXT + "." + SnapConst.ID_CONTEXT + " = ?";
         // the SQL request is : select DISTINCT full_name from snap.ast where
         // ast.id = list.id_att and list.id_context = context.id_context and
         // context.name = 'nom';
-        String query = "SELECT " + selectFields + " FROM " + tables + " WHERE " + clause1 + " AND " + clause2 + " AND "
+		String query = "SELECT " + selectFields + " FROM " + tables
+				+ (whereClause.equals("") ? " WHERE " : whereClause + " AND ") + clause1 + " AND " + clause2 + " AND "
                 + clause3;
-        if (whereClause.equals("")) {
-            query = "SELECT " + selectFields + " FROM " + tables + " WHERE " + clause1 + " AND " + clause2 + " AND "
-                    + clause3;
-        } else {
-            query = "SELECT " + selectFields + " FROM " + tables + whereClause + " AND " + clause1 + " AND " + clause2
-                    + " AND " + clause3;
-        }
+
         PreparedStatement statement = null;
         ResultSet rset = null;
         Connection conn = null;
@@ -2838,8 +1434,8 @@ public class DataBaseAPI {
                 SnapConst.dataFormat + ", " + // data_format
                 SnapConst.writable; // writable
         final String clause_1 = SnapConst.AST + "." + SnapConst.ID + " = " + SnapConst.LIST + "."
-                + SnapConst.TAB_LIST[1];
-        final String clause_2 = SnapConst.LIST + "." + SnapConst.TAB_LIST[0] + " = " + SnapConst.CONTEXT + "."
+				+ SnapConst.ID_ATT;
+		final String clause_2 = SnapConst.LIST + "." + SnapConst.ID_CONTEXT + " = " + SnapConst.CONTEXT + "."
                 + SnapConst.ID_CONTEXT;
         final String clause_3 = SnapConst.CONTEXT + "." + SnapConst.ID_CONTEXT + " = ?";
         // the SQL request is : select DISTINCT full_name from snap.ast where
@@ -2894,12 +1490,12 @@ public class DataBaseAPI {
         final String tableName = getDbSchema() + "." + SnapConst.LIST;
 
         String query;
-        final String insert_fields = SnapConst.TAB_LIST[0] + ", " + SnapConst.TAB_LIST[1];
+		final String insert_fields = SnapConst.ID_CONTEXT + ", " + SnapConst.ID_ATT;
         query = "INSERT INTO " + tableName + " (" + insert_fields + ")" + " VALUES (?,?)";
         PreparedStatement prest = null;
         Connection conn = null;
-        final String selectQuery = "select " + SnapConst.TAB_LIST[1] + " from " + tableName + " where "
-                + SnapConst.TAB_LIST[0] + " = " + id_context;
+		final String selectQuery = "select " + SnapConst.ID_ATT + " from " + tableName + " where "
+				+ SnapConst.ID_CONTEXT + " = " + id_context;
         try {
 			conn = connector.getConnection();
             prest = conn.prepareStatement(selectQuery);
@@ -3080,9 +1676,8 @@ public class DataBaseAPI {
     private void updateSnapContextID(final int id_snap, final int initial_context_value) throws SnapshotingException {
         PreparedStatement preparedStatement = null;
         final String table = getDbSchema() + "." + SnapConst.SNAPSHOT;
-		final String setField = SnapConst.ID_CONTEXT;
-        final String refField = SnapConst.ID_SNAP;
-        final String query = "UPDATE " + table + " SET " + setField + "=? " + "WHERE " + refField + "=?";
+		final String query = "UPDATE " + table + " SET " + SnapConst.ID_CONTEXT + "=? " + "WHERE " + SnapConst.ID_SNAP
+				+ "=?";
         Connection conn = null;
 
         try {
@@ -3118,10 +1713,8 @@ public class DataBaseAPI {
         PreparedStatement preparedStatement = null;
         Connection conn = null;
         final String table = getDbSchema() + "." + SnapConst.SNAPSHOT;
-        final String setField = SnapConst.snap_comment;
-        final String refField = SnapConst.ID_SNAP;
-        final String query = "UPDATE " + table + " SET " + setField + " = '" + new_comment + "' WHERE " + refField
-                + " = ?";
+		final String query = "UPDATE " + table + " SET " + SnapConst.snap_comment + " = '" + new_comment + "' WHERE "
+				+ SnapConst.ID_SNAP + " = ?";
         try {
 			conn = connector.getConnection();
             preparedStatement = conn.prepareStatement(query);
@@ -3152,9 +1745,8 @@ public class DataBaseAPI {
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
         final String table = getDbSchema() + "." + SnapConst.SNAPSHOT;
-        final String commentColumn = SnapConst.snap_comment;
-        final String id = SnapConst.ID_SNAP;
-        final String query = "SELECT " + commentColumn + " FROM " + table + " WHERE " + id + " = " + snapID;
+		final String query = "SELECT " + SnapConst.snap_comment + " FROM " + table + " WHERE " + SnapConst.ID_SNAP
+				+ " = " + snapID;
         String comment = "";
         try {
 			conn = connector.getConnection();
@@ -3192,7 +1784,7 @@ public class DataBaseAPI {
         int idSnap = -1;
         final String table = getDbSchema() + "." + SnapConst.SNAPSHOT;
         final String selectField = SnapConst.ID_SNAP;
-        final String clause_1 = SnapConst.TAB_SNAP[1] + "=?";
+		final String clause_1 = SnapConst.ID_CONTEXT + "=?";
         final String query = "SELECT " + selectField + " FROM " + table + " WHERE " + clause_1;
         PreparedStatement preparedStatement = null;
         ResultSet rset = null;
@@ -3236,7 +1828,7 @@ public class DataBaseAPI {
         final java.sql.Timestamp time = new java.sql.Timestamp(new java.util.Date().getTime());
         PreparedStatement preparedStatement = null;
         final String table = getDbSchema() + "." + SnapConst.SNAPSHOT;
-        final String insert_fields = SnapConst.TAB_SNAP[1] + ", " +SnapConst.time;
+		final String insert_fields = SnapConst.ID_CONTEXT + ", " + SnapConst.time;
         final String insert_values = "?, ?";
         final String query = "INSERT INTO " + table + " (" + insert_fields + ") VALUES(" + insert_values + ")";
         Connection conn = null;
@@ -3280,97 +1872,22 @@ public class DataBaseAPI {
     // Inner classes //
     // ///////////// //
 
-    public static class NullableData<V, B> {
-        private final V value;
-        private final B nullElements;
+	public static class NullableData<T> {
+		private final Object value;
+		private final T nullElements;
 
-        public NullableData(final V value, final B nullElements) {
+		public NullableData(Object value, T nullElements) {
             super();
             this.value = value;
             this.nullElements = nullElements;
         }
 
-        public V getValue() {
+		public Object getValue() {
             return value;
         }
 
-        public B getNullElements() {
+		public T getNullElements() {
             return nullElements;
         }
-
     }
-
-	private Object initPrimitiveArray(int dataType, int length) {
-		switch (dataType) {
-		case TangoConst.Tango_DEV_BOOLEAN:
-			return new boolean[length];
-		case TangoConst.Tango_DEV_CHAR:
-		case TangoConst.Tango_DEV_UCHAR:
-			return new byte[length];
-		case TangoConst.Tango_DEV_STATE:
-		case TangoConst.Tango_DEV_LONG:
-		case TangoConst.Tango_DEV_ULONG:
-			return new int[length];
-		case TangoConst.Tango_DEV_SHORT:
-		case TangoConst.Tango_DEV_USHORT:
-			return new short[length];
-		case TangoConst.Tango_DEV_FLOAT:
-			return new float[length];
-		case TangoConst.Tango_DEV_STRING:
-			return new String[length];
-		case TangoConst.Tango_DEV_DOUBLE:
-		default:
-			return new double[length];
-		}
-
-	}
-
-	private Object castResultSetAsPrimitive(int dataType, ResultSet resultSet, int index) throws SQLException {
-		switch (dataType) {
-		case TangoConst.Tango_DEV_STRING:
-			return resultSet.getString(1);
-		case TangoConst.Tango_DEV_UCHAR:
-		case TangoConst.Tango_DEV_CHAR:
-			return resultSet.getByte(index);
-		case TangoConst.Tango_DEV_LONG:
-		case TangoConst.Tango_DEV_ULONG:
-		case TangoConst.Tango_DEV_STATE:
-			return resultSet.getInt(index);
-		case TangoConst.Tango_DEV_BOOLEAN:
-			return resultSet.getInt(index) != 0;
-		case TangoConst.Tango_DEV_SHORT:
-		case TangoConst.Tango_DEV_USHORT:
-			return resultSet.getShort(index);
-		case TangoConst.Tango_DEV_FLOAT:
-			return resultSet.getFloat(index);
-		case TangoConst.Tango_DEV_DOUBLE:
-		default:
-			return resultSet.getDouble(index);
-		}
-	}
-
-	private Object castResultSetAsObject(int dataType, ResultSet resultSet, int index) throws SQLException {
-		switch (dataType) {
-		case TangoConst.Tango_DEV_STRING:
-			return resultSet.getString(1);
-		case TangoConst.Tango_DEV_UCHAR:
-		case TangoConst.Tango_DEV_CHAR:
-			return Byte.valueOf(resultSet.getByte(index));
-		case TangoConst.Tango_DEV_LONG:
-		case TangoConst.Tango_DEV_ULONG:
-		case TangoConst.Tango_DEV_STATE:
-			return Integer.valueOf(resultSet.getInt(index));
-		case TangoConst.Tango_DEV_BOOLEAN:
-			return Boolean.valueOf(resultSet.getInt(index) != 0);
-		case TangoConst.Tango_DEV_SHORT:
-		case TangoConst.Tango_DEV_USHORT:
-			return Short.valueOf(resultSet.getShort(index));
-		case TangoConst.Tango_DEV_FLOAT:
-			return Float.valueOf(resultSet.getFloat(index));
-		case TangoConst.Tango_DEV_DOUBLE:
-		default:
-			return Double.valueOf(resultSet.getDouble(index));
-		}
-	}
-
 }
diff --git a/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java b/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java
index fdf5b82..d01f901 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/manager/SnapManagerApi.java
@@ -540,12 +540,6 @@ public class SnapManagerApi {
 
     }
 
-    public static List<SnapContext> getAllContext() throws SnapshotingException {
-        if (snapDataBase == null) {
-            throw new SnapshotingException(DATA_BASE_API_NOT_INIT);
-        }
-        return snapDataBase.getAllContext();
-    }
 
     /**
      * TODO LG Description : Extracts the clause SQL from the given criterions
@@ -691,13 +685,7 @@ public class SnapManagerApi {
         return result;
     }
 
-    public static List<String> getAttDefinitionData(final String attributeName) throws SnapshotingException {
-        if (snapDataBase == null) {
-            throw new SnapshotingException(DATA_BASE_API_NOT_INIT);
-        }
-        final List<String> vector = snapDataBase.getAttDefinitionData(attributeName);
-        return vector;
-    }
+
 
     public static int getMaxID() throws SnapshotingException {
         if (snapDataBase == null) {
@@ -706,12 +694,7 @@ public class SnapManagerApi {
         return snapDataBase.getMaxContextID();
     }
 
-    public static List<SnapshotLight> getContextAssociatedSnapshots(final int id_context) throws SnapshotingException {
-        if (snapDataBase == null) {
-            throw new SnapshotingException(DATA_BASE_API_NOT_INIT);
-        }
-        return snapDataBase.getContextAssociatedSnapshots(id_context);
-    }
+
 
     /**
      * TODO LG Description : Extracts the clause SQL from the given criterions
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/AttributeSupport.java b/src/main/java/fr/soleil/archiving/snap/api/tools/AttributeSupport.java
deleted file mode 100644
index 03837a7..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/AttributeSupport.java
+++ /dev/null
@@ -1,378 +0,0 @@
-// +======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/AttributeSupport.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  AttributeSupport.
-//						(chinkumo) - 24 août 2005
-//
-// $Author: ounsy $
-//
-// $Revision: 1.10 $
-//
-// $Log: AttributeSupport.java,v $
-// Revision 1.10  2006/06/28 12:43:58  ounsy
-// image support
-//
-// Revision 1.9  2006/06/16 08:48:36  ounsy
-// exceptions messages easier to understand
-//
-// Revision 1.8  2006/04/13 12:47:24  ounsy
-// new spectrum types support
-//
-// Revision 1.7  2006/03/16 15:29:50  ounsy
-// String and state scalar support
-//
-// Revision 1.6  2006/03/15 15:12:05  ounsy
-// boolean scalar management
-//
-// Revision 1.5  2006/02/24 12:53:36  ounsy
-// float ok
-//
-// Revision 1.4  2006/02/17 09:25:00  chinkumo
-// Minor change : code reformated.
-//
-// Revision 1.3  2006/02/15 09:05:33  ounsy
-// Spectrums Management
-//
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.2.1  2005/11/15 13:36:38  chinkumo
-// first commit
-//
-// Revision 1.1.2.1  2005/09/09 08:21:24  chinkumo
-// First commit !
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-package fr.soleil.archiving.snap.api.tools;
-
-import fr.esrf.Tango.AttrDataFormat;
-import fr.esrf.Tango.AttrWriteType;
-import fr.esrf.Tango.ErrSeverity;
-import fr.esrf.TangoDs.TangoConst;
-
-public class AttributeSupport {
-    public static boolean checkAttributeSupport(String name, int data_type, int data_format, int writable)
-            throws SnapshotingException {
-        switch (data_format) {
-            case AttrDataFormat._SCALAR:
-                switch (writable) {
-                    case AttrWriteType._READ:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_USHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_LONG:
-                                return true;
-                            case TangoConst.Tango_DEV_ULONG:
-                                return true;
-                            case TangoConst.Tango_DEV_DOUBLE:
-                                return true;
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                                return true;
-                            case TangoConst.Tango_DEV_CHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_UCHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STATE:
-                                return true;
-                            case TangoConst.Tango_DEV_STRING:
-                                return true;
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    case AttrWriteType._READ_WITH_WRITE:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_USHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_LONG:
-                                return true;
-                            case TangoConst.Tango_DEV_ULONG:
-                                return true;
-                            case TangoConst.Tango_DEV_DOUBLE:
-                                return true;
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                                return true;
-                            case TangoConst.Tango_DEV_CHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_UCHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STATE:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STRING:
-                                return true;
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    case AttrWriteType._WRITE:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_USHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_LONG:
-                                return true;
-                            case TangoConst.Tango_DEV_ULONG:
-                                return true;
-                            case TangoConst.Tango_DEV_DOUBLE:
-                                return true;
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                                return true;
-                            case TangoConst.Tango_DEV_CHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_UCHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STATE:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STRING:
-                                return true;
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    case AttrWriteType._READ_WRITE:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_USHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_LONG:
-                                return true;
-                            case TangoConst.Tango_DEV_ULONG:
-                                return true;
-                            case TangoConst.Tango_DEV_DOUBLE:
-                                return true;
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                                return true;
-                            case TangoConst.Tango_DEV_CHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_UCHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STATE:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STRING:
-                                return true;
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    default:
-                        throw generateException(SnapConst.DATA_WRITABLE_EXCEPTION, writable, name);
-                }
-            case AttrDataFormat._SPECTRUM:
-                // throw generateException(GlobalConst.DATA_FORMAT_EXCEPTION ,
-                // data_format , name);
-                switch (writable) {
-                    case AttrWriteType._READ:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_USHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_LONG:
-                                return true;
-                            case TangoConst.Tango_DEV_ULONG:
-                                return true;
-                            case TangoConst.Tango_DEV_DOUBLE:
-                                return true;
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                                return true;
-                            case TangoConst.Tango_DEV_CHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_UCHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STATE:
-                                return true;
-                            case TangoConst.Tango_DEV_STRING:
-                                return true;
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    case AttrWriteType._WRITE:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_USHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_LONG:
-                                return true;
-                            case TangoConst.Tango_DEV_ULONG:
-                                return true;
-                            case TangoConst.Tango_DEV_DOUBLE:
-                                return true;
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                                return true;
-                            case TangoConst.Tango_DEV_CHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_UCHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STATE:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STRING:
-                                return true;
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    case AttrWriteType._READ_WITH_WRITE:
-                    case AttrWriteType._READ_WRITE:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_USHORT:
-                                return true;
-                            case TangoConst.Tango_DEV_LONG:
-                                return true;
-                            case TangoConst.Tango_DEV_ULONG:
-                                return true;
-                            case TangoConst.Tango_DEV_DOUBLE:
-                                return true;
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                                return true;
-                            case TangoConst.Tango_DEV_CHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_UCHAR:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STATE:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                            case TangoConst.Tango_DEV_STRING:
-                                return true;
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    default:
-                        throw generateException(SnapConst.DATA_WRITABLE_EXCEPTION, writable, name);
-                }
-            case AttrDataFormat._IMAGE:
-                switch (writable) {
-                    case AttrWriteType._READ:
-                        switch (data_type) {
-                            case TangoConst.Tango_DEV_SHORT:
-                            case TangoConst.Tango_DEV_USHORT:
-                            case TangoConst.Tango_DEV_LONG:
-                            case TangoConst.Tango_DEV_ULONG:
-                            case TangoConst.Tango_DEV_DOUBLE:
-                            case TangoConst.Tango_DEV_FLOAT:
-                                return true;
-                            case TangoConst.Tango_DEV_BOOLEAN:
-                            case TangoConst.Tango_DEV_CHAR:
-                            case TangoConst.Tango_DEV_UCHAR:
-                            case TangoConst.Tango_DEV_STATE:
-                            case TangoConst.Tango_DEV_STRING:
-                            default:
-                                throw generateException(SnapConst.DATA_TYPE_EXCEPTION, data_type, name);
-                        }
-                    case AttrWriteType._WRITE:
-                    case AttrWriteType._READ_WITH_WRITE:
-                    case AttrWriteType._READ_WRITE:
-                    default:
-                        throw generateException(SnapConst.DATA_WRITABLE_EXCEPTION, writable, name);
-                }
-            default:
-                throw generateException(SnapConst.DATA_FORMAT_EXCEPTION, data_format, name);
-        }
-    }
-
-    private static SnapshotingException generateException(String cause, int cause_value, String name) {
-        String message = SnapConst.SNAPSHOTING_ERROR_PREFIX + " : " + cause;
-        String reason = "Failed while executing AttributeSupport.checkAttributeSupport()...";
-        String desc = new String(cause + " (");
-        if (SnapConst.DATA_WRITABLE_EXCEPTION.equals(cause)) {
-            switch (cause_value) {
-                case AttrWriteType._READ:
-                    desc += "READ";
-                    break;
-                case AttrWriteType._WRITE:
-                    desc += "WRITE";
-                    break;
-                case AttrWriteType._READ_WITH_WRITE:
-                    desc += "READ WITH WRITE";
-                    break;
-                case AttrWriteType._READ_WRITE:
-                    desc += "READ WRITE";
-                    break;
-                default:
-                    desc += cause_value;
-            }
-        } else if (SnapConst.DATA_FORMAT_EXCEPTION.equals(cause)) {
-            switch (cause_value) {
-                case AttrDataFormat._SCALAR:
-                    desc += "SCALAR";
-                    break;
-                case AttrDataFormat._SPECTRUM:
-                    desc += "SPECTRUM";
-                    break;
-                case AttrDataFormat._IMAGE:
-                    desc += "IMAGE";
-                    break;
-                default:
-                    desc += cause_value;
-            }
-        } else if (SnapConst.DATA_TYPE_EXCEPTION.equals(cause)) {
-            switch (cause_value) {
-                case TangoConst.Tango_DEV_SHORT:
-                    desc += "SHORT";
-                    break;
-                case TangoConst.Tango_DEV_USHORT:
-                    desc += "UNSIGNED SHORT";
-                    break;
-                case TangoConst.Tango_DEV_LONG:
-                    desc += "LONG";
-                    break;
-                case TangoConst.Tango_DEV_ULONG:
-                    desc += "UNSIGNED LONG";
-                    break;
-                case TangoConst.Tango_DEV_DOUBLE:
-                    desc += "DOUBLE";
-                    break;
-                case TangoConst.Tango_DEV_FLOAT:
-                    desc += "FLOAT";
-                    break;
-                case TangoConst.Tango_DEV_BOOLEAN:
-                    desc += "BOOLEAN";
-                    break;
-                case TangoConst.Tango_DEV_CHAR:
-                    desc += "CHAR";
-                    break;
-                case TangoConst.Tango_DEV_UCHAR:
-                    desc += "UNSIGNED CHAR";
-                    break;
-                case TangoConst.Tango_DEV_STATE:
-                    desc += "STATE";
-                    break;
-                case TangoConst.Tango_DEV_STRING:
-                    desc += "STRING";
-                    break;
-                default:
-                    desc += cause_value;
-            }
-        } else {
-            desc += cause_value;
-        }
-        desc += ") not supported !! [" + name + "]";
-        // String desc = cause + " (" + cause_value + ") not supported !! [" +
-        // name + "]";
-        return new SnapshotingException(message, reason, ErrSeverity.WARN, desc, "");
-    }
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/BlobSpectrum.java b/src/main/java/fr/soleil/archiving/snap/api/tools/BlobSpectrum.java
deleted file mode 100644
index 02b91e8..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/BlobSpectrum.java
+++ /dev/null
@@ -1,104 +0,0 @@
-//+======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/BlobSpectrum.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  BlobSpectrum.
-//						(Chinkumo Jean) - Mar 26, 2004
-//
-// $Author: ounsy $
-//
-// $Revision: 1.4 $
-//
-// $Log: BlobSpectrum.java,v $
-// Revision 1.4  2007/04/05 10:16:23  ounsy
-// minor changes
-//
-// Revision 1.3  2006/01/27 13:04:44  ounsy
-// organised imports
-//
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.16.1  2005/11/15 13:34:38  chinkumo
-// no message
-//
-// Revision 1.1  2005/01/26 15:35:37  chinkumo
-// Ultimate synchronization before real sharing.
-//
-// Revision 1.1  2004/12/06 17:39:56  chinkumo
-// First commit (new API architecture).
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-
-package fr.soleil.archiving.snap.api.tools;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.sql.Clob;
-import java.sql.SQLException;
-
-public class BlobSpectrum implements Clob {
-	public long length() throws SQLException {
-		return 0;
-	}
-
-	public String getSubString(long pos, int length) throws SQLException {
-		return null;
-	}
-
-	public Reader getCharacterStream() throws SQLException {
-		return null;
-	}
-
-	public InputStream getAsciiStream() throws SQLException {
-		return null;
-	}
-
-	public long position(String searchstr, long start) throws SQLException {
-		return 0;
-	}
-
-	public long position(Clob searchstr, long start) throws SQLException {
-		return 0;
-	}
-
-	public int setString(long pos, String str) throws SQLException {
-		return 0;
-	}
-
-	public int setString(long pos, String str, int offset, int len)
-			throws SQLException {
-		return 0;
-	}
-
-	public OutputStream setAsciiStream(long pos) throws SQLException {
-		return null;
-	}
-
-	public Writer setCharacterStream(long pos) throws SQLException {
-		return null;
-	}
-
-	public void truncate(long len) throws SQLException {
-	}
-
-	public void free() throws SQLException {
-		// TODO Auto-generated method stub
-
-	}
-
-	public Reader getCharacterStream(long arg0, long arg1) throws SQLException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/ScalarEvent.java b/src/main/java/fr/soleil/archiving/snap/api/tools/ScalarEvent.java
deleted file mode 100644
index 367e7e4..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/ScalarEvent.java
+++ /dev/null
@@ -1,426 +0,0 @@
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-
-import fr.esrf.Tango.AttrDataFormat;
-import fr.esrf.Tango.AttrWriteType;
-import fr.esrf.Tango.DevState;
-import fr.esrf.TangoDs.TangoConst;
-import fr.soleil.archiving.common.api.tools.GlobalConst;
-
-//+======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/ScalarEvent.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  ScalarEvent.
-//						(chinkumo) - 7 nov. 2005
-//
-// $Author: ounsy $
-//
-// $Revision: 1.7 $
-//
-// $Log: ScalarEvent.java,v $
-// Revision 1.7  2006/10/31 16:54:24  ounsy
-// milliseconds and null values management
-//
-// Revision 1.6  2006/05/12 09:26:20  ounsy
-// CLOB_SEPARATOR in GlobalConst
-//
-// Revision 1.5  2006/05/04 14:35:20  ounsy
-// CLOB_SEPARATOR centralized in ConfigConst
-//
-// Revision 1.4  2006/03/13 15:19:43  ounsy
-// State as an int management
-//
-// Revision 1.3  2006/03/13 15:14:11  ounsy
-// Long as an int management
-//
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.2.1  2005/11/15 13:36:38  chinkumo
-// first commit
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-
-public class ScalarEvent extends SnapAttribute {
-
-    public ScalarEvent() {
-        super();
-    }
-
-    public ScalarEvent(String[] scalarEvent) {
-        this.setAttributeCompleteName(scalarEvent[0]);
-        this.setDataFormat(AttrDataFormat._SCALAR);
-        this.setDataType(Integer.parseInt(scalarEvent[2]));
-        this.setWritable(Integer.parseInt(scalarEvent[3]));
-        setAttId(Integer.parseInt(scalarEvent[4]));
-        setSnapId(Integer.parseInt(scalarEvent[5]));
-        setSnapDate(Timestamp.valueOf(scalarEvent[6]));
-
-        Object value = getValue(scalarEvent);
-        setValue(value, null);
-
-    }
-
-    public Object getValue(String[] scalarEvent) {
-        Object value = null;
-        switch (getWritable()) {
-        case AttrWriteType._READ:
-            switch (getDataType()) {
-            case TangoConst.Tango_DEV_STRING:
-                value = new String(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_STATE:
-                value = Integer.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_UCHAR:
-                value = Byte.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_LONG:
-                value = Integer.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_ULONG:
-                value = Integer.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_BOOLEAN:
-                value = Boolean.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_SHORT:
-                value = Short.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_USHORT:
-                value = Short.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_FLOAT:
-                value = Float.valueOf(scalarEvent[7]);
-                break;
-            case TangoConst.Tango_DEV_DOUBLE:
-                value = Double.valueOf(scalarEvent[7]);
-                break;
-            default:
-                value = null;
-                break;
-            }
-            break;
-
-        case AttrWriteType._READ_WITH_WRITE:
-            switch (getDataType()) {
-            case TangoConst.Tango_DEV_STRING:
-                String[] valueString = { new String(scalarEvent[7]), new String(scalarEvent[8]) };
-                value = valueString;
-                break;
-            case TangoConst.Tango_DEV_STATE:
-                int[] valueInteger = { Integer.parseInt(scalarEvent[7]), Integer.parseInt(scalarEvent[8]) };
-                value = valueInteger;
-                break;
-            case TangoConst.Tango_DEV_UCHAR:
-                byte[] valueByte = { Byte.parseByte(scalarEvent[7]), Byte.parseByte(scalarEvent[8]) };
-                value = valueByte;
-                break;
-            case TangoConst.Tango_DEV_LONG:
-                int[] valueLong = { Integer.parseInt(scalarEvent[7]), Integer.parseInt(scalarEvent[8]) };
-                value = valueLong;
-                break;
-            case TangoConst.Tango_DEV_ULONG:
-                int[] valueULong = { Integer.parseInt(scalarEvent[7]), Integer.parseInt(scalarEvent[8]) };
-                value = valueULong;
-                break;
-            case TangoConst.Tango_DEV_BOOLEAN:
-                boolean[] valueBoolean = { Boolean.parseBoolean(scalarEvent[7]), Boolean.parseBoolean(scalarEvent[8]) };
-                value = valueBoolean;
-                break;
-            case TangoConst.Tango_DEV_SHORT:
-                short[] valueShort = { Short.parseShort(scalarEvent[7]), Short.parseShort(scalarEvent[8]) };
-                value = valueShort;
-                break;
-            case TangoConst.Tango_DEV_USHORT:
-                short[] valueUShort = { Short.parseShort(scalarEvent[7]), Short.parseShort(scalarEvent[8]) };
-                value = valueUShort;
-                break;
-            case TangoConst.Tango_DEV_FLOAT:
-                float[] valueFloat = { Float.parseFloat(scalarEvent[7]), Float.parseFloat(scalarEvent[8]) };
-                value = valueFloat;
-                break;
-            case TangoConst.Tango_DEV_DOUBLE:
-                double[] valueDouble = { Double.parseDouble(scalarEvent[7]), Double.parseDouble(scalarEvent[8]) };
-                value = valueDouble;
-                break;
-            default:
-                value = null;
-                break;
-            }
-            break;
-
-        case AttrWriteType._WRITE:
-            switch (getDataType()) {
-            case TangoConst.Tango_DEV_STRING:
-                value = new String(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_STATE:
-                value = Integer.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_UCHAR:
-                value = Byte.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_LONG:
-                value = Integer.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_ULONG:
-                value = Integer.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_BOOLEAN:
-                value = Boolean.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_SHORT:
-                value = Short.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_USHORT:
-                value = Short.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_FLOAT:
-                value = Float.valueOf(scalarEvent[8]);
-                break;
-            case TangoConst.Tango_DEV_DOUBLE:
-                value = Double.valueOf(scalarEvent[8]);
-                break;
-            default:
-                value = null;
-                break;
-            }
-            break;
-
-        case AttrWriteType._READ_WRITE:
-            switch (getDataType()) {
-            case TangoConst.Tango_DEV_STRING:
-                String[] valueString = { new String(scalarEvent[7]), new String(scalarEvent[8]) };
-                value = valueString;
-                break;
-            case TangoConst.Tango_DEV_STATE:
-                int[] valueInteger = { Integer.parseInt(scalarEvent[7]), Integer.parseInt(scalarEvent[8]) };
-                value = valueInteger;
-                break;
-            case TangoConst.Tango_DEV_UCHAR:
-                byte[] valueByte = { Byte.parseByte(scalarEvent[7]), Byte.parseByte(scalarEvent[8]) };
-                value = valueByte;
-                break;
-            case TangoConst.Tango_DEV_LONG:
-                int[] valueLong = { Integer.parseInt(scalarEvent[7]), Integer.parseInt(scalarEvent[8]) };
-                value = valueLong;
-                break;
-            case TangoConst.Tango_DEV_ULONG:
-                int[] valueULong = { Integer.parseInt(scalarEvent[7]), Integer.parseInt(scalarEvent[8]) };
-                value = valueULong;
-                break;
-            case TangoConst.Tango_DEV_BOOLEAN:
-                boolean[] valueBoolean = { Boolean.parseBoolean(scalarEvent[7]), Boolean.parseBoolean(scalarEvent[8]) };
-                value = valueBoolean;
-                break;
-            case TangoConst.Tango_DEV_SHORT:
-                short[] valueShort = { Short.parseShort(scalarEvent[7]), Short.parseShort(scalarEvent[8]) };
-                value = valueShort;
-                break;
-            case TangoConst.Tango_DEV_USHORT:
-                short[] valueUShort = { Short.parseShort(scalarEvent[7]), Short.parseShort(scalarEvent[8]) };
-                value = valueUShort;
-                break;
-            case TangoConst.Tango_DEV_FLOAT:
-                float[] valueFloat = { Float.parseFloat(scalarEvent[7]), Float.parseFloat(scalarEvent[8]) };
-                value = valueFloat;
-                break;
-            case TangoConst.Tango_DEV_DOUBLE:
-                double[] valueDouble = { Double.parseDouble(scalarEvent[7]), Double.parseDouble(scalarEvent[8]) };
-                value = valueDouble;
-                break;
-            default:
-                value = null;
-                break;
-            }
-            break;
-        }
-        return value;
-    }
-
-    public String[] toArray() {
-        String[] scalarEvent;
-        scalarEvent = new String[9];
-        scalarEvent[0] = getAttributeCompleteName();
-        scalarEvent[1] = Integer.toString(getDataFormat());
-        scalarEvent[2] = Integer.toString(getDataType());
-        scalarEvent[3] = Integer.toString(getWritable());
-        scalarEvent[4] = Integer.toString(getAttId());
-        scalarEvent[5] = Integer.toString(getSnapId());
-        scalarEvent[6] = getSnapDate().toString();
-        scalarEvent[7] = valueToString(0);
-        scalarEvent[8] = valueToString(1);
-        return scalarEvent;
-    }
-
-    public String valueToString(int pos) {
-        String nullvalue = "NULL";
-        String value = nullvalue;
-        switch (getDataFormat()) {
-        case AttrDataFormat._SCALAR:
-            switch (getWritable()) {
-            case AttrWriteType._READ:
-                if (pos == 0) {
-                    switch (getDataType()) {
-                    case TangoConst.Tango_DEV_STRING:
-                        value = (String) getValue();
-                        break;
-                    case TangoConst.Tango_DEV_STATE:
-                        if (getValue() instanceof DevState) {
-                            value = "" + ((DevState) getValue()).value();
-                        } else if ((getValue() instanceof int[])) {
-                            value = "";
-                            int[] tab = (int[]) getValue();
-                            for (int i = 0; i < tab.length; i++) {
-								value += tab[i] + GlobalConst.CLOB_SEPARATOR;
-                            }
-                            if (tab.length > 0) {
-                                value = value.substring(0, value.length() - 1);
-                            }
-                        } else
-                            value = (String) getValue();
-                        break;
-                    case TangoConst.Tango_DEV_UCHAR:
-                        value = ((Byte) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_LONG:
-                        value = ((Integer) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_ULONG:
-                        value = ((Integer) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_BOOLEAN:
-                        value = ((Boolean) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_SHORT:
-                        value = ((Short) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_USHORT:
-                        value = ((Short) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_FLOAT:
-                        value = ((Float) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_DOUBLE:
-                        value = ((Double) getValue()).toString();
-                        break;
-                    default:
-                        value = nullvalue;
-                        break;
-                    }
-                }
-                break;
-            case AttrWriteType._READ_WRITE:
-            case AttrWriteType._READ_WITH_WRITE:
-                switch (getDataType()) {
-                case TangoConst.Tango_DEV_STRING:
-                    value = ((String[]) getValue())[pos];
-                    break;
-                case TangoConst.Tango_DEV_STATE:
-                    if (getValue() instanceof DevState) {
-                        value = "" + ((DevState) getValue()).value();
-                    } else if ((getValue() instanceof int[])) {
-                        value = "";
-                        int[] tab = (int[]) getValue();
-                        value += tab[pos];
-                    } else
-                        value = ((String[]) getValue())[pos];
-                    break;
-                case TangoConst.Tango_DEV_UCHAR:
-                    value = ((byte[]) getValue())[pos] + "";
-                    break;
-                case TangoConst.Tango_DEV_LONG:
-                case TangoConst.Tango_DEV_ULONG:
-                    value = ((int[]) getValue())[pos] + "";
-                    break;
-                case TangoConst.Tango_DEV_BOOLEAN:
-                    value = ((boolean[]) getValue())[pos] + "";
-                    break;
-                case TangoConst.Tango_DEV_SHORT:
-                case TangoConst.Tango_DEV_USHORT:
-                    value = ((short[]) getValue())[pos] + "";
-                    break;
-                case TangoConst.Tango_DEV_FLOAT:
-                    value = ((float[]) getValue())[pos] + "";
-                    break;
-                case TangoConst.Tango_DEV_DOUBLE:
-                    value = ((double[]) getValue())[pos] + "";
-                    break;
-                default:
-                    value = nullvalue;
-                    break;
-                }
-                break;
-            case AttrWriteType._WRITE:
-                if (pos == 1) {
-                    switch (getDataType()) {
-                    case TangoConst.Tango_DEV_STRING:
-                        value = (String) getValue();
-                        break;
-                    case TangoConst.Tango_DEV_STATE:
-                        if (getValue() instanceof DevState) {
-                            value = "" + ((DevState) getValue()).value();
-                        } else if ((getValue() instanceof int[])) {
-                            value = "";
-                            int[] tab = (int[]) getValue();
-                            for (int i = 0; i < tab.length; i++) {
-								value += tab[i] + GlobalConst.CLOB_SEPARATOR;
-                            }
-                            if (tab.length > 0) {
-                                value = value.substring(0, value.length() - 1);
-                            }
-                        } else
-                            value = (String) getValue();
-                        break;
-                    case TangoConst.Tango_DEV_UCHAR:
-                        value = ((Byte) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_LONG:
-                        value = ((Integer) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_ULONG:
-                        value = ((Integer) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_BOOLEAN:
-                        value = ((Boolean) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_SHORT:
-                        value = ((Short) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_USHORT:
-                        value = ((Short) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_FLOAT:
-                        value = ((Float) getValue()).toString();
-                        break;
-                    case TangoConst.Tango_DEV_DOUBLE:
-                        value = ((Double) getValue()).toString();
-                        break;
-                    default:
-                        value = nullvalue;
-                        break;
-                    }
-                }
-                break;
-            }
-            break;
-        case AttrDataFormat._SPECTRUM:
-            value = ((String) getValue()).toString();
-            break;
-        case AttrDataFormat._IMAGE:
-            value = ((String) getValue()).toString();
-            break;
-        }
-        return value;
-    }
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapConst.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapConst.java
index 120c82b..4e32567 100644
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapConst.java
+++ b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapConst.java
@@ -203,7 +203,7 @@ public class SnapConst {
      * Array that contains the name's fields for the HDB Mode Table
      */
 	public static final String ID_ATT = "id_att";
-	public static final String[] TAB_LIST = { ID_CONTEXT, ID_ATT }; // 0 ->
+
 
     // 2
     /**
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RO.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RO.java
deleted file mode 100644
index df17d89..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RO.java
+++ /dev/null
@@ -1,133 +0,0 @@
-//+======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/SnapImageEvent_RO.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  SnapImageEvent_RO.
-//						(Chinkumo Jean) - Mar 26, 2004
-//
-// $Author: ounsy $
-//
-// $Revision: 1.4 $
-//
-// $Log: SnapImageEvent_RO.java,v $
-// Revision 1.4  2006/10/31 16:54:24  ounsy
-// milliseconds and null values management
-//
-// Revision 1.3  2006/06/28 12:43:58  ounsy
-// image support
-//
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.16.1  2005/11/15 13:34:38  chinkumo
-// no message
-//
-// Revision 1.1  2005/01/26 15:35:37  chinkumo
-// Ultimate synchronization before real sharing.
-//
-// Revision 1.1  2004/12/06 17:39:56  chinkumo
-// First commit (new API architecture).
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-
-public class SnapImageEvent_RO extends SnapAttribute {
-    private int dimX;
-    private int dimY;
-
-    public SnapImageEvent_RO() {
-        super();
-    }
-
-    public SnapImageEvent_RO(String[] snapImageEvent_RO) {
-        setAttributeCompleteName(snapImageEvent_RO[0]);
-        setAttId(Integer.parseInt(snapImageEvent_RO[1]));
-        setSnapId(Integer.parseInt(snapImageEvent_RO[2]));
-        setSnapDate(Timestamp.valueOf(snapImageEvent_RO[3]));
-        setDimX(Integer.parseInt(snapImageEvent_RO[4]));
-        setDimY(Integer.parseInt(snapImageEvent_RO[5]));
-
-        double[][] value = new double[dimY][dimX];
-        int k = 6;
-        for (int i = 0; i < dimY; i++) {
-            for (int j = 0; j < dimX; j++) {
-                value[i][j] = Double.parseDouble(snapImageEvent_RO[k++]);
-            }
-        }
-        this.setImageValueRO(value, null);
-    }
-
-    public int getDimX() {
-        return dimX;
-    }
-
-    public void setDimX(int dimX) {
-        this.dimX = dimX;
-    }
-
-    public int getDimY() {
-        return dimY;
-    }
-
-    public void setDimY(int dimY) {
-        this.dimY = dimY;
-    }
-
-    public double[][] getImageValueRO() {
-        return (double[][]) getValue();
-    }
-
-    public void setImageValueRO(double[][] value, boolean[][] nullElements) {
-        setValue(value, nullElements);
-    }
-
-    /**
-     * Returns an array representation of the object <I>SnapImageEvent_RO</I>.
-     * 
-     * @return an array representation of the object <I>SnapImageEvent_RO</I>.
-     */
-    public String[] toArray() {
-        double[][] value = (double[][]) getValue();
-        if (value == null)
-            return null;
-        int dimY = value.length;
-        if (dimY == 0)
-            return new String[0];
-        int dimX = value[0].length;
-        String[] snapImageEvent_RO = new String[6 + dimX * dimY];
-
-        snapImageEvent_RO[0] = getAttributeCompleteName(); // name
-        snapImageEvent_RO[1] = Integer.toString(getAttId()); // id_context
-        snapImageEvent_RO[2] = Integer.toString(getSnapId()); // id_snap
-        snapImageEvent_RO[3] = getSnapDate().toString(); // time
-        snapImageEvent_RO[4] = Integer.toString(dimX); // dimX
-        snapImageEvent_RO[5] = Integer.toString(dimY); // dimX
-
-        int k = 6;
-        for (int i = 0; i < dimY; i++) {
-            for (int j = 0; j < dimX; j++) {
-                snapImageEvent_RO[k] = value[i][j] + "";
-                k++;
-            }
-        }
-        return snapImageEvent_RO;
-    }
-
-    @Override
-    public String toString() {
-        String snapImageEvent_RO = "";
-        snapImageEvent_RO = "Source : \t" + getAttributeCompleteName() + "\r\n" + "Attribute ID : \t" + getAttId()
-                + "\r\n" + "Snap ID : \t" + getSnapId() + "\r\n" + "Snap Time : \t" + getSnapDate() + "\r\n"
-                + "Dim x : \t" + getDimX() + "\r\n" + "Dim y : \t" + getDimY() + "\r\n" + "Value : \t..." + "\r\n";
-        return snapImageEvent_RO;
-    }
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RW.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RW.java
deleted file mode 100644
index 73e8548..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapImageEvent_RW.java
+++ /dev/null
@@ -1,180 +0,0 @@
-// +======================================================================
-// $Source$
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  SnapImageEvent_RW.
-//						(GIRARDOT Raphaël) - Jun 21, 2006
-//
-// $Author$
-//
-// $Revision: 
-//
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-
-public class SnapImageEvent_RW extends SnapAttribute {
-
-    public static final String NOT_CODING = "#";
-
-    private int dimX = 0;
-    private int dimY = 0;
-    private int dimXWrite = 0;
-    private int dimYWrite = 0;
-
-    public SnapImageEvent_RW() {
-        super();
-    }
-
-    public SnapImageEvent_RW(String[] snapImageEvent_RW) {
-        setAttributeCompleteName(snapImageEvent_RW[0]);
-        setAttId(Integer.parseInt(snapImageEvent_RW[1]));
-        setSnapId(Integer.parseInt(snapImageEvent_RW[2]));
-        setSnapDate(Timestamp.valueOf(snapImageEvent_RW[3]));
-        setDimX(Integer.parseInt(snapImageEvent_RW[4]));
-        setDimY(Integer.parseInt(snapImageEvent_RW[5]));
-        setDimXWrite(Integer.parseInt(snapImageEvent_RW[6]));
-        setDimYWrite(Integer.parseInt(snapImageEvent_RW[7]));
-
-        double[][] value = new double[dimY + dimYWrite][max(dimX, dimXWrite)];
-        int k = 8;
-        for (int i = 0; i < dimY; i++) {
-            for (int j = 0; j < dimX; j++) {
-                value[i][j] = Double.parseDouble(snapImageEvent_RW[k++]);
-            }
-        }
-        for (int i = dimY; i < dimY + dimYWrite; i++) {
-            for (int j = 0; j < dimXWrite; j++) {
-                value[i][j] = Double.parseDouble(snapImageEvent_RW[k++]);
-            }
-        }
-        setImageValueRW(value, null);
-    }
-
-    public int getDimX() {
-        return dimX;
-    }
-
-    public void setDimX(int dim_x) {
-        this.dimX = dim_x;
-    }
-
-    public int getDimY() {
-        return dimY;
-    }
-
-    public void setDimY(int dim_y) {
-        this.dimY = dim_y;
-    }
-
-    public int getDimXWrite() {
-        return dimXWrite;
-    }
-
-    public void setDimXWrite(int dim_x_write) {
-        this.dimXWrite = dim_x_write;
-    }
-
-    public int getDimYWrite() {
-        return dimYWrite;
-    }
-
-    public void setDimYWrite(int dim_y_write) {
-        this.dimYWrite = dim_y_write;
-    }
-
-    public double[][] getImageValueRW() {
-        return (double[][]) getValue();
-    }
-
-    public void setImageValueRW(double[][] value, boolean[][] nullElements) {
-        setValue(value, nullElements);
-    }
-
-    public double[][] getImageValueRWRead() {
-        double[][] read = new double[dimY][dimX];
-        for (int i = 0; i < dimY; i++) {
-            for (int j = 0; j < dimX; j++) {
-                read[i][j] = getImageValueRW()[i][j];
-            }
-        }
-        return read;
-    }
-
-    public double[][] getImageValueRWWrite() {
-        double[][] write = new double[dimYWrite][dimXWrite];
-        for (int i = dimY; i < dimY + dimYWrite; i++) {
-            for (int j = 0; j < dimXWrite; j++) {
-                write[i][j] = getImageValueRW()[i][j];
-            }
-        }
-        return write;
-    }
-
-    /**
-     * Returns an array representation of the object <I>SnapImageEvent_RO</I>.
-     * 
-     * @return an array representation of the object <I>SnapImageEvent_RO</I>.
-     */
-    public String[] toArray() {
-        double[][] value = (double[][]) getValue();
-        int dim_x = value[0].length;
-        int dim_y = value.length;
-        String[] snapImageEvent_RO = new String[8 + (dim_x + dimXWrite) * max(dim_y, dimYWrite)];
-
-        snapImageEvent_RO[0] = getAttributeCompleteName(); // name
-        snapImageEvent_RO[1] = Integer.toString(getAttId()); // id_context
-        snapImageEvent_RO[2] = Integer.toString(getSnapId()); // id_snap
-        snapImageEvent_RO[3] = getSnapDate().toString(); // time
-        snapImageEvent_RO[4] = Integer.toString(dim_x); // dim_x
-        snapImageEvent_RO[5] = Integer.toString(dim_y); // dim_y
-        snapImageEvent_RO[6] = Integer.toString(dimXWrite); // dim_x_write
-        snapImageEvent_RO[7] = Integer.toString(dimYWrite); // dim_y_write
-
-        int k = 8;
-        for (int i = 0; i < snapImageEvent_RO.length - k; i++) {
-            snapImageEvent_RO[i + k] = NOT_CODING;
-        }
-
-        for (int i = 0; i < dim_y; i++) {
-            for (int j = 0; j < dim_x; j++) {
-                snapImageEvent_RO[k] = value[i][j] + "";
-                k++;
-            }
-        }
-        for (int i = dim_y; i < dim_y + dimYWrite; i++) {
-            for (int j = 0; j < dimXWrite; j++) {
-                snapImageEvent_RO[k] = value[i][j] + "";
-                k++;
-            }
-        }
-        return snapImageEvent_RO;
-    }
-
-    @Override
-    public String toString() {
-        String snapImageEvent_RO = "";
-        snapImageEvent_RO = "Source : \t" + getAttributeCompleteName() + "\r\n" + "Attribute ID : \t" + getAttId()
-                + "\r\n" + "Snap ID : \t" + getSnapId() + "\r\n" + "Snap Time : \t" + getSnapDate() + "\r\n"
-                + "Dim x : \t" + getDimX() + "\r\n" + "Dim y : \t" + getDimY() + "\r\n" + "Dim x write : \t"
-                + getDimXWrite() + "\r\n" + "Dim y write : \t" + getDimYWrite() + "\r\n" + "Value : \t..." + "\r\n";
-        return snapImageEvent_RO;
-    }
-
-    private int max(int x, int y) {
-        if (x > y)
-            return x;
-        else
-            return y;
-    }
-
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RO.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RO.java
deleted file mode 100644
index ea2777d..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RO.java
+++ /dev/null
@@ -1,83 +0,0 @@
-//+======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/SnapScalarEvent_RO.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  SnapScalarEvent_RO.
-//						(Chinkumo Jean) - 24, 2004
-//
-// $Author: ounsy $
-//
-// $Revision: 1.3 $
-//
-// $Log: SnapScalarEvent_RO.java,v $
-// Revision 1.3  2006/10/31 16:54:24  ounsy
-// milliseconds and null values management
-//
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.16.1  2005/11/15 13:34:38  chinkumo
-// no message
-//
-// Revision 1.1  2005/01/26 15:35:37  chinkumo
-// Ultimate synchronization before real sharing.
-//
-// Revision 1.1  2004/12/06 17:39:56  chinkumo
-// First commit (new API architecture).
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-
-public class SnapScalarEvent_RO extends SnapAttribute {
-    public SnapScalarEvent_RO() {
-    }
-
-    public SnapScalarEvent_RO(String[] snapScalarEvent_RO) {
-        setAttributeCompleteName(snapScalarEvent_RO[0]);
-        setAttId(Integer.parseInt(snapScalarEvent_RO[1]));
-        setSnapId(Integer.parseInt(snapScalarEvent_RO[2]));
-        setSnapDate(Timestamp.valueOf(snapScalarEvent_RO[3]));
-
-        setScalarValue(Double.valueOf(snapScalarEvent_RO[4]), null);
-    }
-
-    public void setScalarValue(Double d, Boolean nullElements) {
-        setValue(d, nullElements);
-    }
-
-    public Double getScalarValueRO() {
-        return (Double) getValue();
-    }
-
-    public String[] toArray() {
-        Double d = (Double) getValue();
-        String snapScalarEvent_RO[] = new String[5];
-
-        snapScalarEvent_RO[0] = getAttributeCompleteName().trim();
-        snapScalarEvent_RO[1] = Integer.toString(getAttId());
-        snapScalarEvent_RO[2] = Integer.toString(getSnapId());
-
-        snapScalarEvent_RO[3] = getSnapDate().toString().trim();
-        snapScalarEvent_RO[4] = d + "";
-        return snapScalarEvent_RO;
-    }
-
-    @Override
-    public String toString() {
-        String snapSpectrumEvent_RO = "";
-        snapSpectrumEvent_RO = "Source : \t" + getAttributeCompleteName() + "\r\n" + "Attribute ID : \t" + getAttId()
-                + "\r\n" + "Snap ID : \t" + getSnapId() + "\r\n" + "Snap Time : \t" + getSnapDate() + "\r\n"
-                + "Value : \t" + getScalarValueRO() + "\r\n";
-        return snapSpectrumEvent_RO;
-    }
-
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RW.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RW.java
deleted file mode 100644
index c9fa1b6..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_RW.java
+++ /dev/null
@@ -1,98 +0,0 @@
-//+======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/SnapScalarEvent_RW.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  SnapScalarEvent_RW.
-//						(Chinkumo Jean) - 24, 2004
-//
-// $Author: ounsy $
-//
-// $Revision: 1.4 $
-//
-// $Log: SnapScalarEvent_RW.java,v $
-// Revision 1.4  2006/10/31 16:54:24  ounsy
-// milliseconds and null values management
-//
-// Revision 1.3  2006/05/04 14:35:31  ounsy
-// minor changes (commented useless methods and variables)
-//
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.16.1  2005/11/15 13:34:38  chinkumo
-// no message
-//
-// Revision 1.1  2005/01/26 15:35:37  chinkumo
-// Ultimate synchronization before real sharing.
-//
-// Revision 1.1  2004/12/06 17:39:56  chinkumo
-// First commit (new API architecture).
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-
-public class SnapScalarEvent_RW extends SnapAttribute {
-    public SnapScalarEvent_RW() {
-    }
-
-    public SnapScalarEvent_RW(String[] snapScalarEvent_RW) {
-        setAttributeCompleteName(snapScalarEvent_RW[0]);
-        setAttId(Integer.parseInt(snapScalarEvent_RW[1]));
-        setSnapId(Integer.parseInt(snapScalarEvent_RW[2]));
-        setSnapDate(Timestamp.valueOf(snapScalarEvent_RW[3]));
-
-        double[] value = new double[2];
-        value[0] = Double.parseDouble(snapScalarEvent_RW[4]);
-        value[1] = Double.parseDouble(snapScalarEvent_RW[5]);
-        this.setScalarValueRW(value, null);
-    }
-
-    public void setScalarValueRW(double[] value, boolean[] nullElements) {
-        /*
-         * double[] tmp = new double[ 2 ]; tmp = value;
-         */
-        setValue(value, nullElements);
-    }
-
-    public double[] getScalarValueRW() {
-        double[] value = new double[2];
-        value = (double[]) getValue();
-        return value;
-    }
-
-    public String[] toArray() {
-        double[] value = getScalarValueRW();
-        String snapScalarEvent_RW[] = new String[6];
-
-        snapScalarEvent_RW[0] = getAttributeCompleteName().trim();
-        snapScalarEvent_RW[1] = Integer.toString(getAttId());
-        snapScalarEvent_RW[2] = Integer.toString(getSnapId());
-
-        snapScalarEvent_RW[3] = getSnapDate().toString().trim();
-        snapScalarEvent_RW[4] = value[0] + "";
-        snapScalarEvent_RW[5] = value[1] + "";
-        return snapScalarEvent_RW;
-    }
-
-    @Override
-    public String toString() {
-        String snapScalarEvent_RW_String = "";
-
-        snapScalarEvent_RW_String = "Source : \t" + getAttributeCompleteName() + "\r\n" + "Attribute Id : \t"
-                + Integer.toString(getAttId()) + "\r\n" + "Snap Id : \t" + Integer.toString(getSnapId()) + "\r\n"
-                + "Snap time : \t" + getSnapDate().toString().trim() + "\r\n" + "Value READ: \t"
-                + getScalarValueRW()[0] + "\r\n" + "Value WRITE: \t" + getScalarValueRW()[1] + "\r\n";
-
-        return snapScalarEvent_RW_String;
-    }
-
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_WO.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_WO.java
deleted file mode 100644
index 9fc0cc5..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapScalarEvent_WO.java
+++ /dev/null
@@ -1,81 +0,0 @@
-//+======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/SnapScalarEvent_WO.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  SnapScalarEvent_WO.
-//						(Chinkumo Jean) - 24, 2004
-//
-// $Author: chinkumo $
-//
-// $Revision: 1.2 $
-//
-// $Log: SnapScalarEvent_WO.java,v $
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.16.1  2005/11/15 13:34:38  chinkumo
-// no message
-//
-// Revision 1.1  2005/01/26 15:35:37  chinkumo
-// Ultimate synchronization before real sharing.
-//
-// Revision 1.1  2004/12/06 17:39:56  chinkumo
-// First commit (new API architecture).
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-
-public class SnapScalarEvent_WO extends SnapAttribute {
-    public SnapScalarEvent_WO() {
-    }
-
-    public SnapScalarEvent_WO(String[] snapScalarEvent_WO) {
-        setAttributeCompleteName(snapScalarEvent_WO[0]);
-        setAttId(Integer.parseInt(snapScalarEvent_WO[1]));
-        setSnapId(Integer.parseInt(snapScalarEvent_WO[2]));
-        setSnapDate(Timestamp.valueOf(snapScalarEvent_WO[3]));
-
-        setScalarValue(Double.parseDouble(snapScalarEvent_WO[4]), null);
-    }
-
-    public void setScalarValue(double d, Boolean nullElements) {
-        setValue(Double.valueOf(d), nullElements);
-    }
-
-    public double getScalarValueWO() {
-        return ((Double) getValue()).doubleValue();
-    }
-
-    public String[] toArray() {
-        double d = ((Double) getValue()).doubleValue();
-        String snapScalarEvent_WO[] = new String[5];
-
-        snapScalarEvent_WO[0] = getAttributeCompleteName().trim();
-        snapScalarEvent_WO[1] = Integer.toString(getAttId());
-        snapScalarEvent_WO[2] = Integer.toString(getSnapId());
-
-        snapScalarEvent_WO[3] = getSnapDate().toString().trim();
-        snapScalarEvent_WO[4] = Double.toString(d).trim();
-        return snapScalarEvent_WO;
-    }
-
-    @Override
-    public String toString() {
-        String snapSpectrumEvent_WO = "";
-        snapSpectrumEvent_WO = "Source : \t" + getAttributeCompleteName() + "\r\n" + "Attribute ID : \t" + getAttId()
-                + "\r\n" + "Snap ID : \t" + getSnapId() + "\r\n" + "Snap Time : \t" + getSnapDate() + "\r\n"
-                + "Value : \t" + getScalarValueWO() + "\r\n";
-        return snapSpectrumEvent_WO;
-    }
-
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RO.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RO.java
deleted file mode 100644
index c8a94ff..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RO.java
+++ /dev/null
@@ -1,114 +0,0 @@
-//+======================================================================
-// $Source: /cvsroot/tango-cs/tango/api/java/fr/soleil/TangoSnapshoting/SnapshotingTools/Tools/SnapSpectrumEvent_RO.java,v $
-//
-// Project:      Tango Archiving Service
-//
-// Description:  Java source code for the class  SnapSpectrumEvent_RO.
-//						(Chinkumo Jean) - Mar 26, 2004
-//
-// $Author: ounsy $
-//
-// $Revision: 1.4 $
-//
-// $Log: SnapSpectrumEvent_RO.java,v $
-// Revision 1.4  2006/10/31 16:54:24  ounsy
-// milliseconds and null values management
-//
-// Revision 1.3  2006/04/11 14:36:00  ounsy
-// new spectrum types support
-//
-// Revision 1.2  2005/11/29 17:11:17  chinkumo
-// no message
-//
-// Revision 1.1.16.1  2005/11/15 13:34:38  chinkumo
-// no message
-//
-// Revision 1.1  2005/01/26 15:35:37  chinkumo
-// Ultimate synchronization before real sharing.
-//
-// Revision 1.1  2004/12/06 17:39:56  chinkumo
-// First commit (new API architecture).
-//
-//
-// copyleft :	Synchrotron SOLEIL
-//					L'Orme des Merisiers
-//					Saint-Aubin - BP 48
-//					91192 GIF-sur-YVETTE CEDEX
-//
-//-======================================================================
-
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-
-public class SnapSpectrumEvent_RO extends SnapAttribute {
-    private int dim_x;
-    private int dim_y = 0;
-
-    public SnapSpectrumEvent_RO() {
-        super();
-    }
-
-    public SnapSpectrumEvent_RO(String[] snapSpectrumEvent_RO) {
-        setAttributeCompleteName(snapSpectrumEvent_RO[0]);
-        setAttId(Integer.parseInt(snapSpectrumEvent_RO[1]));
-        setSnapId(Integer.parseInt(snapSpectrumEvent_RO[2]));
-        setSnapDate(Timestamp.valueOf(snapSpectrumEvent_RO[3]));
-        setDim_x(Integer.parseInt(snapSpectrumEvent_RO[4]));
-        // setDim_y(Integer.parseInt(snapSpectrumEvent_RO[5]));
-
-        double[] value = new double[snapSpectrumEvent_RO.length - 6];
-        for (int i = 0; i < value.length; i++) {
-            value[i] = Double.parseDouble(snapSpectrumEvent_RO[i + 6]);
-        }
-        setValue(value, null);
-    }
-
-    public int getDim_x() {
-        return dim_x;
-    }
-
-    public void setDim_x(int dim_x) {
-        this.dim_x = dim_x;
-    }
-
-    public int getDim_y() {
-        return dim_y;
-    }
-
-    public void setDim_y(int dim_y) {
-        this.dim_y = 0;
-    }
-
-    /**
-     * Returns an array representation of the object
-     * <I>SnapSpectrumEvent_RO</I>.
-     * 
-     * @return an array representation of the object
-     *         <I>SnapSpectrumEvent_RO</I>.
-     */
-    public String[] toArray() {
-        double[] value = (double[]) getValue();
-        String[] snapSpectrumEvent_RO = new String[6 + value.length];
-        snapSpectrumEvent_RO[0] = getAttributeCompleteName(); // name
-        snapSpectrumEvent_RO[1] = Integer.toString(getAttId()); // id_context
-        snapSpectrumEvent_RO[2] = Integer.toString(getSnapId()); // id_snap
-        snapSpectrumEvent_RO[3] = getSnapDate().toString(); // time
-        snapSpectrumEvent_RO[4] = Integer.toString(dim_x); // dim_x
-        snapSpectrumEvent_RO[5] = Integer.toString(dim_y); // dim_y
-
-        for (int i = 0; i < value.length; i++) {
-            snapSpectrumEvent_RO[i + 6] = value[i] + "";
-        }
-        return snapSpectrumEvent_RO;
-    }
-
-    @Override
-    public String toString() {
-        String snapSpectrumEvent_RO = "";
-        snapSpectrumEvent_RO = "Source : \t" + getAttributeCompleteName() + "\r\n" + "Attribute ID : \t" + getAttId()
-                + "\r\n" + "Snap ID : \t" + getSnapId() + "\r\n" + "Snap Time : \t" + getSnapDate() + "\r\n"
-                + "Dim x : \t" + getDim_x() + "\r\n" + "Dim y : \t" + getDim_y() + "\r\n" + "Value : \t..." + "\r\n";
-        return snapSpectrumEvent_RO;
-    }
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RW.java b/src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RW.java
deleted file mode 100644
index ffa0425..0000000
--- a/src/main/java/fr/soleil/archiving/snap/api/tools/SnapSpectrumEvent_RW.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * Synchrotron Soleil
- * 
- * File : SnapSpectrumEvent_RW.java
- * 
- * Project : apiDev
- * 
- * Description :
- * 
- * Author : SOLEIL
- * 
- * Original : 7 févr. 2006
- * 
- * Revision: Author:
- * Date: State:
- * 
- * Log: SnapSpectrumEvent_RW.java,v
- */
-package fr.soleil.archiving.snap.api.tools;
-
-import java.sql.Timestamp;
-import java.util.Arrays;
-
-import fr.soleil.archiving.common.api.tools.GlobalConst;
-
-/**
- * @author SOLEIL
- */
-public class SnapSpectrumEvent_RW extends SnapAttribute {
-    private int dim_x;
-    private final int dim_y = 0;
-
-    public SnapSpectrumEvent_RW() {
-        super();
-    }
-
-    public int getDim_x() {
-        return dim_x;
-    }
-
-    public void setDim_x(int dim_x) {
-        this.dim_x = dim_x;
-    }
-
-    public int getDim_y() {
-        return dim_y;
-    }
-
-    /**
-     * Creates a new instance of Spectrum Event
-     */
-    public SnapSpectrumEvent_RW(String[] snapSpectrumEvent_RO) {
-        setAttributeCompleteName(snapSpectrumEvent_RO[0]);
-        setAttId(Integer.parseInt(snapSpectrumEvent_RO[1]));
-        setSnapId(Integer.parseInt(snapSpectrumEvent_RO[2]));
-        setSnapDate(Timestamp.valueOf(snapSpectrumEvent_RO[3]));
-        setDim_x(Integer.parseInt(snapSpectrumEvent_RO[4]));
-        // setDim_y(Integer.parseInt(snapSpectrumEvent_RO[5]));
-
-        double[] value = new double[snapSpectrumEvent_RO.length - 6];
-        for (int i = 0; i < value.length; i++) {
-            value[i] = Double.parseDouble(snapSpectrumEvent_RO[i + 6]);
-        }
-        setValue(value, null);
-    }
-
-    /**
-     * This method returns the value of this spectrum event. The returned value
-     * is then formated as a String.
-     * 
-     * @return the value of this spectrum event.
-     */
-    public String getValue_AsString() {
-        Object value = getValue();
-        StringBuilder valueStr = new StringBuilder();
-        if (value instanceof double[]) {
-            for (int i = 0; i < ((double[]) value).length - 1; i++) {
-				valueStr.append(((double[]) value)[i]).append(GlobalConst.CLOB_SEPARATOR);
-            }
-            valueStr.append(((double[]) value)[((double[]) value).length - 1]);
-        } else if (value instanceof byte[]) {
-            for (int i = 0; i < ((byte[]) value).length - 1; i++) {
-				valueStr.append(((byte[]) value)[i]).append(GlobalConst.CLOB_SEPARATOR);
-            }
-            valueStr.append(((byte[]) value)[((byte[]) value).length - 1]);
-        } else if (value instanceof short[]) {
-            for (int i = 0; i < ((short[]) value).length - 1; i++) {
-				valueStr.append(((short[]) value)[i]).append(GlobalConst.CLOB_SEPARATOR);
-            }
-            valueStr.append(((short[]) value)[((short[]) value).length - 1]);
-        } else if (value instanceof int[]) {
-            for (int i = 0; i < ((int[]) value).length - 1; i++) {
-				valueStr.append(((int[]) value)[i]).append(GlobalConst.CLOB_SEPARATOR);
-            }
-            valueStr.append(((int[]) value)[((int[]) value).length - 1]);
-        } else if (value instanceof float[]) {
-            for (int i = 0; i < ((float[]) value).length - 1; i++) {
-				valueStr.append(((float[]) value)[i]).append(GlobalConst.CLOB_SEPARATOR);
-            }
-            valueStr.append(((float[]) value)[((float[]) value).length - 1]);
-        } else if (value instanceof boolean[]) {
-            for (int i = 0; i < ((boolean[]) value).length - 1; i++) {
-				valueStr.append(((boolean[]) value)[i]).append(GlobalConst.CLOB_SEPARATOR);
-            }
-            valueStr.append(((boolean[]) value)[((boolean[]) value).length - 1]);
-        } else if (value instanceof String[]) {
-            for (int i = 0; i < ((String[]) value).length - 1; i++) {
-				valueStr.append(((String[]) value)[i]).append(GlobalConst.CLOB_SEPARATOR);
-            }
-            valueStr.append(((String[]) value)[((String[]) value).length - 1]);
-        } else {
-            valueStr.append(value.toString());
-        }
-        return valueStr.toString();
-    }
-
-    /**
-     * Returns an array representation of the object
-     * <I>SnapSpectrumEvent_RO</I>.
-     * 
-     * @return an array representation of the object
-     *         <I>SnapSpectrumEvent_RO</I>.
-     */
-    public String[] toArray() {
-        double[] value = (double[]) getValue();
-        String[] snapSpectrumEvent_RO = new String[6 + value.length];
-        snapSpectrumEvent_RO[0] = getAttributeCompleteName(); // name
-        snapSpectrumEvent_RO[1] = Integer.toString(getAttId()); // id_context
-        snapSpectrumEvent_RO[2] = Integer.toString(getSnapId()); // id_snap
-        snapSpectrumEvent_RO[3] = getSnapDate().toString(); // time
-        snapSpectrumEvent_RO[4] = Integer.toString(dim_x); // dim_x
-        snapSpectrumEvent_RO[5] = Integer.toString(dim_y); // dim_y
-
-        for (int i = 0; i < value.length; i++) {
-            snapSpectrumEvent_RO[i + 6] = value[i] + "";
-        }
-        return snapSpectrumEvent_RO;
-    }
-
-    @Override
-    public String toString() {
-        String snapSpectrumEvent_RO = "";
-        snapSpectrumEvent_RO = "Source : \t" + getAttributeCompleteName() + "\r\n" + "Attribute ID : \t" + getAttId()
-                + "\r\n" + "Snap ID : \t" + getSnapId() + "\r\n" + "Snap Time : \t" + getSnapDate() + "\r\n"
-                + "Dim x : \t" + getDim_x() + "\r\n" + "Dim y : \t" + getDim_y() + "\r\n" + "Value : \t..." + "\r\n";
-        return snapSpectrumEvent_RO;
-    }
-
-    /**
-     * @return
-     */
-    public Object getSpectrumValueRWRead() {
-        Object value = getValue();
-        if (value == null) {
-            return null;
-        }
-        int len = this.dim_x;
-        if (value instanceof double[]) {
-            double[] ret = Arrays.copyOf((double[]) value, len);
-
-            return ret;
-        } else if (value instanceof byte[]) {
-            byte[] ret = Arrays.copyOf((byte[]) value, len);
-
-            return ret;
-        } else if (value instanceof short[]) {
-            short[] ret = Arrays.copyOf((short[]) value, len);
-
-            return ret;
-        } else if (value instanceof int[]) {
-            int[] ret = Arrays.copyOf((int[]) value, len);
-
-            return ret;
-        } else if (value instanceof float[]) {
-            float[] ret = Arrays.copyOf((float[]) value, len);
-
-            return ret;
-        } else if (value instanceof boolean[]) {
-            boolean[] ret = Arrays.copyOf((boolean[]) value, len);
-
-            return ret;
-        } else if (value instanceof String[]) {
-            String[] ret = new String[len];
-            for (int i = 0; i < len; i++) {
-                ret[i] = ((String[]) value)[i];
-            }
-
-            return ret;
-        } else {
-            return null;
-        }
-    }
-
-    public Object getSpectrumValueRWWrite() {
-        Object value = getValue();
-        if (value == null) {
-            return null;
-        }
-        if (value instanceof double[]) {
-            int len = ((double[]) value).length - this.dim_x;
-            if (len < 0) {
-                len = 0;
-            }
-            double[] ret = new double[len];
-            for (int i = this.dim_x; i < ((double[]) value).length; i++) {
-                ret[i - this.dim_x] = ((double[]) value)[i];
-            }
-
-            return ret;
-        } else if (value instanceof byte[]) {
-            int len = ((byte[]) value).length - this.dim_x;
-            if (len < 0) {
-                len = 0;
-            }
-            byte[] ret = new byte[len];
-            for (int i = this.dim_x; i < ((byte[]) value).length; i++) {
-                ret[i - this.dim_x] = ((byte[]) value)[i];
-            }
-
-            return ret;
-        } else if (value instanceof short[]) {
-            int len = ((short[]) value).length - this.dim_x;
-            if (len < 0) {
-                len = 0;
-            }
-            short[] ret = new short[len];
-            for (int i = this.dim_x; i < ((short[]) value).length; i++) {
-                ret[i - this.dim_x] = ((short[]) value)[i];
-            }
-
-            return ret;
-        } else if (value instanceof int[]) {
-            int len = ((int[]) value).length - this.dim_x;
-            if (len < 0) {
-                len = 0;
-            }
-            int[] ret = new int[len];
-            for (int i = this.dim_x; i < ((int[]) value).length; i++) {
-                ret[i - this.dim_x] = ((int[]) value)[i];
-            }
-
-            return ret;
-        } else if (value instanceof float[]) {
-            int len = ((float[]) value).length - this.dim_x;
-            if (len < 0) {
-                len = 0;
-            }
-            float[] ret = new float[len];
-            for (int i = this.dim_x; i < ((float[]) value).length; i++) {
-                ret[i - this.dim_x] = ((float[]) value)[i];
-            }
-
-            return ret;
-        } else if (value instanceof boolean[]) {
-            int len = ((boolean[]) value).length - this.dim_x;
-            if (len < 0) {
-                len = 0;
-            }
-            boolean[] ret = new boolean[len];
-            for (int i = this.dim_x; i < ((boolean[]) value).length; i++) {
-                ret[i - this.dim_x] = ((boolean[]) value)[i];
-            }
-
-            return ret;
-        } else if (value instanceof String[]) {
-            int len = ((String[]) value).length - this.dim_x;
-            if (len < 0) {
-                len = 0;
-            }
-            String[] ret = new String[len];
-            for (int i = this.dim_x; i < ((String[]) value).length; i++) {
-                ret[i - this.dim_x] = ((String[]) value)[i];
-            }
-
-            return ret;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * @return
-     */
-    public String getSpectrumValueRW_AsString_Read() {
-        Object value = getSpectrumValueRWRead();
-        if (value == null) {
-            return "";
-        }
-        if (value instanceof double[]) {
-            return convertDoubleTabToString((double[]) value);
-        } else if (value instanceof byte[]) {
-            return convertByteTabToString((byte[]) value);
-        } else if (value instanceof short[]) {
-            return convertShortTabToString((short[]) value);
-        } else if (value instanceof int[]) {
-            return convertIntTabToString((int[]) value);
-        } else if (value instanceof float[]) {
-            return convertFloatTabToString((float[]) value);
-        } else if (value instanceof boolean[]) {
-            return convertBooleanTabToString((boolean[]) value);
-        } else if (value instanceof String[]) {
-            return convertStringTabToString((String[]) value);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * @return
-     */
-    public String getSpectrumValueRW_AsString_Write() {
-        Object value = getSpectrumValueRWWrite();
-        if (value == null) {
-            return "";
-        }
-        if (value instanceof double[]) {
-            return convertDoubleTabToString((double[]) value);
-        } else if (value instanceof byte[]) {
-            return convertByteTabToString((byte[]) value);
-        } else if (value instanceof short[]) {
-            return convertShortTabToString((short[]) value);
-        } else if (value instanceof int[]) {
-            return convertIntTabToString((int[]) value);
-        } else if (value instanceof float[]) {
-            return convertFloatTabToString((float[]) value);
-        } else if (value instanceof boolean[]) {
-            return convertBooleanTabToString((boolean[]) value);
-        } else if (value instanceof String[]) {
-            return convertStringTabToString((String[]) value);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * 
-     * @param val
-     * @return
-     */
-    private String convertDoubleTabToString(double[] val) {
-        if (val == null) {
-            return null;
-        }
-        StringBuilder valueStr = new StringBuilder();
-
-        for (int j = 0; j < val.length; j++) {
-            valueStr.append(val[j]);
-            if (j < val.length - 1) {
-				valueStr.append(GlobalConst.CLOB_SEPARATOR);
-            }
-        }
-
-        return valueStr.toString();
-    }
-
-    /**
-     * 
-     * @param val
-     * @return
-     */
-    private String convertByteTabToString(byte[] val) {
-        if (val == null) {
-            return null;
-        }
-        StringBuilder valueStr = new StringBuilder();
-
-        for (int j = 0; j < val.length; j++) {
-            valueStr.append(val[j]);
-            if (j < val.length - 1) {
-				valueStr.append(GlobalConst.CLOB_SEPARATOR);
-            }
-        }
-
-        return valueStr.toString();
-    }
-
-    /**
-     * 
-     * @param val
-     * @return
-     */
-    private String convertIntTabToString(int[] val) {
-        if (val == null) {
-            return null;
-        }
-        StringBuilder valueStr = new StringBuilder();
-
-        for (int j = 0; j < val.length; j++) {
-            valueStr.append(val[j]);
-            if (j < val.length - 1) {
-				valueStr.append(GlobalConst.CLOB_SEPARATOR);
-            }
-        }
-
-        return valueStr.toString();
-    }
-
-    /**
-     * 
-     * @param val
-     * @return
-     */
-    private String convertShortTabToString(short[] val) {
-        if (val == null) {
-            return null;
-        }
-        StringBuilder valueStr = new StringBuilder();
-
-        for (int j = 0; j < val.length; j++) {
-            valueStr.append(val[j]);
-            if (j < val.length - 1) {
-				valueStr.append(GlobalConst.CLOB_SEPARATOR);
-            }
-        }
-
-        return valueStr.toString();
-    }
-
-    /**
-     * 
-     * @param val
-     * @return
-     */
-    private String convertFloatTabToString(float[] val) {
-        if (val == null) {
-            return null;
-        }
-        StringBuilder valueStr = new StringBuilder();
-
-        for (int j = 0; j < val.length; j++) {
-            valueStr.append(val[j]);
-            if (j < val.length - 1) {
-				valueStr.append(GlobalConst.CLOB_SEPARATOR);
-            }
-        }
-
-        return valueStr.toString();
-    }
-
-    /**
-     * 
-     * @param val
-     * @return
-     */
-    private String convertBooleanTabToString(boolean[] val) {
-        if (val == null) {
-            return null;
-        }
-        StringBuilder valueStr = new StringBuilder();
-
-        for (int j = 0; j < val.length; j++) {
-            valueStr.append(val[j]);
-            if (j < val.length - 1) {
-				valueStr.append(GlobalConst.CLOB_SEPARATOR);
-            }
-        }
-
-        return valueStr.toString();
-    }
-
-    /**
-     * 
-     * @param val
-     * @return
-     */
-    private String convertStringTabToString(String[] val) {
-        if (val == null) {
-            return null;
-        }
-        StringBuilder valueStr = new StringBuilder();
-
-        for (int j = 0; j < val.length; j++) {
-            valueStr.append(val[j]);
-            if (j < val.length - 1) {
-				valueStr.append(GlobalConst.CLOB_SEPARATOR);
-            }
-        }
-
-        return valueStr.toString();
-    }
-
-}
diff --git a/src/main/java/fr/soleil/archiving/snap/api/tools/TangoJAVAUtils.java b/src/main/java/fr/soleil/archiving/snap/api/tools/TangoJAVAUtils.java
new file mode 100644
index 0000000..f3648b4
--- /dev/null
+++ b/src/main/java/fr/soleil/archiving/snap/api/tools/TangoJAVAUtils.java
@@ -0,0 +1,164 @@
+package fr.soleil.archiving.snap.api.tools;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import fr.esrf.TangoDs.TangoConst;
+import fr.soleil.archiving.common.api.tools.StringFormater;
+import fr.soleil.lib.project.math.MathConst;
+
+public class TangoJAVAUtils {
+
+	public static Object initPrimitiveArray(int dataType, int length) {
+		switch (dataType) {
+		case TangoConst.Tango_DEV_BOOLEAN:
+			return new boolean[length];
+		case TangoConst.Tango_DEV_CHAR:
+		case TangoConst.Tango_DEV_UCHAR:
+			return new byte[length];
+		case TangoConst.Tango_DEV_STATE:
+		case TangoConst.Tango_DEV_LONG:
+		case TangoConst.Tango_DEV_ULONG:
+			return new int[length];
+		case TangoConst.Tango_DEV_SHORT:
+		case TangoConst.Tango_DEV_USHORT:
+			return new short[length];
+		case TangoConst.Tango_DEV_FLOAT:
+			return new float[length];
+		case TangoConst.Tango_DEV_STRING:
+			return new String[length];
+		case TangoConst.Tango_DEV_DOUBLE:
+		default:
+			return new double[length];
+		}
+
+	}
+
+	public static Object castResultSetAsPrimitive(int dataType, ResultSet resultSet, int index) throws SQLException {
+		switch (dataType) {
+		case TangoConst.Tango_DEV_STRING:
+			return resultSet.getString(index);
+		case TangoConst.Tango_DEV_UCHAR:
+		case TangoConst.Tango_DEV_CHAR:
+			return resultSet.getByte(index);
+		case TangoConst.Tango_DEV_LONG:
+		case TangoConst.Tango_DEV_ULONG:
+		case TangoConst.Tango_DEV_STATE:
+			return resultSet.getInt(index);
+		case TangoConst.Tango_DEV_BOOLEAN:
+			return resultSet.getInt(index) != 0;
+		case TangoConst.Tango_DEV_SHORT:
+		case TangoConst.Tango_DEV_USHORT:
+			return resultSet.getShort(index);
+		case TangoConst.Tango_DEV_FLOAT:
+			return resultSet.getFloat(index);
+		case TangoConst.Tango_DEV_DOUBLE:
+		default:
+			return resultSet.getDouble(index);
+		}
+	}
+
+	public static Object cast(final int dataType, String currentValRead) {
+		try {
+			switch (dataType) {
+			case TangoConst.Tango_DEV_BOOLEAN:
+				return (int) Double.parseDouble(currentValRead) != 0;
+			case TangoConst.Tango_DEV_STATE:
+			case TangoConst.Tango_DEV_LONG:
+			case TangoConst.Tango_DEV_ULONG:
+				return Integer.parseInt(currentValRead);
+			case TangoConst.Tango_DEV_LONG64:
+			case TangoConst.Tango_DEV_ULONG64:
+				return Long.parseLong(currentValRead);
+			case TangoConst.Tango_DEV_SHORT:
+			case TangoConst.Tango_DEV_USHORT:
+				return Short.parseShort(currentValRead);
+			case TangoConst.Tango_DEV_CHAR:
+			case TangoConst.Tango_DEV_UCHAR:
+				return Byte.parseByte(currentValRead);
+			case TangoConst.Tango_DEV_FLOAT:
+				return Float.parseFloat(currentValRead);
+			case TangoConst.Tango_DEV_DOUBLE:
+				return Double.parseDouble(currentValRead);
+			case TangoConst.Tango_DEV_STRING:
+				return StringFormater.formatStringToRead(currentValRead);
+			default:
+				return null;
+			}
+		} catch (NumberFormatException e) {
+			switch (dataType) {
+			case TangoConst.Tango_DEV_BOOLEAN:
+				return "true".equalsIgnoreCase(currentValRead.trim());
+			case TangoConst.Tango_DEV_STATE:
+			case TangoConst.Tango_DEV_LONG:
+			case TangoConst.Tango_DEV_ULONG:
+				return (int) Double.parseDouble(currentValRead);
+			case TangoConst.Tango_DEV_LONG64:
+			case TangoConst.Tango_DEV_ULONG64:
+				return (long) Double.parseDouble(currentValRead);
+			case TangoConst.Tango_DEV_SHORT:
+			case TangoConst.Tango_DEV_USHORT:
+				return (short) Double.parseDouble(currentValRead);
+			case TangoConst.Tango_DEV_CHAR:
+			case TangoConst.Tango_DEV_UCHAR:
+				return (byte) Double.parseDouble(currentValRead);
+			default:
+				return null;
+			}
+		}
+	}
+
+	public static Object castResultSetAsObject(int dataType, ResultSet resultSet, int index) throws SQLException {
+		switch (dataType) {
+		case TangoConst.Tango_DEV_STRING:
+			return resultSet.getString(index);
+		case TangoConst.Tango_DEV_UCHAR:
+		case TangoConst.Tango_DEV_CHAR:
+			return Byte.valueOf(resultSet.getByte(index));
+		case TangoConst.Tango_DEV_LONG:
+		case TangoConst.Tango_DEV_ULONG:
+		case TangoConst.Tango_DEV_STATE:
+			return Integer.valueOf(resultSet.getInt(index));
+		case TangoConst.Tango_DEV_BOOLEAN:
+			return Boolean.valueOf(resultSet.getInt(index) != 0);
+		case TangoConst.Tango_DEV_SHORT:
+		case TangoConst.Tango_DEV_USHORT:
+			return Short.valueOf(resultSet.getShort(index));
+		case TangoConst.Tango_DEV_FLOAT:
+			return Float.valueOf(resultSet.getFloat(index));
+		case TangoConst.Tango_DEV_DOUBLE:
+		default:
+			return Double.valueOf(resultSet.getDouble(index));
+		}
+	}
+
+	public static Object defaultValue(final int dataType) {
+		switch (dataType) {
+		case TangoConst.Tango_DEV_BOOLEAN:
+			return false;
+		case TangoConst.Tango_DEV_STATE:
+		case TangoConst.Tango_DEV_LONG:
+		case TangoConst.Tango_DEV_ULONG:
+			return 0;
+		case TangoConst.Tango_DEV_LONG64:
+		case TangoConst.Tango_DEV_ULONG64:
+			return 0l;
+		case TangoConst.Tango_DEV_SHORT:
+		case TangoConst.Tango_DEV_USHORT:
+			return (short) 0;
+		case TangoConst.Tango_DEV_CHAR:
+		case TangoConst.Tango_DEV_UCHAR:
+			return (byte) 0;
+		case TangoConst.Tango_DEV_FLOAT:
+			return Float.NaN;
+		case TangoConst.Tango_DEV_DOUBLE:
+			return MathConst.NAN_FOR_NULL;
+		default:
+			return null;
+		}
+	}
+
+	public static boolean isNullOrNaN(final String value) {
+		return ((value == null) || value.isEmpty() || "null".equals(value) || "NaN".equalsIgnoreCase(value));
+	}
+}
diff --git a/src/test/java/fr/soleil/archiving/snap/api/DataBaseAPITest.java b/src/test/java/fr/soleil/archiving/snap/api/DataBaseAPITest.java
index de28f26..e14aa30 100644
--- a/src/test/java/fr/soleil/archiving/snap/api/DataBaseAPITest.java
+++ b/src/test/java/fr/soleil/archiving/snap/api/DataBaseAPITest.java
@@ -42,12 +42,6 @@ public class DataBaseAPITest {
 		assertTrue(dbApi.getMaxContextID() > 0);
 	}
 
-	@Test
-	public void getAllContextTest() throws SnapshotingException {
-		List<SnapContext> result = dbApi.getAllContext();
-		assertNotNull(result);
-		assertFalse(result.isEmpty());
-	}
 
 	@Test
 	public void getContextTest() throws SnapshotingException {
@@ -73,20 +67,13 @@ public class DataBaseAPITest {
 
 	@Test
 	public void getContextAssociatedSnapshotsTest() throws SnapshotingException {
-		List<SnapshotLight> result = dbApi.getContextAssociatedSnapshots(-1);
-		assertTrue(result.isEmpty());
-
-		result = dbApi.getContextAssociatedSnapshots(76);
-		assertFalse(result.isEmpty());
-		int expected = result.size();
-
-		result = dbApi.getContextAssociatedSnapshots("", -1, -1);
+		List<SnapshotLight> result = dbApi.getContextAssociatedSnapshots("", -1, -1);
 		assertFalse(result.isEmpty());
 		assertEquals(31, result.size());
 
 		result = dbApi.getContextAssociatedSnapshots(" WHERE ID_CONTEXT=? ", 76, -1);
 		assertFalse(result.isEmpty());
-		assertEquals(expected, result.size());
+		assertEquals(28, result.size());
 
 		result = dbApi.getContextAssociatedSnapshots(" WHERE ID_SNAP=? AND ID_CONTEXT=?", 76, 228);
 		assertFalse(result.isEmpty());
-- 
GitLab