summaryrefslogtreecommitdiffstats
path: root/aai-schema-gen/src/test
diff options
context:
space:
mode:
authorLaMont, William (wl2432) <wl2432@att.com>2019-08-01 14:10:24 -0400
committerLaMont, William (wl2432) <wl2432@att.com>2019-08-01 14:20:17 -0400
commit21b104df3c85d99917719768323c1745e2607f49 (patch)
tree913fd4101ac9d50c3231f73ca6d43818876165e1 /aai-schema-gen/src/test
parentcae9c8df0bfdbc22cdbca4624a0bc4f9555ad5f2 (diff)
Replace relationship array with object in generated swagger
Issue-ID: AAI-2001 Change-Id: I1c3e5cbc0fe696a486238f795b932fd825572fcf Signed-off-by: LaMont, William (wl2432) <wl2432@att.com>
Diffstat (limited to 'aai-schema-gen/src/test')
-rw-r--r--aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/NodesYAMLfromOXMTest.java93
-rw-r--r--aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/XSDElementTest.java22
-rw-r--r--aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/YAMLfromOXMTest.java154
3 files changed, 162 insertions, 107 deletions
diff --git a/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/NodesYAMLfromOXMTest.java b/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/NodesYAMLfromOXMTest.java
index f926b40..eb2ce81 100644
--- a/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/NodesYAMLfromOXMTest.java
+++ b/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/NodesYAMLfromOXMTest.java
@@ -250,37 +250,32 @@ public class NodesYAMLfromOXMTest {
}
public String YAMLheader() {
StringBuilder sb = new StringBuilder(1500);
- sb.append("swagger: \"2.0\"\n");
- sb.append("info:\n");
- sb.append(" description: |\n");
- sb.append("\n");
- sb.append(" [Differences versus the previous schema version](apidocs/aai_swagger_v11.diff)\n");
- sb.append("\n");
- sb.append(" Copyright &copy; 2017-18 AT&amp;T Intellectual Property. All rights reserved.\n");
- sb.append("\n");
- sb.append(" Licensed under the Creative Commons License, Attribution 4.0 Intl. (the &quot;License&quot;); you may not use this documentation except in compliance with the License.\n");
- sb.append("\n");
- sb.append(" You may obtain a copy of the License at\n");
- sb.append("\n");
- sb.append(" (https://creativecommons.org/licenses/by/4.0/)\n");
- sb.append("\n");
- sb.append(" Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; 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.\n");
- sb.append("\n");
- sb.append(" This document is best viewed with Firefox or Chrome. Nodes can be found by appending /#/definitions/node-type-to-find to the path to this document. Edge definitions can be found with the node definitions.\n");
- sb.append(" version: \"v11\"\n");
- sb.append(" title: Active and Available Inventory REST API\n");
- sb.append(" license:\n");
- sb.append(" name: Apache 2.0\n");
- sb.append(" url: http://www.apache.org/licenses/LICENSE-2.0.html\n");
- sb.append(" contact:\n");
- sb.append(" name:\n");
- sb.append(" url:\n");
- sb.append(" email:\n");
- sb.append("host:\n");
- sb.append("basePath: /aai/v11\n");
- sb.append("schemes:\n");
- sb.append(" - https\n");
- sb.append("paths:\n");
+ sb.append("swagger: \"2.0\"\n");
+ sb.append("info:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" description: |\n");
+ sb.append("\n");
+ sb.append(" [Differences versus the previous schema version](apidocs/aai_swagger_v11.diff)" + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
+ sb.append(" Copyright &copy; 2017-18 AT&amp;T Intellectual Property. All rights reserved.\n\n");
+ sb.append(" Licensed under the Creative Commons License, Attribution 4.0 Intl. (the &quot;License&quot;); you may not use this documentation except in compliance with the License." + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
+ sb.append(" You may obtain a copy of the License at\n");
+ sb.append("\n");
+ sb.append(" (https://creativecommons.org/licenses/by/4.0/)" + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
+ sb.append(" Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; 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.\n\n");
+ sb.append(" This document is best viewed with Firefox or Chrome. Nodes can be found by appending /#/definitions/node-type-to-find to the path to this document. Edge definitions can be found with the node definitions." + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" version: \"v11\"" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" title: Active and Available Inventory REST API" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" license:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" name: Apache 2.0" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" url: http://www.apache.org/licenses/LICENSE-2.0.html" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" contact:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" name:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" url:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" email:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append("host:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append("basePath: /aai/v11" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append("schemes:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" - https\n");
+ sb.append("paths:" + OxmFileProcessor.LINE_SEPARATOR);
return sb.toString();
}
@@ -440,12 +435,12 @@ public class NodesYAMLfromOXMTest {
sb.append(" business:\n");
sb.append(" type: object\n");
sb.append(" $ref: \"#/definitions/business\"\n");
- sb.append(" nodes:\n");
- sb.append(" properties:\n");
- sb.append(" inventory-item-data:\n");
- sb.append(" type: array\n");
- sb.append(" items:\n");
- sb.append(" $ref: \"#/definitions/inventory-item-data\"\n");
+ sb.append(" nodes:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" properties:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" inventory-item-data:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" type: array" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" items:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" $ref: \"#/definitions/inventory-item-data\"" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" service-subscription:\n");
sb.append(" description: |\n");
sb.append(" Object that group service instances.\n");
@@ -523,12 +518,12 @@ public class NodesYAMLfromOXMTest {
sb.append(" business:\n");
sb.append(" type: object\n");
sb.append(" $ref: \"#/patchDefinitions/business\"\n");
- sb.append(" nodes:\n");
- sb.append(" properties:\n");
- sb.append(" inventory-item-data:\n");
- sb.append(" type: array\n");
- sb.append(" items:\n");
- sb.append(" $ref: \"#/patchDefinitions/inventory-item-data\"\n");
+ sb.append(" nodes:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" properties:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" inventory-item-data:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" type: array" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" items:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" $ref: \"#/patchDefinitions/inventory-item-data\"" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" service-subscription:\n");
sb.append(" description: |\n");
sb.append(" Object that group service instances.\n");
@@ -610,12 +605,12 @@ public class NodesYAMLfromOXMTest {
sb.append(" business:\n");
sb.append(" type: object\n");
sb.append(" $ref: \"#/definitions/business\"\n");
- sb.append(" nodes:\n");
- sb.append(" properties:\n");
- sb.append(" inventory-item-data:\n");
- sb.append(" type: array\n");
- sb.append(" items:\n");
- sb.append(" $ref: \"#/definitions/inventory-item-data\"\n");
+ sb.append(" nodes:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" properties:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" inventory-item-data:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" type: array" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" items:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" $ref: \"#/definitions/inventory-item-data\"" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" service-subscription:\n");
sb.append(" description: |\n");
sb.append(" Object that group service instances.\n");
diff --git a/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/XSDElementTest.java b/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/XSDElementTest.java
index a9c7880..6b21dfd 100644
--- a/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/XSDElementTest.java
+++ b/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/XSDElementTest.java
@@ -81,7 +81,19 @@ public class XSDElementTest {
addEndOfXML(sb);
testXML = sb.toString();
init();
-}
+ }
+
+ public void setUpRelationship( ) throws Exception {
+ StringBuilder sb = new StringBuilder(maxSizeForXml);
+ addNamespaceNoInventory(sb);
+ addRelationship(sb);
+ addRelationshipList(sb);
+ addRelatedToProperty(sb);
+ addRelationshipData(sb);
+ addEndOfXML(sb);
+ testXML = sb.toString();
+ init();
+ }
private void addNamespace(StringBuilder sb){
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");
@@ -96,6 +108,14 @@ public class XSDElementTest {
sb.append("</java-attributes>\n");
sb.append("</java-type>\n");
}
+
+ private void addNamespaceNoInventory(StringBuilder sb){
+ 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");
+ sb.append("<xml-schema element-form-default=\"QUALIFIED\">\n");
+ sb.append("<xml-ns namespace-uri=\"http://org.onap.aai.inventory/v11\" />\n");
+ sb.append("</xml-schema>\n");
+ sb.append("<java-types>\n");
+ }
private void addBusiness(StringBuilder sb){
sb.append("<java-type name=\"Business\">\n");
diff --git a/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/YAMLfromOXMTest.java b/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/YAMLfromOXMTest.java
index 7246870..7f746ec 100644
--- a/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/YAMLfromOXMTest.java
+++ b/aai-schema-gen/src/test/java/org/onap/aai/schemagen/genxsd/YAMLfromOXMTest.java
@@ -57,6 +57,7 @@ import java.util.TreeSet;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@@ -99,29 +100,41 @@ public class YAMLfromOXMTest {
System.setProperty("AJSC_HOME", ".");
System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
System.setProperty("aai.service.name", SERVICE_NAME);
+ }
+
+
- XSDElementTest x = new XSDElementTest();
- x.setUp();
- testXML = x.testXML;
- logger.debug(testXML);
- BufferedWriter bw = new BufferedWriter(new FileWriter(OXMFILENAME));
- bw.write(testXML);
- bw.close();
- BufferedWriter bw1 = new BufferedWriter(new FileWriter(EDGEFILENAME));
- bw1.write(EdgeDefs());
- bw1.close();
-
+ @Before
+ public void setUp() throws Exception {
+ XSDElementTest x = new XSDElementTest();
+ x.setUp();
+ testXML = x.testXML;
+ logger.debug(testXML);
+ BufferedWriter bw = new BufferedWriter(new FileWriter(OXMFILENAME));
+ bw.write(testXML);
+ bw.close();
+ BufferedWriter bw1 = new BufferedWriter(new FileWriter(EDGEFILENAME));
+ bw1.write(EdgeDefs());
+ bw1.close();
+ }
+
+ public void setupRelationship() throws Exception{
+ XSDElementTest x = new XSDElementTest();
+ x.setUpRelationship();
+ testXML = x.testXML;
+ logger.debug(testXML);
+ BufferedWriter bw = new BufferedWriter(new FileWriter(OXMFILENAME));
+ bw.write(testXML);
+ bw.close();
+ BufferedWriter bw1 = new BufferedWriter(new FileWriter(EDGEFILENAME));
+ bw1.write(EdgeDefs());
+ bw1.close();
}
- @Before
- public void setUp() throws Exception {
-
- }
-
@Test
public void AtestIngestors() throws EdgeRuleNotFoundException {
Multimap<String, EdgeRule> results = edgeIngestor.getAllRules(schemaVersions.getDefaultVersion());
@@ -162,7 +175,6 @@ public class YAMLfromOXMTest {
assertThat("FileContent-TestProcess:\n"+fileContent,fileContent, is(YAMLresult()));
}
-
@Test
public void testYAMLfromOXMFileVersionFile() throws IOException {
String outfileName = "testXML.xml";
@@ -200,6 +212,27 @@ public class YAMLfromOXMTest {
}
assertThat("FileContent-OXMStringVersionFile:\n"+fileContent,fileContent, is(YAMLresult()));
}
+
+ @Test
+ public void testRelationshipListYAMLfromOXMStringVersionFile() {
+ try {
+ setupRelationship();
+ } catch (Exception e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ SchemaVersion v = schemaVersions.getAppRootVersion();
+ String apiVersion = v.toString();
+ String fileContent = null;
+ try {
+ yamlFromOxm.setXmlVersion(testXML, v);
+ fileContent = yamlFromOxm.process();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ boolean matchFound = fileContent.contains(( YAMLRelationshipList()));
+ assertTrue("RelationshipListFormat:\n", matchFound);
+ }
@Test
public void testAppendDefinitions() {
@@ -278,36 +311,33 @@ public class YAMLfromOXMTest {
public String YAMLheader() {
StringBuilder sb = new StringBuilder(1500);
sb.append("swagger: \"2.0\"\n");
- sb.append("info:\n");
+ sb.append("info:" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" description: |\n");
sb.append("\n");
- sb.append(" [Differences versus the previous schema version](apidocs/aai_swagger_v11.diff)\n");
- sb.append("\n");
- sb.append(" Copyright &copy; 2017-18 AT&amp;T Intellectual Property. All rights reserved.\n");
- sb.append("\n");
+ sb.append(" [Differences versus the previous schema version](apidocs/aai_swagger_v11.diff)" + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
+ sb.append(" Copyright &copy; 2017-18 AT&amp;T Intellectual Property. All rights reserved." + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
sb.append(" Licensed under the Creative Commons License, Attribution 4.0 Intl. (the &quot;License&quot;); you may not use this documentation except in compliance with the License.\n");
sb.append("\n");
sb.append(" You may obtain a copy of the License at\n");
sb.append("\n");
sb.append(" (https://creativecommons.org/licenses/by/4.0/)\n");
sb.append("\n");
- sb.append(" Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; 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.\n");
- sb.append("\n");
- sb.append(" This document is best viewed with Firefox or Chrome. Nodes can be found by appending /#/definitions/node-type-to-find to the path to this document. Edge definitions can be found with the node definitions.\n");
- sb.append(" version: \"v11\"\n");
- sb.append(" title: Active and Available Inventory REST API\n");
- sb.append(" license:\n");
+ sb.append(" Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; 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." + OxmFileProcessor.DOUBLE_LINE_SEPARATOR);
+ sb.append(" This document is best viewed with Firefox or Chrome. Nodes can be found by appending /#/definitions/node-type-to-find to the path to this document. Edge definitions can be found with the node definitions." + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" version: \"v11\"" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" title: Active and Available Inventory REST API" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" license:" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" name: Apache 2.0\n");
- sb.append(" url: http://www.apache.org/licenses/LICENSE-2.0.html\n");
- sb.append(" contact:\n");
- sb.append(" name:\n");
- sb.append(" url:\n");
- sb.append(" email:\n");
- sb.append("host:\n");
- sb.append("basePath: /aai/v11\n");
- sb.append("schemes:\n");
+ sb.append(" url: http://www.apache.org/licenses/LICENSE-2.0.html" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" contact:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" name:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" url:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" email:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append("host:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append("basePath: /aai/v11" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append("schemes:" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" - https\n");
- sb.append("paths:\n");
+ sb.append("paths:" + OxmFileProcessor.LINE_SEPARATOR);
return sb.toString();
}
@@ -681,12 +711,12 @@ public class YAMLfromOXMTest {
sb.append(" business:\n");
sb.append(" type: object\n");
sb.append(" $ref: \"#/definitions/business\"\n");
- sb.append(" nodes:\n");
- sb.append(" properties:\n");
- sb.append(" inventory-item-data:\n");
- sb.append(" type: array\n");
- sb.append(" items:\n");
- sb.append(" $ref: \"#/definitions/inventory-item-data\"\n");
+ sb.append(" nodes:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" properties:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" inventory-item-data:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" type: array" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" items:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" $ref: \"#/definitions/inventory-item-data\"" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" service-subscription:\n");
sb.append(" description: |\n");
sb.append(" Object that group service instances.\n");
@@ -764,12 +794,12 @@ public class YAMLfromOXMTest {
sb.append(" business:\n");
sb.append(" type: object\n");
sb.append(" $ref: \"#/patchDefinitions/business\"\n");
- sb.append(" nodes:\n");
- sb.append(" properties:\n");
- sb.append(" inventory-item-data:\n");
- sb.append(" type: array\n");
- sb.append(" items:\n");
- sb.append(" $ref: \"#/patchDefinitions/inventory-item-data\"\n");
+ sb.append(" nodes:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" properties:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" inventory-item-data:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" type: array" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" items:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" $ref: \"#/patchDefinitions/inventory-item-data\"" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" service-subscription:\n");
sb.append(" description: |\n");
sb.append(" Object that group service instances.\n");
@@ -851,12 +881,12 @@ public class YAMLfromOXMTest {
sb.append(" business:\n");
sb.append(" type: object\n");
sb.append(" $ref: \"#/getDefinitions/business\"\n");
- sb.append(" nodes:\n");
- sb.append(" properties:\n");
- sb.append(" inventory-item-data:\n");
- sb.append(" type: array\n");
- sb.append(" items:\n");
- sb.append(" $ref: \"#/getDefinitions/inventory-item-data\"\n");
+ sb.append(" nodes:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" properties:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" inventory-item-data:" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" type: array" + OxmFileProcessor.LINE_SEPARATOR);
+ sb.append(" items:" + OxmFileProcessor.LINE_SEPARATOR );
+ sb.append(" $ref: \"#/getDefinitions/inventory-item-data\"" + OxmFileProcessor.LINE_SEPARATOR);
sb.append(" service-subscription:\n");
sb.append(" description: |\n");
sb.append(" Object that group service instances.\n");
@@ -889,6 +919,17 @@ public class YAMLfromOXMTest {
sb.append(" $ref: \"#/getDefinitions/service-subscription\"\n");
return sb.toString();
}
+
+ public String YAMLRelationshipList() {
+ StringBuilder sb = new StringBuilder(8092);
+ sb.append(" relationship-list:\n");
+ sb.append(" properties:\n");
+ sb.append(" relationship:\n");
+ sb.append(" type: object\n");
+ sb.append(" $ref: \"#/getDefinitions/relationship\"\n");
+ return sb.toString();
+ }
+
public static String EdgeDefs() {
StringBuilder sb = new StringBuilder(8092);
sb.append("{\n" +
@@ -933,5 +974,4 @@ public class YAMLfromOXMTest {
"}\n");
return sb.toString();
}
-}
-
+} \ No newline at end of file