Github user brosander commented on a diff in the pull request:

    https://github.com/apache/nifi-minifi/pull/32#discussion_r78058194
  
    --- Diff: 
minifi-bootstrap/src/main/java/org/apache/nifi/minifi/bootstrap/util/ConfigTransformer.java
 ---
    @@ -546,6 +550,37 @@ protected static void addConnection(final Element 
parentElement, ConnectionSchem
             }
         }
     
    +    protected static String getConnectionName(ConnectionSchema 
connectionProperties) {
    +        String connectionName = connectionProperties.getName();
    +        if (StringUtil.isNullOrEmpty(connectionName)) {
    +            return EMPTY_NAME;
    +        }
    +        return connectionName;
    +    }
    +
    +    /**
    +     * Will replace all characters not in [A-Za-z0-9_] with _
    +     *
    +     * This has potential for collisions so it will also append numbers as 
necessary to prevent that
    +     *
    +     * @param ids id map of already incremented numbers
    +     * @param name the name
    +     * @return a unique filesystem-friendly id
    +     */
    +    protected static String getUniqueId(Map<String, Integer> ids, String 
name) {
    +        String baseId = name.replaceAll("[^A-Za-z0-9_]", "_");
    +        String id = baseId;
    +        Integer idNum = ids.get(baseId);
    +        while (ids.containsKey(id)) {
    +            id = baseId + "_" + idNum++;
    +        }
    +        if (id != baseId) {
    +            ids.put(baseId, idNum);
    +        }
    +        ids.put(id, 2);
    --- End diff --
    
    @apiri so I may have overthought this a little bit.  
    
    The initial approach I just tracked used names and kept incrementing a 
suffix.  It bothered me a little that that would be n^2 with respect to 
duplicate names, the above should avoid that pitfall by tracking the next 
suffix available for every prefix.  That way the following wouldn't collide:
    
    test -> test
    test -> test_2
    test_2 -> test_2_2


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to