X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.structural.synchronization%2Fsrc%2Forg%2Fsimantics%2Fstructural%2Fsynchronization%2Fbase%2FSolverNameUtil.java;fp=bundles%2Forg.simantics.structural.synchronization%2Fsrc%2Forg%2Fsimantics%2Fstructural%2Fsynchronization%2Fbase%2FSolverNameUtil.java;h=70c9ff7ae667e552587112039ffb377d18163ef8;hp=0000000000000000000000000000000000000000;hb=e4007b17057ff4acc2e900c5c811743b74f71f41;hpb=3fe6778c21d6437e90d08987de6dae7bca89bc6d
diff --git a/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/base/SolverNameUtil.java b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/base/SolverNameUtil.java
new file mode 100644
index 000000000..70c9ff7ae
--- /dev/null
+++ b/bundles/org.simantics.structural.synchronization/src/org/simantics/structural/synchronization/base/SolverNameUtil.java
@@ -0,0 +1,34 @@
+package org.simantics.structural.synchronization.base;
+
+import java.util.function.BiConsumer;
+
+public interface SolverNameUtil {
+
+ String getFreshName(String parentName, String name);
+ String ensureNameIsVariationOf(String parentName, int id, String name);
+
+ /**
+ * The name utility can internally keep track of
+ * suggested name -> generated
+ * fresh name
associations that it has had to perform during its
+ * lifetime in {@link #getFreshName(String, String)}. If the implementation
+ * keeps track of these renames, the purpose of this method is to check
+ * whether at the time of invocation it is possible to rename the solver
+ * components to their suggested names or not. For every rename that is
+ * performed, the specified consumer shall be invoked with the arguments
+ * (previous name, new name)
after the rename has been
+ * performed.
+ *
+ *
+ * This method is intended to be invoked right at the end of
+ * synchronization.
+ *
+ * @param callback
+ * a binary consumer that takes as first argument the previous
+ * name of the renamed component and as second argument the new
+ * (current) name of the component or null
to skip
+ * callback invocation
+ */
+ default void applySuggestedNames(BiConsumer