2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.onap.aai.schemagen.genxsd;
22 import org.apache.commons.lang.StringUtils;
23 import org.junit.Before;
24 import org.junit.BeforeClass;
25 import org.junit.Test;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28 import org.w3c.dom.Document;
29 import org.w3c.dom.Element;
30 import org.w3c.dom.NodeList;
31 import org.xml.sax.InputSource;
32 import org.xml.sax.SAXException;
34 import javax.xml.XMLConstants;
35 import javax.xml.parsers.DocumentBuilder;
36 import javax.xml.parsers.DocumentBuilderFactory;
37 import javax.xml.parsers.ParserConfigurationException;
38 import java.io.IOException;
39 import java.io.StringReader;
42 import static org.hamcrest.CoreMatchers.*;
43 import static org.hamcrest.collection.IsIn.in;
44 import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
45 import static org.hamcrest.core.Every.everyItem;
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.assertThat;
49 public class XSDElementTest {
50 private static final Logger logger = LoggerFactory.getLogger("XSDElementTest.class");
51 private static final int maxSizeForXml = 20000;
52 protected String testXML;
53 protected Document doc = null;
54 protected NodeList javaTypeNodes=null;
56 public String getTestXML() {
61 public static void setUpBeforeClass() throws Exception {
65 public void setUp() throws Exception {
69 public void setUp( int sbopt ) throws Exception {
70 StringBuilder sb = new StringBuilder(maxSizeForXml);
77 addCustomerNoSubscriberType(sb);
78 addCustomerSubscriberType(sb);
80 addServiceSubscriptions(sb);
81 addServiceSubscription(sb);
83 testXML = sb.toString();
87 public void setUpRelationship( ) throws Exception {
88 StringBuilder sb = new StringBuilder(maxSizeForXml);
89 addNamespaceNoInventory(sb);
91 addRelationshipList(sb);
92 addRelatedToProperty(sb);
93 addRelationshipData(sb);
95 testXML = sb.toString();
99 private void addNamespace(StringBuilder sb){
100 sb.append("<xml-bindings xmlns=\"http://www.eclipse.org/eclipselink/xsds/persistence/oxm\" package-name=\"inventory.aai.onap.org.v11\" xml-mapping-metadata-complete=\"true\">\n");
101 sb.append("<xml-schema element-form-default=\"QUALIFIED\">\n");
102 sb.append("<xml-ns namespace-uri=\"http://org.onap.aai.inventory/v11\" />\n");
103 sb.append("</xml-schema>\n");
104 sb.append("<java-types>\n");
105 sb.append("<java-type name=\"Inventory\">\n");
106 sb.append("<xml-root-element name=\"inventory\" />\n");
107 sb.append("<java-attributes>\n");
108 sb.append("<xml-element java-attribute=\"business\" name=\"business\" type=\"inventory.aai.onap.org.v11.Business\" />\n");
109 sb.append("</java-attributes>\n");
110 sb.append("</java-type>\n");
113 private void addNamespaceNoInventory(StringBuilder sb){
114 sb.append("<xml-bindings xmlns=\"http://www.eclipse.org/eclipselink/xsds/persistence/oxm\" package-name=\"inventory.aai.onap.org.v11\" xml-mapping-metadata-complete=\"true\">\n");
115 sb.append("<xml-schema element-form-default=\"QUALIFIED\">\n");
116 sb.append("<xml-ns namespace-uri=\"http://org.onap.aai.inventory/v11\" />\n");
117 sb.append("</xml-schema>\n");
118 sb.append("<java-types>\n");
121 private void addBusiness(StringBuilder sb){
122 sb.append("<java-type name=\"Business\">\n");
123 sb.append("<xml-properties>\n");
124 sb.append("<xml-property name=\"description\" value=\"Namespace for business related constructs\" />\n");
125 sb.append("</xml-properties>\n");
126 sb.append("<xml-root-element name=\"business\" />\n");
127 sb.append("<java-attributes>\n");
128 sb.append("<xml-element java-attribute=\"customers\" name=\"customers\" type=\"inventory.aai.onap.org.v11.Customers\" />\n");
129 sb.append("</java-attributes>\n");
130 sb.append("</java-type>\n");
133 private void addCustomers(StringBuilder sb){
134 sb.append("<java-type name=\"Customers\">\n");
135 sb.append("<xml-properties>\n");
136 sb.append("<xml-property name=\"description\" value=\"Collection of customer identifiers to provide linkage back to BSS information.\" />\n");
137 sb.append("</xml-properties>\n");
138 sb.append("<xml-root-element name=\"customers\" />\n");
139 sb.append("<java-attributes>\n");
140 sb.append("<xml-element container-type=\"java.util.ArrayList\" java-attribute=\"customer\" name=\"customer\" type=\"inventory.aai.onap.org.v11.Customer\" />\n");
141 sb.append("</java-attributes>\n");
142 sb.append("<xml-properties>\n");
143 sb.append("<xml-property name=\"maximumDepth\" value=\"0\" />\n");
144 sb.append("</xml-properties>\n");
145 sb.append("</java-type>\n");
148 private void addCustomer(StringBuilder sb){
149 sb.append("<java-type name=\"Customer\">\n");
150 sb.append("<xml-root-element name=\"customer\" />\n");
151 sb.append("<java-attributes>\n");
152 sb.append("<xml-element java-attribute=\"globalCustomerId\" name=\"global-customer-id\" required=\"true\" type=\"java.lang.String\" xml-key=\"true\">\n");
153 sb.append("<xml-properties>\n");
154 sb.append("<xml-property name=\"description\" value=\"Global customer id used across to uniquely identify customer.\" />\n");
155 sb.append("</xml-properties>\n");
156 sb.append("</xml-element>\n");
157 sb.append("<xml-element java-attribute=\"subscriberName\" name=\"subscriber-name\" required=\"true\" type=\"java.lang.String\">\n");
158 sb.append("<xml-properties>\n");
159 sb.append("<xml-property name=\"description\" value=\"Subscriber name, an alternate way to retrieve a customer.\" />\n");
160 sb.append("</xml-properties>\n");
161 sb.append("</xml-element>\n");
162 sb.append("<xml-element java-attribute=\"subscriberType\" name=\"subscriber-type\" required=\"true\" type=\"java.lang.String\">\n");
163 sb.append("<xml-properties>\n");
164 sb.append("<xml-property name=\"description\" value=\"Subscriber type, a way to provide VID with only the INFRA customers.\" />\n");
165 sb.append("<xml-property name=\"defaultValue\" value=\"CUST\" />\n");
166 sb.append("</xml-properties>\n");
167 sb.append("</xml-element>\n");
168 sb.append("<xml-element java-attribute=\"resourceVersion\" name=\"resource-version\" type=\"java.lang.String\">\n");
169 sb.append("<xml-properties>\n");
170 sb.append("<xml-property name=\"description\" value=\"Used for optimistic concurrency. Must be empty on create, valid on update and delete.\" />\n");
171 sb.append("</xml-properties>\n");
172 sb.append("</xml-element>\n");
173 sb.append("<xml-element java-attribute=\"serviceSubscriptions\" name=\"service-subscriptions\" type=\"inventory.aai.onap.org.v11.ServiceSubscriptions\" />\n");
174 // sb.append("<xml-element java-attribute=\"relationshipList\" name=\"relationship-list\" type=\"inventory.aai.onap.org.v11.RelationshipList\" />\n");
175 sb.append("</java-attributes>\n");
176 sb.append("<xml-properties>\n");
177 sb.append("<xml-property name=\"description\" value=\"customer identifiers to provide linkage back to BSS information.\" />\n");
178 sb.append("<xml-property name=\"nameProps\" value=\"subscriber-name\" />\n");
179 sb.append("<xml-property name=\"indexedProps\" value=\"subscriber-name,global-customer-id,subscriber-type\" />\n");
180 sb.append("<xml-property name=\"searchable\" value=\"global-customer-id,subscriber-name\" />\n");
181 sb.append("<xml-property name=\"uniqueProps\" value=\"global-customer-id\" />\n");
182 sb.append("<xml-property name=\"container\" value=\"customers\" />\n");
183 sb.append("<xml-property name=\"namespace\" value=\"business\" />\n");
184 sb.append("</xml-properties>\n");
185 sb.append("</java-type>\n");
188 private void addCustomerNoSubscriberType(StringBuilder sb){
189 sb.append("<java-type name=\"Customer\">\n");
190 sb.append("<xml-root-element name=\"customer\" />\n");
191 sb.append("<java-attributes>\n");
192 sb.append("<xml-element java-attribute=\"globalCustomerId\" name=\"global-customer-id\" required=\"true\" type=\"java.lang.String\" xml-key=\"true\">\n");
193 sb.append("<xml-properties>\n");
194 sb.append("<xml-property name=\"description\" value=\"Global customer id used across to uniquely identify customer.\" />\n");
195 sb.append("</xml-properties>\n");
196 sb.append("</xml-element>\n");
197 sb.append("<xml-element java-attribute=\"subscriberName\" name=\"subscriber-name\" required=\"true\" type=\"java.lang.String\">\n");
198 sb.append("<xml-properties>\n");
199 sb.append("<xml-property name=\"description\" value=\"Subscriber name, an alternate way to retrieve a customer.\" />\n");
200 sb.append("</xml-properties>\n");
201 sb.append("</xml-element>\n");
202 sb.append("<xml-element java-attribute=\"resourceVersion\" name=\"resource-version\" type=\"java.lang.String\">\n");
203 sb.append("<xml-properties>\n");
204 sb.append("<xml-property name=\"description\" value=\"Used for optimistic concurrency. Must be empty on create, valid on update and delete.\" />\n");
205 sb.append("</xml-properties>\n");
206 sb.append("</xml-element>\n");
207 sb.append("<xml-element java-attribute=\"serviceSubscriptions\" name=\"service-subscriptions\" type=\"inventory.aai.onap.org.v11.ServiceSubscriptions\" />\n");
208 sb.append("</java-attributes>\n");
209 sb.append("<xml-properties>\n");
210 sb.append("<xml-property name=\"description\" value=\"customer identifiers to provide linkage back to BSS information.\" />\n");
211 sb.append("<xml-property name=\"nameProps\" value=\"subscriber-name\" />\n");
212 sb.append("<xml-property name=\"indexedProps\" value=\"subscriber-name,global-customer-id\" />\n");
213 sb.append("<xml-property name=\"searchable\" value=\"global-customer-id,subscriber-name\" />\n");
214 sb.append("<xml-property name=\"uniqueProps\" value=\"global-customer-id\" />\n");
215 sb.append("<xml-property name=\"container\" value=\"customers\" />\n");
216 sb.append("<xml-property name=\"namespace\" value=\"business\" />\n");
217 sb.append("</xml-properties>\n");
218 sb.append("</java-type>\n");
221 private void addCustomerSubscriberType(StringBuilder sb){
222 sb.append("<java-type name=\"Customer\">\n");
223 sb.append("<xml-root-element name=\"customer\" />\n");
224 sb.append("<java-attributes>\n");
225 sb.append("<xml-element java-attribute=\"subscriberType\" name=\"subscriber-type\" required=\"true\" type=\"java.lang.String\">\n");
226 sb.append("<xml-properties>\n");
227 sb.append("<xml-property name=\"description\" value=\"Subscriber type, a way to provide VID with only the INFRA customers.\" />\n");
228 sb.append("<xml-property name=\"defaultValue\" value=\"CUST\" />\n");
229 sb.append("</xml-properties>\n");
230 sb.append("</xml-element>\n");
231 sb.append("</java-attributes>\n");
232 sb.append("<xml-properties>\n");
233 sb.append("<xml-property name=\"indexedProps\" value=\"subscriber-type\" />\n");
234 sb.append("<xml-property name=\"container\" value=\"customers\" />\n");
235 sb.append("</xml-properties>\n");
236 sb.append("</java-type>\n");
239 private void addServiceSubscriptions(StringBuilder sb){
240 sb.append("<java-type name=\"ServiceSubscriptions\">\n");
241 sb.append("<xml-properties>\n");
242 sb.append("<xml-property name=\"description\" value=\"Collection of objects that group service instances.\" />\n");
243 sb.append("</xml-properties>\n");
244 sb.append("<xml-root-element name=\"service-subscriptions\" />\n");
245 sb.append("<java-attributes>\n");
246 sb.append("<xml-element container-type=\"java.util.ArrayList\" java-attribute=\"serviceSubscription\" name=\"service-subscription\" type=\"inventory.aai.onap.org.v11.ServiceSubscription\" />\n");
247 sb.append("</java-attributes>\n");
248 sb.append("</java-type>\n");
250 private void addServiceSubscription(StringBuilder sb){
251 sb.append("<java-type name=\"ServiceSubscription\">\n");
252 sb.append("<xml-root-element name=\"service-subscription\" />\n");
253 sb.append("<java-attributes>\n");
254 sb.append("<xml-element java-attribute=\"serviceType\" name=\"service-type\" required=\"true\" type=\"java.lang.String\" xml-key=\"true\">\n");
255 sb.append("<xml-properties>\n");
256 sb.append("<xml-property name=\"description\" value=\"Value defined by orchestration to identify this service.\" />\n");
257 sb.append("</xml-properties>\n");
258 sb.append("</xml-element>\n");
259 sb.append("<xml-element java-attribute=\"tempUbSubAccountId\" name=\"temp-ub-sub-account-id\" type=\"java.lang.String\">\n");
260 sb.append("<xml-properties>\n");
261 sb.append("<xml-property name=\"description\" value=\"This property will be deleted from A&AI in the near future. Only stop gap solution.\" />\n");
262 sb.append("</xml-properties>\n");
263 sb.append("</xml-element>\n");
264 sb.append("<xml-element java-attribute=\"resourceVersion\" name=\"resource-version\" type=\"java.lang.String\">\n");
265 sb.append("<xml-properties>\n");
266 sb.append("<xml-property name=\"description\" value=\"Used for optimistic concurrency. Must be empty on create, valid on update and delete.\" />\n");
267 sb.append("</xml-properties>\n");
268 sb.append("</xml-element>\n");
269 // sb.append("<xml-element java-attribute=\"relationshipList\" name=\"relationship-list\" type=\"inventory.aai.onap.org.v11.RelationshipList\" />\n");
270 sb.append("</java-attributes>\n");
271 sb.append("<xml-properties>\n");
272 sb.append("<xml-property name=\"description\" value=\"Object that group service instances.\" />\n");
273 sb.append("<xml-property name=\"indexedProps\" value=\"service-type\" />\n");
274 sb.append("<xml-property name=\"dependentOn\" value=\"customer\" />\n");
275 sb.append("<xml-property name=\"container\" value=\"service-subscriptions\" />\n");
276 sb.append("<xml-property name=\"crossEntityReference\" value=\"service-instance,service-type\" />\n");
277 sb.append("</xml-properties>\n");
278 sb.append("</java-type>\n");
281 private void addRelationshipList(StringBuilder sb ) {
282 sb.append("<java-type name=\"RelationshipList\">\n");
283 sb.append("<xml-root-element name=\"relationship-list\" />\n");
284 sb.append("<java-attributes>\n");
285 sb.append("<xml-element container-type=\"java.util.ArrayList\" java-attribute=\"relationship\" name=\"relationship\" type=\"inventory.aai.onap.org.v11.Relationship\" />/n");
286 sb.append("</java-attributes>\n");
287 sb.append("</java-type>\n");
290 private void addRelationship(StringBuilder sb ) {
291 sb.append("<java-type name=\"Relationship\">\n");
292 sb.append("<xml-root-element name=\"relationship\" />\n");
293 sb.append("<java-attributes>\n");
294 sb.append("<xml-element java-attribute=\"relatedTo\" name=\"related-to\" type=\"java.lang.String\">\n");
295 sb.append("<xml-properties>\n");
296 sb.append("<xml-property name=\"description\" value=\"A keyword provided by A&AI to indicate type of node.\" />\n");
297 sb.append("</xml-properties>\n");
298 sb.append("</xml-element>\n");
299 sb.append("<xml-element java-attribute=\"relatedLink\" name=\"related-link\" type=\"java.lang.String\">\n");
300 sb.append("<xml-properties>\n");
301 sb.append("<xml-property name=\"description\" value=\"URL to the object in A&AI.\" />");
302 sb.append("</xml-properties>\n");
303 sb.append("</xml-element>\n");
304 sb.append("<xml-element container-type=\"java.util.ArrayList\" java-attribute=\"relationshipData\" name=\"relationship-data\" type=\"inventory.aai.onap.org.v11.RelationshipData\" />\n");
305 sb.append("<xml-element container-type=\"java.util.ArrayList\" java-attribute=\"relatedToProperty\" name=\"related-to-property\" type=\"inventory.aai.onap.org.v11.RelatedToProperty\" />\n");
306 sb.append("</java-attributes>\n");
307 sb.append("</java-type>\n");
310 private void addRelatedToProperty(StringBuilder sb) {
311 sb.append("<java-type name=\"RelatedToProperty\">\n");
312 sb.append("<xml-root-element name=\"related-to-property\" />\n");
313 sb.append("<java-attributes>\n");
314 sb.append("<xml-element java-attribute=\"propertyKey\" name=\"property-key\" type=\"java.lang.String\">\n");
315 sb.append("<xml-properties>\n");
316 sb.append("<xml-property name=\"description\" value=\"Key part of a key/value pair\" />\n");
317 sb.append("</xml-properties>\n");
318 sb.append("</xml-element>\n");
319 sb.append("<xml-element java-attribute=\"propertyValue\" name=\"property-value\" type=\"java.lang.String\">\n");
320 sb.append("<xml-properties>\n");
321 sb.append("<xml-property name=\"description\" value=\"Value part of a key/value pair\" />\n");
322 sb.append("</xml-properties>\n");
323 sb.append("</xml-element>\n");
324 sb.append("</java-attributes>\n");
325 sb.append("</java-type>\n");
328 private void addRelationshipData(StringBuilder sb){
329 sb.append("<java-type name=\"RelationshipData\">\n");
330 sb.append("<xml-root-element name=\"relationship-data\" />\n");
331 sb.append("<java-attributes>\n");
332 sb.append("<xml-element java-attribute=\"relationshipKey\" name=\"relationship-key\" required=\"true\" type=\"java.lang.String\">\n");
333 sb.append("<xml-properties>\n");
334 sb.append("<xml-property name=\"description\" value=\"A keyword provided by A&AI to indicate an attribute.\" />\n");
335 sb.append("</xml-properties>\n");
336 sb.append("</xml-element>\n");
337 sb.append("<xml-element java-attribute=\"relationshipValue\" name=\"relationship-value\" required=\"true\" type=\"java.lang.String\">\n");
338 sb.append("<xml-properties>\n");
339 sb.append("<xml-property name=\"description\" value=\"Value of the attribute.\" />\n");
340 sb.append("</xml-properties>\n");
341 sb.append("</xml-element>\n");
342 sb.append("</java-attributes>\n");
343 sb.append("</java-type>\n");
347 private void addEndOfXML(StringBuilder sb){
348 sb.append("</java-types>\n");
349 sb.append("</xml-bindings>\n");
352 public void init() throws ParserConfigurationException, SAXException, IOException {
353 DocumentBuilder dBuilder = null;
355 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
356 dbFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
357 dBuilder = dbFactory.newDocumentBuilder();
358 } catch (ParserConfigurationException e) {
362 InputSource isInput = new InputSource(new StringReader(testXML));
363 doc = dBuilder.parse(isInput);
364 } catch (SAXException e) {
366 } catch (IOException e) {
370 NodeList bindingsNodes = doc.getElementsByTagName("xml-bindings");
371 Element bindingElement;
372 NodeList javaTypesNodes;
373 Element javaTypesElement;
375 if ( bindingsNodes == null || bindingsNodes.getLength() == 0 ) {
376 throw new SAXException("OXM file error: missing <binding-nodes> in XML");
379 bindingElement = (Element) bindingsNodes.item(0);
380 javaTypesNodes = bindingElement.getElementsByTagName("java-types");
381 if ( javaTypesNodes.getLength() < 1 ) {
382 throw new SAXException("OXM file error: missing <binding-nodes><java-types> in XML");
384 javaTypesElement = (Element) javaTypesNodes.item(0);
386 javaTypeNodes = javaTypesElement.getElementsByTagName("java-type");
387 if ( javaTypeNodes.getLength() < 1 ) {
388 throw new SAXException("OXM file error: missing <binding-nodes><java-types><java-type> in XML");
390 logger.debug(testXML);
393 public void testXSDElement() {
394 // repeat of testGetIndexedProps() which uses the constructor
395 ArrayList<String> target = new ArrayList<String>();
396 target.add("subscriber-name");
397 target.add("global-customer-id");
398 target.add("subscriber-type");
399 target.add("service-type");
401 Vector<String> indexedProps = new Vector<String>();
402 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
403 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
404 indexedProps.addAll(javaTypeElement.getIndexedProps());
406 assertThat(new ArrayList<>(indexedProps),both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
410 public void testName() {
411 ArrayList<String> target = new ArrayList<String>();
412 target.add("ServiceSubscriptions");
413 target.add("ServiceSubscription");
414 target.add("Inventory");
415 target.add("Business");
416 target.add("Customers");
417 target.add("Customer");
418 ArrayList<String> names = new ArrayList<String>();
419 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
420 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
421 names.add(javaTypeElement.name());
423 logger.debug(String.join("|", names));
424 assertThat(names,both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
428 public void testGetAddTypes() {
429 HashMap<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
430 HashMap<String,ArrayList<String>> target = new HashMap<String,ArrayList<String>>();
431 target.put("Customer", new ArrayList<>(Arrays.asList("ServiceSubscriptions", "RelationshipList")));
432 target.put("Customer", new ArrayList<>(Arrays.asList("ServiceSubscriptions")));
433 target.put("Business", new ArrayList<>(Arrays.asList("Customers")));
434 target.put("Inventory", new ArrayList<>(Arrays.asList("Business")));
435 target.put("Customers", new ArrayList<>(Arrays.asList("Customer")));
436 target.put("ServiceSubscription", new ArrayList<>(Arrays.asList("RelationshipList")));
437 target.put("ServiceSubscription", new ArrayList<>(Arrays.asList()));
438 target.put("ServiceSubscriptions", new ArrayList<>(Arrays.asList("ServiceSubscription")));
440 for ( int i = 0; i < javaTypeNodes.getLength(); ++i ) {
441 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
442 ArrayList<String> addTypes = new ArrayList<String>();
443 NodeList xmlElementNodes = javaTypeElement.getElementsByTagName("xml-element");
444 String name=javaTypeElement.name();
445 for ( int j = 0; j < xmlElementNodes.getLength(); ++j ) {
446 XSDElement xmlElement = new XSDElement((Element) xmlElementNodes.item(j));
447 addTypes.addAll(xmlElement.getAddTypes("v11"));
448 map.put(name,addTypes);
451 for(String key : map.keySet()) {
452 assertThat("Expected for key:"+key, map.get(key),equalTo(target.get(key)));
457 public void testGetRequiredElements() {
458 HashMap<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
459 ArrayList<String> target = new ArrayList<String>();
460 target.add("global-customer-id\n");
461 target.add("subscriber-name\n");
462 target.add("subscriber-type");
463 for ( int i = 0; i < javaTypeNodes.getLength(); ++i ) {
464 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
465 ArrayList<String> requiredItems = new ArrayList<String>();
466 String name=javaTypeElement.name();
467 requiredItems.addAll(javaTypeElement.getRequiredElements("v11"));
468 map.put(name,requiredItems);
470 for(String key : map.keySet()) {
471 assertThat(map.get(key),equalTo(target));
476 public void testGetPathDescriptionProperty() {
477 ArrayList<String> target = new ArrayList<String>();
478 target.add("Namespace for business related constructs");
479 target.add("Collection of customer identifiers to provide linkage back to BSS information.");
480 target.add("customer identifiers to provide linkage back to BSS information.");
481 target.add("Collection of objects that group service instances.");
482 target.add("Object that group service instances.");
483 List<String> descs = new ArrayList<String>();
484 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
485 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
486 if(javaTypeElement.getPathDescriptionProperty() != null)
487 descs.add(javaTypeElement.getPathDescriptionProperty());
489 logger.debug(String.join("|", descs));
490 assertThat(new ArrayList<>(descs),both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
494 public void testGetIndexedProps() {
495 ArrayList<String> target = new ArrayList<String>();
496 target.add("subscriber-name");
497 target.add("global-customer-id");
498 target.add("subscriber-type");
499 target.add("service-type");
501 Vector<String> indexedProps = new Vector<String>();
502 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
503 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
504 indexedProps.addAll(javaTypeElement.getIndexedProps());
506 assertThat(new ArrayList<>(indexedProps),both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
510 public void testGetContainerProperty() {
511 ArrayList<String> target = new ArrayList<String>();
512 target.add("service-subscriptions");
513 target.add("customers");
514 List<String> containers = new ArrayList<String>();
515 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
516 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
517 if(javaTypeElement.getContainerProperty() != null)
518 containers.add(javaTypeElement.getContainerProperty());
520 logger.debug(String.join("|", containers));
521 assertThat(new ArrayList<>(containers),both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
525 public void testGetQueryParamYAML() {
526 ArrayList<String> target = new ArrayList<String>();
527 target.add(" - name: global-customer-id\n in: query\n description: n/a\n required: false\n type: string\n");
528 target.add(" - name: subscriber-name\n in: query\n description: n/a\n required: false\n type: string\n");
529 target.add(" - name: subscriber-type\n in: query\n description: n/a\n required: false\n type: string\n");
530 Vector<String> indexedProps = new Vector<String>();
531 for ( int i = 0; i < javaTypeNodes.getLength(); ++i ) {
532 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
533 if(javaTypeElement.getContainerProperty() != null) {
534 indexedProps.addAll(javaTypeElement.getIndexedProps());
535 String container = javaTypeElement.getContainerProperty();
536 Vector<String> containerProps = new Vector<String>();
537 NodeList xmlElementNodes = javaTypeElement.getElementsByTagName("xml-element");
538 for ( int j = 0; j < xmlElementNodes.getLength(); ++j ) {
539 XSDElement xmlElement = new XSDElement((Element) xmlElementNodes.item(j));
540 if(indexedProps.contains(xmlElement.name()))
541 containerProps.add(xmlElement.getQueryParamYAML());
543 GetOperation.addContainerProps(container, containerProps);
547 List<String> queryParams = new ArrayList<String>();
548 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
549 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
550 if(javaTypeElement.getQueryParamYAML() != null)
551 queryParams.add(javaTypeElement.getQueryParamYAML());
554 assertThat(GetOperation.containers.get("customers"),equalTo( target));
558 public void testGetPathParamYAML() {
559 ArrayList<String> target = new ArrayList<String>();
560 target.add(" - name: Inventory\n in: path\n description: Inventory\n required: true\n example: __INVENTORY__\n");
561 target.add(" - name: Business\n in: path\n description: Business\n required: true\n example: __BUSINESS__\n");
562 target.add(" - name: Customers\n in: path\n description: Customers\n required: true\n example: __CUSTOMERS__\n");
563 target.add(" - name: Customer\n in: path\n description: Customer\n required: true\n example: __CUSTOMER__\n");
564 target.add(" - name: ServiceSubscriptions\n in: path\n description: ServiceSubscriptions\n required: true\n example: __SERVICESUBSCRIPTIONS__\n");
565 target.add(" - name: ServiceSubscription\n in: path\n description: ServiceSubscription\n required: true\n example: __SERVICESUBSCRIPTION__\n");
566 List<String> pathParams = new ArrayList<String>();
567 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
568 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
569 if(javaTypeElement.getPathParamYAML(javaTypeElement.name()) != null)
570 pathParams.add(javaTypeElement.getPathParamYAML(javaTypeElement.name()));
572 logger.debug(String.join("|", pathParams));
573 assertThat(new ArrayList<>(pathParams),both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
577 public void testGetHTMLAnnotation() {
578 ArrayList<String> target = new ArrayList<String>();
579 target.add(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR + " <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " <annox:annotate target=\"Business\">@org.onap.aai.annotations.Metadata(description=\"Namespace for business related constructs\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
580 target.add(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR + " <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " <annox:annotate target=\"Customers\">@org.onap.aai.annotations.Metadata(description=\"Collection of customer identifiers to provide linkage back to BSS information.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
581 target.add(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR + " <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " <annox:annotate target=\"Customer\">@org.onap.aai.annotations.Metadata(description=\"customer identifiers to provide linkage back to BSS information.\",nameProps=\"subscriber-name\",indexedProps=\"subscriber-name,global-customer-id,subscriber-type\",searchable=\"global-customer-id,subscriber-name\",uniqueProps=\"global-customer-id\",container=\"customers\",namespace=\"business\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
582 target.add(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR + " <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " <annox:annotate target=\"ServiceSubscriptions\">@org.onap.aai.annotations.Metadata(description=\"Collection of objects that group service instances.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
583 target.add(" <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR + " <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " <annox:annotate target=\"ServiceSubscription\">@org.onap.aai.annotations.Metadata(description=\"Object that group service instances.\",indexedProps=\"service-type\",dependentOn=\"customer\",container=\"service-subscriptions\",crossEntityReference=\"service-instance,service-type\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR + " </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
584 List<String> annotes = new ArrayList<String>();
585 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
586 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
587 if(StringUtils.isNotEmpty(javaTypeElement.getHTMLAnnotation(javaTypeElement.name(),"")))
588 annotes.add(javaTypeElement.getHTMLAnnotation(javaTypeElement.name(), " "));
590 logger.debug("result:");
591 logger.debug(String.join("|", annotes));
592 logger.debug("Expected:");
593 logger.debug(String.join("|", target));
594 assertThat(new ArrayList<>(annotes),both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
599 public void testGetTypePropertyYAML() {
600 ArrayList<String> target = new ArrayList<String>();
601 target.add(" Inventory:\n type: ");
602 target.add(" Business:\n type: description: Namespace for business related constructs\n");
603 target.add(" Customers:\n type: description: Collection of customer identifiers to provide linkage back to BSS information.\n");
604 target.add(" Customer:\n type: description: customer identifiers to provide linkage back to BSS information.\n");
605 target.add(" ServiceSubscriptions:\n type: description: Collection of objects that group service instances.\n");
606 target.add(" ServiceSubscription:\n type: description: Object that group service instances.\n");
607 StringBuilder sb = new StringBuilder(" Customer:\n type: description: |\n customer identifiers to provide linkage back to BSS information.\n");
608 sb.append(" *This property can be used as a filter to find the start node for a dsl query\n");
609 String yamlDesc = sb.toString();
610 List<String> types = new ArrayList<String>();
612 String customerDesc = null;
613 for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) {
614 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
615 if(javaTypeElement.getTypePropertyYAML(false) != null)
616 types.add(javaTypeElement.getTypePropertyYAML(false));
617 container = javaTypeElement.getContainerProperty();
618 if ( "customers".equals(container)) {
619 customerDesc = javaTypeElement.getTypePropertyYAML(true);
622 assertThat(new ArrayList<>(types),both(everyItem(is(in(target.toArray())))).and(containsInAnyOrder(target.toArray())));
623 assertEquals(customerDesc, yamlDesc );
627 public void testIsStandardType() {
628 HashMap<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
629 HashMap<String,ArrayList<String>> target = new HashMap<String,ArrayList<String>>();
630 target.put("Customer", new ArrayList<>(Arrays.asList("global-customer-id","subscriber-name", "subscriber-type","resource-version")));
631 target.put("Business", new ArrayList<>());
632 target.put("Inventory", new ArrayList<>());
633 target.put("Customers", new ArrayList<>());
634 target.put("ServiceSubscriptions", new ArrayList<>());
635 target.put("ServiceSubscription", new ArrayList<>(Arrays.asList("service-type", "temp-ub-sub-account-id", "resource-version")));
637 for ( int i = 0; i < javaTypeNodes.getLength(); ++i ) {
638 XSDElement javaTypeElement = new XSDElement((Element) javaTypeNodes.item(i));
639 ArrayList<String> addTypes = new ArrayList<String>();
640 NodeList xmlElementNodes = javaTypeElement.getElementsByTagName("xml-element");
641 String name=javaTypeElement.name();
642 for ( int j = 0; j < xmlElementNodes.getLength(); ++j ) {
643 XSDElement xmlElement = new XSDElement((Element) xmlElementNodes.item(j));
644 if(xmlElement.isStandardType())
645 addTypes.add(xmlElement.name());
647 map.put(name,addTypes);
649 for(String key : map.keySet()) {
650 assertThat(map.get(key),equalTo(target.get(key)));