a3cba5ebbefa15c1d0d9e4dda9554c571afd7930
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / util / genxsd / HTMLfromOXMTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
10  *
11  *    http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20 package org.onap.aai.util.genxsd;
21
22 import org.junit.Before;
23 import org.junit.BeforeClass;
24 import org.junit.Test;
25 import org.onap.aai.introspection.Version;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28 import org.w3c.dom.Element;
29
30 import java.io.BufferedWriter;
31 import java.io.File;
32 import java.io.IOException;
33 import java.nio.charset.Charset;
34 import java.nio.file.Files;
35 import java.nio.file.Path;
36 import java.nio.file.Paths;
37
38 import static org.hamcrest.CoreMatchers.is;
39 import static org.junit.Assert.assertThat;
40
41 public class HTMLfromOXMTest {
42         private static final Logger logger = LoggerFactory.getLogger("HTMLfromOXMTest.class");
43         private String testXML;
44
45         @BeforeClass
46         public static void setUpBeforeClass() throws Exception {
47         }
48
49         @Before
50         public void setUp() throws Exception {
51                 XSDElementTest x = new XSDElementTest();
52                 x.setUp();
53                 testXML = x.testXML;
54         }
55
56         @Test
57         public void testGetDocumentHeader() {
58                 Version v = Version.v11;
59                 String header = null;
60                 try {
61                         HTMLfromOXM swagger = new HTMLfromOXM(testXML, v);
62                         header = swagger.getDocumentHeader();
63                 } catch(Exception e) {
64                         e.printStackTrace();
65                 }
66                 logger.debug("Header:");
67                 logger.debug(header);
68                 assertThat(header, is(HTMLheader()));
69         }
70
71         @Test
72         public void testProcess() {
73                 Version v = Version.v11;
74                 String fileContent = null;
75                 try {
76                         HTMLfromOXM xsd = new HTMLfromOXM(testXML, v);
77                         fileContent = xsd.process();
78                 } catch(Exception e) {
79                         e.printStackTrace();
80                 }
81                 logger.debug("FileContent-I:");
82                 logger.debug(fileContent);
83                 assertThat(fileContent, is(HTMLresult()));
84         }
85
86         @Test
87         public void testHTMLfromOXMFileVersion() throws IOException {
88                 String outfileName = "testXML.xml";
89                 File XMLfile = new File(outfileName);
90                 XMLfile.createNewFile();
91                 BufferedWriter bw = null;
92                 Charset charset = Charset.forName("UTF-8");
93                 Path path = Paths.get(outfileName);
94                 bw = Files.newBufferedWriter(path, charset);
95                 bw.write(testXML);
96                 bw.close();
97                 Version v = Version.v11;
98                 String fileContent = null;
99                 try {
100                         HTMLfromOXM xsd = new HTMLfromOXM(testXML, v);
101                         fileContent = xsd.process();
102                 } catch(Exception e) {
103                         e.printStackTrace();
104                 }
105                 XMLfile.delete();
106                 logger.debug("FileContent-I:");
107                 logger.debug(fileContent);
108                 assertThat(fileContent, is(HTMLresult()));
109         }
110
111         @Test
112         public void testHTMLfromOXMStringVersion() {
113                 Version v = Version.v11;
114                 String fileContent = null;
115                 try {
116                         HTMLfromOXM xsd = new HTMLfromOXM(testXML, v);
117                         fileContent = xsd.process();
118                 } catch(Exception e) {
119                         e.printStackTrace();
120                 }
121                 logger.debug("FileContent-II:");
122                 logger.debug(fileContent);
123                 assertThat(fileContent, is(HTMLresult()));
124         }
125
126         @Test
127         public void testProcessJavaTypeElement() {
128                 String target = "Element=java-type/Customer";
129                 Version v = Version.v11;
130                 Element customer = null;
131                 try {
132                         HTMLfromOXM xsd = new HTMLfromOXM(testXML, v);
133                         xsd.process();
134                         customer = xsd.getJavaTypeElementSwagger("Customer");
135                 } catch(Exception e) {
136                         e.printStackTrace();
137                 }
138                 logger.debug("Element:");
139                 logger.debug("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"));
140                 assertThat("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"), is(target));    }
141         
142         public String HTMLresult() {
143                 StringBuilder sb = new StringBuilder(32368);
144                 sb.append(HTMLheader());
145                 sb.append(HTMLdefs());
146                 return sb.toString();
147         }
148         
149         public String HTMLheader() {
150                 StringBuilder sb = new StringBuilder(1500);
151                  sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
152                  sb.append("<xs:schema elementFormDefault=\"qualified\" version=\"1.0\" targetNamespace=\"http://org.openecomp.aai.inventory/v11\" xmlns:tns=\"http://org.openecomp.aai.inventory/v11\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\nxmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\"\r\n");
153                  sb.append("    jaxb:version=\"2.1\"\r\n");
154                  sb.append("    xmlns:annox=\"http://annox.dev.java.net\"\r\n");
155                  sb.append("    jaxb:extensionBindingPrefixes=\"annox\">\n\n");
156                 return sb.toString();
157         }
158         public String HTMLdefs() {
159                 StringBuilder sb = new StringBuilder(1500);
160                 sb.append("  <xs:element name=\"service-subscription\">\n");
161                 sb.append("    <xs:complexType>\n");
162                 sb.append("      <xs:annotation>\r\n");
163                 sb.append("        <xs:appinfo>\r\n");
164                 sb.append("          <annox:annotate target=\"class\">@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>\r\n");
165                 sb.append("        </xs:appinfo>\r\n");
166                 sb.append("      </xs:annotation>\r\n");
167                 sb.append("      <xs:sequence>\n");
168                 sb.append("        <xs:element name=\"service-type\" type=\"xs:string\">\n");
169                 sb.append("          <xs:annotation>\r\n");
170                 sb.append("            <xs:appinfo>\r\n");
171                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Value defined by orchestration to identify this service across ECOMP.\")</annox:annotate>\r\n");
172                 sb.append("            </xs:appinfo>\r\n");
173                 sb.append("          </xs:annotation>\r\n");
174                 sb.append("        </xs:element>\n");
175                 sb.append("        <xs:element name=\"temp-ub-sub-account-id\" type=\"xs:string\" minOccurs=\"0\">\n");
176                 sb.append("          <xs:annotation>\r\n");
177                 sb.append("            <xs:appinfo>\r\n");
178                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"This property will be deleted from A&amp;AI in the near future. Only stop gap solution.\")</annox:annotate>\r\n");
179                 sb.append("            </xs:appinfo>\r\n");
180                 sb.append("          </xs:annotation>\r\n");
181                 sb.append("        </xs:element>\n");
182                 sb.append("        <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">\n");
183                 sb.append("          <xs:annotation>\r\n");
184                 sb.append("            <xs:appinfo>\r\n");
185                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Used for optimistic concurrency.  Must be empty on create, valid on update and delete.\")</annox:annotate>\r\n");
186                 sb.append("            </xs:appinfo>\r\n");
187                 sb.append("          </xs:annotation>\r\n");
188                 sb.append("        </xs:element>\n");
189                 sb.append("      </xs:sequence>\n");
190                 sb.append("    </xs:complexType>\n");
191                 sb.append("  </xs:element>\n");
192                 sb.append("  <xs:element name=\"service-subscriptions\">\n");
193                 sb.append("    <xs:complexType>\n");
194                 sb.append("      <xs:annotation>\r\n");
195                 sb.append("        <xs:appinfo>\r\n");
196                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Collection of objects that group service instances.\")</annox:annotate>\r\n");
197                 sb.append("        </xs:appinfo>\r\n");
198                 sb.append("      </xs:annotation>\r\n");
199                 sb.append("      <xs:sequence>\n");
200                 sb.append("        <xs:element ref=\"tns:service-subscription\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n");
201                 sb.append("      </xs:sequence>\n");
202                 sb.append("    </xs:complexType>\n");
203                 sb.append("  </xs:element>\n");
204                 sb.append("  <xs:element name=\"customer\">\n");
205                 sb.append("    <xs:complexType>\n");
206                 sb.append("      <xs:annotation>\r\n");
207                 sb.append("        <xs:appinfo>\r\n");
208                 sb.append("          <annox:annotate target=\"class\">@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>\r\n");
209                 sb.append("        </xs:appinfo>\r\n");
210                 sb.append("      </xs:annotation>\r\n");
211                 sb.append("      <xs:sequence>\n");
212                 sb.append("        <xs:element name=\"global-customer-id\" type=\"xs:string\">\n");
213                 sb.append("          <xs:annotation>\r\n");
214                 sb.append("            <xs:appinfo>\r\n");
215                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Global customer id used across ECOMP to uniquely identify customer.\")</annox:annotate>\r\n");
216                 sb.append("            </xs:appinfo>\r\n");
217                 sb.append("          </xs:annotation>\r\n");
218                 sb.append("        </xs:element>\n");
219                 sb.append("        <xs:element name=\"subscriber-name\" type=\"xs:string\">\n");
220                 sb.append("          <xs:annotation>\r\n");
221                 sb.append("            <xs:appinfo>\r\n");
222                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber name, an alternate way to retrieve a customer.\")</annox:annotate>\r\n");
223                 sb.append("            </xs:appinfo>\r\n");
224                 sb.append("          </xs:annotation>\r\n");
225                 sb.append("        </xs:element>\n");
226                 sb.append("        <xs:element name=\"subscriber-type\" type=\"xs:string\">\n");
227                 sb.append("          <xs:annotation>\r\n");
228                 sb.append("            <xs:appinfo>\r\n");
229                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber type, a way to provide VID with only the INFRA customers.\",defaultValue=\"CUST\")</annox:annotate>\r\n");
230                 sb.append("            </xs:appinfo>\r\n");
231                 sb.append("          </xs:annotation>\r\n");
232                 sb.append("        </xs:element>\n");
233                 sb.append("        <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">\n");
234                 sb.append("          <xs:annotation>\r\n");
235                 sb.append("            <xs:appinfo>\r\n");
236                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Used for optimistic concurrency.  Must be empty on create, valid on update and delete.\")</annox:annotate>\r\n");
237                 sb.append("            </xs:appinfo>\r\n");
238                 sb.append("          </xs:annotation>\r\n");
239                 sb.append("        </xs:element>\n");
240                 sb.append("        <xs:element ref=\"tns:service-subscriptions\" minOccurs=\"0\"/>\n");
241                 sb.append("      </xs:sequence>\n");
242                 sb.append("    </xs:complexType>\n");
243                 sb.append("  </xs:element>\n");
244                 sb.append("  <xs:element name=\"customers\">\n");
245                 sb.append("    <xs:complexType>\n");
246                 sb.append("      <xs:annotation>\r\n");
247                 sb.append("        <xs:appinfo>\r\n");
248                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Collection of customer identifiers to provide linkage back to BSS information.\")</annox:annotate>\r\n");
249                 sb.append("        </xs:appinfo>\r\n");
250                 sb.append("      </xs:annotation>\r\n");
251                 sb.append("      <xs:sequence>\n");
252                 sb.append("        <xs:element ref=\"tns:customer\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n");
253                 sb.append("      </xs:sequence>\n");
254                 sb.append("    </xs:complexType>\n");
255                 sb.append("  </xs:element>\n");
256                 sb.append("  <xs:element name=\"business\">\n");
257                 sb.append("    <xs:complexType>\n");
258                 sb.append("      <xs:annotation>\r\n");
259                 sb.append("        <xs:appinfo>\r\n");
260                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Namespace for business related constructs\")</annox:annotate>\r\n");
261                 sb.append("        </xs:appinfo>\r\n");
262                 sb.append("      </xs:annotation>\r\n");
263                 sb.append("      <xs:sequence>\n");
264                 sb.append("        <xs:element ref=\"tns:customers\" minOccurs=\"0\"/>\n");
265                 sb.append("      </xs:sequence>\n");
266                 sb.append("    </xs:complexType>\n");
267                 sb.append("  </xs:element>\n");
268                 sb.append("  <xs:element name=\"inventory\">\n");
269                 sb.append("    <xs:complexType>\n");
270                 sb.append("      <xs:sequence>\n");
271                 sb.append("        <xs:element ref=\"tns:business\" minOccurs=\"0\"/>\n");
272                 sb.append("      </xs:sequence>\n");
273                 sb.append("    </xs:complexType>\n");
274                 sb.append("  </xs:element>\n");
275                 sb.append("</xs:schema>\n");
276                 return sb.toString();
277         }
278 }