summaryrefslogtreecommitdiffstats
path: root/controlloop/common/guard/pom.xml
blob: 9096efe2b604bd4e08ba6cbee3bdbc5985954031 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<!--
  ============LICENSE_START=======================================================
  drools-pdp-apps
  ================================================================================
  Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
  Modifications Copyright (C) 2020 Bell Canada.
  ================================================================================
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  ============LICENSE_END=========================================================
  -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
    <artifactId>drools-applications-common</artifactId>
    <version>1.6.4-SNAPSHOT</version>
  </parent>

  <artifactId>guard</artifactId>

  <dependencies>
    <dependency>
      <groupId>org.onap.policy.models.policy-models-interactions</groupId>
      <artifactId>model-yaml</artifactId>
      <version>${policy.models.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.att.research.xacml</groupId>
        <artifactId>xacml-pdp</artifactId>
        <version>1.0.2</version>
        <exclusions>
            <!--
                Exclude jars with an older version or that are insecure and not needed. 
             -->
            <exclusion>
                <artifactId>commons-codec</artifactId>
                <groupId>commons-codec</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
            <exclusion>
                <artifactId>guava</artifactId>
                <groupId>com.google.guava</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-lang3</artifactId>
                <groupId>org.apache.commons</groupId>
            </exclusion>
            <exclusion>
                <artifactId>jackson-databind</artifactId>
                <groupId>com.fasterxml.jackson.core</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-collections</artifactId>
                <groupId>commons-collections</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-lang</artifactId>
                <groupId>commons-lang</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-core</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.persistence</groupId>
      <artifactId>org.eclipse.persistence.jpa</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.common</groupId>
      <artifactId>policy-endpoints</artifactId>
      <version>${version.policy.common}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.drools-pdp</groupId>
      <artifactId>policy-management</artifactId>
      <version>${version.policy.drools-pdp}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.models.policy-models-interactions</groupId>
      <artifactId>simulators</artifactId>
      <version>${policy.models.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.models</groupId>
      <artifactId>policy-models-decisions</artifactId>
      <version>${policy.models.version}</version>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
      <artifactId>rest</artifactId>
      <version>${policy.models.version}</version>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <executions>
                    <execution>
                        <id>onap-java-style</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <!-- Use Google Java Style Guide:
                            https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml
                            with minor changes -->
                            <configLocation>onap-checkstyle/onap-java-style.xml</configLocation>
                            <!-- <sourceDirectory> is needed so that checkstyle ignores the generated sources directory -->
                            <sourceDirectories>${project.build.sourceDirectory}</sourceDirectories>
                            <includeResources>true</includeResources>
                            <includeTestSourceDirectory>true</includeTestSourceDirectory>
                            <includeTestResources>true</includeTestResources>
                            <excludes>
                            </excludes>
                            <consoleOutput>true</consoleOutput>
                            <failsOnViolation>true</failsOnViolation>
                            <violationSeverity>warning</violationSeverity>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.onap.oparent</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>${oparent.version}</version>
                        <scope>compile</scope>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
t;|>=|<=)' <leaf-value> )* ']'`` - ``xpath``: Absolute or descendant or xpath to the (list) node which elements will be queried. - ``leaf-name``: The name of the leaf which value needs to be compared. - ``leaf-value``: The required value of the leaf. **Examples** - ``/shops/bookstore/categories[@numberOfBooks=1]`` - ``//categories[@name="Kids"]`` - ``//categories[@name='Kids']`` - ``//categories[@code='1']/books/book[@title='Dune' and @price=5]`` - ``//categories[@code='1']/books/book[@title='xyz' or @price=15]`` - ``//categories[@code='1']/books/book[@title='xyz' or @price>20]`` - ``//categories[@code='1']/books/book[@title='Dune' and @price<=5]`` - ``//categories[@code=1]`` **Limitations** - Only the last list or container can be queried leaf values. Any ancestor list will have to be referenced by its key name-value pair(s). - When mixing ``and/or`` operators, ``and`` has precedence over ``or`` . So ``and`` operators get evaluated first. - Bracketing is not supported. - Leaf names are not validated so ``or`` operations with invalid leaf names will silently be ignored. - Only leaves can be used, leaf-list are not supported. - Only string and integer values are supported, boolean and float values are not supported. - Using comparative operators with string values will lead to an error at runtime. This error can't be validated earlier as the datatype is unknown until the execution phase. - The key should be supplied with correct data type for it to be queried from DB. In the last example above the attribute code is of type Integer so the cps query will not work if the value is passed as string. e.g.: ``//categories[@code="1"]`` or ``//categories[@code='1']`` will not work because the key attribute code is treated a string. **Notes** - For performance reasons it does not make sense to query using key leaf as attribute. If the key value is known it is better to execute a get request with the complete xpath. text()-condition ---------------- The text()-condition can be added to any CPS path query. **Syntax**: ``<cps-path> ( '/' <leaf-name> '[text()=' <string-value> ']' )?`` - ``cps-path``: Any CPS path query. - ``leaf-name``: The name of the leaf or leaf-list which value needs to be compared. - ``string-value``: The required value of the leaf or leaf-list element as a string wrapped in quotation marks (U+0022) or apostrophes (U+0027). This will still match integer values. **Examples** - ``//book/label[text()="classic"]`` - ``//book/edition[text()="1965"]`` **Limitations** - Only the last list or container can be queried for leaf values with a text() condition. Any ancestor list will have to be referenced by its key name-value pair(s). - Only one leaf or leaf-list can be tested. - Only string and integer values are supported, boolean and float values are not supported. - Since CPS cannot return individual leaves it will always return the container with all its leaves. Ancestor-axis can be used to specify a parent higher up the tree. - When querying a leaf value (instead of leaf-list) it is better, more performant to use a text value condition use @<leaf-name> as described above. contains()-condition -------------------- **Syntax**: ``<cps-path> '[' 'contains' '(' '<leaf-name>','<string-value>' ')' ']'?`` - ``cps-path``: Any CPS path query. - ``leaf-name``: The name of the leaf which value needs to be compared. - ``string-value``: The required value of the leaf element as a string wrapped in quotation marks (U+0022) or apostrophes (U+0027). This will still match integer values. **Examples** - ``//categories[contains(@name,'Sci')]`` - ``//books[contains(@title,'Space')]`` **Limitations** - Only leaves can be used, leaf-list are not supported. - Leaf names are not validated so ``contains() condition`` with invalid leaf names will silently be ignored. **Notes** - contains condition is case sensitive. ancestor-axis ------------- The ancestor axis can be added to any CPS path query but has to be the last part. **Syntax**: ``<cps-path> ( '/ancestor::' <ancestor-path> )?`` - ``cps-path``: Any CPS path query. - ``ancestor-path``: Partial path to ancestors of the target node. This can contain one or more ancestor nodes separated by a ``/``. **Examples** - ``//book/ancestor::categories`` - ``//categories[@code='2']/books/ancestor::bookstore`` - ``//book/ancestor::categories[@code='1']/books`` - ``//book/label[text()="classic"]/ancestor::shops`` **Limitations** - Ancestor list elements can only be addressed using the list key leaf. - List elements with compound keys are not supported.