BUG-47 : unfinished PCEP migration to generated DTOs.
[bgpcep.git] / pcep / impl / src / main / java / org / opendaylight / protocol / pcep / impl / Util.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.protocol.pcep.impl;
9
10 import java.util.ArrayList;
11 import java.util.Arrays;
12 import java.util.HashMap;
13 import java.util.List;
14
15 import org.opendaylight.protocol.concepts.AddressFamily;
16 import org.opendaylight.protocol.concepts.NetworkAddress;
17 import org.opendaylight.protocol.pcep.PCEPErrorMapping;
18 import org.opendaylight.protocol.pcep.PCEPErrorMapping.PCEPErrorIdentifier;
19 import org.opendaylight.protocol.pcep.PCEPErrors;
20 import org.opendaylight.protocol.util.ByteArray;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OpenObject;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorType;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.session.Open;
30
31 /**
32  * Utilities used in pcep-impl
33  */
34 public final class Util {
35
36         private Util() {
37         }
38
39         public static class BiParsersMap<K, KV, V> {
40                 private final HashMap<K, KV> kToKv = new HashMap<K, KV>();
41
42                 private final HashMap<KV, V> kvToV = new HashMap<KV, V>();
43
44                 public void put(final K key, final KV keyValue, final V value) {
45                         this.kToKv.put(key, keyValue);
46                         this.kvToV.put(keyValue, value);
47                 }
48
49                 public KV getKeyValueFromKey(final K key) {
50                         return this.kToKv.get(key);
51                 }
52
53                 public V getValueFromKeyValue(final KV keyValue) {
54                         return this.kvToV.get(keyValue);
55                 }
56         }
57
58         public static <T extends NetworkAddress<T>> List<T> parseAddresses(final byte[] bytes, int offset, final AddressFamily<T> family,
59                         final int addrLen) {
60                 final List<T> addresses = new ArrayList<T>();
61
62                 while (bytes.length > offset) {
63                         addresses.add(family.addressForBytes(ByteArray.subByte(bytes, offset, addrLen)));
64                         offset += addrLen;
65                 }
66
67                 return addresses;
68         }
69
70         public static <T extends NetworkAddress<T>> void putAddresses(final byte[] destBytes, int offset, final List<T> addresses,
71                         final int addrLen) {
72                 for (final T address : addresses) {
73                         System.arraycopy(address.getAddress(), 0, destBytes, offset, addrLen);
74                         offset += addrLen;
75                 }
76         }
77
78         public static int getPadding(final int length, final int padding) {
79                 return (padding - (length % padding)) % padding;
80         }
81
82         public static Message createErrorMessage(final PCEPErrors e, final OpenObject t) {
83                 final PcerrBuilder errMessageBuilder = new PcerrBuilder();
84                 final PCEPErrorMapping mapping = PCEPErrorMapping.getInstance();
85                 final PCEPErrorIdentifier id = mapping.getFromErrorsEnum(e);
86                 final Errors err = new ErrorsBuilder().setType(id.type).setValue(id.value).build();
87                 if (t == null)
88                         return errMessageBuilder.setPcerrMessage(new PcerrMessageBuilder().setErrors(Arrays.asList(err)).build()).build();
89                 else {
90                         final ErrorType type = new SessionBuilder().setOpen((Open) t).build();
91                         return errMessageBuilder.setPcerrMessage(new PcerrMessageBuilder().setErrors(Arrays.asList(err)).setErrorType(type).build()).build();
92                 }
93         }
94 }