57835b506ecbdc889715f28da466f27e95d449ef
[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 static org.hamcrest.CoreMatchers.is;
23 import static org.junit.Assert.*;
24
25 import java.io.BufferedWriter;
26 import java.io.File;
27 import java.io.FileWriter;
28 import java.io.IOException;
29 import java.nio.charset.Charset;
30 import java.nio.file.Files;
31 import java.nio.file.Path;
32 import java.nio.file.Paths;
33
34 import org.junit.Before;
35 import org.junit.BeforeClass;
36 import org.junit.Ignore;
37 import org.junit.Test;
38 import org.onap.aai.config.SwaggerGenerationConfiguration;
39 import org.onap.aai.setup.SchemaVersion;
40 import org.onap.aai.setup.SchemaVersions;
41 import org.junit.runner.RunWith;
42 import org.onap.aai.edges.EdgeIngestor;
43 import org.onap.aai.nodes.NodeIngestor;
44 import org.onap.aai.serialization.queryformats.QueryFormatTestHelper;
45 import org.onap.aai.setup.SchemaLocationsBean;
46 import org.onap.aai.testutils.TestUtilConfigTranslatorforBusiness;
47 import org.onap.aai.util.AAIConstants;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50 import org.springframework.beans.factory.annotation.Autowired;
51 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
52 import org.springframework.test.context.ContextConfiguration;
53 import org.springframework.test.context.TestPropertySource;
54 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
55 import org.w3c.dom.Element;
56
57
58 @RunWith(SpringJUnit4ClassRunner.class)
59 @ContextConfiguration(classes = {
60                  SchemaVersions.class,
61         SchemaLocationsBean.class,
62         TestUtilConfigTranslatorforBusiness.class,
63         EdgeIngestor.class,
64         NodeIngestor.class,
65                 SwaggerGenerationConfiguration.class
66
67 })
68 @TestPropertySource(properties = {
69                 "schema.uri.base.path = /aai",
70                 "schema.xsd.maxoccurs = 5000"
71 })
72 public class HTMLfromOXMTest {
73         private static final Logger logger = LoggerFactory.getLogger("HTMLfromOXMTest.class");
74         private static final String OXMFILENAME = "src/test/resources/oxm/business_oxm_v11.xml";
75         public static AnnotationConfigApplicationContext ctx = null;
76         private static String testXML;
77         protected static final String SERVICE_NAME = "JUNIT";
78         
79         
80         @Autowired
81         HTMLfromOXM htmlFromOxm;
82         
83         @Autowired
84         SchemaVersions schemaVersions;
85         
86         @BeforeClass
87         public static void setUpContext() throws Exception {
88                 
89         }
90         @BeforeClass
91     public static void setupBundleconfig() throws Exception {
92         System.setProperty("AJSC_HOME", ".");
93         System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
94         System.setProperty("aai.service.name", SERVICE_NAME);
95         QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/");
96     }
97         
98         @Before
99         public void setUp() throws Exception {
100                 setUp(0);    
101         }
102         
103         public void setUp(int sbopt) throws Exception
104         {
105                 XSDElementTest x = new XSDElementTest();
106                 x.setUp(sbopt);
107                 testXML = x.testXML;
108                 logger.debug(testXML);
109                 BufferedWriter bw = new BufferedWriter(new FileWriter(OXMFILENAME));
110                 bw.write(testXML);
111                 bw.close();
112         }
113
114         @Test
115         public void testGetDocumentHeader() {
116                 SchemaVersion v = schemaVersions.getAppRootVersion();
117                 String header = null;
118                 try {
119                         htmlFromOxm.setXmlVersion(testXML, v);
120                         htmlFromOxm.setSchemaVersions(schemaVersions);
121                         header = htmlFromOxm.getDocumentHeader();
122                 } catch(Exception e) {
123                         e.printStackTrace();
124                 }
125                 logger.debug("Header:");
126                 logger.debug(header);
127                 assertThat(header, is(HTMLheader()));
128         }
129
130         @Test
131         public void testProcess() {
132                 SchemaVersion v = schemaVersions.getAppRootVersion();
133                 String fileContent = null;
134                 try {
135                         htmlFromOxm.setXmlVersion(testXML, v);
136                         fileContent = htmlFromOxm.process();
137                 } catch(Exception e) {
138                         e.printStackTrace();
139                 }
140                 logger.debug("FileContent-I:");
141                 logger.debug(fileContent);
142                 assertThat(fileContent, is(HTMLresult(0)));
143         }
144
145         @Test
146         public void testProcessWithCombiningJavaTypes() {
147                 SchemaVersion v = schemaVersions.getAppRootVersion();
148                 String fileContent = null;
149                 try {
150                         setUp(1);
151                         htmlFromOxm.setXmlVersion(testXML, v);
152                         fileContent = htmlFromOxm.process();
153                 } catch(Exception e) {
154                         e.printStackTrace();
155                 }
156                 logger.debug("FileContent-I:");
157                 logger.debug(fileContent);
158                 assertThat(fileContent, is(HTMLresult(1)));
159         }
160
161         @Test
162         public void testHTMLfromOXMFileVersion() throws IOException {
163                 String outfileName = "testXML.xml";
164                 File XMLfile = new File(outfileName);
165                 XMLfile.createNewFile();
166                 BufferedWriter bw = null;
167                 Charset charset = Charset.forName("UTF-8");
168                 Path path = Paths.get(outfileName);
169                 bw = Files.newBufferedWriter(path, charset);
170                 bw.write(testXML);
171                 bw.close();
172                 SchemaVersion v = schemaVersions.getAppRootVersion();
173                 String fileContent = null;
174                 try {
175                         htmlFromOxm.setXmlVersion(testXML, v);
176                         fileContent = htmlFromOxm.process();
177                 } catch(Exception e) {
178                         e.printStackTrace();
179                 }
180                 XMLfile.delete();
181                 logger.debug("FileContent-I:");
182                 logger.debug(fileContent);
183                 assertThat(fileContent, is(HTMLresult(0)));
184         }
185
186         @Test
187         public void testHTMLfromOXMStringVersion() {
188                 SchemaVersion v = schemaVersions.getAppRootVersion();
189                 String fileContent = null;
190                 try {
191                         htmlFromOxm.setXmlVersion(testXML, v);
192                         fileContent = htmlFromOxm.process();
193                 } catch(Exception e) {
194                         e.printStackTrace();
195                 }
196                 logger.debug("FileContent-II:");
197                 logger.debug(fileContent);
198                 assertThat(fileContent, is(HTMLresult(0)));
199         }
200
201         @Test
202         public void testProcessJavaTypeElement() {
203                 String target = "Element=java-type/Customer";
204                 SchemaVersion v = schemaVersions.getAppRootVersion();
205                 Element customer = null;
206                 try {
207                         htmlFromOxm.setXmlVersion(testXML, v);
208                         htmlFromOxm.process();
209                         customer = htmlFromOxm.getJavaTypeElementSwagger("Customer");
210                 } catch(Exception e) {
211                         e.printStackTrace();
212                 }
213                 logger.debug("Element:");
214                 logger.debug("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"));
215                 assertThat("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"), is(target));    }
216         
217         public String HTMLresult() {
218                 return HTMLresult(0);
219         }
220         
221         public String HTMLresult(int sbopt) {
222                 StringBuilder sb = new StringBuilder(32368);
223                 sb.append(HTMLheader());
224                 sb.append(HTMLdefs(sbopt));
225                 return sb.toString();
226         }
227         
228         public String HTMLheader() {
229                 StringBuilder sb = new StringBuilder(1500);
230                  sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + OxmFileProcessor.LINE_SEPARATOR);
231                  sb.append("<xs:schema elementFormDefault=\"qualified\" version=\"1.0\" targetNamespace=\"http://org.onap.aai.inventory/v11\" xmlns:tns=\"http://org.onap.aai.inventory/v11\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\""  + OxmFileProcessor.LINE_SEPARATOR + "xmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\"" + OxmFileProcessor.LINE_SEPARATOR);
232                  sb.append("    jaxb:version=\"2.1\"" + OxmFileProcessor.LINE_SEPARATOR);
233                  sb.append("    xmlns:annox=\"http://annox.dev.java.net\"" + OxmFileProcessor.LINE_SEPARATOR);
234                  sb.append("    jaxb:extensionBindingPrefixes=\"annox\">" + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
235                 return sb.toString();
236         }
237         
238         public String HTMLdefs() {
239                 return HTMLdefs(0);
240         }
241         public String HTMLdefs(int sbopt) {
242                 StringBuilder sb = new StringBuilder(1500);
243                 sb.append("  <xs:element name=\"service-subscription\">" + OxmFileProcessor.LINE_SEPARATOR);
244                 sb.append("    <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
245                 sb.append("      <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
246                 sb.append("        <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
247                 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>" + OxmFileProcessor.LINE_SEPARATOR);
248                 sb.append("        </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
249                 sb.append("      </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
250                 sb.append("      <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
251                 sb.append("        <xs:element name=\"service-type\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
252                 sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
253                 sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
254                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Value defined by orchestration to identify this service.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
255                 sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
256                 sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
257                 sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
258                 sb.append("        <xs:element name=\"temp-ub-sub-account-id\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
259                 sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
260                 sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
261                 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>" + OxmFileProcessor.LINE_SEPARATOR);
262                 sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
263                 sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
264                 sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
265                 sb.append("        <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
266                 sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
267                 sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
268                 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>" + OxmFileProcessor.LINE_SEPARATOR);
269                 sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
270                 sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
271                 sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
272                 sb.append("      </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
273                 sb.append("    </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
274                 sb.append("  </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
275                 sb.append("  <xs:element name=\"service-subscriptions\">" + OxmFileProcessor.LINE_SEPARATOR);
276                 sb.append("    <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
277                 sb.append("      <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
278                 sb.append("        <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
279                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Collection of objects that group service instances.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
280                 sb.append("        </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
281                 sb.append("      </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
282                 sb.append("      <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
283                 sb.append("        <xs:element ref=\"tns:service-subscription\" minOccurs=\"0\" maxOccurs=\"5000\"/>" + OxmFileProcessor.LINE_SEPARATOR);
284                 sb.append("      </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
285                 sb.append("    </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
286                 sb.append("  </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
287                 sb.append("  <xs:element name=\"customer\">" + OxmFileProcessor.LINE_SEPARATOR);
288                 sb.append("    <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
289                 sb.append("      <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
290                 sb.append("        <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
291                 if ( sbopt == 0 ) {
292                         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>" + OxmFileProcessor.LINE_SEPARATOR);
293                 } else {
294                         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-type,subscriber-name,global-customer-id\",searchable=\"global-customer-id,subscriber-name\",uniqueProps=\"global-customer-id\",container=\"customers\",namespace=\"business\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
295                 }
296                 sb.append("        </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
297                 sb.append("      </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
298                 sb.append("      <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
299                 sb.append("        <xs:element name=\"global-customer-id\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
300                 sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
301                 sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
302                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Global customer id used across to uniquely identify customer.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
303                 sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
304                 sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
305                 sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
306                 sb.append("        <xs:element name=\"subscriber-name\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
307                 sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
308                 sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
309                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber name, an alternate way to retrieve a customer.\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
310                 sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
311                 sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
312                 sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
313                 if ( sbopt == 0 ) {
314                         sb.append("        <xs:element name=\"subscriber-type\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
315                         sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
316                         sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
317                         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>" + OxmFileProcessor.LINE_SEPARATOR);
318                         sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
319                         sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
320                         sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
321                         sb.append("        <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
322                         sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
323                         sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
324                         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>" + OxmFileProcessor.LINE_SEPARATOR);
325                         sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
326                         sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
327                         sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
328                 } else {
329                         sb.append("        <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
330                         sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
331                         sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
332                         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>" + OxmFileProcessor.LINE_SEPARATOR);
333                         sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
334                         sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
335                         sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
336                         sb.append("        <xs:element name=\"subscriber-type\" type=\"xs:string\" minOccurs=\"0\">" + OxmFileProcessor.LINE_SEPARATOR);
337                         sb.append("          <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
338                         sb.append("            <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
339                         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>" + OxmFileProcessor.LINE_SEPARATOR);
340                         sb.append("            </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
341                         sb.append("          </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
342                         sb.append("        </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);                   
343                         
344                 }
345                 sb.append("        <xs:element ref=\"tns:service-subscriptions\" minOccurs=\"0\"/>" + OxmFileProcessor.LINE_SEPARATOR);
346                 sb.append("      </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
347                 sb.append("    </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
348                 sb.append("  </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
349                 sb.append("  <xs:element name=\"customers\">" + OxmFileProcessor.LINE_SEPARATOR);
350                 sb.append("    <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
351                 sb.append("      <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
352                 sb.append("        <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
353                 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>" + OxmFileProcessor.LINE_SEPARATOR);
354                 sb.append("        </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
355                 sb.append("      </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
356                 sb.append("      <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
357                 sb.append("        <xs:element ref=\"tns:customer\" minOccurs=\"0\" maxOccurs=\"5000\"/>" + OxmFileProcessor.LINE_SEPARATOR);
358                 sb.append("      </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
359                 sb.append("    </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
360                 sb.append("  </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
361                 sb.append("  <xs:element name=\"business\">" + OxmFileProcessor.LINE_SEPARATOR);
362                 sb.append("    <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
363                 sb.append("      <xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
364                 sb.append("        <xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
365                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Namespace for business related constructs\")</annox:annotate>" + OxmFileProcessor.LINE_SEPARATOR);
366                 sb.append("        </xs:appinfo>" + OxmFileProcessor.LINE_SEPARATOR);
367                 sb.append("      </xs:annotation>" + OxmFileProcessor.LINE_SEPARATOR);
368                 sb.append("      <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
369                 sb.append("        <xs:element ref=\"tns:customers\" minOccurs=\"0\"/>" + OxmFileProcessor.LINE_SEPARATOR);
370                 sb.append("      </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
371                 sb.append("    </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
372                 sb.append("  </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
373                 sb.append("  <xs:element name=\"inventory\">" + OxmFileProcessor.LINE_SEPARATOR);
374                 sb.append("    <xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
375                 sb.append("      <xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
376                 sb.append("        <xs:element ref=\"tns:business\" minOccurs=\"0\"/>" + OxmFileProcessor.LINE_SEPARATOR);
377                 sb.append("      </xs:sequence>" + OxmFileProcessor.LINE_SEPARATOR);
378                 sb.append("    </xs:complexType>" + OxmFileProcessor.LINE_SEPARATOR);
379                 sb.append("  </xs:element>" + OxmFileProcessor.LINE_SEPARATOR);
380                 sb.append("</xs:schema>" + OxmFileProcessor.LINE_SEPARATOR);
381                 return sb.toString();
382         }
383 }
384