Merge branch 'master' of ../controller
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / type / BitsTypeDefinition.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.yangtools.yang.model.api.type;
9
10 import java.util.List;
11 import java.util.Objects;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.eclipse.jdt.annotation.Nullable;
14 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
16
17 /**
18  * Makes is possible to access to the individual bits values of this type.
19  */
20 public interface BitsTypeDefinition extends TypeDefinition<BitsTypeDefinition> {
21     /**
22      * Returns all bit values.
23      *
24      * @return list of <code>Bit</code> type instastances with data about all
25      *         individual bits of <code>bits</code> YANG built-in type
26      */
27     @NonNull List<Bit> getBits();
28
29     static int hashCode(final @NonNull BitsTypeDefinition type) {
30         return Objects.hash(type.getPath(), type.getUnknownSchemaNodes(), type.getBaseType(),
31             type.getUnits().orElse(null), type.getDefaultValue().orElse(null), type.getBits());
32     }
33
34     static boolean equals(final @NonNull BitsTypeDefinition type, final @Nullable Object obj) {
35         if (type == obj) {
36             return true;
37         }
38
39         final BitsTypeDefinition other = TypeDefinitions.castIfEquals(BitsTypeDefinition.class, type, obj);
40         return other != null && type.getBits().equals(other.getBits());
41     }
42
43     static String toString(final @NonNull BitsTypeDefinition type) {
44         return TypeDefinitions.toStringHelper(type).add("bits", type.getBits()).toString();
45     }
46
47     /**
48      * Contains the methods for accessing the data about the individual bit of
49      * <code>bits</code> YANG type.
50      */
51     interface Bit extends SchemaNode {
52         /**
53          * Returns the name of the concrete bit.
54          *
55          * @return string with the name of the concrete bit
56          */
57         @NonNull String getName();
58
59         /**
60          * The position value MUST be in the range 0 to 4294967295, and it MUST
61          * be unique within the bits type.
62          *
63          * @return The position value of bit in range from 0 to 4294967295.
64          */
65         long getPosition();
66     }
67 }