+ private static final Comparator<Entry<YangInstanceIdentifier, ?>> MAP_ENTRY_COMPARATOR = new Comparator<Entry<YangInstanceIdentifier, ?>>() {
+ @Override
+ public int compare(final Entry<YangInstanceIdentifier, ?> left,
+ final Entry<YangInstanceIdentifier, ?> right) {
+ final Iterator<?> li = left.getKey().getPathArguments().iterator();
+ final Iterator<?> ri = right.getKey().getPathArguments().iterator();
+
+ // Iterate until left is exhausted...
+ while (li.hasNext()) {
+ if (!ri.hasNext()) {
+ // Left is deeper
+ return 1;
+ }
+
+ li.next();
+ ri.next();
+ }
+
+ // Check if right is exhausted
+ return ri.hasNext() ? -1 : 0;
+ }
+ };
+
+ private static <T> Iterable<Entry<YangInstanceIdentifier,T>> sortedEntries(final Map<YangInstanceIdentifier, T> map) {
+ if (!map.isEmpty()) {
+ ArrayList<Entry<YangInstanceIdentifier, T>> entries = new ArrayList<>(map.entrySet());
+ Collections.sort(entries, MAP_ENTRY_COMPARATOR);
+ return entries;
+ } else {
+ return Collections.emptySet();
+ }
+ }
+
+ protected Set<InstanceIdentifier<?>> toBinding(
+ final Set<YangInstanceIdentifier> normalized) {
+ Set<InstanceIdentifier<?>> hashSet = new HashSet<>();
+ for (YangInstanceIdentifier normalizedPath : normalized) {
+ try {
+ Optional<InstanceIdentifier<? extends DataObject>> potential = getCodec().toBinding(normalizedPath);
+ if (potential.isPresent()) {
+ InstanceIdentifier<? extends DataObject> binding = potential.get();
+ hashSet.add(binding);
+ }
+ } catch (DeserializationException e) {
+ LOG.warn("Failed to transform {}, omitting it", normalizedPath, e);
+ }
+ }
+ return hashSet;
+ }
+
+ protected Optional<DataObject> toBindingData(final InstanceIdentifier<?> path, final NormalizedNode<?, ?> data) {
+ if (path.isWildcarded()) {
+ return Optional.absent();
+ }
+
+ try {
+ return Optional.fromNullable(getCodec().toBinding(path, data));
+ } catch (DeserializationException e) {
+ return Optional.absent();
+ }
+ }
+