From 83035e506ffdaac107482b3b39255a938e1dff26 Mon Sep 17 00:00:00 2001 From: ics Date: Fri, 12 Apr 2019 13:42:58 +0200 Subject: [PATCH] New code to manage files moved from client to server side (scans, xbu, pal, settings) --- .../fr/ill/ics/bridge/ResourceManager.java | 38 +- .../dataprovider/ServantManagerAccessor.java | 686 ++++++++++-------- 2 files changed, 398 insertions(+), 326 deletions(-) diff --git a/src/main/java/fr/ill/ics/bridge/ResourceManager.java b/src/main/java/fr/ill/ics/bridge/ResourceManager.java index bf8213c..21475fb 100644 --- a/src/main/java/fr/ill/ics/bridge/ResourceManager.java +++ b/src/main/java/fr/ill/ics/bridge/ResourceManager.java @@ -61,28 +61,6 @@ public class ResourceManager { public String getFileContent(String controllerType, String fileName) throws ResourceNotFoundException { return ServantManagerAccessor.getInstance(serverId).readResourceFile(controllerType, fileName); - - /* - String fullFilePath = "/home/dpt/ortizh/tmp/" + fileName; - if (new File(fullFilePath).exists()) { - try { - String content = ""; - String line; - BufferedReader in = new BufferedReader(new FileReader(fullFilePath)); - while ((line = in.readLine()) != null) { - content = content + line + "\n"; - } - in.close(); - return content; - } catch (IOException e) { - System.err.println("IOException while getting content of file " + fullFilePath); - e.printStackTrace(); - } - } else { - throw new ResourceNotFoundException(fileName); - } - return null; - */ } public void setFileContent(String controllerType, String fileName, String content) { @@ -107,6 +85,22 @@ public class ResourceManager { */ } + + public void saveFile(String fileName, String content) { + ServantManagerAccessor.getInstance(serverId).saveFile(fileName, content); + } + + + public String getFileContent(String fileName) throws ResourceNotFoundException { + return ServantManagerAccessor.getInstance(serverId).getFileContent(fileName); + } + + + public String getTree(String rootDirectory) { + return ServantManagerAccessor.getInstance(serverId).getTree(rootDirectory); + } + + public HashMap getFamilyImageKeys() { return ServantManagerAccessor.getInstance(serverId).getFamilyImageKeys(); } diff --git a/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantManagerAccessor.java b/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantManagerAccessor.java index 42143e0..5aebe19 100644 --- a/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantManagerAccessor.java +++ b/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantManagerAccessor.java @@ -60,26 +60,26 @@ import fr.ill.ics.nscclient.servant.StandardPropertyDescriptor; import fr.ill.ics.nscclient.serverconnection.ServerInstance; public class ServantManagerAccessor { - + public class LoadConfigurationFailure extends Exception {}; - + private static class ChildServants { String name; List childNames = new LinkedList(); } - + private static final Logger LOGGER = Logger.getLogger(ServantManagerAccessor.class.getName()); private static int DATABASE_ID = 0; private final static String PARAMETERIZABLE_SCAN_1D = "parameterizable_scan_1d"; - + private String serverId; private Application.Requester servantManagerRequester; - + private static Map instances = new HashMap(); - + private Map servants = new HashMap(); private Map> childServantNames = new HashMap>(); - + private ServantManagerAccessor(String serverId) { this.serverId = serverId; } @@ -91,111 +91,111 @@ public class ServantManagerAccessor { } return instances.get(serverId); } - + public void init() { // Connect nomad server. Application.Instance nomad = ServerInstance.getInstance().getApplicationInstance(serverId); - + if (nomad == null) { System.err.println("Problem to connect to the nomad server " + serverId); return; } - + System.out.println("Trying to create servant manager requester"); - + // Create the requester. try { servantManagerRequester = Application.Requester.create(nomad, "servant_manager"); - + } catch (RequesterCreationException e) { System.err.println("Problem to connect to the servant manager responder"); return; } - + System.out.println("Created requester " + servantManagerRequester); } - + public void reset() { // Terminate the requester. servantManagerRequester.terminate(); } - + private void logError(String methodName, Common.Error.Type error, int id) { - + if (error == Common.Error.Type.NO_SUCH_SERVANT) { LOGGER.logp(Level.SEVERE, this.getClass().getName(), methodName, "UnknownServant with ID " + id); } } - + private ServantData getWholeConfiguration(int databaseID) throws LoadConfigurationFailure { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetWholeConfiguration) - .build(); + .setType(ServantManagerRequest.Message.Type.GetWholeConfiguration) + .build(); // Create the request. ServantManagerRequest.GetWholeConfigurationRequest request = ServantManagerRequest.GetWholeConfigurationRequest.newBuilder() - .setDatabaseID(databaseID) - .build(); - + .setDatabaseID(databaseID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { ServantData response = ServantData.parseFrom(servantManagerRequester.receive()); - + return response; } catch (InvalidProtocolBufferException e) { throw new LoadConfigurationFailure(); } } - + private ServantDataUpdate getWholeConfigurationUpdate(int databaseID) throws LoadConfigurationFailure { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetWholeConfigurationUpdate) - .build(); + .setType(ServantManagerRequest.Message.Type.GetWholeConfigurationUpdate) + .build(); // Create the request. ServantManagerRequest.GetWholeConfigurationRequest request = ServantManagerRequest.GetWholeConfigurationRequest.newBuilder() - .setDatabaseID(databaseID) - .build(); - + .setDatabaseID(databaseID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { ServantDataUpdate response = ServantDataUpdate.parseFrom(servantManagerRequester.receive()); - + return response; } catch (InvalidProtocolBufferException e) { throw new LoadConfigurationFailure(); } } - + private ServantDescriptor getControllerConfiguration(int databaseID, int servantID) throws LoadConfigurationFailure { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetControllerConfiguration) - .build(); + .setType(ServantManagerRequest.Message.Type.GetControllerConfiguration) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(databaseID) - .setServantID(servantID) - .build(); - + .setDatabaseID(databaseID) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { ServantDescriptor response = ServantDescriptor.parseFrom(servantManagerRequester.receive()); - + return response; } catch (InvalidProtocolBufferException e) { @@ -203,79 +203,79 @@ public class ServantManagerAccessor { throw new LoadConfigurationFailure(); } } - + private ServantSpyProperties getServantSpyProperties(int databaseID, int servantID) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetServantSpyProperties) - .build(); + .setType(ServantManagerRequest.Message.Type.GetServantSpyProperties) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(databaseID) - .setServantID(servantID) - .build(); - + .setDatabaseID(databaseID) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { ServantSpyProperties response = ServantSpyProperties.parseFrom(servantManagerRequester.receive()); - + return response; } catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getServantSpyProperties", "error in parsing response"); } - + return null; } - + private ServantDynamicProperties getServantDynamicProperties(int databaseID, int servantID) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetServantDynamicProperties) - .build(); + .setType(ServantManagerRequest.Message.Type.GetServantDynamicProperties) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(databaseID) - .setServantID(servantID) - .build(); - + .setDatabaseID(databaseID) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { ServantDynamicProperties response = ServantDynamicProperties.parseFrom(servantManagerRequester.receive()); - + return response; } catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getServantDynamicProperties", "error in parsing response"); } - + return null; } - + private int cloneController(int servantID) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.CloneController) - .build(); + .setType(ServantManagerRequest.Message.Type.CloneController) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(0) - .setServantID(servantID) - .build(); - + .setDatabaseID(0) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.Int32Response response = Common.Int32Response.parseFrom(servantManagerRequester.receive()); - + // Test the error. if (response.hasError()) { logError("cloneController", response.getError(), servantID); @@ -287,28 +287,28 @@ public class ServantManagerAccessor { catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "cloneController", "error in parsing response for property with ID " + servantID); } - + return 0; } - + private boolean removeController(int servantID) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.RemoveController) - .build(); + .setType(ServantManagerRequest.Message.Type.RemoveController) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(0) - .setServantID(servantID) - .build(); - + .setDatabaseID(0) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.BooleanResponse response = Common.BooleanResponse.parseFrom(servantManagerRequester.receive()); - + // Test the error. if (response.hasError()) { logError("removeController", response.getError(), servantID); @@ -320,92 +320,92 @@ public class ServantManagerAccessor { catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "removeController", "error in parsing response for property with ID " + servantID); } - + return false; } - + private String getPropertiesForGenericRequest() { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetPropertiesForGeneric) - .build(); + .setType(ServantManagerRequest.Message.Type.GetPropertiesForGeneric) + .build(); // Create the request. ServantManagerRequest.EmptyRequest request = ServantManagerRequest.EmptyRequest.newBuilder() - .build(); - + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.StringResponse response = Common.StringResponse.parseFrom(servantManagerRequester.receive()); - + return response.getValue(); } catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getPropertiesForGeneric", "error in parsing response"); } - + return ""; } public void loadWholeConfiguration() throws LoadConfigurationFailure { ServantData servantData = getWholeConfiguration(DATABASE_ID); - + initAllMaps(servantData); } - + public void updateWholeConfiguration() throws LoadConfigurationFailure { - + ServantDataUpdate servantDataUpdate = getWholeConfigurationUpdate(DATABASE_ID); - + updateAllMaps(servantDataUpdate.getDriversList(), true); updateAllMaps(servantDataUpdate.getControllersList(), false); } - + private void initAllMaps(List servants, boolean drivers) { - + // iterate over servants Iterator s = servants.iterator(); - + while (s.hasNext()) { - + ServantDataConfiguration.ServantDescriptor pbServant = s.next(); - + initAllMaps(pbServant, drivers); } } - + private void initAllMaps(ServantData servantData) { - + initAllMaps(servantData.getDriversList(), true); initAllMaps(servantData.getControllersList(), false); } private Servant initAllMaps(ServantDataConfiguration.ServantDescriptor pbServant, boolean driver) { - + Servant servant = null; - + //System.out.println("servant " + pbServant.getName() + " has types #" + pbServant.getTypesList().size()); - + // add the controller in ServantDatabase ClientServantDescriptor descriptor = new ClientServantDescriptor(pbServant.getID(), - pbServant.getName(), - pbServant.getClientType(), - pbServant.getFamily(), - pbServant.getSubfamily(), - pbServant.getCommand(), - pbServant.getVisible(), - pbServant.getEnabled(), - false, - pbServant.getRoot()); + pbServant.getName(), + pbServant.getClientType(), + pbServant.getFamily(), + pbServant.getSubfamily(), + pbServant.getCommand(), + pbServant.getVisible(), + pbServant.getEnabled(), + false, + pbServant.getRoot()); if (driver) { ServantDatabase.getInstance().addDriver(descriptor); - + ServantDataConfiguration.ServantDescriptor.Mode pbMode = pbServant.getMode(); - + DriverServant.Mode mode = DriverServant.Mode.REAL; if (pbMode == ServantDataConfiguration.ServantDescriptor.Mode.REAL) { mode = DriverServant.Mode.REAL; @@ -414,84 +414,84 @@ public class ServantManagerAccessor { } else if (pbMode == ServantDataConfiguration.ServantDescriptor.Mode.SIMULATED) { mode = DriverServant.Mode.SIMULATED; } - + servant = createDriver(descriptor, pbServant.getChannel(), mode); } else { ServantDatabase.getInstance().addController(descriptor); servant = createController(descriptor); } - + // add the list of child names LinkedList childNames = new LinkedList(); // first level of child is not necessary to get the information // ex: for drivers, pbChild1 = "children" List pbChildren = pbServant.getChildrenList(); - + Iterator cd = pbChildren.iterator(); while (cd.hasNext()) { ServantDataConfiguration.ChildDescriptor pbChild1 = cd.next(); - + ChildServants childServants = new ChildServants(); childServants.name = pbChild1.getName(); - + Iterator ccd = pbChild1.getChildArrayList().iterator(); while (ccd.hasNext()) { ServantDataConfiguration.ChildDescriptor.Child pbChild2 = ccd.next(); - + childServants.childNames.add(pbChild2.getName()); } - + childNames.add(childServants); } - + childServantNames.put(descriptor.getId(), childNames); - + // initialise the controller Iterator p = pbServant.getPropertiesList().iterator(); - + while (p.hasNext()) { - + ServantDataConfiguration.PropertyDescriptor pbProperty = p.next(); - + // copy sequence values List pbIds = pbProperty.getIDArrayList(); Iterator i = pbIds.iterator(); - + int propertyId = i.next(); - + List ids = new LinkedList(); while (i.hasNext()) { ids.add(i.next()); } - + int enumeratedValuesId = 0; int enumeratedLabelsId = 0; - + if (pbProperty.hasEnumeratedValuesID()) { enumeratedValuesId = pbProperty.getEnumeratedValuesID(); } - + if (pbProperty.hasEnumeratedLabelsID()) { enumeratedLabelsId = pbProperty.getEnumeratedLabelsID(); } - + if (pbProperty.getDynamic()) { PropertyDatabase.getInstance().addDynamicPropertyDescriptor(descriptor.getId(), new DynamicPropertyDescriptor(propertyId, ids, pbProperty.getName(), pbProperty.getType(), enumeratedValuesId, enumeratedLabelsId)); } else { PropertyDatabase.getInstance().addStandardPropertyDescriptor(descriptor.getId(), new StandardPropertyDescriptor(propertyId, pbProperty.getName(), pbProperty.getType(), enumeratedValuesId, enumeratedLabelsId)); } - + } - + Iterator d = pbServant.getCommandsList().iterator(); - + while (d.hasNext()) { - + ServantDataConfiguration.CommandDescriptor pbCommand = d.next(); CommandDatabase.getInstance().addCommandDescriptor(descriptor.getId(), new ClientCommandDescriptor(pbCommand.getID(), pbCommand.getName())); } - + // add the spy properties if (ConfigurationManager.getInstance().isMainClient()) { if (driver == false) { @@ -501,24 +501,24 @@ public class ServantManagerAccessor { return servant; } - + private void updateAllMaps(List servants, boolean drivers) { - + // iterate over servants Iterator s = servants.iterator(); - + while (s.hasNext()) { - + ServantDataConfiguration.ServantInfo pbServant = s.next(); ClientServantDescriptor descriptor = ServantDatabase.getInstance().getServantDescriptorWithId(pbServant.getID()); - + descriptor.setFamily(pbServant.getFamily()); descriptor.setVisible(pbServant.getVisible()); descriptor.setEnabled(pbServant.getEnabled()); } } - + private DriverServant createDriver(ClientServantDescriptor descriptor, int channel, Mode mode) { DriverServant driver = new DriverServant(DATABASE_ID, descriptor.getId(), descriptor); @@ -528,55 +528,55 @@ public class ServantManagerAccessor { servants.put(descriptor.getId(), driver); return driver; } - + private ControllerServant createController(ClientServantDescriptor descriptor) { - + ControllerServant controller = new ControllerServant(DATABASE_ID, descriptor.getId(), descriptor); - + // no initialisation here servants.put(descriptor.getId(), controller); return controller; - + } public void addSpyProperties(int servantID) { - + ServantSpyProperties servantSpyProperties = getServantSpyProperties(DATABASE_ID, servantID); - - + + Iterator p = servantSpyProperties.getPropertiesList().iterator(); - + while (p.hasNext()) { - + ServantDataConfiguration.SpyPropertyDescriptor pbProperty = p.next(); - + SpyPropertyDescriptor descriptor = new SpyPropertyDescriptor(pbProperty.getActualID(), - pbProperty.getSetpointID(), - pbProperty.getOffsetID(), - pbProperty.getUnitID(), - pbProperty.getAlias()); - + pbProperty.getSetpointID(), + pbProperty.getOffsetID(), + pbProperty.getUnitID(), + pbProperty.getAlias()); + PropertyDatabase.getInstance().addSpyPropertyDescriptor(servantID, descriptor); } } - + public Servant getServant(int servantId) { if (servants.containsKey(servantId)) { return servants.get(servantId); } - + return null; } - + public ControllerServant getController(ClientServantDescriptor descriptor) { - + ControllerServant controller = (ControllerServant)servants.get(descriptor.getId()); if (controller != null) { return controller; } else { System.err.println("cannot find a controller for servant with id " + descriptor.getId()); } - + return null; } @@ -593,12 +593,12 @@ public class ServantManagerAccessor { } public List getChildServants(int id) { - + // return the full list by aggregating the child names List fullList = new LinkedList(); - + List childServantsList = childServantNames.get(id); - + for (ChildServants c : childServantsList) { fullList.addAll(c.childNames); } @@ -606,110 +606,110 @@ public class ServantManagerAccessor { } public String getControllerNameWithRole(int servantID, String role) { - + List childServants = childServantNames.get(servantID); - + for (ChildServants s : childServants) { if (s.name.equals(role)) { return s.childNames.get(0); } } - + return "?"; } public ControllerServant cloneController(ClientServantDescriptor descriptor) { - + ControllerServant controller = null; - + try { // call to server to clone the controller int servantId = cloneController(descriptor.getId()); // get the controller description from the server ServantDataConfiguration.ServantDescriptor pbServant = getControllerConfiguration(DATABASE_ID, servantId); - + controller = (ControllerServant)initAllMaps(pbServant, false); return controller; - + } catch (Exception e) { return null; } } - + public void updateDynamicProperties(int servantID) { - + // first remove the current dynamic descriptors PropertyDatabase.getInstance().removeDynamicPropertyDescriptors(servantID); PropertyManager.getInstance().removeDynamicProperties(servantID); - + // get the dynamic properties from the server ServantDynamicProperties servantDynamicProperties = getServantDynamicProperties(DATABASE_ID, servantID); - + if (servantDynamicProperties == null) { return; } - + // iterate the properties Iterator p = servantDynamicProperties.getPropertiesList().iterator(); - + while (p.hasNext()) { - + ServantDataConfiguration.PropertyDescriptor pbProperty = p.next(); - + // copy sequence values List pbIds = pbProperty.getIDArrayList(); Iterator i = pbIds.iterator(); - + int propertyId = i.next(); - + List ids = new LinkedList(); while (i.hasNext()) { ids.add(i.next()); } - + int enumeratedValuesId = 0; int enumeratedLabelsId = 0; - + if (pbProperty.hasEnumeratedValuesID()) { enumeratedValuesId = pbProperty.getEnumeratedValuesID(); } - + if (pbProperty.hasEnumeratedLabelsID()) { enumeratedLabelsId = pbProperty.getEnumeratedLabelsID(); } - + if (pbProperty.getDynamic()) { PropertyDatabase.getInstance().addDynamicPropertyDescriptor(servantID, new DynamicPropertyDescriptor(propertyId, ids, pbProperty.getName(), pbProperty.getType(), enumeratedValuesId, enumeratedLabelsId)); } else { System.err.println("properties should be dynamic in updateDynamicProperties"); } } - + } - + public void removeController(ClientServantDescriptor descriptor) { - + removeController(descriptor.getId()); - + servants.remove(descriptor.getId()); ServantDatabase.getInstance().removeController(descriptor); } - + public void pauseSpies(boolean isPaused) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.PauseSpies) - .build(); + .setType(ServantManagerRequest.Message.Type.PauseSpies) + .build(); // Create the request. ServantManagerRequest.PauseSpiesRequest request = ServantManagerRequest.PauseSpiesRequest.newBuilder() - .setIsPaused(isPaused) - .build(); - + .setIsPaused(isPaused) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.BooleanResponse response = Common.BooleanResponse.parseFrom(servantManagerRequester.receive()); } @@ -717,7 +717,7 @@ public class ServantManagerAccessor { LOGGER.logp(Level.WARNING, this.getClass().getName(), "pauseSpies", "error in parsing response"); } } - + public TreeMap> getPropertiesForGeneric() { TreeMap> list = new TreeMap>(); String buf = getPropertiesForGenericRequest(); @@ -733,25 +733,25 @@ public class ServantManagerAccessor { } return list; } - + public void reconnectDriver(int databaseID, int servantID) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.ReconnectDriver) - .build(); + .setType(ServantManagerRequest.Message.Type.ReconnectDriver) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(0) - .setServantID(servantID) - .build(); - + .setDatabaseID(0) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.BooleanResponse response = Common.BooleanResponse.parseFrom(servantManagerRequester.receive()); - + // Test the error. if (response.hasError()) { logError("ReconnectDriver", response.getError(), servantID); @@ -762,117 +762,117 @@ public class ServantManagerAccessor { System.err.println("Unable to reconnect driver " + servantID); } } - + public String[] getResourceFilesByExtension(String extension) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetResourceFilesByExtension) - .build(); + .setType(ServantManagerRequest.Message.Type.GetResourceFilesByExtension) + .build(); // Create the request. ServantManagerRequest.GetResourceFilesByExtensionRequest request = ServantManagerRequest.GetResourceFilesByExtensionRequest.newBuilder() - .setExtension(extension) - .build(); - + .setExtension(extension) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.StringArrayResponse response = Common.StringArrayResponse.parseFrom(servantManagerRequester.receive()); int size = response.getValueCount(); String[] result = new String[size]; - + for (int i = 0; i < size; ++i) { result[i] = response.getValue(i); } - + return result; } catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getResourceFilesByExtension", "error in parsing response"); } - + return null; } - + public byte[] readBinaryResourceFile(String resourceType, String fileName) throws ResourceNotFoundException { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.ReadBinaryResourceFile) - .build(); + .setType(ServantManagerRequest.Message.Type.ReadBinaryResourceFile) + .build(); // Create the request. ServantManagerRequest.ReadResourceRequest request = ServantManagerRequest.ReadResourceRequest.newBuilder() - .setType(resourceType) - .setFileName(fileName) - .build(); - + .setType(resourceType) + .setFileName(fileName) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.BinaryResponse response = Common.BinaryResponse.parseFrom(servantManagerRequester.receive()); - + if (response.hasError()) { throw new ResourceNotFoundException(fileName); } - + return response.getValue().toByteArray(); } catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "readBinaryResourceFile", "error in parsing response"); } - + throw new ResourceNotFoundException(fileName); } - + public String readResourceFile(String resourceType, String fileName) throws ResourceNotFoundException { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.ReadResourceFile) - .build(); + .setType(ServantManagerRequest.Message.Type.ReadResourceFile) + .build(); // Create the request. ServantManagerRequest.ReadResourceRequest request = ServantManagerRequest.ReadResourceRequest.newBuilder() - .setType(resourceType) - .setFileName(fileName) - .build(); - + .setType(resourceType) + .setFileName(fileName) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.StringResponse response = Common.StringResponse.parseFrom(servantManagerRequester.receive()); - + if (response.hasError()) { throw new ResourceNotFoundException(fileName); } - + return response.getValue(); } catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "readBinaryResourceFile", "error in parsing response"); } - + throw new ResourceNotFoundException(fileName); } - - + + public void writeResourceFile(String resourceType, String fileName, String content) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.WriteResourceFile) - .build(); + .setType(ServantManagerRequest.Message.Type.WriteResourceFile) + .build(); // Create the request. ServantManagerRequest.ReadResourceRequest request = ServantManagerRequest.ReadResourceRequest.newBuilder() - .setType(resourceType) - .setFileName(fileName) - .build(); - + .setType(resourceType) + .setFileName(fileName) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.BooleanResponse response = Common.BooleanResponse.parseFrom(servantManagerRequester.receive()); } @@ -880,22 +880,22 @@ public class ServantManagerAccessor { LOGGER.logp(Level.WARNING, this.getClass().getName(), "writeResourceFile", "error in parsing response"); } } - + public HashMap getServantPropertiesValue(int databaseID, int servantID) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetServantPropertiesValue) - .build(); + .setType(ServantManagerRequest.Message.Type.GetServantPropertiesValue) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(databaseID) - .setServantID(servantID) - .build(); - + .setDatabaseID(databaseID) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { ServantPropertiesValue response = ServantPropertiesValue.parseFrom(servantManagerRequester.receive()); HashMap properties = new HashMap(); @@ -909,25 +909,25 @@ public class ServantManagerAccessor { catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getServantPropertiesValue", "error in parsing response"); } - + return null; } - + public HashMap getServantCommandStates(int databaseID, int servantID) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetServantCommandsState) - .build(); + .setType(ServantManagerRequest.Message.Type.GetServantCommandsState) + .build(); // Create the request. ServantManagerRequest.ServantRequest request = ServantManagerRequest.ServantRequest.newBuilder() - .setDatabaseID(databaseID) - .setServantID(servantID) - .build(); - + .setDatabaseID(databaseID) + .setServantID(servantID) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { ServantCommandsState response = ServantCommandsState.parseFrom(servantManagerRequester.receive()); HashMap commands = new HashMap(); @@ -941,22 +941,22 @@ public class ServantManagerAccessor { catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getServantCommandStates", "error in parsing response"); } - + return null; } public HashMap getFamilyImageKeys() { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetFamilyImageKeys) - .build(); + .setType(ServantManagerRequest.Message.Type.GetFamilyImageKeys) + .build(); // Create the request. ServantManagerRequest.EmptyRequest request = ServantManagerRequest.EmptyRequest.newBuilder().build(); - + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.StringMapResponse response = Common.StringMapResponse.parseFrom(servantManagerRequester.receive()); HashMap values = new HashMap(); @@ -970,22 +970,22 @@ public class ServantManagerAccessor { catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getFamilyImageKeys", "error in parsing response"); } - + return null; } public HashMap getControllerIconKeys() { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.GetControllerIconKeys) - .build(); + .setType(ServantManagerRequest.Message.Type.GetControllerIconKeys) + .build(); // Create the request. ServantManagerRequest.EmptyRequest request = ServantManagerRequest.EmptyRequest.newBuilder().build(); - + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.StringMapResponse response = Common.StringMapResponse.parseFrom(servantManagerRequester.receive()); HashMap values = new HashMap(); @@ -999,25 +999,25 @@ public class ServantManagerAccessor { catch (InvalidProtocolBufferException e) { LOGGER.logp(Level.WARNING, this.getClass().getName(), "getControllerIconKeys", "error in parsing response"); } - + return null; } - + public void logUserMessage(String userName, String message) { - + // Create the message type. ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() - .setType(ServantManagerRequest.Message.Type.UserLog) - .build(); + .setType(ServantManagerRequest.Message.Type.UserLog) + .build(); // Create the request. ServantManagerRequest.UserLogRequest request = ServantManagerRequest.UserLogRequest.newBuilder() - .setUserName(userName) - .setMessage(message) - .build(); - + .setUserName(userName) + .setMessage(message) + .build(); + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); - + try { Common.BooleanResponse.parseFrom(servantManagerRequester.receive()); // Nothing to return as the log should always succeed. @@ -1027,4 +1027,82 @@ public class ServantManagerAccessor { } } + + public void saveFile(String fileName, String content) { + + // Create the message type. + ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() + .setType(ServantManagerRequest.Message.Type.SaveFile) + .build(); + + // Create the request. + ServantManagerRequest.SaveFileRequest request = ServantManagerRequest.SaveFileRequest.newBuilder() + .setFileName(fileName) + .setContent(content) + .build(); + + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); + + try { + Common.BooleanResponse.parseFrom(servantManagerRequester.receive()); + } + catch (InvalidProtocolBufferException e) { + LOGGER.logp(Level.WARNING, this.getClass().getName(), "saveFile", "error in parsing response"); + } + } + + + public String getFileContent(String fileName) throws ResourceNotFoundException { + // Create the message type. + ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() + .setType(ServantManagerRequest.Message.Type.GetFileContent) + .build(); + + // Create the request. + ServantManagerRequest.GetFileContentRequest request = ServantManagerRequest.GetFileContentRequest.newBuilder() + .setFileName(fileName) + .build(); + + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); + + try { + Common.StringResponse response = Common.StringResponse.parseFrom(servantManagerRequester.receive()); + + if (response.hasError()) { + throw new ResourceNotFoundException(fileName); + } + + return response.getValue(); + } + catch (InvalidProtocolBufferException e) { + LOGGER.logp(Level.WARNING, this.getClass().getName(), "getFileContent", "error in parsing response"); + } + + throw new ResourceNotFoundException(fileName); + } + + + public String getTree(String rootDirectory) { + // Create the message type. + ServantManagerRequest.Message type = ServantManagerRequest.Message.newBuilder() + .setType(ServantManagerRequest.Message.Type.GetTree) + .build(); + + // Create the request. + ServantManagerRequest.GetTreeRequest request = ServantManagerRequest.GetTreeRequest.newBuilder() + .setRootDirectory(rootDirectory) + .build(); + + servantManagerRequester.sendTwoParts(type.toByteArray(), request.toByteArray()); + + try { + Common.StringResponse response = Common.StringResponse.parseFrom(servantManagerRequester.receive()); + + return response.getValue(); + } + catch (InvalidProtocolBufferException e) { + LOGGER.logp(Level.WARNING, this.getClass().getName(), "getTree", "error in parsing response"); + } + return ""; + } } \ No newline at end of file -- GitLab