Removed some sonar warnings in the new RIB code.
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / RouterIds.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.bgp.rib.impl;
9
10 import com.google.common.base.Preconditions;
11 import com.google.common.cache.CacheBuilder;
12 import com.google.common.cache.CacheLoader;
13 import com.google.common.cache.LoadingCache;
14 import com.google.common.net.InetAddresses;
15 import com.google.common.primitives.UnsignedInteger;
16 import javax.annotation.Nonnull;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
18
19 final class RouterIds {
20     private static final LoadingCache<String, UnsignedInteger> ROUTER_IDS = CacheBuilder.newBuilder().weakValues().build(new CacheLoader<String, UnsignedInteger>() {
21         @Override
22         public UnsignedInteger load(final String key) {
23             return UnsignedInteger.fromIntBits(InetAddresses.coerceToInteger(InetAddresses.forString(key)));
24         }
25     });
26     private static final LoadingCache<PeerId, UnsignedInteger> BGP_ROUTER_IDS = CacheBuilder.newBuilder().weakValues().build(new CacheLoader<PeerId, UnsignedInteger>() {
27         @Override
28         public UnsignedInteger load(final PeerId key) {
29             return routerIdForAddress(key.getValue().substring(BGP_PREFIX.length()));
30         }
31     });
32     private static final String BGP_PREFIX = "bgp://";
33
34     private RouterIds() {
35         throw new UnsupportedOperationException();
36     }
37
38     /**
39      * Get a router ID in unsigned integer format from an Ipv4Address. This implementation uses an internal
40      * cache, so the objects can be expected to perform quickly when compared with equals and similar.
41      *
42      * @param address Router ID as a dotted-quad
43      * @return Router ID as an {@link UnsignedInteger}
44      */
45     public static UnsignedInteger routerIdForAddress(@Nonnull final String address) {
46         return ROUTER_IDS.getUnchecked(address);
47     }
48
49     public static UnsignedInteger routerIdForPeerId(@Nonnull final PeerId peerId) {
50         Preconditions.checkArgument(peerId.getValue().startsWith(BGP_PREFIX), "Unhandled peer ID %s", peerId);
51         return BGP_ROUTER_IDS.getUnchecked(peerId);
52     }
53 }