diff --git a/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantDatabase.java b/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantDatabase.java index c6910d1cdf6bfa163c4a2d6d13b09e4b991ae181..654f207bb334c3369ab6ce2ce33ccc6bf5227bc9 100644 --- a/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantDatabase.java +++ b/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantDatabase.java @@ -22,10 +22,14 @@ import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import java.util.TreeSet; import fr.ill.ics.nscclient.dataprovider.DataAccessor.ClientConfigurationState; +import fr.ill.ics.nscclient.servant.ClientControllerServantDescriptor; +import fr.ill.ics.nscclient.servant.ClientControllerServantDescriptor.ReferencesDescriptor; import fr.ill.ics.nscclient.servant.ClientServantDescriptor; public class ServantDatabase { @@ -247,4 +251,22 @@ public class ServantDatabase { controllers.clear(); } + /* + * Method from Configura project. Update all references to an specific servant. + * The update is related to a change of name. Is it possible to be due to another parameter change (like the type or the role?) + */ + public void updateReferencesToServant(ClientServantDescriptor servantDescriptor, String servantDescriptorName) { + // The descriptor is the real servant descriptor of the reference and it can be a driver or controller. However, we will search only in the controllers because they are the only ones that have references. + Iterator> it = controllers.entrySet().iterator(); + while (it.hasNext()) { + ClientControllerServantDescriptor controllerDescriptor = (ClientControllerServantDescriptor)it.next().getValue(); + Optional refDescriptor = controllerDescriptor.getReferencesDescriptor().stream().filter(referenceDescriptor-> (referenceDescriptor.getName().equals(servantDescriptor.getName()) && referenceDescriptor.getType().equals(servantDescriptor.getType()))).findAny(); + if (refDescriptor.isPresent()) { + ReferencesDescriptor descript = refDescriptor.get(); + // Update the name + descript.setName(servantDescriptorName); + } + } + + } } \ No newline at end of file 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 f46f93d21eac206e7dc7bc4e3c130d309c18a33a..ca00cf1615f829d01bc07faa40fc5d47d29cc969 100644 --- a/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantManagerAccessor.java +++ b/src/main/java/fr/ill/ics/nscclient/dataprovider/ServantManagerAccessor.java @@ -571,6 +571,17 @@ public class ServantManagerAccessor { // TODO Auto-generated catch block e.printStackTrace(); } + + if (!answer.equals("NOT OK")) { + + ClientServantDescriptor descriptor = ServantDatabase.getInstance().getServantDescriptorWithId(servantID); + // First update all references to the servant whose name has been changed + ServantDatabase.getInstance().updateReferencesToServant(descriptor, servantName); + + // Second update the descriptor of servant + descriptor.setName(servantName); // The answer is not the name! + } + return answer; } diff --git a/src/main/java/fr/ill/ics/nscclient/servant/ClientControllerServantDescriptor.java b/src/main/java/fr/ill/ics/nscclient/servant/ClientControllerServantDescriptor.java index 2747e098d1a9723ca9b5fb479a2b3d790e3fb54d..afc36a08283d90e8b382b6ebcddbecc82b2117a7 100644 --- a/src/main/java/fr/ill/ics/nscclient/servant/ClientControllerServantDescriptor.java +++ b/src/main/java/fr/ill/ics/nscclient/servant/ClientControllerServantDescriptor.java @@ -79,7 +79,7 @@ public class ClientControllerServantDescriptor extends ClientServantDescriptor { } public boolean isConfigured() { - return (name != NOT_CONFIGURED_NAME); + return !name.equals(NOT_CONFIGURED_NAME); } } diff --git a/src/main/java/fr/ill/ics/nscclient/servant/ClientServantDescriptor.java b/src/main/java/fr/ill/ics/nscclient/servant/ClientServantDescriptor.java index 5f720617433add17f15fb1417317f9a1b014c2ff..02c31cef37d66193454a1f8dd159fd01cb37bc81 100644 --- a/src/main/java/fr/ill/ics/nscclient/servant/ClientServantDescriptor.java +++ b/src/main/java/fr/ill/ics/nscclient/servant/ClientServantDescriptor.java @@ -85,6 +85,10 @@ public class ClientServantDescriptor { public boolean isRoot() { return isRoot; } + + public void setName(String name) { + this.name = name; + } public void setVisible(boolean isVisible) { this.isVisible = isVisible;