From f1cb4443aede6d4657bdc3396c8914d3a9f4fa93 Mon Sep 17 00:00:00 2001
From: Alejandro Acuña <alejandro.acuna@aluvisagrupo.com>
Date: Mon, 11 Nov 2024 13:09:35 +0000
Subject: [PATCH] bck

---
 libraries/server/src/art/servers/controller/ListenerImplementation.java |   84 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 70 insertions(+), 14 deletions(-)

diff --git a/libraries/server/src/art/servers/controller/ListenerImplementation.java b/libraries/server/src/art/servers/controller/ListenerImplementation.java
index a9cf0f3..6fa49eb 100644
--- a/libraries/server/src/art/servers/controller/ListenerImplementation.java
+++ b/libraries/server/src/art/servers/controller/ListenerImplementation.java
@@ -11,7 +11,6 @@
 import art.library.model.devices.application.ApplicationRealtime;
 import art.library.model.devices.user.User;
 import art.library.model.devices.user.UserPermission;
-import art.library.model.devices.user.UserStatus;
 import art.library.model.devices.user.configuration.ConfigurationLockLogin;
 import art.library.model.general.ModelFile;
 import art.library.model.transactions.traces.Trace;
@@ -38,6 +37,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.TimeZone;
+import java.util.stream.Stream;
 
 
 public class ListenerImplementation 
@@ -156,6 +156,8 @@
 
         User user = null;
 
+        // TODO: esto cada vez es muy ineficiente, revisar.......
+       
         try
         {
             user = (User)Shared.model.getDeviceExternal(Licence.encrypt(username));
@@ -177,6 +179,9 @@
             }
         }
 
+        // TODO : volver a poner
+/*        
+        
         if (user.getDeviceInformation().password.equals(Licence.encrypt(password)) == false)
         {
             // Check blocked users
@@ -243,6 +248,7 @@
         status.unlockTimestamp = -1;
         status.lastLogin = System.currentTimeMillis();
         Shared.model.updateDevice(user, newuser);
+*/
 
         HttpAuthentication authentication = new HttpAuthentication(username, password, address, user.getDeviceInformation().group);
         return authentication;
