public static String getPath(ConfigElement element, boolean includeRoot, String... umbrellaElements) {
Preconditions.checkNotNull(element);
if (umbrellaElements==null) umbrellaElements = new String[0];
StringBuilder path = new StringBuilder(element.getName());
int umbrellaPos = umbrellaElements.length-1;
while (!element.isRoot() && !element.getNamespace().isRoot()) {
ConfigNamespace parent = element.getNamespace();
if (parent.isUmbrella()) {
Preconditions.checkArgument(umbrellaPos>=0,"Missing umbrella element path for element: %s",element);
String umbrellaName = umbrellaElements[umbrellaPos];
Preconditions.checkArgument(!StringUtils.containsAny(umbrellaName,ILLEGAL_CHARS),"Invalid umbrella name provided: %s. Contains illegal chars",umbrellaName);
path.insert(0, umbrellaName + SEPARATOR);
umbrellaPos--;
}
path.insert(0, parent.getName() + SEPARATOR);
element = parent;
}
if (includeRoot) {
path.insert(0, (element.isRoot() ?
element.getName() :
element.getNamespace().getName()) + SEPARATOR);
}
Preconditions.checkArgument(umbrellaPos<0,"Found unused umbrella element: %s",umbrellaPos<0?null:umbrellaElements[umbrellaPos]);
return path.toString();
}