2 * Copyright (c) 2015 CableLabs and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.packetcable.provider;
11 import com.google.common.collect.Maps;
12 import com.google.common.collect.Sets;
15 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
16 import org.opendaylight.yangtools.yang.binding.DataObject;
17 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
18 import org.slf4j.Logger;
23 public class DataChangeUtils {
25 @SuppressWarnings("unchecked")
26 public static <T extends DataObject> Map<InstanceIdentifier<T>, T> collectTypeFromMap(Class<T> tClass,
27 Map<InstanceIdentifier<?>, DataObject> map) {
28 Map<InstanceIdentifier<T>, T> result = Maps.newHashMap();
30 for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : map.entrySet()) {
31 if (tClass.isAssignableFrom(entry.getValue().getImplementedInterface())) {
32 final InstanceIdentifier<T> tIID = (InstanceIdentifier<T>) entry.getKey();
33 final T tObj = (T) entry.getValue();
34 result.put(tIID, tObj);
41 public static <T extends DataObject> Set<InstanceIdentifier<T>> collectTypeFromSet(Class<T> tClass,
42 Set<InstanceIdentifier<?>> set) {
43 Set<InstanceIdentifier<T>> result = Sets.newHashSet();
45 for (InstanceIdentifier<?> iid : set) {
46 if (tClass.isAssignableFrom(iid.getTargetType())) {
47 @SuppressWarnings("unchecked")
48 final InstanceIdentifier<T> tIID = (InstanceIdentifier<T>) iid;
57 * Computes the relative complement of A in B. (aka get everything in B that is not in A)
58 * @param setA The first set
59 * @param setB The second set
60 * @return the relative complement
62 public static Map<InstanceIdentifier<?>, DataObject> relativeComplement(Map<InstanceIdentifier<?>, DataObject> setA,
63 Map<InstanceIdentifier<?>, DataObject> setB){
65 Map<InstanceIdentifier<?>, DataObject> result = Maps.newHashMap();
67 for (InstanceIdentifier<?> iid: setB.keySet()) {
68 if (!setA.containsKey(iid)) {
69 result.put(iid, setB.get(iid));
78 public static void logChange(final Logger logger, final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
79 if (!logger.isDebugEnabled()) {
83 StringBuilder sb = new StringBuilder();
85 appendMap(sb, "CREATED", change.getCreatedData());
86 appendSet(sb, "REMOVED", change.getRemovedPaths());
87 appendMap(sb, "UPDATED", change.getUpdatedData());
88 appendMap(sb, "ORIGINAL", change.getOriginalData());
90 logger.debug("onDataChanged data:\n{}", sb.toString());
94 private static <E> void appendSet(StringBuilder sb, String name, Set<E> set) {
95 sb.append("====").append(name).append("====\n");
96 if (set == null || set.isEmpty()) {
100 sb.append(data).append("\n");
101 sb.append("----------\n");
104 sb.append("===============\n");
107 private static void appendMap(StringBuilder sb, String name, Map<InstanceIdentifier<?>, DataObject> dataMap) {
108 sb.append("====").append(name).append("====\n");
109 if (dataMap == null || dataMap.isEmpty()) {
112 for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : dataMap.entrySet()) {
113 sb.append(entry.getValue()).append("\n");
114 sb.append("----------\n");
117 sb.append("===============\n");