@@ -392,7 +398,6 @@
         }
         catch (Exception e)
         {
-           Shared.printstack("Listener", e);
            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            throw new SerializationException(Shared.getMessage(language, e.getMessage()), sw.toString()); 
@@ -516,11 +521,22 @@
         {
             String identifier = (String)parameters.getParameterValue("identifier");
             if (identifier == null) identifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
-            
+            String username = (String)parameters.getParameterValue("username");
+            User user = null;
+            if (username != null)
+            {
+                try{user = (User)Shared.model.getDeviceExternal(identifier);} catch (Exception e){};
+                if (user == null)
+                {
+                    try{user = (User)Shared.model.getDeviceExternal(Licence.encrypt(identifier));} catch (Exception e){};
+                }
+            }
+
             if (parameters.hasParameter("timestamp"))
             {
                 long timestamp = getTimestamp((String)parameters.getParameterValue("timestamp"));
-                return new InteropResponse(Shared.model.getDevices(identifier, timestamp));
+                Device[] devices = checkDevices(user, Shared.model.getDevices(identifier, timestamp));
+                return new InteropResponse(devices);
             }
             else if (parameters.hasParameter("groups"))
             {
@@ -666,6 +682,7 @@
             Class clazzDevice = Class.forName(Shared.model.deviceClassName);
             bodyContent = (String)parameters.getParameterValue("body-content");
             Device device = (Device)Serialization.deserialize(clazzDevice, bodyContent);
+            addDevices(language, bodyContent);
             Shared.model.updateDevice(new Device[]{device});
             return new InteropResponse(new Boolean(true));
         }
@@ -690,14 +707,22 @@
         
         try
         {
+            System.out.println("1.AddDevices: " + Shared.model.deviceClassName);
             Class clazzDevice = Class.forName(Shared.model.deviceClassName);
-            bodyContent = (String)parameters.getParameterValue("body-content");
+            System.out.println("2.AddDevices: " + clazzDevice);
+            // bodyContent = (String)parameters.getParameterValue("body-content");
             Class<?> clazzArray = (Class<?>)Array.newInstance(clazzDevice, 0).getClass();
-            Device[] ldevice = (Device[])Serialization.deserialize(clazzArray, bodyContent);
+            Device[] ldevice = parameters.getBodyContentValue(clazzArray);
+            // System.out.println("3.AddDevices: " + bodyContent);
+            // Device[] ldevice = (Device[])Serialization.deserialize(clazzArray, bodyContent);
+            System.out.println("4.AddDevices: " + ldevice);
             if ((ldevice != null) && (ldevice.length > 0))
             {
+                System.out.println("5.AddDevices: " + ldevice[0]);
                 if (ldevice[0] != null)
                 {
+                    System.out.println("6.AddDevices: " + ldevice[0].getIdentifier());
+                    Shared.model.addDevices(Stream.of(ldevice).map(dev -> dev.getDeviceInformation()).toArray(DeviceInformation[]::new));
                     Shared.model.updateDevice(ldevice);
                     return new InteropResponse(new Boolean(true));
                 }
@@ -705,6 +730,7 @@
         }
         catch (ClassCastException exception)
         {
+            exception.printStackTrace();
         }
         catch (Exception exception)
         {
@@ -788,6 +814,7 @@
             }
             
             Shared.model.deleteDevices(lidentifier);
+           
             return new InteropResponse(new Boolean(true));
         }
         catch (ServerException exception)
@@ -829,14 +856,15 @@
 
     public InteropResponse getDevicesRealtime(InteropParameters parameters) throws SerializationException 
     {
-        String language = (String)parameters.getParameterValue("language");        
+        String language = (String)parameters.getParameterValue("language");
         long timestamp = (parameters.hasParameter("timestamp") == true) ? Long.parseLong((String)parameters.getParameterValue("timestamp")) : 0;
-           
+
         try
         {
             List<DeviceRealtime> lrealtime = new ArrayList<DeviceRealtime>();
 
-            for (Device device : Shared.model.getDevices())
+            Device[] ldevice = art.servers.Shared.model.getDevicesCopy();
+            for (Device device : ldevice)
             {
                 DeviceRealtime realtime = device.getDeviceRealtime();
                 
@@ -845,13 +873,12 @@
                     if (realtime.lastTimestampUpdate > timestamp) 
                     {
                         realtime.identifier = device.getIdentifier();
-                        lrealtime.add(device.getDeviceRealtime());
+                        lrealtime.add(realtime);
                     }
                 }
             }
 
             return new InteropResponse(lrealtime.toArray(new DeviceRealtime[lrealtime.size()]));
-            
         }
         catch (Exception e)
         {
@@ -1651,7 +1678,31 @@
     
     
    // </editor-fold>
-    
+
+
+    private Device[] checkDevices (User user, Device[] devices)
+    {
+        try
+        {
+            if (user == null) return(devices);
+            List<Device> list = new ArrayList<Device>();
+            for (Device device : devices)
+            {
+                if ((user.getDeviceInformation().municipality != null) && (device.getDeviceInformation().municipality != null) &&
+                    (user.getDeviceInformation().municipality.equalsIgnoreCase(device.getDeviceInformation().municipality)))
+                {
+                    list.add(device);
+                }
+            }
+
+            return(list.toArray(new Device[0]));
+        }
+        catch (Exception e)
+        {
+            return(devices);
+        }
+    }
+
     
     // <editor-fold defaultstate="collapsed" desc="static">
     
@@ -1664,7 +1715,7 @@
     
     
     
-    private static String[] getStringArray(InteropParameter parameter)
+    protected static String[] getStringArray(InteropParameter parameter)
     {
         if (parameter.getValue() instanceof String[])
         {
@@ -1710,11 +1761,16 @@
             if ((timestamp.indexOf("-") == 4) && (timestamp.length() == 10)) return new SimpleDateFormat("yyyy-MM-dd").parse(timestamp).getTime();
             if ((timestamp.indexOf("-") == 2) && (timestamp.length() == 10)) return new SimpleDateFormat("dd-MM-yyyy").parse(timestamp).getTime();
             
+            if ((timestamp.indexOf("/") == 4) && (timestamp.length() == 16)) return new SimpleDateFormat("yyyy/MM/dd HH:mm").parse(timestamp).getTime(); 
+            if ((timestamp.indexOf("/") == 2) && (timestamp.length() == 16)) return new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(timestamp).getTime();
+            if ((timestamp.indexOf("-") == 4) && (timestamp.length() == 16)) return new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(timestamp).getTime();
+            if ((timestamp.indexOf("-") == 2) && (timestamp.length() == 16)) return new SimpleDateFormat("dd-MM-yyyy HH:mm").parse(timestamp).getTime();
+
             if ((timestamp.indexOf("/") == 4) && (timestamp.length() == 19)) return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse(timestamp).getTime(); 
             if ((timestamp.indexOf("/") == 2) && (timestamp.length() == 19)) return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(timestamp).getTime();
             if ((timestamp.indexOf("-") == 4) && (timestamp.length() == 19)) return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(timestamp).getTime();
             if ((timestamp.indexOf("-") == 2) && (timestamp.length() == 19)) return new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse(timestamp).getTime();
-
+            
             if ((timestamp.indexOf("/") == 4) && (timestamp.length() == 23)) return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS").parse(timestamp).getTime(); 
             if ((timestamp.indexOf("/") == 2) && (timestamp.length() == 23)) return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS").parse(timestamp).getTime();
             if ((timestamp.indexOf("-") == 4) && (timestamp.length() == 23)) return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(timestamp).getTime();

--
Gitblit v1.10.0