package art.servers.transactionsserver.model.access; import art.library.interop.InteropParameters; import art.library.interop.InteropResponse; import art.library.interop.serialization.Serialization; import art.library.interop.serialization.SerializationException; import art.library.model.devices.user.User; import art.library.model.devices.user.UserPermission; import art.library.model.transactions.permissions.ListPermission; import art.library.model.transactions.permissions.PermissionDevice; import art.library.model.transactions.permissions.PermissionDeviceFeature; import art.library.model.transactions.permissions.PermissionFeature; import art.library.utils.resources.Resources; import art.servers.transactionsserver.Shared; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Set; public class ModelPermissions { public ModelPermissions() throws Exception { } // /** * @param parameters InteropParameters *

name: "language" class: String * @return InteropResponse * ListPermission * @throws SerializationException */ public InteropResponse getPermissions(InteropParameters parameters) throws SerializationException { String language = (String)parameters.getParameterValue("language"); try { ListPermission listPermission = (ListPermission) Serialization.deserialize(ListPermission.class.getName(), Resources.getResourceStream("data/" + Shared.getApplicationName() + ".permissions.json")); //Serialization.toPrettyString() //Serialization.serialize(listPermission, new File(Shared.getApplicationName() + ".permissions.json")); if (listPermission != null) { listPermission.permissionsFeature.forEach((t) -> { t.groupDescription = Shared.configuration.getMessage(language, t.group); t.description = Shared.configuration.getMessage(language, t.description); }); listPermission.permissionsDeviceFeature.forEach((t) -> { t.description = Shared.configuration.getMessage(language, t.description); }); } return new InteropResponse(listPermission); } catch (Exception e) { throw new SerializationException(e.getMessage()); } } /** * @param parameters InteropParameters *

name: "language" class: String *

name: "lusername" class: String[] *

name: "timestamp" class: Long * @return InteropResponse * UserPermission * @throws SerializationException */ @SuppressWarnings("unchecked") public InteropResponse getUserPermission(InteropParameters parameters) throws SerializationException, Exception { String language = (String)parameters.getParameterValue("language"); String[] lusername = parameters.getBodyContentValue(String[].class); long timestamp = 0L; if (parameters.hasParameter("timestamp")) { timestamp = Long.parseLong((String) parameters.getParameterValue("timestamp")); } UserPermission result = new UserPermission(); Set sPermissionFeature = new HashSet<>(); Set sPermissionDeviceRead = new HashSet<>(); Set sPermissionDeviceWrite = new HashSet<>(); Set sPermissionDeviceFeature = new HashSet<>(); /* - getUsers -> returns the users modified after the given timestamp. - if session.configuration.timestamp is 0 we allways get all users because that means the users list was changed and permissions are not valid any more - if session.configuration is not 0 then timestamp is the last time that we calculated permissions - if session.configuration is not 0 an we receive from getUsers Null that means that with the same list of users there are no user updates and we don't need to recalculate an return PermissionUser */ if (true){ } User[] luser = Shared.getModel().getDevices(lusername, timestamp); //if luser if null that means that no need to sent anything to the client because permissions will be the same //si no me ha devuelto todos los que querĂ­a quiere decir que hay cambios de alguno, entonces necesito preguntar por todos. if ((lusername.length == luser.length) && (luser != null)) { } else { if (luser != null) { luser = Shared.getModel().getDevices(lusername, 0L); } } for (User user : luser) { // Shared.println("ModelPermissions", "1.User permissions: " + user.username + " - " + user.getDeviceInformation().name); if ((user.configuration != null) && ((user.getDeviceConfiguration().permissions != null))) { sPermissionFeature.addAll(user.getDeviceConfiguration().permissions.lPermissionFeature); sPermissionDeviceRead.addAll(user.getDeviceConfiguration().permissions.lPermissionDeviceRead); sPermissionDeviceWrite.addAll(user.getDeviceConfiguration().permissions.lPermissionDeviceWrite); sPermissionDeviceFeature.addAll(user.getDeviceConfiguration().permissions.lPermissionDeviceFeature); } } result.lPermissionFeature = new ArrayList(sPermissionFeature); result.lPermissionDeviceRead = new ArrayList(sPermissionDeviceRead); result.lPermissionDeviceWrite = new ArrayList(sPermissionDeviceWrite); result.lPermissionDeviceFeature = new ArrayList(sPermissionDeviceFeature); Collections.sort(result.lPermissionFeature); Collections.sort(result.lPermissionDeviceRead, (PermissionDevice o1,PermissionDevice o2) -> (o1.device).compareTo(o2.device)); Collections.sort(result.lPermissionDeviceWrite, (PermissionDevice o1,PermissionDevice o2) -> (o1.device).compareTo(o2.device)); Collections.sort(result.lPermissionDeviceFeature, (PermissionDeviceFeature o1,PermissionDeviceFeature o2) -> (o1.device+o1.name).compareTo(o2.device+o2.name)); // Shared.println("ModelPermissions", "2.User permissions - Result: DeviceFeature: " + result.lPermissionDeviceFeature.size() + " - Feature: " + result.lPermissionFeature.size() + " - Read: " + result.lPermissionDeviceRead.size() + " - Write: " + result.lPermissionDeviceWrite.size()); return new InteropResponse(result); } // }