diff options
author | Threefoot, Jane (jt6620) <jt6620@att.com> | 2018-03-14 14:48:10 -0400 |
---|---|---|
committer | Threefoot, Jane (jt6620) <jt6620@att.com> | 2018-03-15 09:52:04 -0400 |
commit | 1fc5ce5b48f8c270d5d044356843b8a8566bdccc (patch) | |
tree | 310d28a4f36b1824a0397b492485e01137277b9f /aai-schema-ingest/src/test/resources | |
parent | 9bfec028ce6f4b0e7e7d59f29bf970d9d8a8024b (diff) |
added new aai-schema-ingest library
New, lightweight, configurable library for
OXM and edge rules json ingest.
Allows for broken-up OXM and json
for increased model-driven capabilities.
Issue-ID: AAI-875
Change-Id: I987c7dc2ad9a68ef3ccaac8da8d3b5b0205dc264
Signed-off-by: Threefoot, Jane (jt6620) <jt6620@att.com>
Diffstat (limited to 'aai-schema-ingest/src/test/resources')
15 files changed, 594 insertions, 0 deletions
diff --git a/aai-schema-ingest/src/test/resources/edgeRules/defaultEdgesTest.json b/aai-schema-ingest/src/test/resources/edgeRules/defaultEdgesTest.json new file mode 100644 index 00000000..2f4baed6 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/edgeRules/defaultEdgesTest.json @@ -0,0 +1,52 @@ +{ + "rules": [ + { + "from": "apple", + "to": "orange", + "label": "sitsBy", + "direction": "OUT", + "multiplicity": "MANY2MANY", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "default": "false", + "description":"for testing pairs with no default" + }, + { + "from": "apple", + "to": "orange", + "label": "makesSaladWith", + "direction": "OUT", + "multiplicity": "MANY2MANY", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "default": "false", + "description":"for testing pairs with no default" + }, + { + "from": "seed", + "to": "plant", + "label": "grows", + "direction": "OUT", + "multiplicity": "MANY2MANY", + "contains-other-v": "NONE", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "default": "true", + "description":"" + }, + { + "from": "seed", + "to": "plant", + "label": "becomes", + "direction": "OUT", + "multiplicity": "MANY2MANY", + "contains-other-v": "OUT", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "default": "true", + "description":"" + } + ] +}
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/edgeRules/otherTestRules.json b/aai-schema-ingest/src/test/resources/edgeRules/otherTestRules.json new file mode 100644 index 00000000..881239f6 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/edgeRules/otherTestRules.json @@ -0,0 +1,136 @@ +{ + "rules": [ + { + "from": "parent", + "to": "notation", + "label": "has", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "${direction}", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contains notation" + }, + { + "from": "not-notation", + "to": "parent", + "label": "contains", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "!${direction}", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contains not-notation" + }, + { + "from": "parent", + "to": "out-out", + "label": "eats", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "OUT", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contains out-out" + }, + { + "from": "parent", + "to": "in-in", + "label": "verbs", + "direction": "IN", + "multiplicity": "Many2Many", + "contains-other-v": "IN", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contains in-in" + }, + { + "from": "out-in", + "to": "parent", + "label": "alarms", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "IN", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contains out-in" + }, + { + "from": "in-out", + "to": "parent", + "label": "befriends", + "direction": "IN", + "multiplicity": "Many2Many", + "contains-other-v": "OUT", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contains in-out" + }, + { + "from": "parent", + "to": "grandparent1", + "label": "has", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "!${direction}", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contained by grandparent1" + }, + { + "from": "grandparent2", + "to": "parent", + "label": "contains", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "${direction}", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contained by grandparent2" + }, + { + "from": "parent", + "to": "grandparent3", + "label": "eats", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "IN", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contained by grandparent3" + }, + { + "from": "parent", + "to": "grandparent4", + "label": "verbs", + "direction": "IN", + "multiplicity": "Many2Many", + "contains-other-v": "OUT", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contained by grandparent4" + }, + { + "from": "grandparent5", + "to": "parent", + "label": "alarms", + "direction": "OUT", + "multiplicity": "Many2Many", + "contains-other-v": "OUT", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contained by grandparent5" + }, + { + "from": "grandparent6", + "to": "parent", + "label": "befriends", + "direction": "IN", + "multiplicity": "Many2Many", + "contains-other-v": "IN", + "delete-other-v": "NONE", + "prevent-delete": "NONE", + "description": "parent contained by grandparent6" + } + ] +}
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/edgeRules/test.json b/aai-schema-ingest/src/test/resources/edgeRules/test.json new file mode 100644 index 00000000..66691ebf --- /dev/null +++ b/aai-schema-ingest/src/test/resources/edgeRules/test.json @@ -0,0 +1,48 @@ +{ + "rules": [ + { + "from": "foo", + "to": "bar", + "label": "eats", + "direction": "OUT", + "multiplicity": "One2Many", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "description": "Hard to describe" + }, + { + "from": "foo", + "to": "bar", + "label": "eatz", + "direction": "IN", + "multiplicity": "One2Many", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "description": "Hard to describe" + }, + { + "from": "foo", + "to": "baz", + "label": "isVeryHappyAbout", + "direction": "OUT", + "multiplicity": "One2Many", + "contains-other-v": "${direction}", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "description": "Hard to describe" + }, + { + "from": "quux", + "to": "foo", + "label": "dancesWith", + "direction": "IN", + "multiplicity": "One2Many", + "contains-other-v": "!${direction}", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "description": "Hard to describe" + } + ] +}
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/edgeRules/test2.json b/aai-schema-ingest/src/test/resources/edgeRules/test2.json new file mode 100644 index 00000000..7d94e41c --- /dev/null +++ b/aai-schema-ingest/src/test/resources/edgeRules/test2.json @@ -0,0 +1,27 @@ +{ + "rules": [ + { + "from": "foo", + "to": "dog", + "label": "pets", + "direction": "OUT", + "multiplicity": "One2Many", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "description": "Hard to describe" + }, + { + "from": "dog", + "to": "puppy", + "label": "caresFor", + "direction": "OUT", + "multiplicity": "One2Many", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "description": "Hard to describe", + "default": "true" + } + ] +}
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/edgeRules/test3.json b/aai-schema-ingest/src/test/resources/edgeRules/test3.json new file mode 100644 index 00000000..916efdcc --- /dev/null +++ b/aai-schema-ingest/src/test/resources/edgeRules/test3.json @@ -0,0 +1,64 @@ +{ + "rules": [ + { + "from": "l-interface", + "to": "logical-link", + "label": "tosca.relationships.network.LinksTo", + "direction": "OUT", + "multiplicity": "MANY2MANY", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "default": "true", + "description":"" + }, + { + "from": "logical-link", + "to": "l-interface", + "label": "org.onap.relationships.inventory.Source", + "direction": "OUT", + "multiplicity": "ONE2MANY", + "contains-other-v": "NONE", + "delete-other-v": "!${direction}", + "prevent-delete": "NONE", + "default": "false", + "description":"" + }, + { + "from": "logical-link", + "to": "l-interface", + "label": "org.onap.relationships.inventory.Destination", + "direction": "OUT", + "multiplicity": "ONE2MANY", + "contains-other-v": "NONE", + "delete-other-v": "!${direction}", + "prevent-delete": "NONE", + "default": "false", + "description":"" + }, + { + "from": "l-interface", + "to": "lag-interface", + "label": "org.onap.relationships.inventory.BelongsTo", + "direction": "OUT", + "multiplicity": "MANY2ONE", + "contains-other-v": "!${direction}", + "delete-other-v": "!${direction}", + "prevent-delete": "NONE", + "default": "true", + "description":"" + }, + { + "from": "lag-interface", + "to": "logical-link", + "label": "org.onap.relationships.inventory.Uses", + "direction": "OUT", + "multiplicity": "MANY2MANY", + "contains-other-v": "NONE", + "delete-other-v": "${direction}", + "prevent-delete": "NONE", + "default": "true", + "description":"" + } + ] +}
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngest2.properties b/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngest2.properties new file mode 100644 index 00000000..fb20eba2 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngest2.properties @@ -0,0 +1,3 @@ +schemaConfig=testConfig.json +nodeDir=bloop/blap +edgeDir=different
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngestForXMLTest.properties b/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngestForXMLTest.properties new file mode 100644 index 00000000..11e5fb47 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngestForXMLTest.properties @@ -0,0 +1,3 @@ +schemaConfig=imatest +nodeDir=andIMalittleteapot +edgeDir=meh
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngestWiringTest.properties b/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngestWiringTest.properties new file mode 100644 index 00000000..8bff7d4d --- /dev/null +++ b/aai-schema-ingest/src/test/resources/forWiringTests/schemaIngestWiringTest.properties @@ -0,0 +1,3 @@ +schemaConfig=NA +nodeDir=src/test/resources/oxm/ +edgeDir=src/test/resources/edgeRules/
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/forWiringTests/testContext.xml b/aai-schema-ingest/src/test/resources/forWiringTests/testContext.xml new file mode 100644 index 00000000..592c2661 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/forWiringTests/testContext.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans.xsd"> + + + <bean id="schemaLocationsBean" class="org.onap.aai.setup.SchemaLocationsBean"> + <property name="schemaConfigLocation" value="fromXML" /> + <property name="nodeDirectory" value="whatAnXML" /> + <property name="edgeDirectory" value="XMLwiringYAY" /> + </bean> + +</beans>
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/forWiringTests/testUsingPropFileContext.xml b/aai-schema-ingest/src/test/resources/forWiringTests/testUsingPropFileContext.xml new file mode 100644 index 00000000..7c3302f0 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/forWiringTests/testUsingPropFileContext.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xsi:schemaLocation="http://www.springframework.org/schema/beans + http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context + http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + + + <bean id="schemaLocationsBean" class="org.onap.aai.setup.SchemaLocationsBean"> + <property name="schemaConfigLocation" value="${schemaConfig}" /> + <property name="nodeDirectory" value="${nodeDir}" /> + <property name="edgeDirectory" value="${edgeDir}" /> + </bean> + + <context:property-placeholder location="classpath:forWiringTests/schemaIngestForXMLTest.properties" ignore-unresolvable="true" /> + +</beans>
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/oxm/test_business_v10.xml b/aai-schema-ingest/src/test/resources/oxm/test_business_v10.xml new file mode 100644 index 00000000..5ead4178 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/oxm/test_business_v10.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + ============LICENSE_START======================================================= + org.openecomp.aai + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ============LICENSE_END========================================================= + --> + +<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="inventory.aai.onap.org.v12" xml-mapping-metadata-complete="true"> + <xml-schema element-form-default="QUALIFIED"> + <xml-ns namespace-uri="http://org.onap.aai.inventory/v12" /> + </xml-schema> + <java-types> + + <java-type name="Bar"> + <xml-root-element name="bar" /> + <java-attributes> + <xml-element java-attribute="barId" name="bar-id" required="true" type="java.lang.String" xml-key="true"> + <xml-properties> + <xml-property name="description" value="Unique id of Bar This is unique across the graph." /> + </xml-properties> + </xml-element> + <xml-element java-attribute="quantity" name="quantity" required="false" type="java.lang.Integer"> + <xml-properties> + <xml-property name="description" value="How many." /> + </xml-properties> + </xml-element> + + </java-attributes> + <xml-properties> + <xml-property name="description" value="General purpose metasyntactic variable" /> + <xml-property name="uniqueProps" value="bar-id" /> + </xml-properties> + </java-type> + + </java-types> +</xml-bindings>
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/oxm/test_business_v11.xml b/aai-schema-ingest/src/test/resources/oxm/test_business_v11.xml new file mode 100644 index 00000000..39a3ca9b --- /dev/null +++ b/aai-schema-ingest/src/test/resources/oxm/test_business_v11.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + ============LICENSE_START======================================================= + org.openecomp.aai + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ============LICENSE_END========================================================= + --> + +<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="inventory.aai.onap.org.v12" xml-mapping-metadata-complete="true"> + <xml-schema element-form-default="QUALIFIED"> + <xml-ns namespace-uri="http://org.onap.aai.inventory/v12" /> + </xml-schema> + <java-types> + + <java-type name="Bar"> + <xml-root-element name="bar" /> + <java-attributes> + <xml-element java-attribute="barId" name="bar-id" required="true" type="java.lang.String" xml-key="true"> + <xml-properties> + <xml-property name="description" value="Unique id of Bar This is unique across the graph." /> + </xml-properties> + </xml-element> + + </java-attributes> + <xml-properties> + <xml-property name="description" value="General purpose metasyntactic variable" /> + <xml-property name="uniqueProps" value="bar-id" /> + </xml-properties> + </java-type> + + </java-types> +</xml-bindings>
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/oxm/test_network_v10.xml b/aai-schema-ingest/src/test/resources/oxm/test_network_v10.xml new file mode 100644 index 00000000..e7d77ac9 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/oxm/test_network_v10.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + ============LICENSE_START======================================================= + org.openecomp.aai + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ============LICENSE_END========================================================= + --> + +<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="inventory.aai.onap.org.v12" xml-mapping-metadata-complete="true"> + <xml-schema element-form-default="QUALIFIED"> + <xml-ns namespace-uri="http://org.onap.aai.inventory/v12" /> + </xml-schema> + <java-types> + + <java-type name="Foo"> + <xml-root-element name="foo" /> + <java-attributes> + <xml-element java-attribute="fooId" name="foo-id" required="true" type="java.lang.String" xml-key="true"> + <xml-properties> + <xml-property name="description" value="Unique id of Foo. This is unique across the graph." /> + </xml-properties> + </xml-element> + <xml-element java-attribute="fooName" name="foo-name" required="true" type="java.lang.String"> + <xml-properties> + <xml-property name="description" value="Name of Foo." /> + </xml-properties> + </xml-element> + + </java-attributes> + <xml-properties> + <xml-property name="description" value="General purpose metasyntactic variable" /> + <xml-property name="nameProps" value="foo-name" /> + <xml-property name="uniqueProps" value="foo-id" /> + </xml-properties> + </java-type> + + </java-types> +</xml-bindings>
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/oxm/test_network_v11.xml b/aai-schema-ingest/src/test/resources/oxm/test_network_v11.xml new file mode 100644 index 00000000..9ede62d4 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/oxm/test_network_v11.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + ============LICENSE_START======================================================= + org.openecomp.aai + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + ================================================================================ + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ============LICENSE_END========================================================= + --> + +<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="inventory.aai.onap.org.v12" xml-mapping-metadata-complete="true"> + <xml-schema element-form-default="QUALIFIED"> + <xml-ns namespace-uri="http://org.onap.aai.inventory/v12" /> + </xml-schema> + <java-types> + + <java-type name="Foo"> + <xml-root-element name="foo" /> + <java-attributes> + <xml-element java-attribute="fooId" name="foo-id" required="true" type="java.lang.String" xml-key="true"> + <xml-properties> + <xml-property name="description" value="Unique id of Foo. This is unique across the graph." /> + </xml-properties> + </xml-element> + <xml-element java-attribute="fooName" name="foo-name" required="true" type="java.lang.String"> + <xml-properties> + <xml-property name="description" value="Name of Foo." /> + </xml-properties> + </xml-element> + <xml-element java-attribute="quantity" name="quantity" required="false" type="java.lang.String"> + <xml-properties> + <xml-property name="description" value="How many." /> + </xml-properties> + </xml-element> + + </java-attributes> + <xml-properties> + <xml-property name="description" value="General purpose metasyntactic variable" /> + <xml-property name="nameProps" value="foo-name" /> + <xml-property name="uniqueProps" value="foo-id" /> + </xml-properties> + </java-type> + + <java-type name="Quux"> + <xml-root-element name="quux" /> + <java-attributes> + <xml-element java-attribute="qManagerName" name="q-manager-name" required="true" type="java.lang.String" xml-key="true"> + <xml-properties> + <xml-property name="description" value="Unique id of Quux owner. This is unique across the graph." /> + </xml-properties> + </xml-element> + <xml-element java-attribute="color" name="color" required="false" type="java.lang.String"> + <xml-properties> + <xml-property name="description" value="color" /> + </xml-properties> + </xml-element> + + </java-attributes> + <xml-properties> + <xml-property name="description" value="General purpose metasyntactic variable" /> + </xml-properties> + </java-type> + + </java-types> +</xml-bindings>
\ No newline at end of file diff --git a/aai-schema-ingest/src/test/resources/schemaIngest.properties b/aai-schema-ingest/src/test/resources/schemaIngest.properties new file mode 100644 index 00000000..3112c994 --- /dev/null +++ b/aai-schema-ingest/src/test/resources/schemaIngest.properties @@ -0,0 +1,3 @@ +schemaConfig=foo +nodeDir=bar +edgeDir=quux
\ No newline at end of file |