package art.servers.rtzserver.controller;
|
|
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.DeviceAction;
|
import art.library.model.devices.colors.controller.RTZ32.RTZ32_ControllerConfiguration;
|
import art.library.model.devices.colors.controller.RTZ32.commands.RTZ32_Commands_Configuration_Write;
|
import art.library.model.devices.colors.controller.RTZ32.configuration.RTZ32_Configuration;
|
import art.library.model.devices.colors.controller.RTZ32.information.RTZ32_Information_Program;
|
import art.library.model.devices.colors.controller.RTZ32.information.RTZ32_Information_Programs;
|
import art.library.model.devices.colors.controller.RTZ32.types.RTZ32_Persistent_Configuration;
|
import art.library.model.devices.colors.controller.RTZ32.types.RTZ32_Persistent_Configurations;
|
import art.library.model.devices.colors.controller.RTZ32.types.RTZ32_Validation_Result;
|
import art.servers.ServerException;
|
import art.servers.Shared;
|
import art.servers.rtzserver.utils.VALIDATION;
|
import art.servers.types.HttpAuthentication;
|
import java.io.BufferedOutputStream;
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.FileOutputStream;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
|
public class ListenerImplementation extends art.servers.controller.ListenerImplementation
|
{
|
|
public InteropResponse sendCommands(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String identifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
Controller_RTZ32 controller = (art.servers.rtzserver.controller.Controller_RTZ32)Shared.getDeviceController(identifier);
|
|
DeviceAction[] laction = controller.sendCommands(parameters);
|
return(new InteropResponse(laction));
|
}
|
catch (ServerException exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
// <editor-fold defaultstate="collapsed" desc="Working programs">
|
|
public InteropResponse listPrograms(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String deviceIdentifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
RTZ32_Information_Programs programs = Controller_RTZ32_Database.listPrograms(deviceIdentifier);
|
return(new InteropResponse(programs, false));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
public InteropResponse getProgram(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String deviceIdentifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
String programNumber = (String)parameters.getParameterValue("program");
|
RTZ32_Information_Program program = Controller_RTZ32_Database.getProgram(deviceIdentifier, programNumber);
|
return(new InteropResponse(program, false));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
public InteropResponse addProgram(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
RTZ32_Information_Program program = parameters.getBodyContentValue(RTZ32_Information_Program.class);
|
return(new InteropResponse(Controller_RTZ32_Database.addProgram(program), false));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
public InteropResponse deleteProgram(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String deviceIdentifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
String programIdentifier = (String)parameters.getParameterValue("program");
|
return(new InteropResponse(Controller_RTZ32_Database.deleteProgram(deviceIdentifier, programIdentifier), false));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
public InteropResponse saveProgram(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
RTZ32_Information_Program program = parameters.getBodyContentValue(RTZ32_Information_Program.class);
|
String identifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
String username = (parameters.hasParameter("username") == true) ? (String)parameters.getParameterValue("username") : "?";
|
Controller_RTZ32 controller = (art.servers.rtzserver.controller.Controller_RTZ32)Shared.getDeviceController(identifier);
|
|
|
RTZ32_Validation_Result result1 = VALIDATION.validate(controller.getDevice(), program, language);
|
RTZ32_Validation_Result result2 = VALIDATION.eprom(controller.getDevice(), program, language);
|
RTZ32_Validation_Result result = new RTZ32_Validation_Result();
|
result.errors.addAll(result1.errors);
|
result.errors.addAll(result2.errors);
|
result.warnings.addAll(result1.warnings);
|
result.warnings.addAll(result2.warnings);
|
|
if (result.hasErrors() == true)
|
{
|
return new InteropResponse(result, false);
|
}
|
else
|
{
|
program.validated = true;
|
program.username = username;
|
Controller_RTZ32_Database.addProgram(program);
|
}
|
|
return new InteropResponse(result, false);
|
|
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
// </editor-fold>
|
|
|
// <editor-fold defaultstate="collapsed" desc="Valitations">
|
|
|
public InteropResponse validateProgramNormal(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
RTZ32_Information_Program program = parameters.getBodyContentValue(RTZ32_Information_Program.class);
|
String identifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
Controller_RTZ32 controller = (art.servers.rtzserver.controller.Controller_RTZ32)Shared.getDeviceController(identifier);
|
return new InteropResponse(VALIDATION.validate(controller.getDevice(), program, language), false);
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
public InteropResponse validateProgramEPROM(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
RTZ32_Information_Program program = parameters.getBodyContentValue(RTZ32_Information_Program.class);
|
String identifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
Controller_RTZ32 controller = (art.servers.rtzserver.controller.Controller_RTZ32)Shared.getDeviceController(identifier);
|
return new InteropResponse(VALIDATION.eprom(controller.getDevice(), program, language), false);
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
// </editor-fold>
|
|
|
// <editor-fold defaultstate="collapsed" desc="Configurations">
|
|
|
public InteropResponse listConfigurations(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String deviceIdentifier = (String)parameters.getParameterValue("device");
|
long timestamp1 = (parameters.hasParameter("from") == true) ? getTimestamp((String)parameters.getParameterValue("from")) : 0;
|
long timestamp2 = (parameters.hasParameter("to") == true) ? getTimestamp((String)parameters.getParameterValue("to")) : System.currentTimeMillis();
|
RTZ32_Persistent_Configurations configurations = Controller_RTZ32_Database.listConfigurations(deviceIdentifier, timestamp1, timestamp2);
|
return(new InteropResponse(configurations, false));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
public InteropResponse getConfiguration(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String deviceIdentifier = (String)parameters.getParameterValue("device");
|
long timestamp = getTimestamp((String)parameters.getParameterValue("timestamp"));
|
RTZ32_Persistent_Configuration configuration = Controller_RTZ32_Database.getConfiguration(deviceIdentifier, timestamp);
|
return(new InteropResponse(configuration, false));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
public InteropResponse addConfiguration(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
RTZ32_Persistent_Configuration configuration = parameters.getBodyContentValue(RTZ32_Persistent_Configuration.class);
|
configuration.username = (String)parameters.getParameterValue("username");
|
return(new InteropResponse(Controller_RTZ32_Database.addConfiguration(configuration), false));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
public InteropResponse deleteConfiguration(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
HttpAuthentication authentication = getHttpAuthentication(parameters);
|
|
try
|
{
|
String deviceIdentifier = (String)parameters.getParameterValue("device");
|
long timestamp = getTimestamp((String)parameters.getParameterValue("timestamp"));
|
InteropResponse response = new InteropResponse(Controller_RTZ32_Database.deleteConfiguration(deviceIdentifier, timestamp), false);
|
|
Controller_RTZ32 controller = (art.servers.rtzserver.controller.Controller_RTZ32)Shared.getDeviceController(deviceIdentifier);
|
Shared.traceInformation(Shared.getApplicationName(), "Delete configuration", controller.name + ", " + new Date(timestamp), authentication, language);
|
return response;
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
|
public InteropResponse previewConfiguration(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String identifier = (parameters.hasParameter("device") == true) ? (String)parameters.getParameterValue("device") : null;
|
Controller_RTZ32 controller = (art.servers.rtzserver.controller.Controller_RTZ32)Shared.getDeviceController(identifier);
|
RTZ32_Commands_Configuration_Write commands = parameters.getBodyContentValue(RTZ32_Commands_Configuration_Write.class);
|
|
RTZ32_ControllerConfiguration configurationCurrent = Serialization.clone(controller.getController().getDeviceConfiguration());
|
RTZ32_Configuration configurationSelected = commands.configuration;
|
|
Controller_RTZ32_Factory_Configuration factoryCurrent = new Controller_RTZ32_Factory_Configuration(configurationCurrent.rtz32);
|
Controller_RTZ32_Factory_Configuration factorySelected = new Controller_RTZ32_Factory_Configuration(configurationSelected);
|
factoryCurrent.serialize();
|
factorySelected.serialize();
|
|
|
if (commands.operationTables == false)
|
{
|
for (int i=5; i<=7; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=33; i<=34; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=38; i<=40; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=41; i<=45; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=50; i<=60; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=64; i<=69; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=31; i<=32; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=70; i<=72; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
factorySelected.tables.put(75, factoryCurrent.tables.get(75));
|
factorySelected.tables.put(78, factoryCurrent.tables.get(78));
|
factorySelected.tables.put(80, factoryCurrent.tables.get(80));
|
for (int i=81; i<=85; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
}
|
|
if (commands.distributionTables == true)
|
{
|
for (int i=1; i<=4; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=35; i<=37; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
for (int i=72; i<=74; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
|
factorySelected.tables.put(46, factoryCurrent.tables.get(46));
|
factorySelected.tables.put(79, factoryCurrent.tables.get(79));
|
factorySelected.tables.put(80, factoryCurrent.tables.get(80));
|
factorySelected.tables.put(95, factoryCurrent.tables.get(95));
|
|
if ((commands.programs == null) || (commands.programs.size() == 0))
|
{
|
for (int i=11; i<=28; i++) factorySelected.tables.put(i, factoryCurrent.tables.get(i));
|
}
|
else
|
{
|
for(Integer programNumber : commands.programs)
|
{
|
if ((programNumber >=1) && (programNumber <=18))
|
{
|
factorySelected.tables.put(programNumber + 10, factoryCurrent.tables.get(programNumber + 10));
|
}
|
}
|
}
|
}
|
|
return new InteropResponse(factorySelected.deserialize(), false);
|
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
|
// </editor-fold>
|
|
|
// <editor-fold defaultstate="collapsed" desc="Maps">
|
|
public InteropResponse listMaps(InteropParameters parameters) throws SerializationException
|
{
|
String language = parameters.getParameterValue("language");
|
|
try
|
{
|
String identifier = (String)parameters.getParameterValue("controller");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("identifier");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("device");
|
|
List<String> maps = new ArrayList<String>();
|
File folder = new File("data/" + Shared.getApplicationName() + "/maps/" + identifier + "/");
|
if (folder.exists() == false) throw new SerializationException(Shared.getMessage(language, "No maps"));
|
for (File file : folder.listFiles()) maps.add(file.getName().replace(".svg", ""));
|
InteropResponse response = new InteropResponse(maps.toArray(new String[maps.size()]), true);
|
Object[] object = response.getResponse();
|
return response;
|
}
|
catch (SerializationException exception)
|
{
|
throw exception;
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
|
|
public InteropResponse getMap(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String identifier = (String)parameters.getParameterValue("controller");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("identifier");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("device");
|
String name = (String)parameters.getParameterValue("name");
|
|
File file = new File("data/" + Shared.getApplicationName() + "/maps/" + identifier + "/" + name + ".svg");
|
if (file.exists() == false) throw new SerializationException(Shared.getMessage(language, "Map does not exists"));
|
byte[] data = new byte[(int)file.length()];
|
FileInputStream fis = new FileInputStream(file);
|
fis.read(data);
|
fis.close();
|
InteropResponse response = new InteropResponse(data);
|
response.mime = "image/svg+xml";
|
return response;
|
}
|
catch (SerializationException exception)
|
{
|
throw exception;
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
|
public InteropResponse addMap(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String identifier = (String)parameters.getParameterValue("controller");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("identifier");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("device");
|
String name = parameters.getParameterValue("name");
|
|
String newIdentifier = identifier.substring(0, identifier.length()-1);
|
newIdentifier = newIdentifier + "0";
|
|
byte[] data = parameters.getBodyContentValue(byte[].class);
|
File file = new File("data/" + Shared.getApplicationName() + "/maps/" + identifier + "/" + name + ".svg");
|
file.getParentFile().mkdirs();
|
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
|
bos.write(data);
|
bos.close();
|
|
return new InteropResponse(new Boolean(true));
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
|
|
|
public InteropResponse deleteMap(InteropParameters parameters) throws SerializationException
|
{
|
String language = (String)parameters.getParameterValue("language");
|
|
try
|
{
|
String identifier = (String)parameters.getParameterValue("controller");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("identifier");
|
if (identifier == null) identifier = (String)parameters.getParameterValue("device");
|
String name = parameters.getParameterValue("name");
|
|
String newIdentifier = identifier.substring(0, identifier.length()-1);
|
newIdentifier = newIdentifier + "0";
|
|
File file = new File("data/" + Shared.getApplicationName() + "/maps/" + identifier + "/" + name + ".svg");
|
if (file.exists() == true) return new InteropResponse(new Boolean(file.delete()));
|
throw new SerializationException(Shared.getMessage(language, "Map does not exists"));
|
}
|
catch (SerializationException exception)
|
{
|
throw exception;
|
}
|
catch (Exception exception)
|
{
|
throw new SerializationException(Shared.getMessage(language, exception.getMessage()), exception);
|
}
|
}
|
|
// </editor-fold>
|
|
|
// https://172.16.11.210:8002/art?operation=getDevices×tamp=0&token=test,test
|
// https://172.16.11.210:8002/art?operation=listConfigurations&device=controller-zaragoza-90020&&token=test,test
|
// https://172.16.11.210:8002/art?operation=getConfiguration&device=controller-zaragoza-90020×tamp=2021-07-08T10:27:44.905Z&token=test,test
|
}
|