2 * Copyright (c) 2014 Contextream, 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
9 package org.opendaylight.lispflowmapping.implementation.util;
11 import java.util.ArrayList;
12 import java.util.List;
15 import org.opendaylight.lispflowmapping.implementation.dao.MappingServiceKeyUtil;
16 import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
17 import org.opendaylight.lispflowmapping.interfaces.dao.IMappingServiceKey;
18 import org.opendaylight.lispflowmapping.interfaces.dao.MappingServiceRLOCGroup;
19 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecord;
20 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
21 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
23 public class DAOMappingUtil {
25 public static List<MappingServiceRLOCGroup> getLocatorsByEidRecord(EidRecord eid, ILispDAO dao, boolean iterateMask) {
26 IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(eid.getLispAddressContainer(), eid.getMask());
27 return getLocators(key, dao, iterateMask);
30 public static Object getLocatorsSpecificByEidRecord(EidRecord eid, ILispDAO dao, String subkey, boolean iterateMask) {
31 IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(eid.getLispAddressContainer(), eid.getMask());
32 return getLocatorsSpecific(key, dao, subkey, iterateMask);
35 public static List<MappingServiceRLOCGroup> getLocatorsByEidToLocatorRecord(EidToLocatorRecord eid, ILispDAO dao, boolean iterateMask) {
36 IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(eid.getLispAddressContainer(), eid.getMaskLength());
37 return getLocators(key, dao, iterateMask);
40 public static Object getLocatorsSpecificByEidtoLocatorRecord(EidToLocatorRecord eid, ILispDAO dao, String subkey, boolean iterateMask) {
41 IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(eid.getLispAddressContainer(), eid.getMaskLength());
42 return getLocatorsSpecific(key, dao, subkey, iterateMask);
45 public static List<MappingServiceRLOCGroup> getLocators(IMappingServiceKey key, ILispDAO dao, boolean iterateMask) {
46 Map<String, ?> locators = dao.get(key);
47 List<MappingServiceRLOCGroup> result = aggregateLocators(locators);
48 if (iterateMask && result.isEmpty() && MaskUtil.isMaskable(key.getEID().getAddress())) {
49 result = findMaskLocators(dao, key);
54 private static List<MappingServiceRLOCGroup> aggregateLocators(Map<String, ?> locators) {
55 List<MappingServiceRLOCGroup> result = new ArrayList<MappingServiceRLOCGroup>();
56 if (locators != null) {
57 for (Object value : locators.values()) {
58 if (value != null && value instanceof MappingServiceRLOCGroup) {
59 if (!((MappingServiceRLOCGroup) value).getRecords().isEmpty()) {
60 result.add((MappingServiceRLOCGroup) value);
68 public static Object getLocatorsSpecific(IMappingServiceKey key, ILispDAO dao, String subkey, boolean iterateMask) {
69 Object locators = dao.getSpecific(key, subkey);
70 if (iterateMask && locators == null && MaskUtil.isMaskable(key.getEID().getAddress())) {
71 locators = findMaskLocatorsSpecific(key, dao, subkey);
76 private static Object findMaskLocatorsSpecific(IMappingServiceKey key, ILispDAO dao, String subkey) {
77 int mask = key.getMask();
79 key = MappingServiceKeyUtil.generateMappingServiceKey(
80 new LispAddressContainerBuilder().setAddress(MaskUtil.normalize(key.getEID().getAddress(), mask)).build(), mask);
82 Object locators = dao.getSpecific(key, subkey);
83 if (locators != null) {
90 private static List<MappingServiceRLOCGroup> findMaskLocators(ILispDAO dao, IMappingServiceKey key) {
91 int mask = key.getMask();
93 key = MappingServiceKeyUtil.generateMappingServiceKey(
94 new LispAddressContainerBuilder().setAddress(MaskUtil.normalize(key.getEID().getAddress(), mask)).build(), mask);
96 Map<String, ?> locators = dao.get(key);
97 if (locators != null) {
98 List<MappingServiceRLOCGroup> result = aggregateLocators(locators);
99 if (result != null && !result.isEmpty()) {