Add query support for decimal64
[mdsal.git] / binding / mdsal-binding-api / src / test / java / org / opendaylight / mdsal / binding / api / query / QueryBuilderExamples.java
1 /*
2  * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.mdsal.binding.api.query;
9
10 import java.math.BigDecimal;
11 import org.mockito.Mock;
12 import org.opendaylight.yang.gen.v1.mdsal.query.norev.Foo;
13 import org.opendaylight.yang.gen.v1.mdsal.query.norev.first.grp.System;
14 import org.opendaylight.yang.gen.v1.mdsal.query.norev.first.grp.SystemKey;
15 import org.opendaylight.yang.gen.v1.mdsal.query.norev.second.grp.Alarms;
16 import org.opendaylight.yang.gen.v1.mdsal.query.norev.third.grp.AffectedUsers;
17 import org.opendaylight.yang.gen.v1.mdsal426.norev.BooleanCont;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns._default.value.test.norev.DecimalContainer;
19 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
20 import org.opendaylight.yangtools.yang.common.Uint64;
21
22 public class QueryBuilderExamples {
23     @Mock
24     private QueryFactory factory;
25
26     /*
27      * Return all of /foo. Equivalent to a read() of the same identifier.
28      */
29     public QueryExpression<Foo> selectFoo() {
30         return factory
31                 .querySubtree(InstanceIdentifier.create(Foo.class))
32                 .build();
33     }
34
35     /*
36      * Read all of /foo/system[name="some"]. Equivalent to a read() of the same identifier.
37      */
38     public QueryExpression<System> selectFooSystemSome() {
39         return factory
40                 .querySubtree(InstanceIdentifier.create(Foo.class).child(System.class, new SystemKey("some")))
41                 .build();
42     }
43
44     /*
45      * Read all entries in /foo/system. Equivalent to a read(/foo).get().nonnullSystem().
46      */
47     public QueryExpression<System> selectFooSystem() {
48         return factory
49                 .querySubtree(InstanceIdentifier.create(Foo.class))
50                 .extractChild(System.class)
51                 .build();
52     }
53
54     /*
55      * Read all entries in /foo/system, which have 'alias' set to 'some'.
56      */
57     public QueryExpression<System> selectFooSystemAliasSome() {
58         return factory
59                 .querySubtree(InstanceIdentifier.create(Foo.class))
60                 .extractChild(System.class)
61                 .matching()
62                     .leaf(System::getAlias)
63                     .valueEquals("some")
64                 .build();
65     }
66
67     /*
68      * Read all entries in /foo/system, which have 'alias' containing the string 'needle'.
69      */
70     public QueryExpression<System> selectFooSystemAliasWithNeedle() {
71         return factory
72                 .querySubtree(InstanceIdentifier.create(Foo.class))
73                 .extractChild(System.class)
74                 .matching()
75                     .leaf(System::getAlias)
76                     .contains("needle")
77                 .build();
78     }
79
80     /*
81      * Read all entries in /foo/system/alarms, which have 'critical' leaf present.
82      */
83     public QueryExpression<Alarms> selectFooSystemAlarmsCritical() {
84         return factory
85                 .querySubtree(InstanceIdentifier.create(Foo.class))
86                 .extractChild(System.class)
87                 .extractChild(Alarms.class)
88                 .matching()
89                     .leaf(Alarms::getCritical)
90                     .nonNull()
91                 .build();
92     }
93
94     /*
95      * Read all entries in /foo/system/alarms, which have 'critical' leaf present and have an entry in 'affected-users'
96      * with 'uid' larger than 10.
97      *
98      * Note this is the same expression as selectFooSystemCriticalUid(), but selects Alarms objects.
99      */
100     public QueryExpression<Alarms> selectFooSystemAlarmsCriticalUid() {
101         return factory
102                 .querySubtree(InstanceIdentifier.create(Foo.class))
103                 .extractChild(System.class)
104                 .extractChild(Alarms.class)
105                 .matching()
106                     .leaf(Alarms::getCritical)
107                     .nonNull()
108                 .and()
109                     .childObject(AffectedUsers.class)
110                     .leaf(AffectedUsers::getUid)
111                     .greaterThan(Uint64.TEN)
112                 .build();
113     }
114
115
116     /*
117      * Read all entries in /foo/system, which have 'critical' leaf present and have an entry in 'affected-users'
118      * with 'uid' larger than 10.
119      *
120      * Note this is the same expression as selectFooSystemAlarmsCriticalUid(), but selects System objects.
121      */
122     public QueryExpression<System> selectFooSystemCriticalUid() {
123         return factory
124                 .querySubtree(InstanceIdentifier.create(Foo.class))
125                 .extractChild(System.class)
126                 .matching()
127                     .childObject(Alarms.class)
128                     .leaf(Alarms::getCritical)
129                     .nonNull()
130                 .and()
131                     .childObject(Alarms.class)
132                     .childObject(AffectedUsers.class)
133                     .leaf(AffectedUsers::getUid)
134                     .greaterThan(Uint64.TEN)
135                 .build();
136     }
137
138     public QueryExpression<BooleanCont> selectBoolean() {
139         return factory
140                 .querySubtree(InstanceIdentifier.create(BooleanCont.class))
141                 .matching()
142                     .leaf(BooleanCont::isIsFoo)
143                     .valueEquals(true)
144                 .build();
145     }
146
147     public QueryExpression<DecimalContainer> selectDecimal64() {
148         return factory
149                 .querySubtree(InstanceIdentifier.create(DecimalContainer.class))
150                 .matching()
151                     .leaf(DecimalContainer::getDecimalLeaf5)
152                     .valueEquals(BigDecimal.ONE)
153                 .build();
154     }
155 }