package art.servers.controller;
|
|
import art.library.model.devices.user.User;
|
import art.library.model.devices.user.UserPermission;
|
import art.library.model.transactions.traces.Trace;
|
import art.library.utils.licence.Licence;
|
import art.library.utils.synchro.Mutex;
|
import art.servers.Shared;
|
import static java.lang.Thread.sleep;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
|
public class ControllerUserPermissions extends Controller
|
{
|
private HashMap<String, UserPermission> permissions = new HashMap<String, UserPermission>();
|
private Mutex mutexUserPermissions = new Mutex();
|
private String name = null;
|
|
public ControllerUserPermissions()
|
{
|
this.name = Shared.getMessage("Controller user permissions");
|
this.setName(name);
|
start();
|
}
|
|
|
|
public void run()
|
{
|
Shared.traceInformation(name, "Starting");
|
|
long lastTimestamp = System.currentTimeMillis();
|
|
while ((isInterrupted() == false) && (exit == false))
|
{
|
if (Shared.isServerEnabled() == true)
|
{
|
try
|
{
|
// reload
|
|
// reload(); // LO quito a ver si baja el consumo de memoria
|
|
// Wait
|
|
long timesleep = (300000) - (System.currentTimeMillis() - lastTimestamp);
|
|
if ((timesleep > 0) && (timesleep < 300000))
|
{
|
sleep(timesleep);
|
}
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
try{sleep(50);} catch (Exception exception){};
|
}
|
|
Shared.println(Trace.getTraceInformation(Shared.getApplicationName(), name, Shared.getMessage("Finishing"), Shared.getMessage("Success")), true);
|
}
|
|
|
|
|
private void reload()
|
{
|
try
|
{
|
for (String username : getUsernames())
|
{
|
try
|
{
|
User user = (User)Shared.model.getDeviceExternal(Licence.encrypt(username));
|
setUserPermission(username, user.getDeviceConfiguration().permissions);
|
}
|
catch (Exception e)
|
{
|
User user = (User)Shared.model.getDeviceExternal(username);
|
setUserPermission(username, user.getDeviceConfiguration().permissions);
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
|
|
|
|
public UserPermission getUserPermission(String username)
|
{
|
mutexUserPermissions.lockRead();
|
UserPermission permission = permissions.get(username);
|
mutexUserPermissions.releaseRead();
|
|
try
|
{
|
if (permission == null)
|
{
|
try
|
{
|
User user = (User)Shared.model.getDeviceExternal(Licence.encrypt(username));
|
permission = user.getDeviceConfiguration().permissions;
|
setUserPermission(username, permission);
|
}
|
catch (Exception e)
|
{
|
User user = (User)Shared.model.getDeviceExternal(username);
|
permission = user.getDeviceConfiguration().permissions;
|
setUserPermission(username, permission);
|
}
|
}
|
|
return permission;
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
return null;
|
}
|
|
|
|
|
|
public UserPermission getUserPermission(String profile, String username)
|
{
|
mutexUserPermissions.lockRead();
|
UserPermission permission = permissions.get(username);
|
mutexUserPermissions.releaseRead();
|
|
try
|
{
|
|
if (permission == null)
|
{
|
try
|
{
|
User user = (User)Shared.model.getDeviceExternal(Licence.encrypt(username));
|
permission = user.getDeviceConfiguration().permissions;
|
setUserPermission(username, permission);
|
}
|
catch (Exception e)
|
{
|
User user = (User)Shared.model.getDeviceExternal(username);
|
permission = user.getDeviceConfiguration().permissions;
|
setUserPermission(username, permission);
|
}
|
}
|
|
if (permission != null) return permission;
|
|
}
|
catch (Exception e)
|
{
|
}
|
|
return getUserPermission(profile);
|
}
|
|
|
|
|
|
|
|
private List<String> getUsernames()
|
{
|
mutexUserPermissions.lockRead();
|
|
try
|
{
|
return new ArrayList<String>(permissions.keySet());
|
}
|
catch (Exception e)
|
{
|
return(null);
|
}
|
finally
|
{
|
mutexUserPermissions.releaseRead();
|
}
|
}
|
|
|
|
|
|
private void setUserPermission(String username, UserPermission permission)
|
{
|
mutexUserPermissions.lockWrite();
|
try
|
{
|
permissions.put(username, permission);
|
}
|
catch (Exception e)
|
{
|
}
|
finally
|
{
|
mutexUserPermissions.releaseWrite();
|
}
|
}
|
|
|
|
|
|
}
|