49e1efc625b118b848a03148947fcac18f6557ca
[bgpcep.git] / bgp / topology-provider / src / main / java / org / opendaylight / bgpcep / bgp / topology / provider / UriBuilder.java
1 /*
2  * Copyright (c) 2013 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.bgpcep.bgp.topology.provider;
9
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.NodeIdentifier;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.LinkstateRoute;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.LinkCase;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.link._case.LinkDescriptors;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 final class UriBuilder {
18         private static final Logger LOG = LoggerFactory.getLogger(UriBuilder.class);
19         private final StringBuilder sb;
20
21         UriBuilder(final UriBuilder base, final String type) {
22                 sb = new StringBuilder(base.sb);
23                 sb.append("type=").append(type);
24         }
25
26         UriBuilder(final LinkstateRoute route) {
27                 sb = new StringBuilder("bgpls://");
28
29                 if (route.getDistinguisher() != null) {
30                         sb.append(route.getDistinguisher().getValue().toString()).append(':');
31                 }
32
33                 sb.append(route.getProtocolId().toString()).append(':').append(route.getIdentifier().getValue().toString()).append('/');
34         }
35
36         UriBuilder add(final String name, final Object value) {
37                 if (value != null) {
38                         sb.append('&').append(name).append('=').append(value.toString());
39                 }
40                 return this;
41         }
42
43         UriBuilder add(final LinkCase link) {
44                 add("local-", link.getLocalNodeDescriptors());
45                 add("remote-", link.getRemoteNodeDescriptors());
46
47                 final LinkDescriptors ld = link.getLinkDescriptors();
48                 add("ipv4-iface", ld.getIpv4InterfaceAddress());
49                 add("ipv4-neigh", ld.getIpv4NeighborAddress());
50                 add("ipv6-iface", ld.getIpv6InterfaceAddress());
51                 add("ipv6-neigh", ld.getIpv6NeighborAddress());
52                 add("mt", ld.getMultiTopologyId());
53                 add("local-id", ld.getLinkLocalIdentifier());
54                 add("remote-id", ld.getLinkRemoteIdentifier());
55                 return this;
56         }
57
58         UriBuilder add(final String prefix, final NodeIdentifier node) {
59                 add(prefix + "as", node.getAsNumber());
60                 add(prefix + "domain", node.getDomainId());
61                 add(prefix + "area", node.getAreaId());;
62                 add(prefix + "router", node.getCRouterIdentifier());
63                 return this;
64         }
65
66         @Override
67         public final String toString() {
68                 final String ret = sb.toString();
69                 LOG.trace("New URI {}", ret);
70                 return ret;
71         }
72 }