public Collection<String> getChildrenNames(String parentKey) {
        Collection<String> results = new HashSet<>();
        for (String key : properties.keySet()) {
            if (key.startsWith(parentKey + ".")) {
                if (key.equals(parentKey)) {
                    continue;
                }
                int dotIndex = key.indexOf(".", parentKey.length()+1);
                if (dotIndex < 1) {
                    if (!results.contains(key)) {
                        results.add(key);
                    }
                }
                else {
                    String name = parentKey + key.substring(parentKey.length(), dotIndex);
                    results.add(name);
                }
            }
        }
        return results;
    }
Return all children property names of a parent property as a Collection
of String objects. For example, given the properties {@code X.Y.A},
{@code X.Y.B}, and {@code X.Y.C}, then the child properties of
{@code X.Y} are {@code X.Y.A}, {@code X.Y.B}, and {@code X.Y.C}. The method
is not recursive; ie, it does not return children of children.

@param parentKey the name of the parent property.
@return all child property names for the given parent.
xmppserver/src/main/java/org/jivesoftware/util/JiveProperties.java