package com.evolveum.midpoint.prism.util; import javax.xml.namespace.QName; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.path.ItemPathSegment; import com.evolveum.midpoint.prism.path.NameItemPathSegment; import com.evolveum.prism.xml.ns._public.types_3.ItemPathType; import java.util.Map; public class ItemPathUtil { private ItemPathUtil(){ } public static boolean isDefault(ItemPathType itemPathType){ if (itemPathType == null){ return true; } ItemPath itemPath = itemPathType.getItemPath(); if (itemPath == null){ return true; } return itemPath.isEmpty(); } // TODO consider requiring path to be non-null public static QName getOnlySegmentQName(ItemPathType pathType) { if (pathType == null) { return null; } return getOnlySegmentQName(pathType.getItemPath()); } public static QName getOnlySegmentQName(ItemPath path) { if (path == null) { return null; } if (path.size() != 1) { throw new IllegalArgumentException("Expected a single-segment path, bug got "+path); } ItemPathSegment segment = path.first(); if (segment instanceof NameItemPathSegment) { return ((NameItemPathSegment)segment).getName(); } else { throw new IllegalArgumentException("Expected a path with a name segment, bug got "+path); } } public static QName getOnlySegmentQNameRobust(ItemPathType pathType) { if (pathType == null) { return null; } return getOnlySegmentQNameRobust(pathType.getItemPath()); } public static QName getOnlySegmentQNameRobust(ItemPath path) { if (path == null || path.size() != 1) { return null; } ItemPathSegment segment = path.first(); if (segment instanceof NameItemPathSegment) { return ((NameItemPathSegment)segment).getName(); } else { return null; } } public static <T> T putToMap(Map<ItemPath, T> map, ItemPath itemPath, T value) { for (ItemPath key : map.keySet()) { if (key.equivalent(itemPath)) { return map.put(key, value); } } return map.put(itemPath, value); } public static <T> void putAllToMap(Map<ItemPath, T> target, Map<ItemPath, T> source) { for (Map.Entry<ItemPath, T> entry : source.entrySet()) { putToMap(target, entry.getKey(), entry.getValue()); } } public static <T> T getFromMap(Map<ItemPath, T> map, ItemPath itemPath) { for (Map.Entry<ItemPath, T> entry : map.entrySet()) { if (entry.getKey().equivalent(itemPath)) { return entry.getValue(); } } return null; } }