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
|
{
|
}
|
|
//<editor-fold defaultstate="collapsed" desc="Permissions">
|
/**
|
* @param parameters <code>InteropParameters</code>
|
* <p>name: "language" class: <code>String</code>
|
* @return <code>InteropResponse</code>
|
* <code>ListPermission</code>
|
* @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 <code>InteropParameters</code>
|
* <p>name: "language" class: <code>String</code>
|
* <p>name: "lusername" class: <code>String[]</code>
|
* <p>name: "timestamp" class: <code>Long</code>
|
* @return <code>InteropResponse</code>
|
* <code>UserPermission</code>
|
* @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<PermissionFeature> sPermissionFeature = new HashSet<>();
|
Set<PermissionDevice> sPermissionDeviceRead = new HashSet<>();
|
Set<PermissionDevice> sPermissionDeviceWrite = new HashSet<>();
|
Set<PermissionDeviceFeature> 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);
|
}
|
|
//</editor-fold>
|
|
|
}
|