2 * Copyright (c) 2014 Cisco Systems, Inc. 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
8 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
10 import java.util.HashMap;
11 import java.util.HashSet;
13 import java.util.Map.Entry;
16 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
17 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
18 import org.opendaylight.yangtools.yang.binding.DataObject;
19 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
23 public class TransactUtils {
24 private static final Logger LOG = LoggerFactory.getLogger(TransactUtils.class);
26 public static Map<InstanceIdentifier<Node>,Node> extractNode(
27 Map<InstanceIdentifier<?>, DataObject> changes) {
28 Map<InstanceIdentifier<Node>,Node> result
29 = new HashMap<InstanceIdentifier<Node>,Node>();
30 if (changes != null && changes.entrySet() != null) {
31 for (Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
32 if (created.getValue() instanceof Node) {
33 Node value = (Node) created.getValue();
34 Class<?> type = created.getKey().getTargetType();
35 if (type.equals(Node.class)) {
36 @SuppressWarnings("unchecked") // Actually checked above
37 InstanceIdentifier<Node> iid = (InstanceIdentifier<Node>) created.getKey();
38 result.put(iid, value);
46 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractCreated(
47 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes,Class<T> klazz) {
48 return extract(changes.getCreatedData(),klazz);
51 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractUpdated(
52 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
53 return extract(changes.getUpdatedData(),klazz);
56 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractCreatedOrUpdated(
57 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
58 Map<InstanceIdentifier<T>,T> result = extractUpdated(changes,klazz);
59 result.putAll(extractCreated(changes,klazz));
63 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extractOriginal(
64 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
65 return extract(changes.getOriginalData(),klazz);
68 public static <T extends DataObject> Set<InstanceIdentifier<T>> extractRemoved(
69 AsyncDataChangeEvent<InstanceIdentifier<?>,DataObject> changes,Class<T> klazz) {
70 Set<InstanceIdentifier<T>> result = new HashSet<InstanceIdentifier<T>>();
71 if (changes != null && changes.getRemovedPaths() != null) {
72 for (InstanceIdentifier<?> iid : changes.getRemovedPaths()) {
73 if (iid.getTargetType().equals(klazz)) {
74 @SuppressWarnings("unchecked") // Actually checked above
75 InstanceIdentifier<T> iidn = (InstanceIdentifier<T>)iid;
83 public static <T extends DataObject> Map<InstanceIdentifier<T>,T> extract(
84 Map<InstanceIdentifier<?>, DataObject> changes, Class<T> klazz) {
85 Map<InstanceIdentifier<T>,T> result = new HashMap<InstanceIdentifier<T>,T>();
86 if (changes != null && changes.entrySet() != null) {
87 for (Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
88 if (klazz.isInstance(created.getValue())) {
89 @SuppressWarnings("unchecked")
90 T value = (T) created.getValue();
91 Class<?> type = created.getKey().getTargetType();
92 if (type.equals(klazz)) {
93 @SuppressWarnings("unchecked") // Actually checked above
94 InstanceIdentifier<T> iid = (InstanceIdentifier<T>) created.getKey();
95 result.put(iid, value);