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 permissions = new HashMap(); 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 getUsernames() { mutexUserPermissions.lockRead(); try { return new ArrayList(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(); } } }