"561698 -  Merge 'org.eclipse.mdm.api.odsadapter/mkoller/contrib' into 'mkoller/contrib'"

Signed-off-by: Simon Skoczylas <simon.skoczylas@karakun.com>
diff --git a/org.eclipse.mdm.api.odsadapter/.gitignore b/org.eclipse.mdm.api.odsadapter/.gitignore
new file mode 100644
index 0000000..12a6d10
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/.gitignore
@@ -0,0 +1,18 @@
+# eclipse
+.classpath
+.project
+.settings/
+bin/
+src/gen/
+
+# gradle
+.gradle
+build/
+
+# intellij
+.idea/
+out/
+*.ipr
+*.iml
+*.iws
+/bin/
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.odsadapter/LICENSE.txt b/org.eclipse.mdm.api.odsadapter/LICENSE.txt
new file mode 100644
index 0000000..e48e096
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/LICENSE.txt
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  where such changes and/or additions to the Program originate from
+  and are Distributed by that particular Contributor. A Contribution
+  "originates" from a Contributor if it was added to the Program by
+  such Contributor itself or anyone acting on such Contributor's behalf.
+  Contributions do not include changes or additions to the Program that
+  are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+  a) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free copyright
+  license to reproduce, prepare Derivative Works of, publicly display,
+  publicly perform, Distribute and sublicense the Contribution of such
+  Contributor, if any, and such Derivative Works.
+
+  b) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free patent
+  license under Licensed Patents to make, use, sell, offer to sell,
+  import and otherwise transfer the Contribution of such Contributor,
+  if any, in Source Code or other form. This patent license shall
+  apply to the combination of the Contribution and the Program if, at
+  the time the Contribution is added by the Contributor, such addition
+  of the Contribution causes such combination to be covered by the
+  Licensed Patents. The patent license shall not apply to any other
+  combinations which include the Contribution. No hardware per se is
+  licensed hereunder.
+
+  c) Recipient understands that although each Contributor grants the
+  licenses to its Contributions set forth herein, no assurances are
+  provided by any Contributor that the Program does not infringe the
+  patent or other intellectual property rights of any other entity.
+  Each Contributor disclaims any liability to Recipient for claims
+  brought by any other entity based on infringement of intellectual
+  property rights or otherwise. As a condition to exercising the
+  rights and licenses granted hereunder, each Recipient hereby
+  assumes sole responsibility to secure any other intellectual
+  property rights needed, if any. For example, if a third party
+  patent license is required to allow Recipient to Distribute the
+  Program, it is Recipient's responsibility to acquire that license
+  before distributing the Program.
+
+  d) Each Contributor represents that to its knowledge it has
+  sufficient copyright rights in its Contribution, if any, to grant
+  the copyright license set forth in this Agreement.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other Contributors all
+     warranties and conditions, express and implied, including
+     warranties or conditions of title and non-infringement, and
+     implied warranties or conditions of merchantability and fitness
+     for a particular purpose;
+
+     ii) effectively excludes on behalf of all other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following
+Secondary Licenses when the conditions for such availability set forth
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  If it is not possible or desirable to put the notice in a particular
+  file, then You may include the notice in a location (such as a LICENSE
+  file in a relevant directory) where a recipient would be likely to
+  look for such a notice.
+
+  You may add additional accurate notices of copyright ownership.
diff --git a/org.eclipse.mdm.api.odsadapter/NOTICE.txt b/org.eclipse.mdm.api.odsadapter/NOTICE.txt
new file mode 100644
index 0000000..56281c6
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/NOTICE.txt
@@ -0,0 +1,382 @@
+# Notices for Eclipse MDM|BL
+
+This content is produced and maintained by the Eclipse MDM|BL project,
+it is a project of the openMDM(R) Eclipse Working Group.
+
+* Project home: https://projects.eclipse.org/projects/technology.mdmbl
+
+## Trademarks
+
+Eclipse MDM|BL, MDM|BL and Eclipse openMDM(R) logo are registered trademarks
+of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the following respective authors or their employers.
+For more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+Copyright (c) 2016-2019 Gigatronik Ingolstadt GmbH
+Copyright (c) 2016-2020 Peak Solution GmbH
+Copyright (c) 2017-2018 science + computing AG Tuebingen (ATOS SE)
+Copyright (c) 2017-2018 Canoo Engineering AG
+Copyright (c) 2017 Florian Schmitt
+Copyright (c) 2017-2020 Angelika Wittek
+Copyright (c) 2018-2019 Elektronische Fahrwerksysteme GMBH
+Copyright (c) 2018-2020 Karakun AG
+Copyright (c) 2018-2020 Alexander Nehmer
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0.
+
+SPDX-License-Identifier: EPL-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+org.eclipse.mdm.api.base.git	    - The openMDM(R) API.
+org.eclipse.mdm.api.default.git	    - Extension of the openMDM(R) API containing default elements.
+org.eclipse.mdm.api.odsadapter.git	- ODS implementation of persistence adapter.
+org.eclipse.mdm.nucleus.git	        - Core building blocks for the openMDM Business Logic and Web Frontend.
+
+## Third-party Content
+
+The Content includes items that have been sourced from third parties as set out below.
+If you did not receive this Content directly from the Eclipse Foundation, the following
+is provided for informational purposes only, and you should look to
+the Redistributor's license for terms and conditions of use.
+
+antlr4-4.5.3.jar(2.5.3)
+    * License: New BSD license
+
+aopalliance-repackaged-2.5.0-b05.jar (2.5.0-b05)
+    * License: CDDL
+
+commons-codec-1.2.jar (1.2)
+    * License: Apache License, 2.0
+
+commons-httpclient-3.1.jar  (3.1)
+    * License: Apache License, 2.0
+
+commons-lang3-3.8.1.jar (3.8.1)
+    * License: Apache License, 2.0
+
+commons-text-1.6.jar (1.6)
+    * License: Apache License, 2.0
+
+gson-2.7.jar (2.7)
+    * License: Apache License, 2.0
+
+Google Guava Version: 25.0-jre  (25.0)
+    * License: Apache License, 2.0
+
+Gradle Wrapper (4.10.2)
+    * License: Apache License, 2.0
+
+hk2-api-2.5.0-b05.jar (2.5.0-b05)
+    * License: CDDL-1.1
+
+hk2-locator-2.5.0-b05.jar(2.5.0-b05)
+    * License: CDDL
+
+hk2-utils-2.5.0-b05.jar (2.5.0-b05)
+    * License: CDDL
+
+jackson-annotations-2.9.0.jar  (2.9.0)
+    * License: Apache License, 2.0
+
+jackson-core-2.9.2.jar(2.9.2)
+    * License: Apache License, 2.0
+
+jackson-databind-2.9.2.jar  (2.9.2)
+    * License: Apache License, 2.0
+
+jackson-jaxrs-base-2.9.2.jar(2.9.2)
+    * License: Apache License, 2.0
+
+jackson-jaxrs-json-provider-2.9.2.jar(2.9.2)
+    * License: Apache License, 2.0
+
+jackson-module-jaxb-annotations-2.9.2.jar  (2.9.2)
+    * License: Apache License, 2.0
+
+javassist-3.20.0-GA.jar  (2.20.0-GA)
+    * License: Apache 2.0
+
+jcl-over-slf4j-1.7.25.jar(1.7.25)
+    * License: MIT License
+    * Licence Path: https://www.slf4j.org/license.html
+    * Project URL:  https://www.slf4j.org
+    * Source URL:   https://github.com/qos-ch/slf4j
+
+jersey-client-2.23.2.jar (2.23.2)
+     * License: CDDL
+
+jersey-common-2.23.2.jar (2.23.2)
+    * License: CDDL
+
+jersey-container-servlet-2.23.2.jar  (2.23.2)
+    * License: CDDL
+
+jersey-container-servlet-core-2.23.3.jar(2.23.2)
+    * License: CDDL
+
+jersey-guava-2.23.2.jar  (2.23.2)
+    * License: Apache License, 2.0
+
+jersey-media-jaxb-2.23.2.jar(2.23.2)
+    * License: CDDL
+
+jersey-media-sse-2.23.2.jar (2.23.2)
+    * License: CDDL
+
+jersey-media-multipart-2.23.2.jar (2.23.2)
+    * License: CDDL
+
+jersey-server-2.23.2.jar (2.23.2)
+    * License: Apache-2.0
+
+log4j-over-slf4j-1.7.25.jar (1.7.25)
+    * License: Apache-2.0
+
+logback-classic-1.2.3.jar(1.2.3)
+    * License: Eclipse Public License 1.0
+
+logback-core-1.2.3.jar(1.2.3)
+    * License: Eclipse Public License 1.0
+
+mimepull-1.9.6.jar (1.9.4)
+    * License: CDDL
+
+openatfx-0.7.4.jar (0.7.4)
+    * License: Apache-2.0
+
+osgi-resource-locator-1.0.1.jar(1.0.1)
+    * License: CDDL
+
+protobuf-java-3.2.0.jar (3.2.0)
+    * License: New BSD license
+
+protobuf-java-util-3.2.0.jar  (3.2.0)
+    * License: New BSD license
+
+swagger-annotations-2.0.8.jar (2.0.8)
+    * License: Apache-2.0
+
+swagger-ui-3.23.0.jar (3.23.0)
+    * License: Apache-2.0
+
+slf4j-api-1.7.25.jar  (1.7.25)
+    * License: MIT license
+    * Licence Path: https://www.slf4j.org/license.html
+    * Project URL: https://github.com/qos-ch/slf4j
+    * Source URL:  https://github.com/qos-ch/slf4j/releases/tag/v_1.7.25
+
+stax2-api-3.1.4.jar (3.1.4)
+    * License: BSD-2-Clause
+
+validation-api-1.1.0.Final.jar (1.1.0.Final)
+  * License: Apache License, 2.0
+
+vavr-0.9.1-sources.jar (0.9.1)
+  * License: Apache License, 2.0
+
+vavr-match-0.9.1.jar (0.9.1)
+  * License: Apache License, 2.0
+
+woodstox-core-asl-4.4.1.jar (4.4.1)
+  * License: Apache License, 2.0
+
+
+FFAMFAMFAM Silk Icon, Version 1.3
+    * License: Creative Commons Attribution 3.0 License
+    * Licence Path: https://creativecommons.org/licenses/by/3.0/
+    * Project: http://www.famfamfam.com/lab/icons/silk/
+    * Source:  http://www.famfamfam.com/lab/icons/silk/
+
+@angular/animations:7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api/animations
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/cdk:7.1.1
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api
+    * Source:  https://github.com/angular/angular/releases/tag/7.1.1
+
+
+@angular/common@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io/api/common
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4r
+
+@angular/compiler@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/core@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/forms@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/http@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/platform-browser-dynamic@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/platform-browser@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+@angular/router@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+bootstrap@4.1.3
+    * License: MIT
+    * Licence Path: https://github.com/twbs/bootstrap/raw/master/LICENSE
+    * Project: https://getbootstrap.com/
+    * Source:  https://github.com/twbs/bootstrap
+
+class-transformer@0.1.6
+    * License: MIT
+    * Licence Path: https://github.com/typestack/class-transformer/blob/master/LICENSE
+    * Project: https://github.com/pleerock/class-transformer
+    * Source:  https://github.com/pleerock/class-transformer
+
+core-js@2.6.0
+    * License: MIT
+    * Licence Path: https://github.com/zloirock/core-js/raw/master/LICENSE
+    * Project: https://github.com/zloirock/core-js
+    * Source:  https://github.com/zloirock/core-js/releases/tag/v2.6.0
+
+file-saver@1.3.3
+    * License: MIT
+    * Licence Path: https://github.com/eligrey/FileSaver.js/raw/master/LICENSE.md
+    * Project: https://github.com/eligrey/FileSaver.js
+    * Source:  https://github.com/eligrey/FileSaver.js
+
+font-awesome@4.7.0
+    * License: MIT
+    * Licence Path: https://github.com/FortAwesome/Font-Awesome/blob/master/LICENSE.txt
+    * Project: https://fontawesome.com/
+    * Source:  https://github.com/FortAwesome/Font-Awesome
+
+ng2-split-pane@1.3.1
+    * License: MIT
+    * Licence Path: https://github.com/wannabegeek/ng2-split-pane/raw/master/LICENSE
+    * Project: https://github.com/wannabegeek/ng2-split-pane
+    * Source:  https://github.com/wannabegeek/ng2-split-pane
+
+ngx-bootstrap@3.1.2
+    * License: MIT
+    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/v3.1.2/LICENSE
+    * Project: https://valor-software.com/ngx-bootstrap
+    * Source:  https://github.com/valor-software/ngx-bootstrap/tree/v3.1.2
+
+@ngx-translate/core@11.0.1
+    * License: MIT 
+    * Licence Path:   https://github.com/ngx-translate/core/blob/v11.0.1/LICENSE  
+    * Project URL:    http://www.ngx-translate.com/
+    * Source URL:     https://github.com/ngx-translate/core
+
+@ngx-translate/http-loader@4.0.0
+    * License: MIT 
+    * Licence Path:   https://github.com/ngx-translate/http-loader/blob/v4.0.0/LICENSE  
+    * Project URL:    http://www.ngx-translate.com/
+    * Source URL:     https://github.com/ngx-translate/http-loader/tree/v4.0.0
+
+primeicons:1.0.0
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeicons/blob/1.0.0/LICENSE
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeicons/tree/1.0.0
+
+primeng@7.0.1
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeng/blob/7.0.1/LICENSE.md
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeng/tree/7.0.1
+
+rxjs@6.3.3
+    * License: Apache-2.0
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3
+
+rxjs-compat:6.3.3
+    * License: Apache-2.0
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3/compat
+
+tslib@1.9.0
+    * License: Apache-2.0
+    * Project: https://github.com/Microsoft/tslib
+    * Source:  https://github.com/Microsoft/tslib/tree/1.9.0
+
+zone.js@0.8.26
+    * License: MIT
+    * Licence Path: https://github.com/angular/zone.js/raw/master/LICENSE
+    * Project: https://github.com/angular
+    * Source:  https://github.com/angular/zone.js/releases/tag/v0.8.26
+
+OMG Event Service Specification (1.2)
+
+* License: LicenseRef - Object-Management-Group-License
+* Project: https://www.omg.org/spec/EVNT/1.2/
+* Source: https://www.omg.org/spec/EVNT/1.2/pdf
+
+OMG Notification Service Specification (1.1)
+
+* License: LicenseRef - Object-Management-Group-License
+* Project: https://www.omg.org/spec/NOT/
+* Source: https://www.omg.org/spec/NOT/1.1/PDF
+
+ods530.idl
+Date: Hoehenkirchen, 06/01/2016
+"The ASAM Board of Directors releases the IDL files for use under the EPL to the Eclipse IWG openMDM.
+This is valid for all versions of ASAM ODS 5.3.x.
+This permission is valid under the conditions of Eclipse will not modify the file."
+
+AvalonEvent.idl, CorbaFileServer.idl
+Date: 08/15/2016
+"Herewith, we release the generated Client-Source-Code generated from our CORBA IDLs, namely
+* CORBANotification Service (generated from „AvalonEvent.idl”)
+* CORBAFileServer (generated from „CorbaFileServer.idl“),
+Under the Eclipse Public License (EPL). This agreement does not include the „AvalonEvent.idl“ and
+„CorbaFileServer.idl“ itself, which remain protected property of HighQSoft. "
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/org.eclipse.mdm.api.odsadapter/README.md b/org.eclipse.mdm.api.odsadapter/README.md
new file mode 100644
index 0000000..80e73da
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/README.md
@@ -0,0 +1,164 @@
+# MDM5 API #
+
+
+This document describes the services defined in the MDM5 API.
+
+
+## 1. Introduction ##
+
+The MDM5 API consists of the following projects:
+
+
+-   **org.eclipse.mdm.api.base**\
+    Defines the core services and entities. Entities contained in this
+    project must be supported by all implementations.
+
+-   **org.eclipse.mdm.api.default**\
+    Extends the core API with catalog and template entities to organize
+    the storage of context data.
+
+-   **org.eclipse.mdm.api.odsadapter**\
+    Implements both org.eclipse.mdm.api.base and org.eclipse.mdm.default
+    using the query based ASAM ODS OO API.
+
+
+## 2. EntityManager ##
+
+Once a connection to a persistence (e.g. ODS server) is established, the
+entity manager allows to load entities of any kind and provides access
+to available services.
+
+
+Returned entities are always complete. This means they are loaded with
+all of their properties and related entities (as exposed by their API).
+Therefore it does not matter how entities are retrieved (e.g. entity
+manager or search service). The entity manager provides various methods
+to load instances by their id, load parent or child entities for a given
+entity or filter loaded entities with a given naming pattern. Context
+data may be loaded for TestStep or Measurement entities.
+
+
+Mass data may be loaded by defining a corresponding request. Such a
+request consists of a ChannelGroup and a subset of related Channels.
+Finally, a range is defined to loaded stored values iteratively or all at
+once. This allows a fine grained access to stored mass data.
+
+
+### 2.1. SearchService ###
+
+The search service allows to search for entities like Test, TestStep,
+Measurement and Channel across hierarchies. So one can, for example,
+search for Tests and apply filter criteria for context data of related
+TestSteps and Measurements without defining any joins. This is done by
+the internally used search queries. Each search query defines a set of
+supported entity types and hence all of its attributes may be used for
+selections or filter criteria. The search service allows to query
+possible filter values for each supported attribute.
+
+
+In addition to that a query string may be used to search for entities.
+This query string is evaluated and processed by a full text search
+which returns a result consisting of Test, TestStep or Measurement
+entities.
+
+
+### 2.2. Notification ###
+
+TODO
+
+
+### 2.3. FileService ###
+
+The file service may be used to download externally linked files, query
+their size or open a consumable download stream for a given externally
+linked file. Sequential or parallel download of multiple files is
+possible as well. A download request with multiple files may have
+multiple links to the same file. In such a case this file is downloaded
+only once and all links will point to the same local copy of the
+downloaded file. Since downloading large files may take its time to
+complete, one can pass a listener to track the overall progress.
+
+NOTE:
+```
+This service does not allow manually uploading or deleting files. Instead 
+files are automatically uploaded / deleted while entities are written 
+within a Section 2.5, "Transaction".
+```
+
+### 2.4. EntityFactory ###
+
+The entity factory is the only way to create new entities. Each entity
+returned by this service is considered to be virtual, since it does not
+have an id until it is written. Entities with informational relations
+like Quantity (references a Unit) or Unit (references a
+PhysicalDimension) may only reference already persisted entities. This
+means that a new Quantity may only be created with an already persisted
+Unit and a new Unit may only be created with an already persisted
+PhysicalDimension.
+
+
+On the other hand, it is possible to create parent / child trees
+consisting of virtual or persisted entities (parent and child entities
+are internally linked together). Within a transaction such trees are
+recursively processed, therefore it is not required to explicitly
+create, update or delete child entities, instead it is sufficient and
+highly recommended to write only the root entity of the tree(s). The
+transaction service recursively resolves such trees and executes batch
+insert-, update- or delete-statements for the children.
+
+
+### 2.5. Transaction ###
+
+The transaction service effectively modifies the stored contents.
+Entities are grouped by their type before they are processed. Each group
+is processed at once with a batch statement. Each written entity is
+scanned for externally linked files. New ones are automatically uploaded,
+while removed ones are deleted. In case of errors any changes made to the
+persistence are cancelled and hence any successfully uploaded file has to
+be deleted. Unfortunately, the removal of uploaded files cannot be
+guaranteed (e.g. a broken connection), instead a delete request for the
+uploaded files is send on a best effort basis.
+
+IMPORTANT:
+```
+Externally linked files of deleted entities are only removed if the
+entity is an instance of FilesAttachable (Test, TestStep, Measurement).
+In any other case, externally linked files are not removed since this 
+may have an impact on other entities which reference the same file.
+```
+
+Besides the modification of entities, it is possible to write mass data
+by defining write requests. A write request describes in detail how the
+mass data of a Channel is organized (e.g. values are explicit or
+generated, stored in externally linked files etc.).
+
+
+
+## 3. Connect to an ODS Server ##
+
+The ODS entity manager factory is used to connect to an ODS server. It
+takes parameters, shown in the example below, to establish a
+connection. On success an entity manager is returned.
+
+```java
+    Map<String, String> connectionParameters = new HashMap<>();
+    connectionParameters.put(ODSEntityManagerFactory.PARAM_NAMESERVICE, "corbaloc::1.2@<SERVER>:<PORT>/NameService");
+    connectionParameters.put(ODSEntityManagerFactory.PARAM_SERVICENAME, "<SERVICE>.ASAM-ODS");
+    connectionParameters.put(ODSEntityManagerFactory.PARAM_USER, "sa");
+    connectionParameters.put(ODSEntityManagerFactory.PARAM_PASSWORD, "sa");
+    EntityManager entityManager = new ODSEntityManagerFactory().connect(connectionParameters);
+    // do something useful
+    entityManager.close();
+```
+
+## 4. Copyright and License ##
+Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+
+ See the NOTICE file(s) distributed with this work for additional
+ information regarding copyright ownership.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v. 2.0 which is available at
+ http://www.eclipse.org/legal/epl-2.0.
+
+ SPDX-License-Identifier: EPL-2.0
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.odsadapter/build.gradle b/org.eclipse.mdm.api.odsadapter/build.gradle
new file mode 100644
index 0000000..4a95a97
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/build.gradle
@@ -0,0 +1,193 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+description = 'MDM API - ODSAdapter'
+group = 'org.eclipse.mdm'
+version = '5.2.0M1-SNAPSHOT'
+
+apply plugin: 'java'
+apply plugin: 'maven'
+apply plugin: 'eclipse'
+apply plugin: 'com.google.protobuf'
+
+buildscript {
+	repositories {
+		mavenCentral()
+	}
+	dependencies {
+		classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.1'
+	}
+}
+
+repositories {
+	jcenter()
+	mavenLocal()
+	mavenCentral()
+}
+
+sourceSets {
+
+	generated {
+		java {
+			srcDir 'src/gen/java'
+			srcDir 'build/generated/source/proto/main/java'
+		}
+	}
+
+	main {
+		compileClasspath += generated.output
+		runtimeClasspath += generated.output
+	}
+
+	test {
+		compileClasspath += generated.output
+		runtimeClasspath += generated.output
+	}
+}
+
+configurations.all {
+	exclude group: 'javax.inject', module: 'javax.inject'
+	exclude group: 'commons-logging', module: 'commons-logging'
+	
+	// exclude guava dependencies
+	exclude group: 'com.google.code.findbugs', module: 'jsr305'
+	exclude group: 'com.google.errorprone', module: 'error_prone_annotations'
+	exclude group: 'com.google.j2objc', module: 'j2objc-annotations'
+	exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
+	exclude group: 'org.checkerframework', module: 'checker-compat-qual'
+}
+
+dependencies {
+	compileOnly 'javax:javaee-api:7.0'
+
+	// logging
+	compile 'org.slf4j:slf4j-api:1.7.25'
+	// httpclient uses commons-logging
+	compile 'org.slf4j:jcl-over-slf4j:1.7.25'
+
+	// MDM5 API
+	compile "org.eclipse.mdm:org.eclipse.mdm.api.base:${version}"
+	compile "org.eclipse.mdm:org.eclipse.mdm.api.default:${version}"
+
+	// compile CORBA idl using JDK tools
+	generatedCompile files(System.getenv('JAVA_HOME') + '/lib/tools.jar')
+    generatedCompile files('src/main/idl/')
+    
+	// Peak notification service
+	compile 'com.google.protobuf:protobuf-java:3.2.0'
+	compile 'com.google.protobuf:protobuf-java-util:3.2.0'
+	compile 'com.google.guava:guava:25.0-jre'
+	compile 'org.glassfish.jersey.core:jersey-client:2.23.2'
+	compile 'org.glassfish.jersey.media:jersey-media-sse:2.23.2'
+	generatedCompile 'com.google.protobuf:protobuf-java:3.2.0'
+
+	// querying es
+	compile 'commons-httpclient:commons-httpclient:3.1'
+	compile 'org.apache.commons:commons-text:1.6'
+
+	// testing
+	testCompile 'junit:junit:4.12'
+	testRuntime 'org.slf4j:slf4j-simple:1.7.25'
+	testCompile 'org.mockito:mockito-core:2.13.0'
+	testCompile 'org.assertj:assertj-core:3.6.2'
+	
+	testCompile "org.elasticsearch.client:elasticsearch-rest-client:6.4.1"
+	testCompile "org.testcontainers:elasticsearch:1.12.5"
+}
+
+test {
+	if(project.hasProperty('host')) {
+		systemProperty 'host', project.property('host')
+	} else {
+		systemProperty 'host', '<host>'
+	}
+
+	if(project.hasProperty('port')) {
+		systemProperty 'port', project.property('port')
+	} else {
+		systemProperty 'port', '2809'
+	}
+	
+	if(project.hasProperty('service')) {
+		systemProperty 'service', project.property('service')
+	} else {
+		systemProperty 'service', '<service>'
+	}
+
+	jvmArgs '-Dorg.slf4j.simpleLogger.defaultLogLevel=debug'
+}
+
+protobuf {
+	protoc {
+		artifact = 'com.google.protobuf:protoc:3.2.0'
+	}
+}
+
+
+task compileIDL(type: JavaExec) {
+	classpath = configurations.generatedCompile
+
+	main = 'com.sun.tools.corba.se.idl.toJavaPortable.Compile'
+
+	// add 'fallTIE' if <Type>POA & <Type>POATie have to be generated   
+	args '-fallTIE', '-td', 'src/gen/java/', 'src/main/idl/ods530.idl'
+
+	outputs.dir("src/gen/java")
+}
+
+task compileNotificationServiceIDL(type: JavaExec) {
+	classpath = configurations.generatedCompile
+
+	main = 'com.sun.tools.corba.se.idl.toJavaPortable.Compile'
+
+	args '-emitAll', '-fallTIE', '-i', 'src/main/idl/', '-td', 'src/gen/java/', 'src/main/idl/CosNotifyChannelAdmin.idl'
+
+	outputs.dir("src/gen/java")
+	outputs.upToDateWhen { false }
+}
+
+compileGeneratedJava {
+	inputs.dir("build/generated/source")
+	inputs.dir("src/gen/java")
+}
+
+// generate classes from idl and compile them
+compileGeneratedJava.dependsOn compileIDL
+compileGeneratedJava.dependsOn compileNotificationServiceIDL
+
+compileJava.dependsOn compileGeneratedJava
+
+jar {
+	from sourceSets.generated.output
+	dependsOn generatedClasses
+
+	metaInf { from 'NOTICE.txt' }
+	metaInf { from 'LICENSE.txt' }
+}
+
+task sourcesJar(type: Jar, dependsOn: classes) {
+	classifier = 'sources'
+	from sourceSets.main.allSource
+}
+
+artifacts {
+	archives sourcesJar
+}
+
+task deleteGenerated(type: Delete) {
+	delete 'src/gen'
+	delete 'build'
+}
+
+clean.dependsOn deleteGenerated
diff --git a/org.eclipse.mdm.api.odsadapter/gradle.properties b/org.eclipse.mdm.api.odsadapter/gradle.properties
new file mode 100644
index 0000000..2ab5436
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/gradle.properties
@@ -0,0 +1,16 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+ 
+sourceCompatibility=1.8
+targetCompatibility=1.8
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.odsadapter/gradle/wrapper/gradle-wrapper.jar b/org.eclipse.mdm.api.odsadapter/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..7a3265e
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/org.eclipse.mdm.api.odsadapter/gradle/wrapper/gradle-wrapper.properties b/org.eclipse.mdm.api.odsadapter/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..b82e006
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME

+distributionPath=wrapper/dists

+zipStoreBase=GRADLE_USER_HOME

+zipStorePath=wrapper/dists

+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip

diff --git a/org.eclipse.mdm.api.odsadapter/gradlew b/org.eclipse.mdm.api.odsadapter/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+    echo "$*"
+}
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+  NONSTOP* )
+    nonstop=true
+    ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+    JAVACMD=`cygpath --unix "$JAVACMD"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Escape application args
+save () {
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+    echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+  cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/org.eclipse.mdm.api.odsadapter/gradlew.bat b/org.eclipse.mdm.api.odsadapter/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off

+@rem ##########################################################################

+@rem

+@rem  Gradle startup script for Windows

+@rem

+@rem ##########################################################################

+

+@rem Set local scope for the variables with windows NT shell

+if "%OS%"=="Windows_NT" setlocal

+

+set DIRNAME=%~dp0

+if "%DIRNAME%" == "" set DIRNAME=.

+set APP_BASE_NAME=%~n0

+set APP_HOME=%DIRNAME%

+

+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.

+set DEFAULT_JVM_OPTS=

+

+@rem Find java.exe

+if defined JAVA_HOME goto findJavaFromJavaHome

+

+set JAVA_EXE=java.exe

+%JAVA_EXE% -version >NUL 2>&1

+if "%ERRORLEVEL%" == "0" goto init

+

+echo.

+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:findJavaFromJavaHome

+set JAVA_HOME=%JAVA_HOME:"=%

+set JAVA_EXE=%JAVA_HOME%/bin/java.exe

+

+if exist "%JAVA_EXE%" goto init

+

+echo.

+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%

+echo.

+echo Please set the JAVA_HOME variable in your environment to match the

+echo location of your Java installation.

+

+goto fail

+

+:init

+@rem Get command-line arguments, handling Windows variants

+

+if not "%OS%" == "Windows_NT" goto win9xME_args

+

+:win9xME_args

+@rem Slurp the command line arguments.

+set CMD_LINE_ARGS=

+set _SKIP=2

+

+:win9xME_args_slurp

+if "x%~1" == "x" goto execute

+

+set CMD_LINE_ARGS=%*

+

+:execute

+@rem Setup the command line

+

+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

+

+@rem Execute Gradle

+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

+

+:end

+@rem End local scope for the variables with windows NT shell

+if "%ERRORLEVEL%"=="0" goto mainEnd

+

+:fail

+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of

+rem the _cmd.exe /c_ return code!

+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1

+exit /b 1

+

+:mainEnd

+if "%OS%"=="Windows_NT" endlocal

+

+:omega

diff --git a/org.eclipse.mdm.api.odsadapter/settings.gradle b/org.eclipse.mdm.api.odsadapter/settings.gradle
new file mode 100644
index 0000000..e1e8178
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/settings.gradle
@@ -0,0 +1,15 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+rootProject.name = 'org.eclipse.mdm.api.odsadapter'
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/doc/mdm5_api.adoc b/org.eclipse.mdm.api.odsadapter/src/main/doc/mdm5_api.adoc
new file mode 100644
index 0000000..ef765c3
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/doc/mdm5_api.adoc
@@ -0,0 +1,84 @@
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+
+= MDM5 API
+
+This document describes the services defined in the MDM5 API.
+
+== Introduction
+The MDM5 API consists of the following projects:
+
+* *org.eclipse.mdm.api.base* +
+    Defines the core services and entities. Entities contained in this project must be supported by all implementations.
+* *org.eclipse.mdm.api.default* +
+    Extends the core API with catalog and template entities to organize the storage of context data. 
+* *org.eclipse.mdm.api.odsadapter* +
+    Implements both org.eclipse.mdm.api.base and org.eclipse.mdm.default using the query based ASAM ODS OO API.
+    
+== EntityManager
+
+Once a connection to a persistence (e.g. ODS server) is established, the entity manager allows to load entities of any kind and provides access to available services. 
+
+Returned entities are always complete. This means they are loaded with all of their properties and related entities (as exposed by their API). Therefore it does not matter how entities are retrieved (e.g. entity manager or search service). The entity manager provides various methods to load instances by their id, load parent or child entities for a given entity or filter loaded entities with a given naming pattern. Context data may be loaded for TestStep or Measurement entities.
+
+Mass data may be loaded by defining a corresponding request. Such a request consists of a ChannelGroup and a subset of related Channels. Finally a range is defined to loaded stored values iteratively or all at once. This allows a fine grained access to stored mass data.
+
+=== SearchService
+The search service allows to search for entities like Test, TestStep, Measurement and Channel across hierarchies. So one can, for example, search for Tests and apply filter criteria for context data of related TestSteps and Measurements without defining any joins. This is done by the internally used search queries. Each search query defines a set of supported entity types and hence all of its attributes may be used for selections or filter criteria. The search service allows to query possible filter values for each supported attribute.
+
+In addition to that a query string may be used to search for entities. This query string is evaluated and processed by a full text search which returns a result consisting of Test, TestStep or Measurement entities.
+
+=== Notification
+TODO
+
+=== FileService
+The file service may be used to download externally linked files, query their size or open a consumable download stream for a given externally linked file. Sequential or parallel download of multiple files is possible as well. A download request with multiple files may have multiple links to the same file. In such a case this file is downloaded only once and all links will point to the same local copy of the downloaded file. Since downloading large files may take its time to complete, one can pass a listener to track the overall progress.
+
+[NOTE]
+====
+This service does not allow manually uploading or deleting files. Instead files are automatically uploaded / deleted while entities are written within a <<Transaction>>.
+====
+
+=== EntityFactory
+The entity factory is the only way to create new entities. Each entity returned by this service is considered to be virtual, since it does not have an id until it is written. Entities with informational relations like Quantity (references a Unit) or Unit (references a PhysicalDimension) may only reference already persisted entities. This means that a new Quantity may only be created with an already persisted Unit and a new Unit may only be created with an already persisted PhysicalDimension.
+
+On the other hand it is possible to create parent / child trees consisting of virtual or persisted entities (parent and child entities are internally linked together). Within a transaction such trees are recursively processed, therefore it is not required to explicitly create, update or delete child entities, instead it is sufficient and highly recommended to write only the root entity of the tree(s). The transaction service recursively resolves such trees and executes batch insert-, update- or delete-statements for the children.
+
+=== Transaction
+The transaction service effectively modifies the stored contents. Entities are grouped by their type before they are processed. Each group is processed at once with a batch statement. Each  written entity is scanned for externally linked files. New ones are automatically uploaded, while removed ones are deleted. In case of errors any changes made to the persistence are cancelled and hence any successfully uploaded file has to be deleted. Unfortunately the removal of uploaded files cannot be guaranteed (e.g. a broken connection), instead a delete request for the uploaded files is send on a best effort basis.
+
+[IMPORTANT]
+====
+Externally linked files of deleted entities are only removed if the entity is an instance of FilesAttachable (Test, TestStep, Measurement). In any other case externally linked files are not removed, since this may have an impact on other entities which reference the same file.
+====
+
+Besides the modification of entities, it is possible to write mass data by defining write requests. A write request describes in detail how the mass data of a Channel is organized (e.g. values are explicit or generated, stored in externally linked files etc.).
+
+== Connect to an ODS Server
+The ODS entity manager factory is used to connect to an ODS server. It takes parameters, shown in the exapmple below, to establish a connection. On success an entity manager is returned.
+
+[source,java]
+----
+Map<String, String> connectionParameters = new HashMap<>();
+connectionParameters.put(ODSEntityManagerFactory.PARAM_NAMESERVICE, "corbaloc::1.2@<SERVER>:<PORT>/NameService");
+connectionParameters.put(ODSEntityManagerFactory.PARAM_SERVICENAME, "<SERVICE>.ASAM-ODS");
+connectionParameters.put(ODSEntityManagerFactory.PARAM_USER, "sa");
+connectionParameters.put(ODSEntityManagerFactory.PARAM_PASSWORD, "sa");
+
+EntityManager entityManager = new ODSEntityManagerFactory().connect(connectionParameters);
+
+// do something useful
+
+entityManager.close();
+----
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/CosEventChannelAdmin.idl b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosEventChannelAdmin.idl
new file mode 100644
index 0000000..8ddf3a3
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosEventChannelAdmin.idl
@@ -0,0 +1,59 @@
+/**

+ * This module is taken from the standard CORBA Event Service

+ * 1.2, as described in:

+ *

+ * https://www.omg.org/spec/EVNT/1.2/

+ *

+ * The idl was extracted from the following PDF:

+ * formal/04-10-02 

+ */

+

+#ifndef _COS_EVENT_CHANNEL_ADMIN_IDL_

+#define _COS_EVENT_CHANNEL_ADMIN_IDL_

+

+#include "CosEventComm.idl"
+

+#pragma prefix "omg.org"

+
+module CosEventChannelAdmin {
+
+   exception AlreadyConnected {};
+   exception TypeError {};
+
+   interface ProxyPushConsumer: CosEventComm::PushConsumer {
+      void connect_push_supplier(in CosEventComm::PushSupplier push_supplier)
+         raises(AlreadyConnected);
+   };
+
+   interface ProxyPullSupplier: CosEventComm::PullSupplier {
+      void connect_pull_consumer(in CosEventComm::PullConsumer pull_consumer)
+         raises(AlreadyConnected);
+   };
+
+   interface ProxyPullConsumer: CosEventComm::PullConsumer {
+      void connect_pull_supplier(in CosEventComm::PullSupplier pull_supplier)
+         raises(AlreadyConnected,TypeError);
+   };
+
+   interface ProxyPushSupplier: CosEventComm::PushSupplier {
+      void connect_push_consumer(in CosEventComm::PushConsumer push_consumer)
+         raises(AlreadyConnected, TypeError);
+   };
+
+   interface ConsumerAdmin {
+      ProxyPushSupplier obtain_push_supplier();
+      ProxyPullSupplier obtain_pull_supplier();
+   };
+
+   interface SupplierAdmin {
+      ProxyPushConsumer obtain_push_consumer();
+      ProxyPullConsumer obtain_pull_consumer();
+   };
+
+   interface EventChannel {
+      ConsumerAdmin for_consumers();
+      SupplierAdmin for_suppliers();
+      void destroy();
+   };
+};
+#endif /* ifndef _COS_EVENT_CHANNEL_ADMIN_IDL_ */
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/CosEventComm.idl b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosEventComm.idl
new file mode 100644
index 0000000..ed88691
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosEventComm.idl
@@ -0,0 +1,41 @@
+/**

+ * This module is taken from the standard CORBA Event Service

+ * 1.2, as described in:

+ *

+ * https://www.omg.org/spec/EVNT/1.2/

+ *

+ * The idl was extracted from the following PDF:

+ * formal/04-10-02 

+ */

+ 

+#ifndef _COS_EVENT_COMM_IDL_

+#define _COS_EVENT_COMM_IDL_

+

+#pragma prefix "omg.org"

+

+module CosEventComm {
+
+   exception Disconnected{};
+
+   interface PushConsumer {
+      void push (in any data) raises(Disconnected);
+      void disconnect_push_consumer();
+   };
+
+    interface PushSupplier {
+      void disconnect_push_supplier();
+   };
+
+   interface PullSupplier {
+      any pull () raises(Disconnected);
+      any try_pull (out boolean has_event) raises(Disconnected);
+      void disconnect_pull_supplier();
+   };
+
+   interface PullConsumer {
+      void disconnect_pull_consumer();
+   };
+
+};
+
+#endif /* ifndef _COS_EVENT_COMM_IDL_ */
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotification.idl b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotification.idl
new file mode 100644
index 0000000..a789700
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotification.idl
@@ -0,0 +1,180 @@
+/**

+ * This module is taken from the standard CORBA Notification Service

+ * 1.1, as described in:

+ *

+ * https://www.omg.org/spec/NOT/1.1/

+ *

+ * The idl was extracted from the following PDF:

+ * formal/04-10-13

+ */

+

+#ifndef _COS_NOTIFICATION_IDL_

+#define _COS_NOTIFICATION_IDL_

+

+#pragma prefix "omg.org"

+

+module CosNotification {
+
+   typedef string Istring;
+   typedef Istring PropertyName;
+   typedef any PropertyValue;
+
+   struct Property {
+      PropertyName name;
+      PropertyValue value;
+   };
+   typedef sequence<Property> PropertySeq;
+
+   // The following are the same, but serve different purposes.
+   typedef PropertySeq OptionalHeaderFields;
+   typedef PropertySeq FilterableEventBody;
+   typedef PropertySeq QoSProperties;
+   typedef PropertySeq AdminProperties;
+
+   struct _EventType {
+      string domain_name;
+      string type_name;
+   };
+   typedef sequence<_EventType> EventTypeSeq;
+
+   struct PropertyRange {
+      PropertyValue low_val;
+      PropertyValue high_val;
+   };
+
+   struct NamedPropertyRange {
+      PropertyName name;
+      PropertyRange range;
+   };
+   typedef sequence<NamedPropertyRange> NamedPropertyRangeSeq;
+
+   enum QoSError_code {
+      UNSUPPORTED_PROPERTY,
+      UNAVAILABLE_PROPERTY,
+      UNSUPPORTED_VALUE,
+      UNAVAILABLE_VALUE,
+      BAD_PROPERTY,
+      BAD_TYPE,
+      BAD_VALUE
+   };
+
+   struct PropertyError {
+      QoSError_code code;
+      PropertyName name;
+      PropertyRange available_range;
+   };
+   typedef sequence<PropertyError> PropertyErrorSeq;
+
+   exception UnsupportedQoS { PropertyErrorSeq qos_err; };
+   exception UnsupportedAdmin { PropertyErrorSeq admin_err; };
+
+   // Define the Structured Event structure
+   struct FixedEventHeader {
+      _EventType event_type;
+      string event_name;
+   };
+
+   struct EventHeader {
+      FixedEventHeader fixed_header;
+      OptionalHeaderFields variable_header;
+   };
+
+   struct StructuredEvent {
+      EventHeader header;
+      FilterableEventBody filterable_data;
+      any remainder_of_body;
+   }; // StructuredEvent
+   typedef sequence<StructuredEvent> EventBatch;
+
+   // The following constant declarations define the standard
+   // QoS property names and the associated values each property
+   // can take on. The name/value pairs for each standard property
+   // are grouped, beginning with a string constant defined for the
+   // property name, followed by the values the property can take on.
+
+   const string EventReliability = "EventReliability";
+   const short BestEffort = 0;
+   const short Persistent = 1;
+
+   const string ConnectionReliability = "ConnectionReliability";
+   // Can take on the same values as EventReliability
+
+   const string Priority = "Priority";
+   const short LowestPriority = -32767;
+   const short HighestPriority = 32767;
+   const short DefaultPriority = 0;
+
+   const string StartTime = "StartTime";
+   // StartTime takes a value of type TimeBase::UtcT.
+
+   const string StopTime = "StopTime";
+   // StopTime takes a value of type TimeBase::UtcT.
+
+   const string Timeout = "Timeout";
+   // Timeout takes on a value of type TimeBase::TimeT
+
+   const string OrderPolicy = "OrderPolicy";
+   const short AnyOrder = 0;
+   const short FifoOrder = 1;
+   const short PriorityOrder = 2;
+   const short DeadlineOrder = 3;
+
+   const string DiscardPolicy = "DiscardPolicy";
+   // DiscardPolicy takes on the same values as OrderPolicy, plus
+   const short LifoOrder = 4;
+
+   const string MaximumBatchSize = "MaximumBatchSize";
+   // MaximumBatchSize takes on a value of type long
+
+   const string PacingInterval = "PacingInterval";
+   // PacingInterval takes on a value of type TimeBase::TimeT
+
+   const string StartTimeSupported = "StartTimeSupported";
+   // StartTimeSupported takes on a boolean value
+
+   const string StopTimeSupported = "StopTimeSupported";
+   // StopTimeSupported takes on a boolean value
+
+   const string MaxEventsPerConsumer = "MaxEventsPerConsumer";
+   // MaxEventsPerConsumer takes on a value of type long
+
+   interface QoSAdmin {
+
+      QoSProperties get_qos();
+
+      void set_qos ( in QoSProperties qos) raises ( UnsupportedQoS );
+
+      void validate_qos (
+            in QoSProperties required_qos,
+            out NamedPropertyRangeSeq available_qos ) raises ( UnsupportedQoS );
+
+   }; // QosAdmin
+
+   // Admin properties are defined in similar manner as QoS
+   // properties. The only difference is that these properties
+   // are related to channel administration policies, as opposed
+   // message quality of service
+
+   const string MaxQueueLength = "MaxQueueLength";
+   // MaxQueueLength takes on a value of type long
+
+   const string MaxConsumers = "MaxConsumers";
+   // MaxConsumers takes on a value of type long
+
+   const string MaxSuppliers = "MaxSuppliers";
+   // MaxSuppliers takes on a value of type long
+
+   const string RejectNewEvents = "RejectNewEvents";
+   // RejectNewEvents takes on a value of type Boolean
+
+   interface AdminPropertiesAdmin {
+
+      AdminProperties get_admin();
+
+      void set_admin (in AdminProperties admin) raises ( UnsupportedAdmin);
+
+   }; // AdminPropertiesAdmin
+
+}; // CosNotification
+
+#endif /* _COS_NOTIFICATION_IDL_ */
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyChannelAdmin.idl b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyChannelAdmin.idl
new file mode 100644
index 0000000..524d3ea
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyChannelAdmin.idl
@@ -0,0 +1,394 @@
+/**
+ * This module is taken from the standard CORBA Notification Service
+ * 1.1, as described in:
+ *
+ * https://www.omg.org/spec/NOT/1.1/
+ *
+ * The idl was extracted from the following PDF:
+ * formal/04-10-13
+ */
+
+#ifndef _COS_NOTIFY_CHANNEL_ADMIN_IDL_
+#define _COS_NOTIFY_CHANNEL_ADMIN_IDL_
+
+#include "CosNotification.idl"
+#include "CosNotifyFilter.idl"
+#include "CosNotifyComm.idl"
+#include "CosEventChannelAdmin.idl"
+
+#pragma prefix "omg.org"
+
+module CosNotifyChannelAdmin {
+
+   exception ConnectionAlreadyActive {};
+   exception ConnectionAlreadyInactive {};
+   exception NotConnected {};
+
+   // Forward declarations
+   interface ConsumerAdmin;
+   interface SupplierAdmin;
+   interface EventChannel;
+   interface EventChannelFactory;
+
+   enum ProxyType {
+      PUSH_ANY,
+      PULL_ANY,
+      PUSH_STRUCTURED,
+      PULL_STRUCTURED,
+      PUSH_SEQUENCE,
+      PULL_SEQUENCE,
+      PUSH_TYPED,
+      PULL_TYPED
+   };
+
+   enum ObtainInfoMode {
+      ALL_NOW_UPDATES_OFF,
+      ALL_NOW_UPDATES_ON,
+      NONE_NOW_UPDATES_OFF,
+      NONE_NOW_UPDATES_ON
+   };
+
+   interface ProxyConsumer :
+         CosNotification::QoSAdmin,
+         CosNotifyFilter::FilterAdmin {
+
+      readonly attribute ProxyType MyType;
+      readonly attribute SupplierAdmin MyAdmin;
+
+      CosNotification::EventTypeSeq obtain_subscription_types(
+            in ObtainInfoMode mode );
+
+      void validate_event_qos (
+            in CosNotification::QoSProperties required_qos,
+            out CosNotification::NamedPropertyRangeSeq available_qos)
+         raises (CosNotification::UnsupportedQoS);
+
+   }; // ProxyConsumer
+
+   interface ProxySupplier :
+         CosNotification::QoSAdmin,
+         CosNotifyFilter::FilterAdmin {
+
+      readonly attribute ProxyType MyType;
+      readonly attribute ConsumerAdmin MyAdmin;
+
+      attribute CosNotifyFilter::MappingFilter priority_filter;
+      attribute CosNotifyFilter::MappingFilter lifetime_filter;
+
+      CosNotification::EventTypeSeq obtain_offered_types(
+            in ObtainInfoMode mode );
+
+      void validate_event_qos (
+            in CosNotification::QoSProperties required_qos,
+            out CosNotification::NamedPropertyRangeSeq available_qos)
+         raises (CosNotification::UnsupportedQoS);
+
+   }; // ProxySupplier
+
+   interface ProxyPushConsumer :
+         ProxyConsumer,
+         CosNotifyComm::PushConsumer {
+
+      void connect_any_push_supplier (
+            in CosEventComm::PushSupplier push_supplier)
+         raises(CosEventChannelAdmin::AlreadyConnected);
+
+   }; // ProxyPushConsumer
+
+   interface StructuredProxyPushConsumer :
+         ProxyConsumer,
+         CosNotifyComm::StructuredPushConsumer {
+
+      void connect_structured_push_supplier (
+            in CosNotifyComm::StructuredPushSupplier push_supplier)
+         raises(CosEventChannelAdmin::AlreadyConnected);
+
+   }; // StructuredProxyPushConsumer
+
+   interface SequenceProxyPushConsumer :
+         ProxyConsumer,
+         CosNotifyComm::SequencePushConsumer {
+
+      void connect_sequence_push_supplier (
+            in CosNotifyComm::SequencePushSupplier push_supplier)
+         raises(CosEventChannelAdmin::AlreadyConnected);
+
+   }; // SequenceProxyPushConsumer
+
+   interface ProxyPullSupplier :
+         ProxySupplier,
+         CosNotifyComm::PullSupplier {
+
+      void connect_any_pull_consumer (
+            in CosEventComm::PullConsumer pull_consumer)
+         raises(CosEventChannelAdmin::AlreadyConnected);
+
+   }; // ProxyPullSupplier
+
+   interface StructuredProxyPullSupplier :
+         ProxySupplier,
+         CosNotifyComm::StructuredPullSupplier {
+
+      void connect_structured_pull_consumer (
+            in CosNotifyComm::StructuredPullConsumer pull_consumer)
+         raises(CosEventChannelAdmin::AlreadyConnected);
+
+   }; // StructuredProxyPullSupplier
+
+   interface SequenceProxyPullSupplier :
+         ProxySupplier,
+         CosNotifyComm::SequencePullSupplier {
+
+      void connect_sequence_pull_consumer (
+            in CosNotifyComm::SequencePullConsumer pull_consumer)
+         raises(CosEventChannelAdmin::AlreadyConnected);
+
+   }; // SequenceProxyPullSupplier
+
+   interface ProxyPullConsumer :
+         ProxyConsumer,
+         CosNotifyComm::PullConsumer {
+
+      void connect_any_pull_supplier (
+            in CosEventComm::PullSupplier pull_supplier)
+         raises(CosEventChannelAdmin::AlreadyConnected,
+                CosEventChannelAdmin::TypeError );
+
+      void suspend_connection()
+         raises(ConnectionAlreadyInactive, NotConnected);
+
+      void resume_connection()
+         raises(ConnectionAlreadyActive, NotConnected);
+
+   }; // ProxyPullConsumer
+
+   interface StructuredProxyPullConsumer :
+         ProxyConsumer,
+         CosNotifyComm::StructuredPullConsumer {
+
+      void connect_structured_pull_supplier (
+            in CosNotifyComm::StructuredPullSupplier pull_supplier)
+         raises(CosEventChannelAdmin::AlreadyConnected,
+                CosEventChannelAdmin::TypeError );
+
+      void suspend_connection()
+         raises(ConnectionAlreadyInactive, NotConnected);
+
+      void resume_connection()
+         raises(ConnectionAlreadyActive, NotConnected);
+
+   }; // StructuredProxyPullConsumer
+
+   interface SequenceProxyPullConsumer :
+         ProxyConsumer,
+         CosNotifyComm::SequencePullConsumer {
+
+      void connect_sequence_pull_supplier (
+            in CosNotifyComm::SequencePullSupplier pull_supplier)
+         raises(CosEventChannelAdmin::AlreadyConnected,
+                CosEventChannelAdmin::TypeError );
+
+      void suspend_connection()
+         raises(ConnectionAlreadyInactive, NotConnected);
+
+      void resume_connection()
+         raises(ConnectionAlreadyActive, NotConnected);
+
+   }; // SequenceProxyPullConsumer
+
+   interface ProxyPushSupplier :
+         ProxySupplier,
+         CosNotifyComm::PushSupplier {
+
+      void connect_any_push_consumer (
+            in CosEventComm::PushConsumer push_consumer)
+         raises(CosEventChannelAdmin::AlreadyConnected,
+                CosEventChannelAdmin::TypeError );
+
+      void suspend_connection()
+         raises(ConnectionAlreadyInactive, NotConnected);
+
+      void resume_connection()
+         raises(ConnectionAlreadyActive, NotConnected);
+
+   }; // ProxyPushSupplier
+
+   interface StructuredProxyPushSupplier :
+         ProxySupplier,
+         CosNotifyComm::StructuredPushSupplier {
+
+      void connect_structured_push_consumer (
+            in CosNotifyComm::StructuredPushConsumer push_consumer)
+         raises(CosEventChannelAdmin::AlreadyConnected,
+                CosEventChannelAdmin::TypeError );
+
+      void suspend_connection()
+         raises(ConnectionAlreadyInactive, NotConnected);
+
+      void resume_connection()
+         raises(ConnectionAlreadyActive, NotConnected);
+
+   }; // StructuredProxyPushSupplier
+
+   interface SequenceProxyPushSupplier :
+         ProxySupplier,
+         CosNotifyComm::SequencePushSupplier {
+
+      void connect_sequence_push_consumer (
+            in CosNotifyComm::SequencePushConsumer push_consumer)
+         raises(CosEventChannelAdmin::AlreadyConnected,
+                CosEventChannelAdmin::TypeError );
+
+      void suspend_connection()
+         raises(ConnectionAlreadyInactive, NotConnected);
+
+      void resume_connection()
+         raises(ConnectionAlreadyActive, NotConnected);
+
+   }; // SequenceProxyPushSupplier
+
+   typedef long ProxyID;
+   typedef sequence <ProxyID> ProxyIDSeq;
+
+   enum ClientType {
+      ANY_EVENT,
+      STRUCTURED_EVENT,
+      SEQUENCE_EVENT
+   };
+
+   enum InterFilterGroupOperator { AND_OP, OR_OP };
+
+   typedef long AdminID;
+   typedef sequence<AdminID> AdminIDSeq;
+
+   exception AdminNotFound {};
+   exception ProxyNotFound {};
+
+   struct AdminLimit {
+      CosNotification::PropertyName name;
+      CosNotification::PropertyValue value;
+   };
+
+   exception AdminLimitExceeded { AdminLimit admin_property_err; };
+
+   interface ConsumerAdmin :
+         CosNotification::QoSAdmin,
+         CosNotifyComm::NotifySubscribe,
+         CosNotifyFilter::FilterAdmin,
+         CosEventChannelAdmin::ConsumerAdmin {
+
+      readonly attribute AdminID MyID;
+      readonly attribute EventChannel MyChannel;
+
+      readonly attribute InterFilterGroupOperator MyOperator;
+
+      attribute CosNotifyFilter::MappingFilter priority_filter;
+      attribute CosNotifyFilter::MappingFilter lifetime_filter;
+
+      readonly attribute ProxyIDSeq pull_suppliers;
+      readonly attribute ProxyIDSeq push_suppliers;
+
+      ProxySupplier get_proxy_supplier ( in ProxyID proxy_id )
+         raises ( ProxyNotFound );
+
+      ProxySupplier obtain_notification_pull_supplier (
+            in ClientType ctype,
+            out ProxyID proxy_id)
+         raises ( AdminLimitExceeded );
+
+      ProxySupplier obtain_notification_push_supplier (
+            in ClientType ctype,
+            out ProxyID proxy_id)
+         raises ( AdminLimitExceeded );
+
+      void destroy();
+
+   }; // ConsumerAdmin
+
+   interface SupplierAdmin :
+         CosNotification::QoSAdmin,
+         CosNotifyComm::NotifyPublish,
+         CosNotifyFilter::FilterAdmin,
+         CosEventChannelAdmin::SupplierAdmin {
+
+      readonly attribute AdminID MyID;
+      readonly attribute EventChannel MyChannel;
+
+      readonly attribute InterFilterGroupOperator MyOperator;
+
+      readonly attribute ProxyIDSeq pull_consumers;
+      readonly attribute ProxyIDSeq push_consumers;
+
+      ProxyConsumer get_proxy_consumer ( in ProxyID proxy_id )
+         raises ( ProxyNotFound );
+
+      ProxyConsumer obtain_notification_pull_consumer (
+            in ClientType ctype,
+            out ProxyID proxy_id)
+         raises ( AdminLimitExceeded );
+
+      ProxyConsumer obtain_notification_push_consumer (
+            in ClientType ctype,
+            out ProxyID proxy_id)
+         raises ( AdminLimitExceeded );
+
+      void destroy();
+
+   }; // SupplierAdmin
+
+   interface EventChannel :
+      CosNotification::QoSAdmin,
+      CosNotification::AdminPropertiesAdmin,
+      CosEventChannelAdmin::EventChannel {
+
+      readonly attribute EventChannelFactory MyFactory;
+
+      readonly attribute ConsumerAdmin default_consumer_admin;
+      readonly attribute SupplierAdmin default_supplier_admin;
+
+      readonly attribute CosNotifyFilter::FilterFactory
+                  default_filter_factory;
+
+      ConsumerAdmin new_for_consumers(
+            in InterFilterGroupOperator op,
+            out AdminID id );
+
+      SupplierAdmin new_for_suppliers(
+            in InterFilterGroupOperator op,
+            out AdminID id );
+
+      ConsumerAdmin get_consumeradmin ( in AdminID id )
+         raises (AdminNotFound);
+
+      SupplierAdmin get_supplieradmin ( in AdminID id )
+         raises (AdminNotFound);
+
+      AdminIDSeq get_all_consumeradmins();
+      AdminIDSeq get_all_supplieradmins();
+
+   }; // EventChannel
+
+   typedef long ChannelID;
+   typedef sequence<ChannelID> ChannelIDSeq;
+
+   exception ChannelNotFound {};
+
+   interface EventChannelFactory {
+
+      EventChannel create_channel (
+            in CosNotification::QoSProperties initial_qos,
+            in CosNotification::AdminProperties initial_admin,
+            out ChannelID id)
+         raises(CosNotification::UnsupportedQoS,
+                CosNotification::UnsupportedAdmin );
+
+      ChannelIDSeq get_all_channels();
+
+      EventChannel get_event_channel ( in ChannelID id )
+         raises (ChannelNotFound);
+
+   }; // EventChannelFactory
+   
+}; // CosNotifyChannelAdmin
+
+#endif /* _COS_NOTIFY_CHANNEL_ADMIN_IDL_ */
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyComm.idl b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyComm.idl
new file mode 100644
index 0000000..33df3d7
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyComm.idl
@@ -0,0 +1,135 @@
+/**
+ * This module is taken from the standard CORBA Notification Service
+ * 1.1, as described in:
+ *
+ * https://www.omg.org/spec/NOT/1.1/
+ *
+ * The idl was extracted from the following PDF:
+ * formal/04-10-13
+ */
+
+#ifndef _COS_NOTIFY_COMM_IDL_
+#define _COS_NOTIFY_COMM_IDL_
+
+#include "CosNotification.idl"
+#include "CosEventComm.idl"
+
+#pragma prefix "omg.org"
+
+module CosNotifyComm {
+
+   exception InvalidEventType { CosNotification::_EventType type; };
+
+   interface NotifyPublish {
+
+      void offer_change (
+            in CosNotification::EventTypeSeq added,
+            in CosNotification::EventTypeSeq removed )
+         raises ( InvalidEventType );
+
+   }; // NotifyPublish
+
+   interface NotifySubscribe {
+
+      void subscription_change(
+            in CosNotification::EventTypeSeq added,
+            in CosNotification::EventTypeSeq removed )
+         raises ( InvalidEventType );
+
+   }; // NotifySubscribe
+
+   interface PushConsumer :
+      NotifyPublish,
+      CosEventComm::PushConsumer {
+   }; // PushConsumer
+
+   interface PullConsumer :
+      NotifyPublish,
+      CosEventComm::PullConsumer {
+   }; // PullConsumer
+
+   interface PullSupplier :
+      NotifySubscribe,
+      CosEventComm::PullSupplier {
+   }; // PullSupplier
+
+   interface PushSupplier :
+      NotifySubscribe,
+      CosEventComm::PushSupplier {
+   };
+
+   interface StructuredPushConsumer : NotifyPublish {
+
+      void push_structured_event(
+            in CosNotification::StructuredEvent notification)
+         raises(CosEventComm::Disconnected);
+
+      void disconnect_structured_push_consumer();
+
+   }; // StructuredPushConsumer
+
+   interface StructuredPullConsumer : NotifyPublish {
+      
+      void disconnect_structured_pull_consumer();
+
+   }; // StructuredPullConsumer
+
+   interface StructuredPullSupplier : NotifySubscribe {
+
+      CosNotification::StructuredEvent pull_structured_event()
+         raises(CosEventComm::Disconnected);
+
+      CosNotification::StructuredEvent try_pull_structured_event(
+            out boolean has_event)
+         raises(CosEventComm::Disconnected);
+
+      void disconnect_structured_pull_supplier();
+
+   }; // StructuredPullSupplier
+
+   interface StructuredPushSupplier : NotifySubscribe {
+      
+      void disconnect_structured_push_supplier();
+
+   }; // StructuredPushSupplier
+
+   interface SequencePushConsumer : NotifyPublish {
+
+      void push_structured_events(
+            in CosNotification::EventBatch notifications)
+         raises(CosEventComm::Disconnected);
+
+      void disconnect_sequence_push_consumer();
+
+   }; // SequencePushConsumer
+
+   interface SequencePullConsumer : NotifyPublish {
+      
+      void disconnect_sequence_pull_consumer();
+
+   }; // SequencePullConsumer
+
+   interface SequencePullSupplier : NotifySubscribe {
+
+      CosNotification::EventBatch pull_structured_events(
+            in long max_number )
+         raises(CosEventComm::Disconnected);
+
+      CosNotification::EventBatch try_pull_structured_events(
+            in long max_number,
+            out boolean has_event)
+         raises(CosEventComm::Disconnected);
+
+      void disconnect_sequence_pull_supplier();
+
+   }; // SequencePullSupplier
+
+   interface SequencePushSupplier : NotifySubscribe {
+      
+      void disconnect_sequence_push_supplier();
+
+   }; // SequencePushSupplier
+
+}; // CosNotifyComm
+
+#endif /* _COS_NOTIFY_COMM_IDL_ */
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyFilter.idl b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyFilter.idl
new file mode 100644
index 0000000..977cc3b
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/CosNotifyFilter.idl
@@ -0,0 +1,187 @@
+/**
+ * This module is taken from the standard CORBA Notification Service
+ * 1.1, as described in:
+ *
+ * https://www.omg.org/spec/NOT/1.1/
+ *
+ * The idl was extracted from the following PDF:
+ * formal/04-10-13
+ */
+
+#ifndef _COS_NOTIFY_FILTER_IDL_
+#define _COS_NOTIFY_FILTER_IDL_
+
+#include "CosNotifyComm.idl"
+
+#pragma prefix "omg.org"
+
+module CosNotifyFilter {
+
+   typedef long ConstraintID;
+
+   struct ConstraintExp {
+      CosNotification::EventTypeSeq event_types;
+      string constraint_expr;
+   };
+
+   typedef sequence<ConstraintID> ConstraintIDSeq;
+   typedef sequence<ConstraintExp> ConstraintExpSeq;
+
+   struct ConstraintInfo {
+      ConstraintExp constraint_expression;
+      ConstraintID constraint_id;
+   };
+
+   typedef sequence<ConstraintInfo> ConstraintInfoSeq;
+
+   struct MappingConstraintPair {
+      ConstraintExp constraint_expression;
+      any result_to_set;
+   };
+
+   typedef sequence<MappingConstraintPair> MappingConstraintPairSeq;
+
+   struct MappingConstraintInfo {
+      ConstraintExp constraint_expression;
+      ConstraintID constraint_id;
+      any value;
+   };
+
+   typedef sequence<MappingConstraintInfo> MappingConstraintInfoSeq;
+
+   typedef long CallbackID;
+   typedef sequence<CallbackID> CallbackIDSeq;
+
+   exception UnsupportedFilterableData {};
+   exception InvalidGrammar {};
+   exception InvalidConstraint {ConstraintExp constr;};
+   exception DuplicateConstraintID {ConstraintID id;};
+   exception ConstraintNotFound {ConstraintID id;};
+   
+   exception CallbackNotFound {};
+
+   exception InvalidValue {ConstraintExp constr; any value;};
+
+   interface Filter {
+
+      readonly attribute string constraint_grammar;
+
+      ConstraintInfoSeq add_constraints (
+            in ConstraintExpSeq constraint_list)
+         raises (InvalidConstraint);
+
+      void modify_constraints (
+            in ConstraintIDSeq del_list,
+            in ConstraintInfoSeq modify_list)
+         raises (InvalidConstraint, ConstraintNotFound);
+
+      ConstraintInfoSeq get_constraints(
+            in ConstraintIDSeq id_list)
+         raises (ConstraintNotFound);
+
+      ConstraintInfoSeq get_all_constraints();
+
+      void remove_all_constraints();
+
+      void destroy();
+
+      boolean match ( in any filterable_data )
+         raises (UnsupportedFilterableData);
+
+      boolean match_structured (
+            in CosNotification::StructuredEvent filterable_data )
+         raises (UnsupportedFilterableData);
+
+      boolean match_typed (
+            in CosNotification::PropertySeq filterable_data )
+         raises (UnsupportedFilterableData);
+
+      CallbackID attach_callback (
+            in CosNotifyComm::NotifySubscribe callback);
+
+      void detach_callback ( in CallbackID callback)
+         raises ( CallbackNotFound );
+
+      CallbackIDSeq get_callbacks();
+
+   }; // Filter
+
+   interface MappingFilter {
+
+      readonly attribute string constraint_grammar;
+
+      readonly attribute CORBA::TypeCode value_type;
+
+      readonly attribute any default_value;
+
+      MappingConstraintInfoSeq add_mapping_constraints (
+            in MappingConstraintPairSeq pair_list)
+         raises (InvalidConstraint, InvalidValue);
+
+      void modify_mapping_constraints (
+            in ConstraintIDSeq del_list,
+            in MappingConstraintInfoSeq modify_list)
+         raises (InvalidConstraint, InvalidValue,
+                  ConstraintNotFound);
+
+      MappingConstraintInfoSeq get_mapping_constraints (
+            in ConstraintIDSeq id_list)
+         raises (ConstraintNotFound);
+
+      MappingConstraintInfoSeq get_all_mapping_constraints();
+
+      void remove_all_mapping_constraints();
+
+      void destroy();
+
+      boolean match (
+            in any filterable_data,
+            out any result_to_set )
+         raises (UnsupportedFilterableData);
+
+      boolean match_structured (
+            in CosNotification::StructuredEvent filterable_data,
+            out any result_to_set)
+         raises (UnsupportedFilterableData);
+
+      boolean match_typed (
+            in CosNotification::PropertySeq filterable_data,
+            out any result_to_set)
+         raises (UnsupportedFilterableData);
+
+   }; // MappingFilter
+
+   interface FilterFactory {
+
+      Filter create_filter ( in string constraint_grammar)
+         raises (InvalidGrammar);
+
+      MappingFilter create_mapping_filter (
+            in string constraint_grammar,
+            in any default_value)
+         raises(InvalidGrammar);
+
+   }; // FilterFactory
+
+   typedef long FilterID;
+   typedef sequence<FilterID> FilterIDSeq;
+
+   exception FilterNotFound {};
+
+   interface FilterAdmin {
+
+      FilterID add_filter ( in Filter new_filter );
+
+      void remove_filter ( in FilterID filter ) raises ( FilterNotFound );
+
+      Filter get_filter ( in FilterID filter ) raises ( FilterNotFound );
+
+      FilterIDSeq get_all_filters();
+
+      void remove_all_filters();
+
+   }; // FilterAdmin
+
+}; // CosNotifyFilter
+
+#endif /* _COS_NOTIFY_FILTER_IDL_ */
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/about.html b/org.eclipse.mdm.api.odsadapter/src/main/idl/about.html
new file mode 100644
index 0000000..399c937
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/about.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- saved from url=(0044)https://eclipse.org/legal/epl/longabout.html -->
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p><em>October 4, 2016</em></p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content").  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL").  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+		
+		<h3>Third Party Content</h3>
+		<p>The Content includes items that have been sourced from third parties as set out below. If you 
+		did not receive this Content directly from the Eclipse Foundation, the following is provided 
+		for informational purposes only, and you should look to the Redistributor's license for 
+		terms and conditions of use.</p>
+		<p><em>
+		<strong>ods530.idl</strong> <br><br>
+		This file is part of the ASAM ODS standard and is not subject to modification. 
+		</em></p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/idl.config b/org.eclipse.mdm.api.odsadapter/src/main/idl/idl.config
new file mode 100644
index 0000000..7c76796
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/idl.config
@@ -0,0 +1,6 @@
+PkgPrefix.CosEventComm=org.omg

+PkgPrefix.CosNotification=org.omg

+PkgPrefix.CosNotifyComm=org.omg

+PkgPrefix.CosNotifyFilter=org.omg

+PkgPrefix.CosEventChannelAdmin=org.omg

+PkgPrefix.CosNotifyChannelAdmin=org.omg
\ No newline at end of file
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/idl/ods530.idl b/org.eclipse.mdm.api.odsadapter/src/main/idl/ods530.idl
new file mode 100644
index 0000000..6071509
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/idl/ods530.idl
@@ -0,0 +1,10883 @@
+//    *********************************************
+//    *     ASAM ODS 5.3.0 Interface Definition     *
+//    *********************************************
+//
+//    Generated: Tue Nov 20 09:28:37 CET 2012
+//
+// More explanation for the method getInstancesEx of the interface
+// ApplElemAccess.   More details for the method setRelationType of the
+// interface ApplicationRelation.
+//
+// Method getRelationByBaseName of the interface ApplicationElement added.  
+// Method getInverseRelationName of instance BaseRelation added.   Better
+// explanation in the comments.  Removed unused error codes of the exceptions.
+//
+// 2003-12-31
+// ODS Version 5.0
+//
+// Add SelOpcode IS_NULL and IS_NOT_NULL.  Add exception AO_INVALID_DATATYPE
+// to the method setEnumerationDefinition of the interface ApplicationElement.
+//  Method getEnumerationDefinition added to the Interface BaseRelation.  Add
+// comment to methods getFormula and setFormula of interface Column.
+//
+// Add the variable CREATE_COSESSION_ALLOWED at the method newSession at the
+// interface AoFactory.   Add the methods createCoSession and getUser at the
+// interface AoSession.  Add values of localcolumn at the methods
+// getInstances, getInstancesExt and updateInstances of the interface
+// ApplElemAccess.  Comment of method setValue of the interface ValueMatrix
+// reworked.
+//
+// Correct the Method getRelationByBaseName of the interface
+// ApplicationElement to the Method getRelationsByBaseName, mistake in
+// Interface definition there are at some elements relations derived from the
+// same base relation allowed.
+//
+// Add, SUM to the AggrFunc.  Change comment of method getApplicationStructure
+// and getBaseStructure of the interface AoSession, the method
+// getApplicationStructure of the interface ApplicationElement.and the method
+// getRelation of the interface BaseStructure.  Add version string description
+// at method getInterfaceVersion of interface AoFactory.
+//
+// Add the Enumeration ValueMatrixMode.  Change the comment of the Methods
+// 13001, 13004, 13006, 14018, 14022, 16003, 21002, 24007  Add the exception
+// AO_INVALID_VALUEMATRIX_STRUCTURE for the method getValueMatrix of the
+// interface Measurement and ApplElemAccess.  Add the new method
+// getValueMatrixInMode of the interfaces Measurement (16005), SubMatrix
+// (21004) and ApplElemAccess   Add the methods getSequenceRepresentation
+// (13013), setSequenceRepresentation (13014), getGenerationParameters
+// (13015), setGenerationParameters (13016) and getRawDataType (13017) of the
+// interface Column.  Add the method getMode (22022) of the interface
+// ValueMatrix.  Little changes in description of the methods, specify which
+// object is modified, with the numbers 4008, 4009, 4010, 4011, 4012, 4013,
+// 4014, 4019, 5001, 5002, 5020, 5021, 5022, 5023, 6010, 6011, 6012, 6013,
+// 6014, 6015, 6016, 6018, 7002, 7003, 7014, 7015, 12001, 12006, 12007, 13005,
+// 14001, 14002, 14014, 14016, 14017, 22014, 22019.  Correct typing errors in
+// method 24005
+//
+// Correct the enumeration ValueMatrixMode. Correct typing errors at method
+// 13014. Extend explanation at 13015 and 13016
+//
+// Typing corrections in IDL:  Method 24005 comment changed. Change the word
+// 'calibrated' into     'recalculated' in method 4014 setUnit.
+//
+// Set the methods hasValueFlag and withValueFlag of the interface
+// ApplicationAttribute to deprecated. Change description of createAttribute
+// of interface ApplicationElement and ErrorCode AO_MISSING_VALUE.
+//
+// Add the interfaces ODSDirectory, ODSFile and ODSFileTransfer and
+// Enumeration FileOpenMode for the managed files. Add the methods
+// getODSDirectory in the interfaces ApplElemAccess and InstanceElement.
+//
+// Add the methods getEnumerationAttributes and getEnumerationStructure of the
+// interface AoSession with the required structures and sequences.
+//
+// Correct typing error's.
+//
+// Add AggrFunc DISTINCT, SelOpcode NOTLIKE and CI_NOTLIKE
+//
+// Remove ODSDirectory, change the way ODSFile is created. Change
+// FileOpenMode.
+//
+// Change the description of the method getUnit of the interface Column. 
+// Change the description of the methods of the interfaces ODSFile and
+// ODSFileTransfer.  Change the description of the enumerations
+// ValueMatrix_Mode and FileOpenMode.  Change the description of the structure
+// ApplRel.
+//
+// Remove Interface ODSFile and ODSFileTransfer and Enumeration FileOpneMode
+// with the methods which creates the ODSFile interface.
+//
+// 2009-09-25
+// Correct of some interfacaes and methods the description.   Finalize for
+// ASAM ODS version 5.2
+//
+// Add FOR_USER at auth parameter of method newSession of interface AoFactory 
+// Deprecated, solved by NVH Application model for following methods:
+// listScalingColumns, getScalingColumns, listColumnsScaledBy,
+// getColumnsScaledBy and addColumnScaledBy of interface ValueMatrix and the
+// methods isScaling and setScaling of interface Column
+//
+// Add AoSession.getId()  Add AoFactory.newSessionNameValue()  Add
+// SelOpcode.BETWEEN  Add AggrFunc.ORD  Add comment to
+// ApplElemAccess.getInstancesExt()
+//
+// Add method getODSFile at the interfaces ApplElemAccess and InstanceElement.
+//  Add the Interfaces ODSFile, ODSReadTransfer and ODSWriteTransfer.  Add
+// ErrorCode AO_FILE_LOCKED.  Add AoFile to the description of
+// AO_INVALID_BASETYPE
+//
+// Inherit ODSFile from InstanceElement. Rename method getOdsFile to
+// upcastOdsFile at interface InstanceElement. Add methods takeUnderControl
+// and removefromControl to the interface ODSFile. Method skipOctets returns
+// the real skipped number of octets.  Rename AggrFunc.ORD to AggrFunc.POINT
+//
+// Update description of the ODSFile methods and some error codes.
+//
+// Add the method getRelations at the interface BaseStructure.  Minor changes
+// in the description of some methods.  Add description for the exceptions
+// A_BAD_PARAMETER and AO_SYSTEM_PROBLEM at the method getOctetSeq of the
+// interface ODSReadTransfer.
+//
+// 2012-11-20
+// Final release ODS 5.3.0
+//
+//
+#ifndef ods_idl
+#define ods_idl
+
+module org {
+
+/**
+* ASAM services.
+*/
+module asam {
+
+/**
+* ASAM ODS service.
+*/
+module ods {
+interface AoFactory;
+interface AoSession;
+interface ApplicationAttribute;
+interface ApplicationElement;
+interface ApplicationRelation;
+interface ApplicationStructure;
+interface BaseAttribute;
+interface BaseElement;
+interface BaseRelation;
+interface BaseStructure;
+interface Blob;
+interface Column;
+interface InstanceElement;
+interface InstanceElementIterator;
+interface Measurement;
+interface NameIterator;
+interface NameValueIterator;
+interface NameValueUnitIterator;
+interface SMatLink;
+interface SubMatrix;
+interface ValueMatrix;
+interface NameValueUnitIdIterator;
+interface ApplElemAccess;
+interface QueryEvaluator;
+interface Query;
+interface NameValueUnitSequenceIterator;
+interface EnumerationDefinition;
+interface ElemResultSetExtSeqIterator;
+interface ODSFile;
+interface ODSReadTransfer;
+interface ODSWriteTransfer;
+
+/**
+* The ASAM ODS error severity flags.
+*/
+enum SeverityFlag {
+   SUCCESS,     // Ok.
+   INFORMATION, // Information.
+   WARNING,     // Warning.
+   ERROR        // Error.
+};
+
+/**
+* The ASAM ODS relation types.
+*/
+enum RelationType {
+   FATHER_CHILD, // Father-child relation.
+   INFO,         // Info relation.
+   INHERITANCE   // Inheritance relation.
+};
+
+/**
+* The ASAM ODS relationships.
+*/
+enum Relationship {
+   FATHER,    // Father.
+   CHILD,     // Child.
+   INFO_TO,   // Directed informational relationship.
+   INFO_FROM, // Directed informational relationship.
+   INFO_REL,  // Informational relationship (no direction)
+   SUPERTYPE, // Inheritance relationship: supertype.
+   SUBTYPE,   // Inheritance relationship: subtype.
+   ALL_REL    // Any of the relationships above.
+};
+
+/**
+* The ASAM ODS data types.
+*    DT_xxx  Basic data types.
+*    DS_xxx  Sequence of basic data type.
+*    ||
+*    |+- T == Type, S == Sequences.
+*    +-- D == Datatype.
+*/
+enum DataType {
+   DT_UNKNOWN,           // Unknown datatype.
+   DT_STRING,            // String.
+   DT_SHORT,             // Short value (16 bit).
+   DT_FLOAT,             // Float value (32 bit).
+   DT_BOOLEAN,           // Boolean value.
+   DT_BYTE,              // Byte value (8 bit).
+   DT_LONG,              // Long value (32 bit).
+   DT_DOUBLE,            // Double precision float value (64 bit).
+   DT_LONGLONG,          // LongLong value (64 bit).
+   DT_ID,                // LongLong value (64 bit). Not used. DT_LONGLONG is
+                         // used instead.
+   DT_DATE,              // Date. Meaning: YYYYMMDDhhmmsslllcccnnn....   -
+                         // YYYY = year, required.   - MM = month, optional.  
+                         // - DD =  day, optional.   - hh =  hour, optional.  
+                         // - mm =  minute, optional.   - ss =  second,
+                         // optional.   - lll =  millisec, optional, not
+                         // supported by Oracle timestamp.   - ccc =  microse,
+                         // optional, not supported by Oracle timestamp.   -
+                         // nnn =  nanosec, optional, not supported by Oracle
+                         // timestamp.
+   DT_BYTESTR,           // Bytestream.
+   DT_BLOB,              // Blob.
+   DT_COMPLEX,           // Complex value (32 bit each part).
+   DT_DCOMPLEX,          // Complex value (64 bit each part).
+   DS_STRING,            // String sequence.
+   DS_SHORT,             // Short sequence.
+   DS_FLOAT,             // Float sequence.
+   DS_BOOLEAN,           // Boolean sequene.
+   DS_BYTE,              // Byte sequence.
+   DS_LONG,              // Long sequence.
+   DS_DOUBLE,            // Double sequence.
+   DS_LONGLONG,          // Longlong sequence.
+   DS_COMPLEX,           // Complex sequence.
+   DS_DCOMPLEX,          // Double complex sequence.
+   DS_ID,                // LongLong sequence. Not used. DS_LONGLONG is used
+                         // instead.
+   DS_DATE,              // Date sequence.
+   DS_BYTESTR,           // Bytestream sequence.
+   DT_EXTERNALREFERENCE, // External reference.
+   DS_EXTERNALREFERENCE, // Sequence of external reference.
+   DT_ENUM,              // The enumeration datatype.
+   DS_ENUM               // The enumeration sequence datatype.
+};
+
+/**
+* The ASAM ODS build-up function codes for measurement views.
+*/
+enum BuildUpFunction {
+   BUP_JOIN,  // Join the columns
+   BUP_MERGE, // Merge the columns
+   BUP_SORT   // Sort the columns
+};
+
+/**
+* The ASAM ODS attribute type codes.
+*/
+enum AttrType {
+   APPLATTR_ONLY, // Report only application attributes.
+   INSTATTR_ONLY, // Report only instance attributes.
+   ALL            // All attributes.
+};
+
+/**
+* The ASAM ODS types for setting values.
+*/
+enum SetType {
+   APPEND, // Append data to the value matrix.
+   INSERT, // Insert data into the value matrix.
+   UPDATE, // Modify existing data of the value matrix.
+   REMOVE  // Remove the given information.
+};
+
+/**
+* The ASAM ODS error codes.
+*/
+enum ErrorCode {
+   AO_UNKNOWN_ERROR,
+   AO_ACCESS_DENIED,
+   AO_BAD_OPERATION,
+   AO_BAD_PARAMETER,
+   AO_CONNECT_FAILED,
+   AO_CONNECT_REFUSED,
+   AO_CONNECTION_LOST,
+   AO_DUPLICATE_BASE_ATTRIBUTE,
+   AO_DUPLICATE_NAME,
+   AO_DUPLICATE_VALUE,
+   AO_HAS_INSTANCES,
+   AO_HAS_REFERENCES,
+   AO_IMPLEMENTATION_PROBLEM,
+   AO_INCOMPATIBLE_UNITS,
+   AO_INVALID_ASAM_PATH,
+   AO_INVALID_ATTRIBUTE_TYPE,
+   AO_INVALID_BASE_ELEMENT,
+   AO_INVALID_BASETYPE,
+   AO_INVALID_BUILDUP_FUNCTION,
+   AO_INVALID_COLUMN,
+   AO_INVALID_COUNT,
+   AO_INVALID_DATATYPE,
+   AO_INVALID_ELEMENT,
+   AO_INVALID_LENGTH,
+   AO_INVALID_ORDINALNUMBER,
+   AO_INVALID_RELATION,
+   AO_INVALID_RELATION_RANGE,
+   AO_INVALID_RELATION_TYPE,
+   AO_INVALID_RELATIONSHIP,
+   AO_INVALID_SET_TYPE,
+   AO_INVALID_SMATLINK,
+   AO_INVALID_SUBMATRIX,
+   AO_IS_BASE_ATTRIBUTE,
+   AO_IS_BASE_RELATION,
+   AO_IS_MEASUREMENT_MATRIX,
+   AO_MATH_ERROR,
+   AO_MISSING_APPLICATION_ELEMENT,
+   AO_MISSING_ATTRIBUTE,
+   AO_MISSING_RELATION,
+   AO_MISSING_VALUE,
+   AO_NO_MEMORY,
+   AO_NO_PATH_TO_ELEMENT,
+   AO_NOT_FOUND,
+   AO_NOT_IMPLEMENTED,
+   AO_NOT_UNIQUE,
+   AO_OPEN_MODE_NOT_SUPPORTED,
+   AO_SESSION_LIMIT_REACHED,
+   AO_SESSION_NOT_ACTIVE,
+   AO_TRANSACTION_ALREADY_ACTIVE,
+   AO_TRANSACTION_NOT_ACTIVE,
+   AO_HAS_BASE_RELATION,
+   AO_HAS_BASE_ATTRIBUTE,
+   AO_UNKNOWN_UNIT,
+   AO_NO_SCALING_COLUMN,
+   AO_QUERY_TYPE_INVALID,
+   AO_QUERY_INVALID,
+   AO_QUERY_PROCESSING_ERROR,
+   AO_QUERY_TIMEOUT_EXCEEDED,
+   AO_QUERY_INCOMPLETE,
+   AO_QUERY_INVALID_RESULTTYPE,
+   AO_INVALID_VALUEMATRIX_STRUCTURE,
+   AO_FILE_LOCKED,
+   AO_SYSTEM_PROBLEM
+};
+
+/**
+* The selection operators.  SelOpcode gives query instructions like
+* "equal", "greater" etc. So far, these arguments were case sensitive.
+* There was a demand to add these arguments also for case insensitive
+* comparison operations. Therefore, the SelOpcodes for case insensitivity
+* were added. These arguments have the prefix “CI_”.
+*/
+enum SelOpcode {
+   EQ,          // Equal
+   NEQ,         // Not equal
+   LT,          // Less then
+   GT,          // Greater then
+   LTE,         // Less then equal
+   GTE,         // Greater then equal
+   INSET,       // In set, value can be a sequence.
+   NOTINSET,    // Not in set, value can be a sequence.
+   LIKE,        // like, use  pattern matching, see Pattern for the wildcard
+                // definitions.
+   CI_EQ,       // Equal. case insensitive for DT_STRING.
+   CI_NEQ,      // Not equal. case insensitive for DT_STRING.
+   CI_LT,       // Less then. case insensitive for DT_STRING.
+   CI_GT,       // Greater then. case insensitive for DT_STRING.
+   CI_LTE,      // Less then equal. case insensitive for DT_STRING.
+   CI_GTE,      // Greater then equal. case insensitive for DT_STRING.
+   CI_INSET,    // In set, value can be a sequence. case insensitive for
+                // DT_STRING.
+   CI_NOTINSET, // Not in set, value can be a sequence. case insensitive for
+                // DT_STRING.
+   CI_LIKE,     // like, use  pattern matching, see Pattern for the wildcard
+                // definitions. case insensitive for DT_STRING.
+   IS_NULL,     // Value is NULL
+   IS_NOT_NULL, // Value is not NULL
+   NOTLIKE,     // Not LIKE
+   CI_NOTLIKE,  // Not LIKE, case insensitive for DT_STRING.
+   BETWEEN      // Between; selects all instances where the value of 'attr'
+                // lies between the first two values given in 'value' (with
+                // 'attr', 'value' being elements of the SelValue structure;
+                // 'value' must be of data type S_*).
+};
+
+/**
+* Operator, bracket open and close.
+*/
+enum SelOperator {
+   AND,   // AND the two conditions.
+   OR,    // OR the two conditions.
+   NOT,   // Negate the next condition.
+   OPEN,  // Open brackets.
+   CLOSE  // Close brackets
+};
+
+/**
+* The ASAM ODS types for setting access rights.
+*/
+enum RightsSet {
+   SET_RIGHT,    // Set the given rights, overwrite the existing rights.
+   ADD_RIGHT,    // Add the given rights to the existing rights.
+   REMOVE_RIGHT  // Remove the given rights form the existing rights.
+};
+
+/**
+* Status of the query execution.
+*/
+enum QueryStatus {
+   COMPLETE,   // The execution is ready.
+   INCOMPLETE  // The execution is still running.
+};
+
+/**
+* The supported aggregate functions of the GetInstancesExt.
+*/
+enum AggrFunc {
+   NONE,     // No aggregate function is used for attribute.
+   COUNT,    // Count
+   DCOUNT,   // Distinct count
+   MIN,      // Min; only for numerical values
+   MAX,      // Max; only for numerical values
+   AVG,      // Average; only for numerical values
+   STDDEV,   // Standard deviation; only for numerical values
+   SUM,      // Sum; only for numerical values
+   DISTINCT, // Distinct
+   POINT     // The index of the values, only used by the attribute values of
+             // element AoLocalColumn
+};
+
+/**
+* The selection type.
+*/
+enum SelType {
+   SEL_VALUE_TYPE,    // Selection value.
+   SEL_OPERATOR_TYPE  // Selection logical operator.
+};
+
+/**
+* The type of the join.
+*/
+enum JoinType {
+   JTDEFAULT, // Force inner join.
+   JTOUTER    // Force outer join on destination AID.
+};
+
+/**
+* The mode of the value matrix.
+*/
+enum ValueMatrixMode {
+   CALCULATED, // The value matrix returns the calculated values.   The values
+               // of explicit columns are returned as they are stored in the
+               // physical storage.   The values of implicit columns are
+               // expanded and returned explicitly.  The values of raw columns
+               // are calculated according to the corresponding algorithm
+               // (using the calculation algorithms given by the values of the
+               // application attributes derived from the base attributes
+               // 'sequence_representation' and 'generation_parameters') and
+               // the resulting physical values are returned.  Writing to the
+               // value matrix is not allowed in this mode.
+   STORAGE     // The value matrix returns the values given in the physical
+               // storage.  The values of explicit columns are returned as
+               // they are stored in the physical storage.  The values of
+               // implicit columns are expanded and returned explicitly.  The
+               // values of raw columns are returned as they are stored
+               // (without using the calculation algorithms given by the
+               // values of the application attributes derived from the base
+               // attributes 'sequence_representation' and
+               // 'generation_parameters').  Writing to value matrix is
+               // allowed in this mode.
+};
+
+// Datatype definitions (T_xxx).
+typedef string     T_STRING;
+typedef boolean    T_BOOLEAN;
+typedef short      T_SHORT;
+typedef float      T_FLOAT;
+typedef octet      T_BYTE;
+typedef long       T_LONG;
+typedef double     T_DOUBLE;
+typedef T_STRING   Name;
+typedef T_STRING   Pattern;
+typedef T_STRING   BaseType;
+typedef T_STRING   T_DATE;
+typedef Blob       T_BLOB;
+
+// Sequence definitions (S_xxx).
+typedef sequence<T_BYTE> T_BYTESTR;
+typedef sequence<T_BOOLEAN> S_BOOLEAN;
+typedef sequence<T_BYTE> S_BYTE;
+typedef sequence<T_DOUBLE> S_DOUBLE;
+typedef sequence<T_FLOAT> S_FLOAT;
+typedef sequence<T_LONG> S_LONG;
+typedef sequence<T_SHORT> S_SHORT;
+typedef sequence<T_STRING> S_STRING;
+typedef sequence<BaseType> BaseTypeSequence;
+typedef sequence<Name> NameSequence;
+typedef sequence<Column> ColumnSequence;
+typedef sequence<SMatLink> SMatLinkSequence;
+typedef sequence<SubMatrix> SubMatrixSequence;
+typedef sequence<T_DATE> S_DATE;
+typedef sequence<T_BYTESTR> S_BYTESTR;
+typedef sequence<S_STRING> SS_STRING;
+typedef sequence<S_SHORT> SS_SHORT;
+typedef sequence<S_FLOAT> SS_FLOAT;
+typedef sequence<S_BOOLEAN> SS_BOOLEAN;
+typedef sequence<S_BYTE> SS_BYTE;
+typedef sequence<S_LONG> SS_LONG;
+typedef sequence<S_DOUBLE> SS_DOUBLE;
+typedef sequence<S_DATE> SS_DATE;
+typedef sequence<S_BYTESTR> SS_BYTESTR;
+typedef sequence<T_BLOB> S_BLOB;
+typedef sequence<ApplicationElement> ApplicationElementSequence;
+typedef sequence<ApplicationRelation> ApplicationRelationSequence;
+typedef sequence<ApplicationAttribute> ApplicationAttributeSequence;
+typedef sequence<BaseRelation> BaseRelationSequence;
+typedef sequence<BaseAttribute> BaseAttributeSequence;
+typedef sequence<BaseElement> BaseElementSequence;
+typedef sequence<InstanceElement> InstanceElementSequence;
+typedef sequence<SelOperator> SelOperatorSequence;
+
+/**
+* The ASAM ODS relation range structure.
+*/
+struct RelationRange {
+   T_SHORT min; // The minimum number in the range.
+   T_SHORT max; // The maximum number in the range. -1 means MANY without a
+                // specified maximum number.
+};
+
+/**
+* The ASAM ODS 64 bit integer structure.  This type is represented in the
+* datatype enumeration by DT_LONGLONG.
+*/
+struct T_LONGLONG {
+   T_LONG high; // The most significant 32 bits of the 64 bit value.
+   T_LONG low;  // The least significant 32 bits of the 64 bit value.
+};
+
+/**
+* The ASAM ODS complex data structure.  This type is represented in the
+* datatype enumeration by DT_COMPLEX.
+*/
+struct T_COMPLEX {
+   T_FLOAT r; // The real part of the complex number.
+   T_FLOAT i; // The imaginary part of the complex number.
+};
+
+/**
+* The ASAM ODS double-precision complex data structure. This type is
+* represented in the datatype enumeration by DT_DCOMPLEX.
+*/
+struct T_DCOMPLEX {
+   T_DOUBLE r; // The real part of the double precision complex number.
+   T_DOUBLE i; // The imaginary part of the double precision complex number.
+};
+
+/**
+* The ASAM ODS name-unit tuple structure.
+*/
+struct NameUnit {
+   Name     valName; // Attribute name or measured quantity name.
+   T_STRING unit;    // Column unit as string.
+};
+
+/**
+* The description of an reference object, the reference object can be an
+* internal ASAM ODS object or an external object. This type is
+* represented in the datatype enumeration by DT_EXTERNALREFERENCE.
+*/
+struct T_ExternalReference {
+   T_STRING description; // Description of the external reference.
+   T_STRING mimeType;    // MIME-type of the external object.
+   T_STRING location;    // Location of the external reference. (asam path or
+                         // URL)
+};
+
+/**
+* The application attribute information (metadata) definition. The same
+* information is available at the interface ApplicationAttribute
+*/
+struct ApplAttr {
+   Name       aaName;       // The application attribute name. The same name
+                            // is returned by the method getName() of the
+                            // ApplicationAttribute interface.     At the RPC
+                            // API this information was stored in the field
+                            // aAName of the structure AttrSeq and the request
+                            // AOP_GetAttr.
+   Name       baName;       // The name of the base attribute, empty ("") if
+                            // the application attribute is not derived from a
+                            // base attribute. The same name is returned by
+                            // the methods getName() of the BaseAttribute
+                            // interface. The base attribute is given by the
+                            // the method getBaseAttribute() of the interface
+                            // ApplicationAttribute.     At the RPC API this
+                            // information was stored in the field aBName of
+                            // the structure AttrSeq and the request
+                            // AOP_GetAttr.
+   DataType   dType;        // The attribute data type. The same data type is
+                            // given by the method getDataType of the
+                            // interface ApplicationAttribute.     At the RPC
+                            // API this information was stored in the field
+                            // aDataType of the structure AttrSeq and the
+                            // request AOP_GetAttr.
+   T_LONG     length;       // The maximum possible length of values. The same
+                            // length is returned by the method getLength() of
+                            // the interface ApplicationAttribute.
+   T_BOOLEAN  isObligatory; // The indicator for mandatory attributes, the
+                            // notNull indicator is set at the column of the
+                            // table in the physical storage.  The same
+                            // boolean is returned at the method
+                            // isObligatory() of the interface
+                            // ApplicationAttribute.
+   T_BOOLEAN  isUnique;     // The indicator for unique attributes. The same
+                            // boolean is returned by the method isUnique() of
+                            // the interface ApplicationAttribute.
+   T_LONGLONG unitId;       // Id of the unit if global defined. The same Id
+                            // is returned by the method getUnit() of the
+                            // interface ApplicationAttribute.     At the RPC
+                            // API this information was stored in the field
+                            // aUnit of the structure AttrSeq and the request
+                            // AOP_GetAttr.
+};
+
+/**
+* The application relation info structure. The same information is
+* available at the interface ApplicationRelation. 
+* 
+* A relation is the connection between two ASAM ODS elements; it may be
+* navigated in both
+* directions. The get- and set- methods are defined from the first
+* element, the getInverse- and
+* setInverse- methods work from the second element.
+*/
+struct ApplRel {
+   T_LONGLONG    elem1;            // The source application element Id. The
+                                   // given Id is the Id of the application
+                                   // element returned from the method
+                                   // getElem1() of the interface
+                                   // ApplicationRelation.     At the RPC API
+                                   // this information was stored in the field
+                                   // arAid1 of the structure ApplRelSeq and
+                                   // the request AOP_GetApplInf.
+   T_LONGLONG    elem2;            // The target application element Id. The
+                                   // given Id is the Id of the application
+                                   // element returned from the method
+                                   // getElem2() of the interface
+                                   // ApplicationRelation.     At the RPC API
+                                   // this information was stored in the field
+                                   // arAid2 of the structure ApplRelSeq and
+                                   // the request AOP_GetApplInf.
+   Name          arName;           // The relation name. The name is return
+                                   // with the method getName() of the
+                                   // interface ApplicationRelation.     At
+                                   // the RPC API this information was stored
+                                   // in the field arName of the structure
+                                   // ApplRelSeq and the request
+                                   // AOP_GetApplInf.
+   Name          invName;          // Name of the inverse relation. The name
+                                   // is return with the method
+                                   // getInverseName() of the interface
+                                   // ApplicationRelation. The invName is not
+                                   // available in the physical storage for
+                                   // relation databases.
+   Name          brName;           // Name of the base relation from the elem1
+                                   // to the elem2. The base relation is also
+                                   // not stored in the physical storage.
+   Name          invBrName;        // Name of the inverse base relation from
+                                   // the elem2 to the elem1. The base
+                                   // relation is also not stored in the
+                                   // physical storage.
+   RelationType  arRelationType;   // The type of the relation. Type of the
+                                   // relation is not stored in the physical
+                                   // storage. The relation type is return at
+                                   // the method getRelationType() of the
+                                   // interface ApplicationRelation.
+   RelationRange arRelationRange;  // The range of the relation. Range of the
+                                   // relation is not stored in the physical
+                                   // storage. The relation range is return at
+                                   // the method getRelationRange() of the
+                                   // interface ApplicationRelation.
+   RelationRange invRelationRange; // The inverse range of the relation. Range
+                                   // of the relation is not stored in the
+                                   // physical storage. The inverse relation
+                                   // range is return at the method
+                                   // getInverseRelationRange() of the
+                                   // interface ApplicationRelation.
+};
+
+/**
+* AID - Name pair.
+*/
+struct AIDName {
+   T_LONGLONG aid;    // The Id of the application element.
+   Name       aaName; // The attribute, or measured quantity name.
+};
+
+/**
+* Instance element Id. The unique description of an instance element.
+*/
+struct ElemId {
+   T_LONGLONG aid; // The Id of the application element.
+   T_LONGLONG iid; // The Id of the instance element.
+};
+
+/**
+* AID - Name - UnitId tuple.
+*/
+struct AIDNameUnitId {
+   AIDName    attr;   // The attribute  of the application element (aid,
+                      // name).
+   T_LONGLONG unitId; // The unit of the attribute or the column. The unitId
+                      // is the Id of instance element with the basetype
+                      // AoUnit.
+};
+
+/**
+* Order criteria.
+*/
+struct SelOrder {
+   AIDName   attr;      // Attribute specification.
+   T_BOOLEAN ascending; // ascending order, FALSE means descending.
+};
+
+/**
+* The access control list entry.
+*/
+struct ACL {
+   T_LONGLONG usergroupId; // The usergroup Id.
+   T_LONG     rights;      // The access rights of the requested object.
+};
+
+/**
+* An initial right.
+*/
+struct InitialRight {
+   T_LONG     rights;      // The initial access rights of the requested
+                           // object.
+   T_LONGLONG usergroupId; // The usergroup Id of the Initial right list.
+   T_LONGLONG refAid;      // The referencing application element.
+};
+
+/**
+* it’s quite the same sequence as in the QueryStructure of GetInstances
+* with one exception. It has one new attribute called function, which is
+* of the type AggrFunc. Thereby  it is possible to define aggregate
+* functions on attribute level, without the need to parse the attribute
+* name for a known aggregate function name. The default value of that
+* attribute function is NONE, it symbolizes that no aggregate function
+* should be applied on that attribute.If an aggregate function is used,
+* it is also required to define a GroupSequence.It is also defined that a
+* ‘*’ as attribute name, delivers all attributes of an element.
+*/
+struct SelAIDNameUnitId {
+   AIDName    attr;      // The attribute  of the application element (aid,
+                         // name).
+   T_LONGLONG unitId;    // The unit of the attribute ot the column. The
+                         // unitId is the Id of instance element with the
+                         // basetype AoUnit.
+   AggrFunc   aggregate; // The aggregate function.
+};
+
+/**
+* Basically, joins can only be realized between application elements that
+* are linked via a reference defined in the model.From the definition of
+* attributes or application elements, the references for the joins are
+* determined. It is also taken into account that the application elements
+* involved are not linked directly. However, there must be an unambiguous
+* path between the application elements. The path may also include n:m
+* relations. The unambiguousness of relations between two application
+* elements no longer exists if more than one reference has been defined
+* between the application elements. In this case, these references must
+* have names and must be indicated explicitly in the request.For this
+* purpose, the request structure provides a sequence of relation
+* definitions (JoinDefSequence). The sequence in which the application
+* elements are addressed in the request also determines the sequence in
+* which the references between application elements are searched. Thus,
+* for every new application element, the server begins with the first
+* application element addressed in the request and tries to find a
+* relation from there. If no reference to the first application element
+* can be found, the search continues with the application element that
+* comes next in the request. Furthermore, the explicit relation
+* definitions (JoinDefSequence) enable an OUTER join, i.e. the result
+* also includes those records for which the join could not be
+* established.
+*/
+struct JoinDef {
+   T_LONGLONG fromAID;
+   T_LONGLONG toAID;
+   Name       refName;
+   JoinType   joiningType;
+};
+
+/**
+* The application relation with the instances to create the relation with
+* new instances.
+*/
+struct ApplicationRelationInstanceElementSeq {
+   ApplicationRelation     applRel;   // The application relation.
+   InstanceElementSequence instances; // The list with instances. The
+                                      // application element of the instances
+                                      // in the list must match one of the
+                                      // application elements of the
+                                      // application relation. All instances
+                                      // of the list must have the same
+                                      // application element.
+};
+
+/**
+* The structure with the attribute and the name of the enumeration.
+*/
+struct EnumerationAttributeStructure {
+   T_LONGLONG aid;      // The application element Id.
+   T_STRING   aaName;   // The name of the attribute
+   T_STRING   enumName; // The name of the enumeration
+};
+
+/**
+* The structure with the items of the enumeration.
+*/
+struct EnumerationItemStructure {
+   T_LONG   index;    // The index of the enuemration item.
+   T_STRING itemName; // The name of the item.
+};
+
+// Sequence definitions (S_xxx).
+typedef sequence<EnumerationAttributeStructure> EnumerationAttributeStructureSequence;
+typedef sequence<EnumerationItemStructure> EnumerationItemStructureSequence;
+typedef sequence<T_COMPLEX> S_COMPLEX;
+typedef sequence<T_DCOMPLEX> S_DCOMPLEX;
+typedef sequence<T_LONGLONG> S_LONGLONG;
+typedef sequence<S_LONGLONG> SS_LONGLONG;
+typedef sequence<S_COMPLEX> SS_COMPLEX;
+typedef sequence<S_DCOMPLEX> SS_DCOMPLEX;
+typedef sequence<T_ExternalReference> S_ExternalReference;
+typedef sequence<S_ExternalReference> SS_ExternalReference;
+typedef sequence<ApplAttr> ApplAttrSequence;
+typedef sequence<ApplRel> ApplRelSequence;
+typedef sequence<AIDName> AIDNameSequence;
+typedef sequence<AIDNameUnitId> AIDNameUnitIdSequence;
+typedef sequence<ElemId> ElemIdSequence;
+typedef sequence<SelOrder> SelOrderSequence;
+typedef sequence<ACL> ACLSequence;
+typedef sequence<InitialRight> InitialRightSequence;
+typedef sequence<SelAIDNameUnitId> SelAIDNameUnitIdSequence;
+typedef sequence<JoinDef> JoinDefSequence;
+typedef sequence<ApplicationRelationInstanceElementSeq> ApplicationRelationInstanceElementSeqSequence;
+
+/**
+* The application element definition. The same information is available
+* at the interface ApplicationElement.
+*/
+struct ApplElem {
+   T_LONGLONG       aid;        // The application element id. The id is given
+                                // also with the method getId() at the
+                                // interface ApplicationElement.     At the
+                                // RPC API this information was stored in the
+                                // field aiAId of the structure ApplInfSeq and
+                                // the request AOP_GetApplInf.
+   Name             beName;     // The base element name, all elements have a
+                                // basic element. The same name is returned by
+                                // the methods getType() of the BaseElement
+                                // interface. The base element is given with
+                                // the method getBaseElement() at the
+                                // interface ApplicationElement.     At the
+                                // RPC API this information was not delivered
+                                // but the corresponding Id of the base
+                                // element was stored in the field aiBId of
+                                // the structure ApplInfSeq and the request
+                                // AOP_GetApplInf.
+   Name             aeName;     // The application element name. The name is
+                                // given also with the method getName() at the
+                                // interface ApplicationElement.     At the
+                                // RPC API this information was stored in the
+                                // field aiName of the structure ApplInfSeq
+                                // and the request AOP_GetApplInf.
+   ApplAttrSequence attributes; // The attributes of application element. The
+                                // attributes are given with the method
+                                // getAttributes() of the interface
+                                // ApplicationElement. There are no relations
+                                // given in the this sequence.
+};
+
+/**
+* The structure with the enumeration and there items.
+*/
+struct EnumerationStructure {
+   T_STRING                         enumName; // The name of the enueration.
+   EnumerationItemStructureSequence items;    // The items of the enumeration.
+};
+
+/**
+* The union definition for all datatypes.
+*/
+union TS_Union switch (DataType) {
+   case DT_STRING:                      T_STRING                       stringVal;
+   case DT_SHORT:                       T_SHORT                        shortVal;
+   case DT_FLOAT:                       T_FLOAT                        floatVal;
+   case DT_BYTE:                        T_BYTE                         byteVal;
+   case DT_BOOLEAN:                     T_BOOLEAN                      booleanVal;
+   case DT_LONG:                        T_LONG                         longVal;
+   case DT_DOUBLE:                      T_DOUBLE                       doubleVal;
+   case DT_LONGLONG:                    T_LONGLONG                     longlongVal;
+   case DT_COMPLEX:                     T_COMPLEX                      complexVal;
+   case DT_DCOMPLEX:                    T_DCOMPLEX                     dcomplexVal;
+   case DT_DATE:                        T_DATE                         dateVal;
+   case DT_BYTESTR:                     T_BYTESTR                      bytestrVal;
+   case DT_BLOB:                        T_BLOB                         blobVal;
+   case DS_STRING:                      S_STRING                       stringSeq;
+   case DS_SHORT:                       S_SHORT                        shortSeq;
+   case DS_FLOAT:                       S_FLOAT                        floatSeq;
+   case DS_BYTE:                        S_BYTE                         byteSeq;
+   case DS_BOOLEAN:                     S_BOOLEAN                      booleanSeq;
+   case DS_LONG:                        S_LONG                         longSeq;
+   case DS_DOUBLE:                      S_DOUBLE                       doubleSeq;
+   case DS_LONGLONG:                    S_LONGLONG                     longlongSeq;
+   case DS_COMPLEX:                     S_COMPLEX                      complexSeq;
+   case DS_DCOMPLEX:                    S_DCOMPLEX                     dcomplexSeq;
+   case DS_DATE:                        S_DATE                         dateSeq;
+   case DS_BYTESTR:                     S_BYTESTR                      bytestrSeq;
+   case DT_EXTERNALREFERENCE:           T_ExternalReference            extRefVal;
+   case DS_EXTERNALREFERENCE:           S_ExternalReference            extRefSeq;
+   case DT_ENUM:                        T_LONG                         enumVal;
+   case DS_ENUM:                        S_LONG                         enumSeq;
+};
+
+/**
+* Define a union with sequences of a certain type. Using this union
+* instead of sequence <TS_Union> gives much better performance.
+*/
+union TS_UnionSeq switch (DataType) {
+   case DT_STRING:                      S_STRING                       stringVal;
+   case DT_SHORT:                       S_SHORT                        shortVal;
+   case DT_FLOAT:                       S_FLOAT                        floatVal;
+   case DT_BYTE:                        S_BYTE                         byteVal;
+   case DT_BOOLEAN:                     S_BOOLEAN                      booleanVal;
+   case DT_LONG:                        S_LONG                         longVal;
+   case DT_DOUBLE:                      S_DOUBLE                       doubleVal;
+   case DT_LONGLONG:                    S_LONGLONG                     longlongVal;
+   case DT_COMPLEX:                     S_COMPLEX                      complexVal;
+   case DT_DCOMPLEX:                    S_DCOMPLEX                     dcomplexVal;
+   case DT_DATE:                        S_DATE                         dateVal;
+   case DT_BYTESTR:                     S_BYTESTR                      bytestrVal;
+   case DT_BLOB:                        S_BLOB                         blobVal;
+   case DS_STRING:                      SS_STRING                      stringSeq;
+   case DS_SHORT:                       SS_SHORT                       shortSeq;
+   case DS_FLOAT:                       SS_FLOAT                       floatSeq;
+   case DS_BYTE:                        SS_BYTE                        byteSeq;
+   case DS_BOOLEAN:                     SS_BOOLEAN                     booleanSeq;
+   case DS_LONG:                        SS_LONG                        longSeq;
+   case DS_DOUBLE:                      SS_DOUBLE                      doubleSeq;
+   case DS_LONGLONG:                    SS_LONGLONG                    longlongSeq;
+   case DS_COMPLEX:                     SS_COMPLEX                     complexSeq;
+   case DS_DCOMPLEX:                    SS_DCOMPLEX                    dcomplexSeq;
+   case DS_DATE:                        SS_DATE                        dateSeq;
+   case DS_BYTESTR:                     SS_BYTESTR                     bytestrSeq;
+   case DT_EXTERNALREFERENCE:           S_ExternalReference            extRefVal;
+   case DS_EXTERNALREFERENCE:           SS_ExternalReference           extRefSeq;
+   case DT_ENUM:                        S_LONG                         enumVal;
+   case DS_ENUM:                        SS_LONG                        enumSeq;
+};
+
+// Sequence definitions (S_xxx).
+typedef sequence<EnumerationStructure> EnumerationStructureSequence;
+typedef sequence<ApplElem> ApplElemSequence;
+
+/**
+* The ASAM ODS value structure.  There is one flag for each value. If the
+* union (u) contains a sequence, the flag is valid for all values in that
+* sequence.
+* 
+* Meaning of flags:
+*    AO_VF_VALID(0x01)      The value is valid.
+*    AO_VF_VISIBLE(0x02)    The value has to be
+*                           visualized.
+*    AO_VF_UNMODIFIED(0x04) The value has not been
+*                           modified.
+*    AO_VF_DEFINED(0x08)    The value is defined. If
+*                           the value in a value matrix
+*                           is not available this bit
+*                           is not set.
+*   The normal value of the flag is 15.
+*/
+struct TS_Value {
+   TS_Union u;    // The value union for values of all known datatypes.
+   T_SHORT  flag; // The value flags.
+};
+
+/**
+* A structure with sequences of a certain type. Using this union instead
+* of sequence <TS_Value> gives much better performance.
+*/
+struct TS_ValueSeq {
+   TS_UnionSeq u;    // The value union for values of all known datatypes.
+   S_SHORT     flag; // See TS_Value flag.
+};
+
+/**
+* Application structure values. All values of the entire application
+* structure are stored in this structure and loaded to the Client on
+* request. 
+* 
+* At the RPC API this information delivered by the request AOP_GetApplInf
+* and AOP_GetAttr for each application element.
+*/
+struct ApplicationStructureValue {
+   ApplElemSequence applElems; // The list of application elements.
+   ApplRelSequence  applRels;  // The list of relations in the application
+                               // structure. The list of ApplRel's contains
+                               // distinct entries for relations and their
+                               // inverses. The field invName contains the
+                               // partner relation.  Both relation, the normal
+                               // and the inverse relation are given in the
+                               // sequence.
+};
+
+/**
+* The ASAM ODS name-value-unit tuple structure with a sequence of values.
+*/
+struct NameValueSeqUnit {
+   Name        valName; // Column name or measured quantity name.
+   TS_ValueSeq value;   // Column value (vector).
+   T_STRING    unit;    // Column unit as string.
+};
+
+/**
+* AID - Name - Value - UnitId quartet.
+*/
+struct AIDNameValueUnitId {
+   AIDName    attr;   // The attribute  of the application element (aid,
+                      // name).
+   T_LONGLONG unitId; // The unit of the attribute ot the column. The unitId
+                      // is the Id of instance element with the basetype
+                      // AoUnit.
+   TS_Value   values; // The attribute values with value flags.
+};
+
+/**
+* AID - Name - Value - UnitId quartet. Multiple values for on attribute.
+*/
+struct AIDNameValueSeqUnitId {
+   AIDName     attr;   // The attribute  of the application element (aid,
+                       // name).
+   T_LONGLONG  unitId; // The unit of the attribute ot the column. The unitId
+                       // is the Id of instance element with the basetype
+                       // AoUnit.
+   TS_ValueSeq values; // The column values with value flags.
+};
+
+/**
+* The ASAM ODS name-value-unitId tuple structure with a sequence of
+* values.
+*/
+struct NameValueSeqUnitId {
+   Name        valName; // Column name or measured quantity name.
+   TS_ValueSeq value;   // Column value (vector).
+   T_LONGLONG  unitId;  // Column unit as Id.
+};
+
+/**
+*  Structure for name value query or attribute search conditions.
+*/
+struct SelValue {
+   AIDNameValueUnitId attr;  // The attribute specification with unit of the
+                             // value.
+   SelOpcode          oper;  // The compare operator between the attribute and
+                             // value.
+   TS_Value           value; // Value for the condition.
+};
+
+/**
+* The ASAM ODS name-value-unitid tuple structure. This structure is
+* identical with the NameValueUnit, except the unit is given as an Id
+* insead of a string.
+*/
+struct NameValueUnitId {
+   Name       valName; // Attribute name or measured quantity name.
+   TS_Value   value;   // Attribute value or column value (vector).
+   T_LONGLONG unitId;  // Id of attribute or column unit.
+};
+
+/**
+* The attribute selection structure.
+*/
+struct SelValueExt {
+   AIDNameUnitId attr;  // The attribute specification with unit Id.
+   SelOpcode     oper;  // The compare operator between the attribute and
+                        // value.
+   TS_Value      value; // Value for the condition.
+};
+
+/**
+* Defines the sequence of selection attributes with their logical
+* operators. The Idea is to have the logical operators and the selection
+* values in one sequence. Therefore no implicit rules are necessary how
+* logical operators have to be interpreted to the corresponding selection
+* value.
+*/
+union SelItem switch (SelType) {
+   case SEL_VALUE_TYPE:                 SelValueExt                    value;
+   case SEL_OPERATOR_TYPE:              SelOperator                    operator;
+};
+
+// Sequence definitions (S_xxx).
+typedef sequence<NameValueSeqUnit> NameValueSeqUnitSequence;
+typedef sequence<AIDNameValueSeqUnitId> AIDNameValueSeqUnitIdSequence;
+typedef sequence<SelValue> SelValueSequence;
+typedef sequence<NameValueSeqUnitId> NameValueSeqUnitIdSequence;
+typedef sequence<SelItem> SelItemSequence;
+
+/**
+* The ASAM ODS name-value pair structure.
+*/
+struct NameValue {
+   Name     valName; // Attribute name or measured quantity name.
+   TS_Value value;   // Attribute value or column value (vector).
+};
+
+/**
+* The ASAM ODS name-value-unit tuple structure. This structure is
+* identical with the NameValueUnitId, except the unit is given as a
+* string insead of an Id.
+*/
+struct NameValueUnit {
+   Name     valName; // Attribute name or measured quantity name.
+   TS_Value value;   // Attribute value or column value (vector).
+   T_STRING unit;    // Attribute or column unit as string.
+};
+
+/**
+* The results for one attribute. The result set for all attributes are
+* given in the sequence of the result set.
+*/
+struct AttrResultSet {
+   NameValueSeqUnitId      attrValues; // The attribute result set of one
+                                       // element. All values have the same
+                                       // attribute (AIDName) and the same
+                                       // unit (UnitId). Only the first part
+                                       // of the possible attribute values are
+                                       // available in this result set. The
+                                       // size of the part depends on the
+                                       // parameter 'how_many' of the method
+                                       // 'getInstances' of the interface
+                                       // 'ApplElemAccess'.
+   NameValueUnitIdIterator rest;       // The rest of the results. The
+                                       // iterator provides access to the
+                                       // conseccutive
+                                       // NameValueSeqUnitId-packages of the
+                                       // result set.
+};
+
+/**
+* The query structure.
+* 
+* How to build a query.
+* 
+* A query is a search condition for instances. The instances are
+* specified by the values of the attributes. The search condition
+* represents an attribute value condition. This means the attribute value
+* specifies the selection of the instance or instance attribute. An
+* attribute is specified by the application element and the name of the
+* attribute (AIDName). The conditions are defined in the enumeration
+* SelOPCode. The values are given in the TS_Value or TS_Union structure.
+* If we like an Unit indepedent condition we needed to define the Unit at
+* the attribute, use AIDNameUnitId instead of AIDName, the server has to
+* convert the value to the proper attribute value. The attribute search
+* condition can be combined by operations defined in the enumeration
+* SelOperator. A query can be built with a sequence SelValue and
+* SelOperator.
+* 
+* How to read/write the query:
+* 
+* e.g.  SelValue1 AND SelValue2
+*   
+*          selValueSeq    = SelValue1, SelValue2
+*          selOPeratorSeq = AND  
+* 
+* e.g.  (SelValue1 AND SelValue2) OR SelValue3 
+*    
+*          selValueSeq    = SelValue1, SelValue2, SelValue3
+*          selOPeratorSeq = OPEN, AND, CLOSE, OR
+*    
+* e.g.  NOT(SelValue1 AND SelValue2) OR SelValue3 
+*    
+*          selValueSeq    = SelValue1, SelValue2, SelValue3
+*          selOPeratorSeq = NOT, OPEN, AND, CLOSE, OR
+*    
+*  e.g.  NOT(SelValue1) AND SelValue2 OR SelValue3 
+*    
+*          selValueSeq    = SelValue1, SelValue2, SelValue3
+*          selOPeratorSeq = NOT, AND, OR
+* 
+* There is no selection about the N:M relations.
+*  
+* There are no aggregate functions (MAX, MIN, COUNT etc.) defined so we
+* need no "group by" and "having" Clause. All the parts defined in the
+* "having"-clause can be defined in the select part.
+*/
+struct QueryStructure {
+   AIDNameUnitIdSequence anuSeq;  // The sequence of attributes to be
+                                  // reported. A pattern is accepted for the
+                                  // attribute name.    At the RPC API this
+                                  // information was stored in the fields
+                                  // applId and nuSeq of the structure
+                                  // GetValReq and the request AOP_GetVal. At
+                                  // the RPC API only one application element
+                                  // could be selected.
+   SelValueSequence      condSeq; // The query condition sequence.     At the
+                                  // RPC API this information was stored in
+                                  // the field nsSeq of the structure
+                                  // GetValReq and the request AOP_GetVal.
+   SelOperatorSequence   operSeq; // The query condition operator sequence.   
+                                  //  At the RPC API was the operator always
+                                  // 'AND'.
+   ElemId                relInst; // The related instance. (aid == 0 && iid ==
+                                  // 0) means no related instance specified.  
+                                  //         At the RPC API this information
+                                  // was stored in the field elemId of the
+                                  // structure GetValReq and the request
+                                  // AOP_GetVal.
+   Name                  relName; // Name of the relation.     At the RPC API
+                                  // this information was stored in the field
+                                  // refName of the structure GetValReq and
+                                  // the request AOP_GetVal.
+   SelOrderSequence      orderBy; // The order by sequence. The order of the
+                                  // result set.     At the RPC API it was not
+                                  // possiable to set the order.
+};
+
+/**
+* Restult set of one application element.
+*/
+struct ElemResultSetExt {
+   T_LONGLONG                 aid;    // The application element Id.
+   NameValueSeqUnitIdSequence values; // The attribute values of the instances
+                                      // of the given application element.
+};
+
+/**
+* The extended query structure.
+*/
+struct QueryStructureExt {
+   SelAIDNameUnitIdSequence anuSeq;  // The sequence of attributes to be
+                                     // reported. A pattern is accepted for
+                                     // the attribute name.    At the RPC API
+                                     // this information was stored in the
+                                     // fields applId and nuSeq of the
+                                     // structure GetValReq and the request
+                                     // AOP_GetVal. At the RPC API only one
+                                     // application element could be selected.
+   SelItemSequence          condSeq; // The query condition sequence.     At
+                                     // the RPC API this information was
+                                     // stored in the field nsSeq of the
+                                     // structure GetValReq and the request
+                                     // AOP_GetVal.
+   JoinDefSequence          joinSeq; // Defined the join between the
+                                     // application elements.
+   SelOrderSequence         orderBy; // The order by sequence. The order of
+                                     // the result set.     At the RPC API
+                                     // interface it was not possiable to set
+                                     // the order.
+   AIDNameSequence          groupBy; // Defines the grouping attributes for a
+                                     // request, necessary if aggregate
+                                     // functions are defined in the
+                                     // SelAIDNameUnitIdSequence.
+};
+
+// Sequence definitions (S_xxx).
+typedef sequence<NameValue> NameValueSequence;
+typedef sequence<NameValueUnit> NameValueUnitSequence;
+typedef sequence<AttrResultSet> AttrResultSetSequence;
+typedef sequence<ElemResultSetExt> ElemResultSetExtSequence;
+
+/**
+* The result set for one element. The result set for all elements are
+* given in the sequence of the result set.
+*/
+struct ElemResultSet {
+   T_LONGLONG            aid;        // The Id of the application element.
+   AttrResultSetSequence attrValues; // The selected attributes of the
+                                     // element. The number of values in each
+                                     // AttrResultSet are identical, the
+                                     // attributes of one element has always
+                                     // the position in the AttrResultSet.
+};
+
+/**
+* The Result set of the extended query. The iterator is for instance
+* oriented access.
+*/
+struct ResultSetExt {
+   ElemResultSetExtSequence    firstElems; // The sequence of the first
+                                           // how_many result elements.
+   ElemResultSetExtSeqIterator restElems;  // the iterator, which allows to
+                                           // iterate above the result values,
+                                           // the attributes of one instance
+                                           // each iteration.
+};
+
+// Sequence definitions (S_xxx).
+typedef sequence<ElemResultSet> ElemResultSetSequence;
+typedef sequence<ResultSetExt> ResultSetExtSequence;
+
+/**
+* The ASAM ODS query result types.
+*/
+interface ResultType {
+   const T_SHORT INSTELEM_ITERATOR_AS_RESULT = 0; // Iterator of instance elements as result of the query (the default).
+   const T_SHORT TABLE_ITERATOR_AS_RESULT = 1;    // Iterator for table access as result type of the query.
+   const T_SHORT TABLE_AS_RESULT = 2;             // Table as result type of the query.
+};
+
+/**
+* The lock mode of the server. The lock mode tells the way the server
+* will lock the objects as soon a modification of the server will be
+* done.
+*/
+interface LockMode {
+   const T_SHORT LOCK_INSTANCEELEMENT = 0;    // Lock the instance element. (Default LockMode)
+   const T_SHORT LOCK_APPLICATIONELEMENT = 1; // Lock the application element, all instances of the application element are locked.
+   const T_SHORT LOCK_CHILDREN = 2;           // Lock the children of the locked object. This mode can be combined with one of the upper two modi.
+};
+
+/**
+* The bits of the security rights.
+*/
+interface SecurityRights {
+   const T_LONG SEC_READ = 1;   // Read access is allowed.
+   const T_LONG SEC_UPDATE = 2; // Update access to an existing object is allowed.
+   const T_LONG SEC_INSERT = 4; // Creating new instances is allowed.
+   const T_LONG SEC_DELETE = 8; // Delete of the object is allowed.
+   const T_LONG SEC_GRANT = 16;  // Access rights may be passed on.
+};
+
+/**
+* The security level of an application element.
+*/
+interface SecurityLevel {
+   const T_LONG NO_SECURITY = 0;        // No security defined.
+   const T_LONG ELEMENT_SECURITY = 1;   // Security scaled for the application element.
+   const T_LONG INSTANCE_SECURITY = 2;  // Security scaled for instance elements.
+   const T_LONG ATTRIBUTE_SECURITY = 4; // Security scaled for appliation attributes.
+};
+
+/**
+* The ASAM ODS query constants.
+*/
+interface QueryConstants {
+   const T_LONG MaxDurationDEFAULT = 0;     // Default value of max duration parameter of the query  (no limitations).
+   const T_STRING MaxDuration = "MaxDuration";            // The ASAM ODS max duration parameter of the query.
+   const T_STRING QueryResultType = "QueryResultType";        // The ASAM ODS query result type parameter.
+   const T_LONG QueryResultTypeDEFAULT = ResultType::INSTELEM_ITERATOR_AS_RESULT; // Default value of the ASAM ODS query result type parameter.
+};
+
+/**
+* The ASAM ODS exception structure.
+*/
+exception AoException {
+   ErrorCode    errCode;
+   SeverityFlag sevFlag;
+   T_LONG       minorCode;
+   T_STRING     reason;
+};
+
+/**
+* The ASAM factory interface.
+*/
+interface AoFactory {
+
+   /** (2001)
+   * Get the description of the ASAM ODS factory. If the description is
+   * not available an empty string is returned and no exception is
+   * thrown. The server loads the description from the base attribute
+   * "description" of the instance of AoEnvironment.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *
+   * @return  The description of the ASAM ODS factory.
+   */
+   T_STRING getDescription()
+      raises (AoException);
+
+   /** (2002)
+   * Get the interface version of the ASAM ODS factory. The interface
+   * version is for each ODS version a fixed string. The string is the
+   * version of the interface implemented at the server. 
+   * 
+   * The format of the string is:
+   * V<Major Version Nr>.<Minor Version Nr>.<Revision Nr>
+   *   - Major Version Nr (numeric: [0-9]+)
+   *   - Minor Version Nr (numeric: [0-9]+)
+   *   - Revision Nr (numeric: [0-9]+)
+   * Example of the version specification is 'V5.1.0'.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *
+   * @return  The interface version of the ASAM ODS factory.
+   */
+   T_STRING getInterfaceVersion()
+      raises (AoException);
+
+   /** (2003)
+   * Get the name of the ASAM ODS factory. If the name is not available
+   * an empty string is returned and no exception is thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *
+   * @return  The name of the ASAM ODS factory.
+   */
+   T_STRING getName()
+      raises (AoException);
+
+   /** (2004)
+   * Get the type of the ASAM ODS factory. If the type is not available
+   * an empty string is returned and no exception is thrown. The server
+   * loads the type from the base attribute "Application_model_type" of
+   * the instance of AoEnvironment.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *
+   * @return  The type of the ASAM ODS factory.
+   */
+   T_STRING getType()
+      raises (AoException);
+
+   /** (2005)
+   * Establish a new session to an ASAM ODS server. The server normally
+   * checks the activity of the session and will close the session after
+   * a time period of inactivity.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECT_FAILED
+   *    AO_CONNECT_REFUSED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_OPEN_MODE_NOT_SUPPORTED
+   *    AO_SESSION_LIMIT_REACHED
+   *
+   * @param  auth  A string that may contain authentication information.
+   *               The following values are currently supported:
+   *                  USER
+   *                  PASSWORD
+   *                  CREATE_COSESSION_ALLOWED
+   *                  FOR_USER
+   *                The values may be specified in any order and have to
+   *               be separated by comma.
+   *               The variable CREATE_COSESSION_ALLOWED
+   *                       Value (DT_STRING) TRUE or FALSE
+   *                       Default for CREATE_COSESSION_ALLOWED =
+   *               FALSE.
+   *                      The variable CREATE_COSESSION_ALLOWED is a
+   *               read-only variable in the session.
+   *               The variable FOR_USER is the name of the user for
+   *               which this session shall be created. If this value is
+   *               given, USER must be a superuser. Otherwise the
+   *               exception AO_CONNECT_REFUSED will be thrown.
+   *               Example:
+   *               "USER=hans, PASSWORD=secret, CREATE_COSESSION_ALLOWED
+   *               = TRUE"
+   *
+   * @return  The new created ASAM ODS session.
+   */
+   AoSession newSession(
+      in T_STRING auth)
+      raises (AoException);
+
+   /** (2006)
+   * Establish a new session to an ASAM ODS server. The server normally
+   * checks the activity of the session and will close the session after
+   * a time period of inactivity. The authentication is a list of
+   * NameValue which is an argument of the method.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECT_FAILED
+   *    AO_CONNECT_REFUSED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_OPEN_MODE_NOT_SUPPORTED
+   *    AO_SESSION_LIMIT_REACHED
+   *
+   * @param  auth  A list of NameValue with the parameters for the
+   *               authentication, the parameter is stored in the Name of
+   *               the NameValue and the value of the aprameter is stored
+   *               in the Value. Each entry in the list represent exact
+   *               one parameter. With this argument the values of the
+   *               parameters can contain also comma because these are
+   *               not used as separater.
+   *
+   * @return  The new created ASAM ODS session.
+   */
+   AoSession newSessionNameValue(
+      in NameValueSequence auth)
+      raises (AoException);
+
+}; // Interface AoFactory.
+
+/**
+* The ASAM ODS session interface.
+*/
+interface AoSession {
+
+   /** (3001)
+   * Abort (rollback) a transaction. The changes made in the transaction
+   * are lost.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   */
+   void abortTransaction()
+      raises (AoException);
+
+   /** (3002)
+   * Close session to an ASAM ODS server. Active transactions are
+   * committed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void close()
+      raises (AoException);
+
+   /** (3003)
+   * Commit a transaction. The changes made in the transaction become
+   * permanent.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   */
+   void commitTransaction()
+      raises (AoException);
+
+   /** (3004)
+   * Get the application model from the current session by returning an
+   * object with the interface ApplicationStructure. The complete
+   * information on the application model is available through that
+   * interface.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The application structure.
+   */
+   ApplicationStructure getApplicationStructure()
+      raises (AoException);
+
+   /** (3005)
+   * Get the application model as values from the current session.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The application structure as value.
+   */
+   ApplicationStructureValue getApplicationStructureValue()
+      raises (AoException);
+
+   /** (3006)
+   * Get the ASAM ODS base model from the current session by returning an
+   * object with the interface BaseStructure. The complete information on
+   * the base model is available through that interface; it includes all
+   * possible base elements with all possible base attributes as
+   * specified by ASAM ODS.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The base structure.
+   */
+   BaseStructure getBaseStructure()
+      raises (AoException);
+
+   /** (3007)
+   * Get context variables from the session. A pattern string can be
+   * specified to select groups of variables.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  varPattern  The name or the search pattern for the context
+   *                     variable(s).
+   *
+   * @return  A list of context variables.
+   */
+   NameValueIterator getContext(
+      in Pattern varPattern)
+      raises (AoException);
+
+   /** (3008)
+   * Get a context variable by its name from the session.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  varName  The name of the requested context variable.
+   *
+   * @return  The requested context variable.
+   */
+   NameValue getContextByName(
+      in Name varName)
+      raises (AoException);
+
+   /** (3009)
+   * List the names of context variables from the session. A pattern
+   * string can be specified to select groups of variables.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NOT_FOUND
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  varPattern  The name or the search pattern for the context
+   *                     variable(s).
+   *
+   * @return  A list of context variable names.
+   */
+   NameIterator listContext(
+      in Pattern varPattern)
+      raises (AoException);
+
+   /** (3010)
+   * Remove context variables from the session. A pattern string can be
+   * specified to remove groups of variables.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NOT_FOUND
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  varPattern  The name or the search pattern for the context
+   *                     variable(s) to be removed.
+   */
+   void removeContext(
+      in Pattern varPattern)
+      raises (AoException);
+
+   /** (3011)
+   * Set/modify a known context variable or add a new context variable to
+   * the session.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  contextVariable  The context variable.
+   */
+   void setContext(
+      in NameValue contextVariable)
+      raises (AoException);
+
+   /** (3012)
+   * Set/modify a known context variable or add a new context variable to
+   * the session. This is a convenience method for the frequently used
+   * string variable type. It uses setContext  internally.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  varName  The name of the context variable.
+   *
+   * @param  value  The value of the context variable.
+   */
+   void setContextString(
+      in Name varName,
+      in T_STRING value)
+      raises (AoException);
+
+   /** (3013)
+   * Start a transaction on the physical storage system (e.g. database
+   * system). Only when a transaction is started it is allowed to create
+   * or modify instances or measurement data. The changes get permanent
+   * with a commit of the transaction or will be lost with an abort of
+   * the transaction. If the session is closed the transaction will be
+   * committed automatically. If a transaction is already active an
+   * exception is thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_ALREADY_ACTIVE
+   */
+   void startTransaction()
+      raises (AoException);
+
+   /** (3014)
+   * Make the changes permanent.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   */
+   void flush()
+      raises (AoException);
+
+   /** (3015)
+   * Every new created instance will set its initial rights to <acl> .
+   * This method overrides the default-methods for applying initial
+   * rights. The initial rights are only valid for the current session.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  irlEntries  The current initial rights.
+   *
+   * @param  set  Set (1) or remove (0) the current initial rights. The
+   *              previous initial rights get lost. If the parameter set
+   *              is 0 (remove) the parameter irlEntries will be ignored.
+   */
+   void setCurrentInitialRights(
+      in InitialRightSequence irlEntries,
+      in T_BOOLEAN set)
+      raises (AoException);
+
+   /** (3016)
+   * Get the current lock mode. The lock mode tells the server which
+   * objects to lock for upcoming changes. Application elements, instance
+   * elements or children of elements can be locked.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The current lock mode. The lock mode constants are defined
+   *          in the interface LockMode. The interface definition
+   *          language IDL does not allow to set the values of
+   *          enumerations thus the constant definitions had to be done
+   *          in an interface.
+   */
+   T_SHORT getLockMode()
+      raises (AoException);
+
+   /** (3017)
+   * Set the new lock mode. The lock mode tells the server which objects
+   * to lock for upcoming changes. Application elements, instance
+   * elements or children of elements can be locked.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  lockMode  The new lock mode. The lock mode constants are
+   *                   defined in the interface LockMode. The interface
+   *                   definition language IDL does not allow to set the
+   *                   values of enumerations thus the constant
+   *                   definitions had to be done in an interface.
+   */
+   void setLockMode(
+      in T_SHORT lockMode)
+      raises (AoException);
+
+   /** (3018)
+   * Get the application element access object from the current session.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The application element access object.
+   */
+   ApplElemAccess getApplElemAccess()
+      raises (AoException);
+
+   /** (3019)
+   * Change the password for user defined by <username> to <newPassword>.
+   * A normal user must supply his current password <oldPassword>. The
+   * super user can change the password without supplying the current
+   * password <oldPassword>. If no username is given the password of the
+   * user of the current session will be changed. The password is
+   * normally encrypted in the attribute of the user instance element.
+   * Creating a new user can be done by creating a new instance,
+   * afterwards the password must be set by the super user.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_WRONG_PASSWORD
+   *
+   * @param  username  The name of the user for which the password will
+   *                   be changed. If no username is given the password
+   *                   of the current user will be changed. If the
+   *                   username differs from the current user the current
+   *                   user must be a super user.
+   *
+   * @param  oldPassword  The current password of the user. A normal user
+   *                      must supply his current password. The super
+   *                      user can change the password without supplying
+   *                      the current password.
+   *
+   * @param  newPassword  The new password of the user.
+   */
+   void setPassword(
+      in T_STRING username,
+      in T_STRING oldPassword,
+      in T_STRING newPassword)
+      raises (AoException);
+
+   /** (3020)
+   * Get the description of the ASAM ODS session. The description of the
+   * session is identical with description of the ASAM ODS factory. If
+   * the description is not available an empty string is returned and no
+   * exception is thrown. The server loads the description from the base
+   * attribute "description" of the instance of AoEnvironment.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_CONNECTION_LOST
+   *
+   * @return  The description of the ASAM ODS session.
+   */
+   T_STRING getDescription()
+      raises (AoException);
+
+   /** (3021)
+   * Get the name of the ASAM ODS session. The name of the session is
+   * identical with the name of the ASAM ODS factory. If the name is not
+   * available an empty string is returned and no exception is thrown.
+   * The server loads the name from the base attribute "name" of the
+   * instance of AoEnvironment.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_CONNECTION_LOST
+   *
+   * @return  The name of the ASAM ODS session.
+   */
+   Name getName()
+      raises (AoException);
+
+   /** (3022)
+   * Get the type of the ASAM ODS session. The type of the session is
+   * identical with the type of the ASAM ODS factory. If the type is not
+   * available an empty string is returned and no exception is thrown.
+   * The server loads the type from the base attribute
+   * "Application_model_type" of the instance of AoEnvironment.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_CONNECTION_LOST
+   *
+   * @return  The type of the ASAM ODS session.
+   */
+   T_STRING getType()
+      raises (AoException);
+
+   /** (3023)
+   * Create a QueryEvaluator object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_ACCESS_DENIED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The new created query evaluator object
+   */
+   QueryEvaluator createQueryEvaluator()
+      raises (AoException);
+
+   /** (3024)
+   * Create a new object with the Interface Blob on the server. This
+   * object can be used to create an attribute value of the data type
+   * DT_BLOB.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The reference of the blob object which is generated at the
+   *          server.
+   */
+   Blob createBlob()
+      raises (AoException);
+
+   /** (3025)
+   * Create a co session. The co session session is the same session as
+   * the original session was at login time.
+   * The co session has no relation to the original session except that
+   * the same authentication is used.
+   * A client application with components can give all components his own
+   * session to the ASAM ODS Server. So the component can close the
+   * session when it is ready, the component can start his own
+   * transaction without any conflict with other components. 
+   * Only when the variable CREATE_COSESSION_ALLOWED=TRUE is given in the
+   * 'auth' parameter of the method newSession at the interface AoFactory
+   * an new session will be created otherwise the exception
+   * AO_ACCESS_DENIED is thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_ACCESS_DENIED
+   *
+   * @return  The co session.
+   */
+   AoSession createCoSession()
+      raises (AoException);
+
+   /** (3026)
+   * Returns the instance element of the user logged in, this is the
+   * instance element from the application element derived from AoUser,
+   * with the name given in s given in the 'auth' parameter of the method
+   * newSession at the interface AoFactory (variable USER). 
+   * 
+   * When the client settings of the user are stored in the ASAM ODS
+   * application model, this methods helps the client  to get his
+   * settings.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *
+   * @return  The instance element of the logged in user.
+   */
+   InstanceElement getUser()
+      raises (AoException);
+
+   /** (3027)
+   * Get the list with the attributes of all elements and the enumeration
+   * name which has an enumeration.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NOT_FOUND
+   *
+   * @return  The list with attribute and there enumeration.
+   */
+   EnumerationAttributeStructureSequence getEnumerationAttributes()
+      raises (AoException);
+
+   /** (3028)
+   * Get all enumerations used in the application model. The enumerations
+   * and all items of the enumerations are returned to the client.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The enumeration with there Items.
+   */
+   EnumerationStructureSequence getEnumerationStructure()
+      raises (AoException);
+
+   /** (3029)
+   * Returns the Id of the session, the ODS server will give each session
+   * an unique Id. The ODS server returns this Id to the client.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *
+   * @return  The Id of the session.
+   */
+   T_LONG getId()
+      raises (AoException);
+
+}; // Interface AoSession.
+
+/**
+* The ASAM ODS application attribute interface.
+*/
+interface ApplicationAttribute {
+
+   /** (4001)
+   * Get the base attribute of the application attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The base attribute of the application attribute. A 'null'
+   *          is returned if the application attribute has no base
+   *          attribute.
+   */
+   BaseAttribute getBaseAttribute()
+      raises (AoException);
+
+   /** (4002)
+   * Get the data type of the application attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The data type of the application attribute.
+   */
+   DataType getDataType()
+      raises (AoException);
+
+   /** (4003)
+   * Get the maximum allowed length of the value of the application
+   * attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The maximum allowed length of the application attribute.
+   */
+   T_LONG getLength()
+      raises (AoException);
+
+   /** (4004)
+   * Get the name of the application attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The name of the application attribute.
+   */
+   Name getName()
+      raises (AoException);
+
+   /** (4005)
+   * Get the unit Id of the application attribute. The unit Id is only
+   * valid for the current server.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The unit Id of the application attribute.
+   */
+   T_LONGLONG getUnit()
+      raises (AoException);
+
+   /** (4006)
+   * Get the obligatory flag of the application attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The obligatory flag of the application attribute.
+   */
+   T_BOOLEAN isObligatory()
+      raises (AoException);
+
+   /** (4007)
+   * Get the unique flag of the application attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The unique flag of the application attribute.
+   */
+   T_BOOLEAN isUnique()
+      raises (AoException);
+
+   /** (4008)
+   * Set the base attribute of the application attribute. This allows the
+   * client to declare the application attribute (new or existing)
+   * additional to a base attribute. The application attribute will
+   * become the derived attribute of the given base attribute.
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The base attribute must be unique within the application element
+   * otherwise the exception AO_DUPLICATE_BASE_ATTRIBUTE is thrown.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   * 
+   * If this method is called before the first commit it will not throw
+   * the following exceptions:
+   *    AO_INVALID_DATATYPE
+   *    AO_MISSING_VALUE
+   *    AO_NOT_UNIQUE.
+   * 
+   * After the first commit, there may be instances of the application
+   * attribute. These instances may cause the following problems:
+   * 
+   * AO_INVALID_DATATYPE: The data type of the base attribute is not the
+   * same as the data type of the instantiated attributes.
+   * 
+   * AO_MISSING_VALUE: The obligatory flag of the base attribute is set
+   * but there are one or more empty values in the instances.
+   * 
+   * AO_NOT_UNIQUE: The unique flag of the base attribute is set but the
+   * values of the instances are not unique.
+   * 
+   * The length, the name and the unit of the application attribute are
+   * not affected by this call.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_BASE_ATTRIBUTE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_DATATYPE
+   *    AO_MISSING_VALUE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NOT_UNIQUE
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  baseAttr  The base attribute.
+   */
+   void setBaseAttribute(
+      in BaseAttribute baseAttr)
+      raises (AoException);
+
+   /** (4009)
+   * Set the data type of the application attribute. 
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * It is not allowed to set the data type of application attributes
+   * that represent base attributes. An attempt to set the data type of
+   * such an application attribute will result in the exception
+   * AO_IS_BASE_ATTRIBUTE.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   * 
+   * If this method is called before the first commit it will not throw
+   * the following exception:
+   *    AO_INVALID_DATATYPE
+   * 
+   * After the first commit, there may be instances of the application
+   * attribute. These instances may cause the following problem:
+   * 
+   * AO_INVALID_DATATYPE: The data type of the base attribute is not the
+   * same as the data type of the instantiated attributes.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_BASE_ATTRIBUTE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_DATATYPE
+   *    AO_IS_BASE_ATTRIBUTE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaDataType  The data type.
+   */
+   void setDataType(
+      in DataType aaDataType)
+      raises (AoException);
+
+   /** (4010)
+   * Set the obligatory flag of the application attribute.
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * It is not allowed to set the obligatory flag of application
+   * attributes
+   * that represent base attributes. An attempt to set the obligatory
+   * flag of such an application attribute will result in the exception
+   * AO_IS_BASE_ATTRIBUTE.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   * 
+   * If this method is called before the first commit it will not throw
+   * the following exception:
+   *    AO_MISSING_VALUE
+   * 
+   * After the first commit, there may be instances of the application
+   * attribute. These instances may cause the following problem:
+   * 
+   * AO_MISSING_VALUE: The obligatory flag of the base attribute is set
+   * but there are one or more empty values in the instances.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_BASE_ATTRIBUTE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_IS_BASE_ATTRIBUTE
+   *    AO_MISSING_VALUE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaIsObligatory  The obligatory flag.
+   */
+   void setIsObligatory(
+      in T_BOOLEAN aaIsObligatory)
+      raises (AoException);
+
+   /** (4011)
+   * Set the unique flag of the application attribute. 
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The server will check if the values of the instance attributes are
+   * unique. If this flag is set and the values of an attribute are not
+   * unique when using the method setValue an exception is thrown. If
+   * instances of the application element already exist that contain
+   * non-unique values and the flag shall be set this method throws an
+   * exception.
+   * 
+   * It is not allowed to set the unique flag of application attributes
+   * that represent base attributes. An attempt to set the unique flag of
+   * such an application attribute will result in the exception
+   * AO_IS_BASE_ATTRIBUTE.
+   * 
+   * If the unique flag is set to TRUE the obligatory flag is also set to
+   * TRUE. The previous values of both flag do not matter in this case.
+   * Setting the unique flag to FALSE does not affect the obligatory
+   * flag.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   * 
+   * If this method is called before the first commit it will not throw
+   * the following exception:
+   *    AO_MISSING_VALUE
+   *    AO_NOT_UNIQUE
+   * 
+   * After the first commit, there may be instances of the application
+   * attribute. These instances may cause the following problem:
+   * 
+   * AO_MISSING_VALUE: The obligatory flag of the base attribute is set
+   * but there are one or more empty values in the instances.
+   * 
+   * AO_NOT_UNIQUE: The unique flag of the base attribute is set but the
+   * values of the instances are not unique.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_BASE_ATTRIBUTE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_IS_BASE_ATTRIBUTE
+   *    AO_MISSING_VALUE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NOT_UNIQUE
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaIsUnique  The unique flag.
+   */
+   void setIsUnique(
+      in T_BOOLEAN aaIsUnique)
+      raises (AoException);
+
+   /** (4012)
+   * Set the maximum allowed length of the application attribute. The
+   * maximum value  accepted by the ASAM ODS server for this length
+   * information depends on the underlying physical storage. For the
+   * physical storage specified in chapter 3 the maximum allowed length
+   * will be stored in the AFLEN value in SVCATTR, and it is restricted
+   * by the maximum length of string type database fields. If a length is
+   * specified that exceeds the capabilities of the underlying physical
+   * storage the server will throw the exception AO_INVALID_LENGTH. 
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction. 
+   * 
+   * This method is useful for ODS database design tools. Negative length
+   * values are not allowed.
+   * 
+   * This method provides only a hint to a database server in the design
+   * phase which size the data entries may have. The length is only
+   * relevant for is ignored for all attribute values with the data type
+   * other datatypes than DT_STRING, DS_STRING, DT_DATE, DS_DATE, all
+   * components of DT_EXTERNALREFERENCE and of DS_EXTERNALREFERENCE, and
+   * the header portion of DT_BLOB.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   * 
+   * If this method is called before the first commit it will not throw
+   * the following exception:
+   *    AO_HAS_INSTANCES
+   * 
+   * After the first commit, there may be instances of the application
+   * attribute. These instances may cause the exception AO_HAS_INSTANCES
+   * if the instances of the application attribute are not empty.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_INSTANCES
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_LENGTH
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaLength  The maximum attribute length.
+   */
+   void setLength(
+      in T_LONG aaLength)
+      raises (AoException);
+
+   /** (4013)
+   * Set the name of an application attribute. 
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The name must be unique.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   * 
+   * The name of an application attribute must not exceed the maximum
+   * name length of the underlying physical storage. Current server
+   * implementations typically restrict it to 30 characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_NAME
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaName  The application attribute name.
+   */
+   void setName(
+      in Name aaName)
+      raises (AoException);
+
+   /** (4014)
+   * Set the unit Id of an application attribute. 
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The unit Id is only valid for the current server. If instances of
+   * the application attribute exist, the respective values are
+   * automatically converted to the new unit. If there is no known
+   * conversion an exception is thrown.
+   * 
+   * The automatic conversion can be avoided if the unit is set to zero.
+   * After that the transaction must be committed. In the next step the
+   * new unit may be set in another transaction.
+   * 
+   * The automatic conversion is done only for the following data
+   * types:
+   *    DT_BYTE
+   *    DT_COMPLEX
+   *    DT_DCOMPLEX
+   *    DT_DOUBLE
+   *    DT_FLOAT
+   *    DT_LONG
+   *    DT_LONGLONG
+   *    DT_SHORT
+   * as well as for the corresponding sequence data types. For complex
+   * data types the real and imaginary part are converted separately.
+   * 
+   * If the unit of an attribute is set the unit is constant. If the
+   * value of the attribute has another unit the value is recalculated to
+   * the unit of the application attribute. If there is no unit at the
+   * application attribute the unit at the attribute value is stored and
+   * reported on request at the instance.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   * 
+   * If this method is called before the first commit it will not throw
+   * the following exceptions:
+   *    AO_INCOMPATIBLE_UNITS
+   *    AO_MATH_ERROR
+   * 
+   * After the first commit, there may be instances of the application
+   * attribute. These instances may cause the following problems:
+   * 
+   * AO_INCOMPATIBLE_UNITS: No conversion rules is known to convert the
+   * unit.
+   * 
+   * AO_MATH_ERROR: Converting the values to the new unit results in data
+   * overflow or underflow or a division by zero is detected.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INCOMPATIBLE_UNITS
+   *    AO_MATH_ERROR
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_UNKNOWN_UNIT
+   *
+   * @param  aaUnit  The unit Id.
+   */
+   void setUnit(
+      in T_LONGLONG aaUnit)
+      raises (AoException);
+
+   /** (4015)
+   * The given user group the rights should be set for. <rights> defines
+   * the rights to set or to clear. If the parameter <set> is set to
+   * 'set', the rights in <rights> are set all others are cleared. If the
+   * parameter <set> is set to 'add', the rights in <rights> are added to
+   * the existing rights. If the parameter <set> is set to 'remove', the
+   * rights in <rights> are removed from the existing rights.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  usergroup  The user group for which the rights will be
+   *                    modified.
+   *
+   * @param  rights  The new right for the user group. The rights
+   *                 constants are defined in the interface
+   *                 SecurityRights. The interface definition language
+   *                 IDL does not allow to set the values of enumerations
+   *                 thus the constant definitions had to be done in an
+   *                 interface.
+   *
+   * @param  set  What to do with the new right.
+   */
+   void setRights(
+      in InstanceElement usergroup,
+      in T_LONG rights,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (4016)
+   * Retrieve access control list information of the given object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The access control list entries of the given application
+   *          element.
+   */
+   ACLSequence getRights()
+      raises (AoException);
+
+   /** (4017)
+   * Return the application element to which the attribute belongs.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The application element of the attribute.
+   */
+   ApplicationElement getApplicationElement()
+      raises (AoException);
+
+   /** (4018)
+   * Get the auto generate flag of the application attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The auto generate flag of the application attribute.
+   */
+   T_BOOLEAN isAutogenerated()
+      raises (AoException);
+
+   /** (4019)
+   * Set the auto generate flag of the application attribute.
+   * 
+   * It is allowed to modify the application attribute outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * For performance and flexibility reasons this set-method should be
+   * used before the new application attribute is committed the first
+   * time.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_BASE_ATTRIBUTE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_IS_BASE_ATTRIBUTE
+   *    AO_MISSING_VALUE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  isAutogenerated  The auto generate flag.
+   */
+   void setIsAutogenerated(
+      in T_BOOLEAN isAutogenerated)
+      raises (AoException);
+
+   /** (4020)
+   * Get the definition of the enumeration.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_DATATYPE
+   *
+   * @return  The ASAM ODS enumeration.
+   */
+   EnumerationDefinition getEnumerationDefinition()
+      raises (AoException);
+
+   /** (4021)
+   * Set the definition of the enumeration. This method modifies the
+   * application model, only the super user can use this method.
+   * 
+   * The AoException AO_INVALID_DATATYPE is thrown when the data type of
+   * the attribute is not DT_ENUM.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_ACCESS_DENIED
+   *    AO_INVALID_DATATYPE
+   *
+   * @param  enumDef  The new enumeration definition.
+   */
+   void setEnumerationDefinition(
+      in EnumerationDefinition enumDef)
+      raises (AoException);
+
+   /** (4022)
+   * Has the attribute an unit. If this flag is set, all the attributes
+   * of the instances derived from this attribute will has an unit.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The flag if the attribute has an unit.
+   */
+   T_BOOLEAN hasUnit()
+      raises (AoException);
+
+   /** (4023)
+   * Set whether the attribute becomes an unit or not. A call to the
+   * method setUnit() will automatically set the withUnit(TRUE).
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  withUnit  The flag if the attribute becomes an unit.
+   */
+   void withUnit(
+      in T_BOOLEAN withUnit)
+      raises (AoException);
+
+   /** (4024)
+   * Deprecated, not used any more since ASAM ODS 5.2. 
+   * Has the attribute a value flag. If this flag is set, all the
+   * attributes of the instances derived from this attribute will has a
+   * value flag. If this flag is not set the flag in the TS_Value
+   * structure can be ignored.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The flag if the attribute has a value flag.
+   */
+   T_BOOLEAN hasValueFlag()
+      raises (AoException);
+
+   /** (4025)
+   * Deprecated, not used any more since ASAM ODS 5.2. 
+   * Set whether the attribute becomes a value flag or not. If this flag
+   * isn't set the flag of the TS_Value will be ignored by the server.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  withValueFlag  The flag if the attribute becomes a value
+   *                        flag.
+   */
+   void withValueFlag(
+      in T_BOOLEAN withValueFlag)
+      raises (AoException);
+
+}; // Interface ApplicationAttribute.
+
+/**
+* The ASAM ODS application element interface.
+*/
+interface ApplicationElement {
+
+   /** (5001)
+   * Create a new application attribute on the server. 
+   * 
+   * It is allowed to modify the application element outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The properties of the new application attribute may be changed via
+   * the set-methods of the ApplicationAttribute interface.
+   * 
+   * For performance reasons it is recommended to set all required
+   * properties of an application attribute before it is committed the
+   * first time. This avoids database cross-checks for each attribute.
+   * 
+   * The default properties of a new application attribute are:
+   *    BaseAttribute   NULL
+   *    DataType        DT_UNKNOWN
+   *    IsObligatory    0
+   *    IsUnique        0
+   *    Length          0
+   *    Name            "AUTOGEN"
+   *    Unit            NULL
+   * 
+   * If there are already instances of the application element the values
+   * of the existing instances of the new attribute are set to
+   * undefined.
+   * 
+   * The exception AO_DUPLICATE_NAME name occurs if there is already
+   * another application attribute with the name "AUTOGEN".
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_NAME
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @return  The new application attribute.
+   */
+   ApplicationAttribute createAttribute()
+      raises (AoException);
+
+   /** (5002)
+   * Create an instance of the application element. 
+   * 
+   * It is allowed to create an instance outside a transaction but it is
+   * recommended to activate a transaction.
+   * 
+   * The instance gets permanent when the  transaction is committed.  All
+   * attributes connected to the application element are automatically
+   * created and connected to the instance. The values of the attributes
+   * can be set by the method setValue of the interface InstanceElement.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  ieName  The instance name.
+   *
+   * @return  The new instance.
+   */
+   InstanceElement createInstance(
+      in Name ieName)
+      raises (AoException);
+
+   /** (5003)
+   * Get a list of all related application elements connected to this
+   * application element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The related application elements.
+   */
+   ApplicationElementSequence getAllRelatedElements()
+      raises (AoException);
+
+   /** (5004)
+   * Get a list of all application relations connected to this
+   * application element. The inverse relation of relations connected to
+   * other application elements pointing to the given application
+   * elements are not returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The application relations of the application element.
+   */
+   ApplicationRelationSequence getAllRelations()
+      raises (AoException);
+
+   /** (5005)
+   * Get the application attribute of an application element which is
+   * inherited from the base attribute with the given name. The base name
+   * is case insensitive and may not contain wildcard characters. 
+   * 
+   * Note: The base model is case blind,  e.g. Id, ID and id is all the
+   * same base attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  baName  The base attribute name.
+   *
+   * @return  The application attribute.
+   */
+   ApplicationAttribute getAttributeByBaseName(
+      in Name baName)
+      raises (AoException);
+
+   /** (5006)
+   * Get the application attribute of an application element which has
+   * the given name. The name is case sensitive and may not contain
+   * wildcard characters.
+   * 
+   * Note: The application model is case sensitive, e.g. Id and ID are
+   * different application attributes, don't use this misleading
+   * attribute name.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaName  The application attribute name.
+   *
+   * @return  The application attribute.
+   */
+   ApplicationAttribute getAttributeByName(
+      in Name aaName)
+      raises (AoException);
+
+   /** (5007)
+   * Get a list of the application attributes of an application element.
+   * The reference attributes are not returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaPattern  The name or the search pattern for the
+   *                    application attribute name.
+   *
+   * @return  The application attributes.
+   */
+   ApplicationAttributeSequence getAttributes(
+      in Pattern aaPattern)
+      raises (AoException);
+
+   /** (5008)
+   * Get the base element of an application element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The base element.
+   */
+   BaseElement getBaseElement()
+      raises (AoException);
+
+   /** (5009)
+   * Get the Id of an application element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The Id of the application element.
+   */
+   T_LONGLONG getId()
+      raises (AoException);
+
+   /** (5010)
+   * Get the instance element specified by the given Id. If the Id of the
+   * instance is not unique an exception is thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  ieId  The instance element Id.
+   *
+   * @return  The instance element.
+   */
+   InstanceElement getInstanceById(
+      in T_LONGLONG ieId)
+      raises (AoException);
+
+   /** (5011)
+   * Get the instance element specified by the given name. If the name of
+   * the instance is not unique an exception is thrown.
+   * 
+   * This is a convenience method for instance elements with unique
+   * names. If there are duplicate names for instance use the method
+   * getInstances instead and specify the requested name as pattern
+   * parameter.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_NAME
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  ieName  The instance element name.
+   *
+   * @return  The instance element.
+   */
+   InstanceElement getInstanceByName(
+      in Name ieName)
+      raises (AoException);
+
+   /** (5012)
+   * Get the instances whose names match the pattern. The pattern is case
+   * sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  iePattern  The name or the search pattern for the instance
+   *                    element name.
+   *
+   * @return  The instance elements.
+   */
+   InstanceElementIterator getInstances(
+      in Pattern iePattern)
+      raises (AoException);
+
+   /** (5013)
+   * Get the name of an application element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The name of the application element.
+   */
+   Name getName()
+      raises (AoException);
+
+   /** (5014)
+   * Get related application elements connected via the specified
+   * relationship.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATIONSHIP
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeRelationship  The requested relationship.
+   *
+   * @return  The related application elements.
+   */
+   ApplicationElementSequence getRelatedElementsByRelationship(
+      in Relationship aeRelationship)
+      raises (AoException);
+
+   /** (5015)
+   * Get application relations of the requested type connected from this
+   * application element. The inverse relations are not returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION_TYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeRelationType  The requested relation type.
+   *
+   * @return  The application relations.
+   */
+   ApplicationRelationSequence getRelationsByType(
+      in RelationType aeRelationType)
+      raises (AoException);
+
+   /** (5016)
+   * Get the names of all related application elements.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The names of the related application elements.
+   */
+   NameSequence listAllRelatedElements()
+      raises (AoException);
+
+   /** (5017)
+   * Get the application attribute names of the application element.
+   * There are no attribute names returned in the result list that
+   * contain a reference to another application element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaPattern  The name or the search pattern for the
+   *                    application attribute name.
+   *
+   * @return  The names of the application attributes.
+   */
+   NameSequence listAttributes(
+      in Pattern aaPattern)
+      raises (AoException);
+
+   /** (5018)
+   * Get the names of the instances whose names match the pattern. The
+   * pattern is case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aaPattern  The name or the search pattern for the
+   *                    application attribute name.
+   *
+   * @return  The names of the instances.
+   */
+   NameIterator listInstances(
+      in Pattern aaPattern)
+      raises (AoException);
+
+   /** (5019)
+   * Get the names of related application elements connected via the
+   * specified relationship.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATIONSHIP
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeRelationship  The requested relationship.
+   *
+   * @return  The names of the related application elements.
+   */
+   NameSequence listRelatedElementsByRelationship(
+      in Relationship aeRelationship)
+      raises (AoException);
+
+   /** (5020)
+   * Remove an application attribute from an application element. If
+   * there are instances of the application element the attribute of the
+   * existing instances change from application to instance attributes.
+   * 
+   * 
+   * It is allowed to modify the application element outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  applAttr  The application attribute to remove.
+   */
+   void removeAttribute(
+      in ApplicationAttribute applAttr)
+      raises (AoException);
+
+   /** (5021)
+   * Remove an instance from the application element. 
+   * 
+   * It is allowed to remove an instance outside a transaction but it is
+   * recommended to activate a transaction.
+   * 
+   * The instance is removed from the server when the transaction is
+   * committed. If the recursive flag is set all children of the instance
+   * are also deleted. Removing instances is allowed only if there are no
+   * references(relations) to this instance. If the recursive flag is set
+   * a reference to one of the children is not allowed and will cause an
+   * exception.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_REFERENCES
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  ieId  The instance Id.
+   *
+   * @param  recursive  The recursive flag.
+   */
+   void removeInstance(
+      in T_LONGLONG ieId,
+      in T_BOOLEAN recursive)
+      raises (AoException);
+
+   /** (5022)
+   * Set the base element of the application element. 
+   * 
+   * It is allowed to modify the application element outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The assignment to the current base element is overwritten. If there
+   * are instances of the application element or references to the
+   * application element an exception is thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_INSTANCES
+   *    AO_HAS_REFERENCES
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  baseElem  The base element.
+   */
+   void setBaseElement(
+      in BaseElement baseElem)
+      raises (AoException);
+
+   /** (5023)
+   * Set the name of the application element.
+   *  
+   * It is allowed to modify the application element outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The name of the application element must be unique.
+   * 
+   * The name of an application element must not exceed the maximum name
+   * length of the underlying physical storage. Current server
+   * implementations restrict it to 30 characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_NAME
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  aeName  The application element name.
+   */
+   void setName(
+      in Name aeName)
+      raises (AoException);
+
+   /** (5024)
+   * The given user group the rights should be set for. <rights> defines
+   * the rights to set or to clear. If the parameter <set> is set to
+   * 'set', the rights in <rights> are set all others are cleared. If the
+   * parameter <set> is set to 'add', the rights in <rights> are added to
+   * the existing rights. If the parameter <set> is set to 'remove', the
+   * rights in <rights> are removed from the existing rights.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  usergroup  The user group for which the rights will be
+   *                    modified.
+   *
+   * @param  rights  The new right for the user group. The rights
+   *                 constants are defined in the interface
+   *                 SecurityRights. The interface definition language
+   *                 IDL does not allow to set the values of enumerations
+   *                 thus the constant definitions had to be done in an
+   *                 interface.
+   *
+   * @param  set  What to do with the new right.
+   */
+   void setRights(
+      in InstanceElement usergroup,
+      in T_LONG rights,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (5025)
+   * Retrieve access control list information of the given object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The access control list entries of the given application
+   *          element.
+   */
+   ACLSequence getRights()
+      raises (AoException);
+
+   /** (5026)
+   * Retrieve access control list information for the initial rights of
+   * the given object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The access control list entries with the initial rights of
+   *          the given application element.
+   */
+   InitialRightSequence getInitialRights()
+      raises (AoException);
+
+   /** (5027)
+   * The given user group the initial rights should be set for. <rights>
+   * defines the rights to set or to clear. If the parameter <set> is set
+   * to 'set', the rights in <rights> are set all others are cleared. If
+   * the parameter <set> is set to 'add', the rights in <rights> are
+   * added to the existing rights. If the parameter <set> is set to
+   * 'remove', the rights in <rights> are removed from the existing
+   * rights.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  usergroup  The user group for which the initial rights will
+   *                    be modified.
+   *
+   * @param  rights  The new initial rights for the user group. The
+   *                 rights constants are defined in the interface
+   *                 SecurityRights. The interface definition language
+   *                 IDL does not allow to set the values of enumerations
+   *                 thus the constant definitions had to be done in an
+   *                 interface.
+   *
+   * @param  refAid  The Id of referencing application element for which
+   *                 the initial rights will be used. If no refAid is set
+   *                 the initial rights will be used for each new
+   *                 instance element independent of the application
+   *                 element.
+   *
+   * @param  set  What to do with the new initial rights.
+   */
+   void setInitialRights(
+      in InstanceElement usergroup,
+      in T_LONG rights,
+      in T_LONGLONG refAid,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (5028)
+   * Set for the given application element, which relation will be used
+   * to determine the initial rights for the new created instances.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  applRel  The application relation which will be used to
+   *                  determine the initial rights. The relation range of
+   *                  the application relation must be [1:1] otherwise
+   *                  the server can not find an unique instance element
+   *                  to retrieve the initial rights.
+   *
+   * @param  set  Set or remove the relation for the initial rights. If
+   *              this parameter is true the relation will be set
+   *              otherwise removed.
+   */
+   void setInitialRightRelation(
+      in ApplicationRelation applRel,
+      in T_BOOLEAN set)
+      raises (AoException);
+
+   /** (5029)
+   * Get all relations which are used to retrieve the instances to create
+   * the initial rights of the new created instance element. If there are
+   * more then one application relation the initial rights of each
+   * related instance are 'ored' to the list of the initial rights.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The sequence with the application relations which will be
+   *          used to create the initial rights of the new created
+   *          instance element.
+   */
+   ApplicationRelationSequence getInitialRightRelations()
+      raises (AoException);
+
+   /** (5030)
+   * Get the security level of the application element. The security
+   * level tells if there is a security check for both application
+   * element and instance elements or only for the application
+   * attributes, the instance elements or none at all.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The current security level. The security level constants
+   *          are defined in the interface SecurityLevel. The interface
+   *          definition language IDL does not allow to set the values of
+   *          enumerations thus the constant definitions had to be done
+   *          in an interface.
+   */
+   T_LONG getSecurityLevel()
+      raises (AoException);
+
+   /** (5031)
+   * Set the security level for the given application element. If the
+   * security level is added the client is responsible for the access
+   * control list entries of the existing objects.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  secLevel  The new security level. The security level
+   *                   constants are defined in the interface
+   *                   SecurityLevel. The interface definition language
+   *                   IDL does not allow to set the values of
+   *                   enumerations thus the constant definitions had to
+   *                   be done in an interface.
+   *
+   * @param  set  What to do with the new security level.
+   */
+   void setSecurityLevel(
+      in T_LONG secLevel,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (5032)
+   * Get the application model to which the application element belongs
+   * by returning an object with the interface ApplicationStructure. The
+   * application model provided is the same as that provided from the
+   * method getApplicationStructure of the Interface AoSession. This
+   * method guarantees that the client software is able to return to the
+   * session in case the session object is not available.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The application structure to which the application element
+   *          belongs.
+   */
+   ApplicationStructure getApplicationStructure()
+      raises (AoException);
+
+   /** (5033)
+   * Create a list with instances. The attribute are given with the name
+   * of the sequence. The values of the attributes are given in the value
+   * sequence. The index in the different value sequences match for one
+   * instance element. The index in the instance element sequence of the
+   * related instances match for the instance with the same index in the
+   * value sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_INVALID_REQUEST
+   *
+   * @param  attributes  The attributes of the new created instances.
+   *
+   * @param  relatedInstances  The list with related instances for
+   *                           different application relations.
+   *
+   * @return  The list with the new created instances.
+   */
+   InstanceElementSequence createInstances(
+      in NameValueSeqUnitSequence attributes,
+      in ApplicationRelationInstanceElementSeqSequence relatedInstances)
+      raises (AoException);
+
+   /** (5034)
+   * Return the basic application relations derived from the base
+   * relation with the given relation name.
+   * Take care at most elements only one application relation can be
+   * derived from a base relation, there are some well defined
+   * exceptions, so the method can return more then one application
+   * relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  baseRelName  The name of the base relation.
+   *
+   * @return  The application relation sequence, if no relation is found
+   *          an empty sequence is returned.
+   */
+   ApplicationRelationSequence getRelationsByBaseName(
+      in Name baseRelName)
+      raises (AoException);
+
+}; // Interface ApplicationElement.
+
+/**
+* The ASAM ODS application relation interface.
+* 
+* A relation is the connection between two ASAM ODS elements; it may be
+* navigated in both
+* directions. The get- and set- methods are defined from the first
+* element, the getInverse- and
+* setInverse- methods work from the second element.
+*/
+interface ApplicationRelation {
+
+   /** (6001)
+   * Get the base relation of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The base relation of the application relation. A 'null' is
+   *          returned if the application relation has no base relation.
+   */
+   BaseRelation getBaseRelation()
+      raises (AoException);
+
+   /** (6002)
+   * Get the first application element of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The first application element of the application relation.
+   */
+   ApplicationElement getElem1()
+      raises (AoException);
+
+   /** (6003)
+   * Get the second application element of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The second application element of the application relation.
+   */
+   ApplicationElement getElem2()
+      raises (AoException);
+
+   /** (6004)
+   * Get the inverse relation range of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The inverse relation range of the application relation.
+   */
+   RelationRange getInverseRelationRange()
+      raises (AoException);
+
+   /** (6005)
+   * Get the inverse relationship of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The inverse relationship of the application relation.
+   */
+   Relationship getInverseRelationship()
+      raises (AoException);
+
+   /** (6006)
+   * Get the name of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The name of the application relation.
+   */
+   Name getRelationName()
+      raises (AoException);
+
+   /** (6007)
+   * Get the relation range of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The relation range of the application relation.
+   */
+   RelationRange getRelationRange()
+      raises (AoException);
+
+   /** (6008)
+   * Get the relationship of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The relationship of the application relation.
+   */
+   Relationship getRelationship()
+      raises (AoException);
+
+   /** (6009)
+   * Get the relation type of the application relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The relation type of the application relation.
+   */
+   RelationType getRelationType()
+      raises (AoException);
+
+   /** (6010)
+   * Set the base relation of the application relation. 
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The relation type and relation range is copied from the base
+   * relation. The previous values get lost.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  baseRel  The base relation.
+   */
+   void setBaseRelation(
+      in BaseRelation baseRel)
+      raises (AoException);
+
+   /** (6011)
+   * Set the first application element of the application relation. 
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_ELEMENT
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  applElem  The application element.
+   */
+   void setElem1(
+      in ApplicationElement applElem)
+      raises (AoException);
+
+   /** (6012)
+   * Set the second application element of the application relation. 
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_ELEMENT
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  applElem  The application element.
+   */
+   void setElem2(
+      in ApplicationElement applElem)
+      raises (AoException);
+
+   /** (6013)
+   * Set the relation range of an application relation. 
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * It is only allowed to set the relation type if no base relation is
+   * defined.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_BASE_RELATION
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION_RANGE
+   *    AO_IS_BASE_RELATION
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  arRelationRange  The inverse relation range.
+   */
+   void setInverseRelationRange(
+      in RelationRange arRelationRange)
+      raises (AoException);
+
+   /** (6014)
+   * Set the name of an application relation.
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The name of an application attribute must not exceed the maximum
+   * name length of the underlying physical storage. Current server
+   * typically implementations restrict it to 30 characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  arName  The application relation name.
+   */
+   void setRelationName(
+      in Name arName)
+      raises (AoException);
+
+   /** (6015)
+   * Set the relation range of an application relation. 
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * It is only allowed to set the relation type if no base relation is
+   * defined.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_BASE_RELATION
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION_RANGE
+   *    AO_IS_BASE_RELATION
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  arRelationRange  The relation range.
+   */
+   void setRelationRange(
+      in RelationRange arRelationRange)
+      raises (AoException);
+
+   /** (6016)
+   * Set the relation type of an application relation. 
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The relationship is automatically set when the relation type is set.
+   * It is only allowed to set the relation type if no base relation is
+   * defined.
+   * 
+   * It is only allowed to modify a relation type when no base relation
+   * is given, otherwise the exception AO_HAS_BASE_RELATION is thrown.
+   * 
+   * It is not allowed to set the relation type FATHER_CHILD, these
+   * relation type is reserved for the base model. The two relation types
+   * which can be set are  INFO or INHERITANCE. 
+   * 
+   * The relationship is set automatic when the relation type is set, the
+   * maximum of the relation range determines the relationship between
+   * the elements of the relation.
+   * 
+   * R.Type      | max R.Range | max inv. R.Range | Relationship         
+   *               
+   * ------------+-------------+------------------+-------------         
+   *              
+   * INFO        | 1           | 1                | exception,
+   * AO_INVALID_RELATION_TYPE 
+   * ------------+-------------+------------------+-------------         
+   *        
+   * INFO        | 1           | MANY             | INFO_TO              
+   *               
+   * ------------+-------------+------------------+-------------         
+   *              
+   * INFO        | MANY        | 1                | INFO_FROM            
+   *               
+   * ------------+-------------+------------------+-------------         
+   *              
+   * INFO        | MANY        | MANY             | INFO                 
+   *               
+   * ------------+-------------+------------------+-------------         
+   *              
+   * INHERITANCE | 1           | 1                | exception,
+   * AO_INVALID_RELATION_TYPE 
+   * ------------+-------------+------------------+-------------         
+   *              
+   * INHERITANCE | 1           | MANY             | SUPERTYPE            
+   *               
+   * ------------+-------------+------------------+-------------         
+   *              
+   * INHERITANCE | MANY        | 1                | SUBTYPE              
+   *               
+   * ------------+-------------+------------------+-------------         
+   *              
+   * INHERITANCE | MANY        | MANY             | exception,
+   * AO_INVALID_RELATION_TYPE
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_BASE_RELATION
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION_TYPE
+   *    AO_IS_BASE_RELATION
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  arRelationType  The relation type.
+   */
+   void setRelationType(
+      in RelationType arRelationType)
+      raises (AoException);
+
+   /** (6017)
+   * Get the inverse name of the application relation. The inverse name
+   * of an application relation is the name of the relation seen from the
+   * other application element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The inverse name of the application relation.
+   */
+   Name getInverseRelationName()
+      raises (AoException);
+
+   /** (6018)
+   * Set the name of an application relation.
+   * 
+   * It is allowed to modify the application relation outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  arInvName  The inverse application relation name.
+   */
+   void setInverseRelationName(
+      in Name arInvName)
+      raises (AoException);
+
+}; // Interface ApplicationRelation.
+
+/**
+* The ASAM ODS application structure interface.
+*/
+interface ApplicationStructure {
+
+   /** (7001)
+   * Check the application model for ASAM ODS conformity. The first error
+   * found is reported by an exception. The following checks are
+   * performed:
+   * 
+   *  - Each application element must be derived from a valid base
+   * element.
+   *  - An application attribute is derived from one base attribute. It
+   * is not allowed to derive more the one application attribute from the
+   * same base attribute. It is allowed that application attributes are
+   * not derived from any base attribute.
+   *  - All application elements must have at least the mandatory
+   * attributes.
+   *  - Each application elements must be identified by a unique Asam
+   * path. No "floating" application elements are allowed.
+   *  - All relations required by the base model must be present.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_BASE_ATTRIBUTE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION
+   *    AO_MISSING_ATTRIBUTE
+   *    AO_MISSING_RELATION
+   *    AO_MISSING_APPLICATION_ELEMENT
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_PATH_TO_ELEMENT
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void check()
+      raises (AoException);
+
+   /** (7002)
+   * Create a new application element in the application model. 
+   * 
+   * It is allowed to modify the application model outside a transaction
+   * but it is recommended to activate a transaction.
+   * 
+   * The information whether or not the new application element is a top
+   * level element is taken from the specified base element. The Id of
+   * the application element is set automatically. The mandatory base
+   * attributes are created automatically. Optional attributes have to be
+   * created by the calling program. The application attribute interface
+   * methods may be used to modify the attributes.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  baseElem  The base element from which the application
+   *                   element is derived.
+   *
+   * @return  The new application element.
+   */
+   ApplicationElement createElement(
+      in BaseElement baseElem)
+      raises (AoException);
+
+   /** (7003)
+   * Create a new relation. 
+   * 
+   * It is allowed to modify the application model outside a transaction
+   * but it is recommended to activate a transaction.
+   * 
+   * The relation is part of the application model. The application
+   * relation interface methods may be used to modify the relation.
+   * 
+   * The default properties of a new application relation are:
+   *    BaseRelation   NULL
+   *    Element1       NULL
+   *    Element2       NULL
+   *    Range          -2, -2
+   *    Name           NULL
+   *    Type           INFO
+   * When element 1 or element 2 is set before the name of the relation
+   * is specified, the name of the application relation is set to
+   * "AUTOGEN".
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @return  The new application relation.
+   */
+   ApplicationRelation createRelation()
+      raises (AoException);
+
+   /** (7004)
+   * Get the application element with the requested Id.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeId  The Id of the requested application element.
+   *
+   * @return  The requested application element.
+   */
+   ApplicationElement getElementById(
+      in T_LONGLONG aeId)
+      raises (AoException);
+
+   /** (7005)
+   * Get the application element with the requested name.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeName  The name of the requested application element.
+   *
+   * @return  The requested application element.
+   */
+   ApplicationElement getElementByName(
+      in Name aeName)
+      raises (AoException);
+
+   /** (7006)
+   * Get the application elements whose names match the pattern. The
+   * pattern is case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aePattern  The name or the search pattern for the requested
+   *                    application elements.
+   *
+   * @return  The requested application elements.
+   */
+   ApplicationElementSequence getElements(
+      in Pattern aePattern)
+      raises (AoException);
+
+   /** (7007)
+   * Get the names of application elements that are derived from the
+   * specified base element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_BASETYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeType  The requested base element type. The base element
+   *                 type can be a pattern.
+   *
+   * @return  The requested application element names.
+   */
+   ApplicationElementSequence getElementsByBaseType(
+      in BaseType aeType)
+      raises (AoException);
+
+   /** (7008)
+   * Get the instance element specified by the ASAM path.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_ASAM_PATH
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  asamPath  The ASAM path of the requested instance element.
+   *
+   * @return  The requested instance element.
+   */
+   InstanceElement getInstanceByAsamPath(
+      in Name asamPath)
+      raises (AoException);
+
+   /** (7009)
+   * Returns the relations between two application elements.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  applElem1  The first application element.
+   *
+   * @param  applElem2  The second application element.
+   *
+   * @return  The relations between the specified application elements.
+   */
+   ApplicationRelationSequence getRelations(
+      in ApplicationElement applElem1,
+      in ApplicationElement applElem2)
+      raises (AoException);
+
+   /** (7010)
+   * Get the top level application elements which are inherited from the
+   * base element that matches the base type. If the given base type is
+   * no top level base element an exception is thrown. A top level
+   * application element is an application element without a father.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_BASETYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeType  The requested base type. The base element type can
+   *                 be a pattern.
+   *
+   * @return  The top level application elements.
+   */
+   ApplicationElementSequence getTopLevelElements(
+      in BaseType aeType)
+      raises (AoException);
+
+   /** (7011)
+   * Get the names of the application elements that  match the pattern.
+   * The pattern is case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aePattern  The name or the search pattern for the requested
+   *                    base elements.
+   *
+   * @return  The names of the application elements.
+   */
+   NameSequence listElements(
+      in Pattern aePattern)
+      raises (AoException);
+
+   /** (7012)
+   * Get the names of application elements that are  derived from the
+   * given base type.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_BASETYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeType  The requested base type. The base element type can
+   *                 be a pattern.
+   *
+   * @return  The names of the application elements.
+   */
+   NameSequence listElementsByBaseType(
+      in BaseType aeType)
+      raises (AoException);
+
+   /** (7013)
+   * Get the names of the top level application elements that are derived
+   * from the given base type. If the given base type is not a top level
+   * base element an exception is thrown. A top level application element
+   * is an application element without a father.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_BASETYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aeType  The requested base type.
+   *
+   * @return  The names of the application elements.
+   */
+   NameSequence listTopLevelElements(
+      in BaseType aeType)
+      raises (AoException);
+
+   /** (7014)
+   * Remove an application element from the application model. 
+   * 
+   * It is allowed to modify the application model outside a transaction
+   * but it is recommended to activate a transaction.
+   * 
+   *   - Only allowed:
+   *       - if the application element is empty
+   *         (has no instances).
+   *       - no relations with other application elements.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_INSTANCES
+   *    AO_HAS_REFERENCES
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  applElem  The application element to be removed.
+   */
+   void removeElement(
+      in ApplicationElement applElem)
+      raises (AoException);
+
+   /** (7015)
+   * This method removes an application relation from the model. 
+   * 
+   * It is allowed to modify the application model outside a transaction
+   * but it is recommended to activate a transaction.
+   * 
+   * The elements of the relation are still part of the application
+   * model. If there are instances of the relation they are also removed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_HAS_INSTANCES
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  applRel  The application relation to be removed.
+   */
+   void removeRelation(
+      in ApplicationRelation applRel)
+      raises (AoException);
+
+   /** (7016)
+   * Get the instance elements specified by the element id.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_ASAM_PATH
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  ieIds  The sequence with the element id.
+   *
+   * @return  The requested instance element sequence.
+   */
+   InstanceElementSequence getInstancesById(
+      in ElemIdSequence ieIds)
+      raises (AoException);
+
+   /** (7017)
+   * Get the current client session in which the application model is
+   * created.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The current client session.
+   */
+   AoSession getSession()
+      raises (AoException);
+
+   /** (7018)
+   * Create a new enumeration definition. This method modifies the
+   * application model and is only allowed for the super user.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_ACCESS_DENIED
+   *
+   * @param  enumName  Name of the enumeration
+   *
+   * @return  The new created enumeration
+   */
+   EnumerationDefinition createEnumerationDefinition(
+      in T_STRING enumName)
+      raises (AoException);
+
+   /** (7019)
+   * Remove the enumeration definition. The server checks if the
+   * enumeration is still in use by one of the attributes. This method
+   * modifies the application model and is only allowed for the super
+   * user.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_ACCESS_DENIED
+   *
+   * @param  enumName  Name of the enumeration to remove.
+   */
+   void removeEnumerationDefinition(
+      in T_STRING enumName)
+      raises (AoException);
+
+   /** (7020)
+   * Get the list of all enumeration names.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  List with all enumeration names.
+   */
+   NameSequence listEnumerations()
+      raises (AoException);
+
+   /** (7021)
+   * Get the specified enumeration definition.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  enumName  Name of the requested enumeration.
+   *
+   * @return  The enumeration definition.
+   */
+   EnumerationDefinition getEnumerationDefinition(
+      in T_STRING enumName)
+      raises (AoException);
+
+   /** (7022)
+   * Create the relation between a list of instances. The number of
+   * instances in both list must be identical. The application element of
+   * the instances in each list must be identical. The application
+   * elements must match the application elements of the application
+   * relation. The index in the list of the instances defines related
+   * instances.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_INVALID_REQUEST
+   *
+   * @param  applRel  The application relation.
+   *
+   * @param  elemList1  The list with the instances of one application
+   *                    element for which the relation will be created.
+   *
+   * @param  elemList2  The list with the related instances.
+   */
+   void createInstanceRelations(
+      in ApplicationRelation applRel,
+      in InstanceElementSequence elemList1,
+      in InstanceElementSequence elemList2)
+      raises (AoException);
+
+}; // Interface ApplicationStructure.
+
+/**
+* The ASAM ODS base attribute interface.
+*/
+interface BaseAttribute {
+
+   /** (8001)
+   * Get the data type of the base attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The data type of the base attribute.
+   */
+   DataType getDataType()
+      raises (AoException);
+
+   /** (8002)
+   * Get the name of the base attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The name of the base attribute.
+   */
+   Name getName()
+      raises (AoException);
+
+   /** (8003)
+   * Get the obligatory flag of the base attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The obligatory flag of the base attribute.
+   */
+   T_BOOLEAN isObligatory()
+      raises (AoException);
+
+   /** (8004)
+   * Get the unique flag of the base attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The unique flag of the base attribute.
+   */
+   T_BOOLEAN isUnique()
+      raises (AoException);
+
+   /** (8005)
+   * Return the base element to which the attribute belongs..
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The base element of the attribute.
+   */
+   BaseElement getBaseElement()
+      raises (AoException);
+
+   /** (8006)
+   * Get the definition of the enumeration of the base attribute.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_DATATYPE
+   *
+   * @return  The ASAM ODS enumeration.
+   */
+   EnumerationDefinition getEnumerationDefinition()
+      raises (AoException);
+
+}; // Interface BaseAttribute.
+
+/**
+* The ASAM ODS base element interface.
+*/
+interface BaseElement {
+
+   /** (9001)
+   * Get all known relations of the base element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  All known relations of the base element.
+   */
+   BaseRelationSequence getAllRelations()
+      raises (AoException);
+
+   /** (9002)
+   * Get attributes of the base element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  baPattern  The name or the search pattern for the requested
+   *                    base attributes.
+   *
+   * @return  The requested attributes of the base element.
+   */
+   BaseAttributeSequence getAttributes(
+      in Pattern baPattern)
+      raises (AoException);
+
+   /** (9003)
+   * Get the related elements of a base element defined by the
+   * relationship.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATIONSHIP
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  brRelationship  The requested relationship.
+   *
+   * @return  The related elements of a base element.
+   */
+   BaseElementSequence getRelatedElementsByRelationship(
+      in Relationship brRelationship)
+      raises (AoException);
+
+   /** (9004)
+   * Get the base element's relations of the requested relation type.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION_TYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  brRelationType  The requested relation type.
+   *
+   * @return  The base element's relations of the requested type.
+   */
+   BaseRelationSequence getRelationsByType(
+      in RelationType brRelationType)
+      raises (AoException);
+
+   /** (9005)
+   * Get the type of the base element. The type of the base element is
+   * identical with the name of the base element. The type of the base
+   * element is a string.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The type of the base element.
+   */
+   BaseType getType()
+      raises (AoException);
+
+   /** (9006)
+   * Get whether or not the base element is a top level element. Top
+   * level elements are elements without a father.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  Boolean whether or not the base element is a top level
+   *          element.
+   */
+   T_BOOLEAN isTopLevel()
+      raises (AoException);
+
+   /** (9007)
+   * Get attribute names of the base element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  baPattern  The name or the search pattern for the requested
+   *                    base attribute names.
+   *
+   * @return  The requested attribute names of the base element.
+   */
+   NameSequence listAttributes(
+      in Pattern baPattern)
+      raises (AoException);
+
+   /** (9008)
+   * Get the related element names of the base element defined by the
+   * relationship.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATIONSHIP
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  brRelationship  The requested relationship.
+   *
+   * @return  The related element names of the base element.
+   */
+   BaseTypeSequence listRelatedElementsByRelationship(
+      in Relationship brRelationship)
+      raises (AoException);
+
+}; // Interface BaseElement.
+
+/**
+* The ASAM ODS base relation interface.
+*/
+interface BaseRelation {
+
+   /** (10001)
+   * Get the first base element of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The first base element of the base relation.
+   */
+   BaseElement getElem1()
+      raises (AoException);
+
+   /** (10002)
+   * Get the second base element of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The second base element of the base relation.
+   */
+   BaseElement getElem2()
+      raises (AoException);
+
+   /** (10003)
+   * Get the inverse relation range of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The inverse relation range of the base relation.
+   */
+   RelationRange getInverseRelationRange()
+      raises (AoException);
+
+   /** (10004)
+   * Get the inverse relationship of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The inverse relationship of the base relation.
+   */
+   Relationship getInverseRelationship()
+      raises (AoException);
+
+   /** (10005)
+   * Get the relation name of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The relation name of the base relation.
+   */
+   Name getRelationName()
+      raises (AoException);
+
+   /** (10006)
+   * Get the relation range of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The relation range of the base relation.
+   */
+   RelationRange getRelationRange()
+      raises (AoException);
+
+   /** (10007)
+   * Get the relationship of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The relationship of the base relation.
+   */
+   Relationship getRelationship()
+      raises (AoException);
+
+   /** (10008)
+   * Get the relation type of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The relation type of the base relation.
+   */
+   RelationType getRelationType()
+      raises (AoException);
+
+   /** (10009)
+   * Return the inverse name of the base relation.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The name of the inverse relation.
+   */
+   Name getInverseRelationName()
+      raises (AoException);
+
+}; // Interface BaseRelation.
+
+/**
+* The ASAM ODS base structure interface.
+*/
+interface BaseStructure {
+
+   /** (11001)
+   * Get the base element that matches the requested type. The type of a
+   * base element is identical with the name of the base element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_BASETYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  beType  The name of the requested base element.
+   *
+   * @return  The requested base element.
+   */
+   BaseElement getElementByType(
+      in BaseType beType)
+      raises (AoException);
+
+   /** (11002)
+   * Get the base elements that match the pattern. The pattern is case
+   * sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  bePattern  The name or the search pattern for the requested
+   *                    base elements.
+   *
+   * @return  The requested base elements.
+   */
+   BaseElementSequence getElements(
+      in Pattern bePattern)
+      raises (AoException);
+
+   /** (11003)
+   * Get the base relation between two base elements. The base relation
+   * is given from the first element (parameter elem1) to the second
+   * element (parameter elem2), the inverse relation is not given.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NOT_FOUND
+   *
+   * @param  elem1  The base element from which the relation starts.
+   *
+   * @param  elem2  The base element to which the relation points.
+   *
+   * @return  The base relation between the two base elements.
+   */
+   BaseRelation getRelation(
+      in BaseElement elem1,
+      in BaseElement elem2)
+      raises (AoException);
+
+   /** (11004)
+   * Get the top level base elements that match the pattern. The pattern
+   * is case sensitive and may contain wildcard characters. A top level
+   * base element is a base element without a father.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  bePattern  The name or the search pattern for the requested
+   *                    top level base elements.
+   *
+   * @return  The requested top level base elements.
+   */
+   BaseElementSequence getTopLevelElements(
+      in Pattern bePattern)
+      raises (AoException);
+
+   /** (11005)
+   * Get the version of the base model. The version of the base model is
+   * the version of the ASAM ODS base model.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The version of the ASAM ODS base model.
+   */
+   T_STRING getVersion()
+      raises (AoException);
+
+   /** (11006)
+   * Get the base element names that match the pattern. The pattern is
+   * case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  bePattern  The name or the search pattern for the requested
+   *                    base element names.
+   *
+   * @return  The requested base element names.
+   */
+   BaseTypeSequence listElements(
+      in Pattern bePattern)
+      raises (AoException);
+
+   /** (11007)
+   * Get the top level base element names that match the pattern. The
+   * pattern is case sensitive and may contain wildcard characters. A top
+   * level base element is a base element without a father.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  bePattern  The name or the search pattern for the requested
+   *                    top level base element names.
+   *
+   * @return  The requested top level base element names.
+   */
+   BaseTypeSequence listTopLevelElements(
+      in Pattern bePattern)
+      raises (AoException);
+
+   /** (11008)
+   * Get the base relations between two base elements. The base relation
+   * is given from the first element (parameter elem1) to the second
+   * element (parameter elem2), the inverse relation is not given.
+   * When there are no base relation between the two elements the server
+   * will throw the exception AO_NOT_FOUND
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NOT_FOUND
+   *
+   * @param  elem1  The base element from which the relation starts.
+   *
+   * @param  elem2  The base element to which the relation points.
+   *
+   * @return  The list with base relations between the two elements.
+   */
+   BaseRelationSequence getRelations(
+      in BaseElement elem1,
+      in BaseElement elem2)
+      raises (AoException);
+
+}; // Interface BaseStructure.
+
+/**
+* The ASAM ODS blob interface.
+*/
+interface Blob {
+
+   /** (12001)
+   * Append a byte sequence to the binary large object. 
+   * 
+   * It is allowed to modify the binary large object outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  value  The byte sequence.
+   */
+   void append(
+      in S_BYTE value)
+      raises (AoException);
+
+   /** (12002)
+   * Compares the content of the binary large object. The headers are not
+   * compared.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aBlob  The blob to compare.
+   *
+   * @return  A flag whether or not the compared blobs are equal.
+   */
+   T_BOOLEAN compare(
+      in T_BLOB aBlob)
+      raises (AoException);
+
+   /** (12003)
+   * Get a part of the binary large object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  offset  The starting position of the data in the blob.
+   *
+   * @param  length  The number of bytes requested from the blob.
+   *
+   * @return  The request part of the blob data.
+   */
+   S_BYTE get(
+      in T_LONG offset,
+      in T_LONG length)
+      raises (AoException);
+
+   /** (12004)
+   * Get the header of the binary large object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The blob header.
+   */
+   T_STRING getHeader()
+      raises (AoException);
+
+   /** (12005)
+   * Get the length of the binary large object without loading it.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The blob length.
+   */
+   T_LONG getLength()
+      raises (AoException);
+
+   /** (12006)
+   * Clear the binary large object and set the new data. 
+   * 
+   * It is allowed to modify the binary large object outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  value  The new blob data.
+   */
+   void set(
+      in S_BYTE value)
+      raises (AoException);
+
+   /** (12007)
+   * Set the header of a binary large object. 
+   * 
+   * It is allowed to modify the binary large object outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  header  The blob header.
+   */
+   void setHeader(
+      in T_STRING header)
+      raises (AoException);
+
+   /** (12008)
+   * Destroy the object on the server. The destructor of the client, so
+   * the server knows this object is not used anymore by the client.
+   * Access to this object after the destroy method will lead to an
+   * exception.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+}; // Interface Blob.
+
+/**
+* The ASAM ODS column interface. It is not inherited from
+* InstanceElement. Via the method getColumn of the interface SubMatrix
+* the column is accessed. The column is only used for read access. With
+* the creation of instances at the application element of type
+* AoLocalColumn and the relation to the instances of the application
+* element of type AoSubMatrix a local column can be created. The column
+* name is used for the SMatLink and the column is used to store a formula
+* for the calculation of the values of the column. There is no definition
+* of the formula language at the moment.
+*/
+interface Column {
+
+   /** (13001)
+   * Get the formula of the column.
+   * 
+   * There is no formula defined in ASAM ODS, so there is nothing to
+   * return.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The formula of the column.
+   */
+   T_STRING getFormula()
+      raises (AoException);
+
+   /** (13002)
+   * Get the name of the column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The name of the column.
+   */
+   Name getName()
+      raises (AoException);
+
+   /** (13003)
+   * Get the source measurement quantity.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The source measurement quantity.
+   */
+   InstanceElement getSourceMQ()
+      raises (AoException);
+
+   /** (13004)
+   * Get the unit of the column.
+   * 
+   * The method returns the unit of the values according the current
+   * setting. Initially within a session this is the unit as given in the
+   * storage. After setUnit() is called, the unit as specified by
+   * setUnit() will be
+   * returned for the particular column. Thus the unit returned will be
+   * retrieved by the ODS server according to following strategy:
+   * 1) if a unit has already been set for the paricular column by
+   * setUnit(..) prior; that unit is returned, else
+   * 2) if the related measurement quantity has a unit (i.e. it has a
+   * relation derived from the base relation 'unit' referencing an
+   * instance of base type AoUnit), that unit's name is returned, else
+   * 3) if the related measurement quantity has a relation to a quantity
+   * (i.e. its relation derived from the base relation 'quantity' is
+   * referencing an instance of base type AoQuantity), and this quantity
+   * has
+   * a default unit (i.e. it has a relation derived from the base
+   * relation 'default_unit' referencing an instance of base type
+   * AoUnit), that unit's name is returned, else
+   * 4) an empty string is returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The unit of the column.
+   */
+   T_STRING getUnit()
+      raises (AoException);
+
+   /** (13005)
+   * Set the formula of the column. 
+   * 
+   * It is allowed to modify the column outside a transaction but it is
+   * recommended to activate a transaction.
+   * 
+   * There is no formula in ASAM ODS so don't try to set the formula.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  formula  The formula.
+   */
+   void setFormula(
+      in T_STRING formula)
+      raises (AoException);
+
+   /** (13006)
+   * Set the unit of the column. This is only a temporary unit for
+   * getting the values of a column. This unit is not stored in the
+   * storage. 
+   * When an empty string is given the unit is returned to the original
+   * setting.
+   * When the value matrix where the column belongs to is in the STORAGE
+   * mode this method have no influence on the values returned from the
+   * value matrix.
+   * To change the unit permanent in the storage the relation at the
+   * measurement quantity must be changed by the client.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  unit  The physical unit.
+   */
+   void setUnit(
+      in T_STRING unit)
+      raises (AoException);
+
+   /** (13007)
+   * Is the column an independent column
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The independent flag of the column.
+   */
+   T_BOOLEAN isIndependent()
+      raises (AoException);
+
+   /** (13008)
+   * Deprecated, solved by NVH Application model.
+   * 
+   * Is the column an scaling column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  Tells if the column is a scaling column.
+   */
+   T_BOOLEAN isScaling()
+      raises (AoException);
+
+   /** (13009)
+   * Set the column as an independent column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  independent  The new value of the independent flag.
+   */
+   void setIndependent(
+      in T_BOOLEAN independent)
+      raises (AoException);
+
+   /** (13010)
+   * Deprecated, solved by NVH Application model.
+   * 
+   * Set the column to a scaling column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  scaling  The new value of the scaling flag.
+   */
+   void setScaling(
+      in T_BOOLEAN scaling)
+      raises (AoException);
+
+   /** (13011)
+   * Get the data type of the column.
+   * The data type of the measurement quantity is always returned,
+   * independent of the mode of the values matrix where the column
+   * belongs to neither the sequence representation of the column.
+   * 
+   * This method always returns the data type of the measurement quantity
+   * to which this local column belongs, independent of 
+   * - the value matrix mode of the value matrices this local column
+   * belongs to
+   * - the sequence representation of this local column
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The data type of the column.
+   */
+   DataType getDataType()
+      raises (AoException);
+
+   /** (13012)
+   * Destroy the object on the server. The destructor of the client so
+   * the server knows this object is not used anymore by the client.
+   * Access to this object after the destroy method will lead to an
+   * exception.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (13013)
+   * Get the sequence representation of the column. 
+   * 
+   * When the value matrix to which the column belongs is in CALCULATED
+   * mode the sequence_representation is always explicit.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The sequence representation of the column. This is the
+   *          integer value according the enumeration seq_rep_enum of the
+   *          base model.
+   */
+   T_LONG getSequenceRepresentation()
+      raises (AoException);
+
+   /** (13014)
+   * Set the sequence representation of a new column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_BAD_PARAMETER
+   *    AO_TRANSACTION_NOT_ACTVIE
+   *
+   * @param  sequenceRepresentation  The sequence representation.  This
+   *                                 is the integer value according the
+   *                                 enumeration seq_rep_enum of the base
+   *                                 model.
+   */
+   void setSequenceRepresentation(
+      in T_LONG sequenceRepresentation)
+      raises (AoException);
+
+   /** (13015)
+   * Get the generation parameters of the Column. 
+   * 
+   * If no generation parameters exist an empty sequence is returned, its
+   * type is double, its length is 0.
+   * When the value matrix to which the column belongs is in CALCULATED
+   * mode an empty sequence is returned, its type is double, its length
+   * is 0.
+   * 
+   * The data type of the generation parameter for the implicit columns
+   * is the data type given at the measurement quantity. The data type of
+   * the generation parameters for raw data is always T_DOUBLE.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The generation parameters.
+   */
+   TS_Union getGenerationParameters()
+      raises (AoException);
+
+   /** (13016)
+   * Set the generation parameters.
+   * 
+   * The data type of the generation parameter for the implicit columns
+   * must be the data type given at the measurement quantity. The data
+   * type of the generation parameters for raw data must be always
+   * T_DOUBLE.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_BAD_PARAMETER
+   *    AO_TRANSACTION_NOT_ACTVIE
+   *
+   * @param  generationParameters  The generation parameters.
+   */
+   void setGenerationParameters(
+      in TS_Union generationParameters)
+      raises (AoException);
+
+   /** (13017)
+   * Get the data type of the raw values.
+   * 
+   * When the column has no raw values the data type of the measurement
+   * quantity is returned. 
+   * When the value matrix to which the column belongs is in CALCULATED
+   * mode the data type of the measurement quantity returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The data type of the raw values.
+   */
+   DataType getRawDataType()
+      raises (AoException);
+
+}; // Interface Column.
+
+/**
+* The ASAM ODS instance element interface. It is allowed to modify the
+* instances outside a transaction but recommended to activate a
+* transaction before the instances are modified. The modifications to
+* instances get permanent when the transaction is committed.
+*/
+interface InstanceElement {
+
+   /** (14001)
+   * Add an instance attribute to the instance. The instance attribute is
+   * built as a Name/Value/Unit tuple on the client. This method has to
+   * copy the data from the client to the server. The name of the
+   * attribute must be unique. 
+   * 
+   * It is allowed to add an instance attribute outside a transaction but
+   * it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  instAttr  The instance attribute to be added.
+   */
+   void addInstanceAttribute(
+      in NameValueUnit instAttr)
+      raises (AoException);
+
+   /** (14002)
+   * Create a relation between the current and the given instance. Check
+   * if the application elements of the relation matches the application
+   * elements of the instances. 
+   * 
+   * It is allowed to modify the instance element outside a transaction
+   * but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  relation  The application relation.
+   *
+   * @param  instElem  The instance element.
+   */
+   void createRelation(
+      in ApplicationRelation relation,
+      in InstanceElement instElem)
+      raises (AoException);
+
+   /** (14003)
+   * Get the application element of the instance element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The application element from which the instance element is
+   *          derived.
+   */
+   ApplicationElement getApplicationElement()
+      raises (AoException);
+
+   /** (14004)
+   * Get the ASAM-Path of the instance element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The ASAM path to the instance element.
+   */
+   Name getAsamPath()
+      raises (AoException);
+
+   /** (14005)
+   * Get the Id of the instance element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The Id of the instance element.
+   */
+   T_LONGLONG getId()
+      raises (AoException);
+
+   /** (14006)
+   * Get the name of the instance element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The name of the instance element.
+   */
+   Name getName()
+      raises (AoException);
+
+   /** (14007)
+   * Get the related instances. The application relation and the name of
+   * the related  instances specify the listed instances. The pattern is
+   * case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  applRel  The application relation.
+   *
+   * @param  iePattern  The name or the search pattern for the related
+   *                    instance names.
+   *
+   * @return  The related instances.
+   */
+   InstanceElementIterator getRelatedInstances(
+      in ApplicationRelation applRel,
+      in Pattern iePattern)
+      raises (AoException);
+
+   /** (14008)
+   * Get the list of related instances. The relationship and the name of
+   * the related instances specify the listed instances. The pattern is
+   * case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATIONSHIP
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  ieRelationship  The requested relationship.
+   *
+   * @param  iePattern  The name or the search pattern for the related
+   *                    instance names.
+   *
+   * @return  The related instances.
+   */
+   InstanceElementIterator getRelatedInstancesByRelationship(
+      in Relationship ieRelationship,
+      in Pattern iePattern)
+      raises (AoException);
+
+   /** (14009)
+   * Get the attribute value (name, value and unit) of the given
+   * attribute of the instance element. This method will not return the
+   * value of relation attributes, use the method getRelatedInstances.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  attrName  The name of the requested attribute.
+   *
+   * @return  The attribute value.
+   */
+   NameValueUnit getValue(
+      in Name attrName)
+      raises (AoException);
+
+   /** (14010)
+   * Get the attribute value (value and unit) of the attribute inherited
+   * from the given base attribute of the instance element. The base name
+   * is case insensitive and may not contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  baseAttrName  The base name of the requested attribute.
+   *
+   * @return  The attribute value.
+   */
+   NameValueUnit getValueByBaseName(
+      in Name baseAttrName)
+      raises (AoException);
+
+   /** (14011)
+   * Get the attribute names from the instance element. The  attributes
+   * reserved for a relation are not listed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_ATTRIBUTE_TYPE
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  iaPattern  The name or the search pattern for the attribute
+   *                    names.
+   *
+   * @param  aType  The requested attribute type.
+   *
+   * @return  The names of the attributes.
+   */
+   NameSequence listAttributes(
+      in Pattern iaPattern,
+      in AttrType aType)
+      raises (AoException);
+
+   /** (14012)
+   * Get the names of the related instances. The application relation and
+   * the name of the related instances specifies the listed names. The
+   * pattern is case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  ieRelation  The application relation.
+   *
+   * @param  iePattern  The name or the search pattern for the related
+   *                    instance names.
+   *
+   * @return  The names of the related instances.
+   */
+   NameIterator listRelatedInstances(
+      in ApplicationRelation ieRelation,
+      in Pattern iePattern)
+      raises (AoException);
+
+   /** (14013)
+   * Get the names of the related instances. The relationship and the
+   * name of the related instances specify the listed names. The pattern
+   * is case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATIONSHIP
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  ieRelationship  The requested relationship.
+   *
+   * @param  iePattern  The name or the search pattern for the related
+   *                    instance names.
+   *
+   * @return  The names of the related instances.
+   */
+   NameIterator listRelatedInstancesByRelationship(
+      in Relationship ieRelationship,
+      in Pattern iePattern)
+      raises (AoException);
+
+   /** (14014)
+   * Remove an instance attribute.
+   * 
+   * It is allowed to remove the instance attribute outside a transaction
+   * but it is recommended to activate a transaction.
+   * 
+   * The application attributes can't be removed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  attrName  The name of the attribute to be removed.
+   */
+   void removeInstanceAttribute(
+      in Name attrName)
+      raises (AoException);
+
+   /** (14015)
+   * Remove the relation between the current instance and the given
+   * instance. It is necessary to specify the instance element in case of
+   * n:m relations if not all relations shall be deleted. 
+   * 
+   * It is allowed to modify the instance element outside a transaction
+   * but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_RELATION
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  applRel  The relation to be removed.
+   *
+   * @param  instElem_nm  The instance element for specific delete from
+   *                      n:m relations.
+   */
+   void removeRelation(
+      in ApplicationRelation applRel,
+      in InstanceElement instElem_nm)
+      raises (AoException);
+
+   /** (14016)
+   * Rename the instance attribute. The application attributes can't be
+   * renamed. 
+   * 
+   * It is allowed to rename the instance attribute outside a transaction
+   * but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_NAME
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  oldName  The old instance attribute name.
+   *
+   * @param  newName  The new instance attribute name.
+   */
+   void renameInstanceAttribute(
+      in Name oldName,
+      in Name newName)
+      raises (AoException);
+
+   /** (14017)
+   * Set the name of an instance element. 
+   * 
+   * It is allowed to modify the name of the instance element outside a
+   * transaction but it is recommended to activate a transaction.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  iaName  The instance attribute name.
+   */
+   void setName(
+      in Name iaName)
+      raises (AoException);
+
+   /** (14018)
+   * Set the value of an application attribute or of an existing instance
+   * attribute, but is doesn't create a new instance attribute; for this
+   * purpose use the method addInstancesAttribute of this interface.
+   * 
+   * It is allowed to modify the attribute value outside a transaction
+   * but it is recommended to activate a transaction.
+   * 
+   * The name of the attribute is specified by the name of the
+   * NameValueUnit tuple. If the application attribute flag unique is
+   * set, the uniqueness of the new value is checked.
+   * 
+   * This method can not be used to set the value of a relation
+   * attribute, use the method createRelation of this interface .
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_VALUE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  value  The value to be set in the instance element.
+   */
+   void setValue(
+      in NameValueUnit value)
+      raises (AoException);
+
+   /** (14019)
+   * Cast an instance element to a measurement. There are some
+   * object-oriented languages which do not allow this cast.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_BASETYPE
+   *
+   * @return  The instance of type measurement.
+   */
+   Measurement upcastMeasurement()
+      raises (AoException);
+
+   /** (14020)
+   * Cast an instance element to a submatrix. There are some
+   * object-oriented languages which do not allow this cast.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_BASETYPE
+   *
+   * @return  The instance of type submatrix.
+   */
+   SubMatrix upcastSubMatrix()
+      raises (AoException);
+
+   /** (14021)
+   * Get the attribute value (name, value and unit) of the given
+   * attribute of the instance element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_INCOMPATIBLE_UNITS
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  attr  The name of the requested attribute and the unit of
+   *               the attribute value.
+   *
+   * @return  The attribute value, value converted to the requested unit.
+   */
+   NameValueUnit getValueInUnit(
+      in NameUnit attr)
+      raises (AoException);
+
+   /** (14022)
+   * Set a sequences of values of an application attributes but no
+   * instances attributes.
+   * 
+   * It is allowed to modify the values of the attributes outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The name of the attribute is specified by the name of the
+   * NameValueUnit tuple. If the application attribute flag unique is
+   * set, the uniqueness of the new value is checked.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_DUPLICATE_VALUE
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  values  The sequence of the values to be set at the instance
+   *                 element.
+   */
+   void setValueSeq(
+      in NameValueUnitSequence values)
+      raises (AoException);
+
+   /** (14023)
+   * The given user group the rights should be set for. <rights> defines
+   * the rights to set or to clear. If the parameter <set> is set to
+   * 'set', the rights in <rights> are set all others are cleared. If the
+   * parameter <set> is set to 'add', the rights in <rights> are added to
+   * the existing rights. If the parameter <set> is set to 'remove', the
+   * rights in <rights> are removed from the existing rights.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  usergroup  The user group for which the rights will be
+   *                    modified.
+   *
+   * @param  rights  The new right for the user group. The rights
+   *                 constants are defined in the interface
+   *                 SecurityRights. The interface definition language
+   *                 IDL does not allow to set the values of enumerations
+   *                 thus the constant definitions had to be done in an
+   *                 interface.
+   *
+   * @param  set  What to do with the new right.
+   */
+   void setRights(
+      in InstanceElement usergroup,
+      in T_LONG rights,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (14024)
+   * Retrieve access control list information of the given object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The access control list entries of the given application
+   *          element.
+   */
+   ACLSequence getRights()
+      raises (AoException);
+
+   /** (14025)
+   * Retrieve access control list information for the initial rights of
+   * the given object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The access control list entries with the initial rights of
+   *          the given application element.
+   */
+   InitialRightSequence getInitialRights()
+      raises (AoException);
+
+   /** (14026)
+   * The given user group the initial rights should be set for. <rights>
+   * defines the rights to set or to clear. If the parameter <set> is set
+   * to 'set', the rights in <rights> are set all others are cleared. If
+   * the parameter <set> is set to 'add', the rights in <rights> are
+   * added to the existing rights. If the parameter <set> is set to
+   * 'remove', the rights in <rights> are removed from the existing
+   * rights.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  usergroup  The user group for which the initial rights will
+   *                    be modified.
+   *
+   * @param  rights  The new initial rights for the user group. The
+   *                 rights constants are defined in the interface
+   *                 SecurityRights. The interface definition language
+   *                 IDL does not allow to set the values of enumerations
+   *                 thus the constant definitions have to be done in the
+   *                 interface.
+   *
+   * @param  refAid  The Id of referencing application element for which
+   *                 the initial rights will be used. If no refAid is set
+   *                 the initial rights will be used for each new
+   *                 instance element independent of the application
+   *                 element.
+   *
+   * @param  set  What to do with the new initial rights.
+   */
+   void setInitialRights(
+      in InstanceElement usergroup,
+      in T_LONG rights,
+      in T_LONGLONG refAid,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (14027)
+   * Provides an easy-to-use and effective copy mechanism for instance
+   * elements inside the server. The new instance elements gets a copy of
+   * all attribute values and informational relations that are available
+   * in the original instance element. The new instance element has the
+   * same parent as the original instance element but it does not have
+   * references to any children of the original instance element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  newName  The name of the new instance element. If a new
+   *                  version shall be created this parameter may be NULL
+   *                  to use the same name for the copy. In this case a
+   *                  new version must be provided.
+   *
+   * @param  newVersion  The version of the new instance element. This
+   *                     parameter may be NULL if a new name is provided.
+   *
+   * @return  The reference to the copied instance element.
+   */
+   InstanceElement shallowCopy(
+      in T_STRING newName,
+      in T_STRING newVersion)
+      raises (AoException);
+
+   /** (14028)
+   * Provides an easy-to-use and effective copy mechanism for instance
+   * element hierarchies inside the server (e.g. copy a project with all
+   * tests or copy a test with all measurements). The deep copy follows
+   * only the child references but not the informational references.
+   * Example: Copying elements of type AoMeasurement does not include
+   * copying the referenced elements of type AoMeasurementQuantity. The
+   * copied instance elements of type AoMeasurement will reference the
+   * same measurement quantities as the original. An application that
+   * wants to copy the measurement quantity also must do this (including
+   * setting the proper references) by itself e.g. with another call to
+   * shallowCopy; deepCopy is not necessary in this case because
+   * AoMeasurementQuantity has no children.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  newName  The name of the new instance element. If a new
+   *                  version shall be created this parameter may be NULL
+   *                  to use the same name for the copy. In this case a
+   *                  new version must be provided.
+   *
+   * @param  newVersion  The version of the new instance element. This
+   *                     parameter may be NULL if a new name is provided.
+   *
+   * @return  The reference to the copied instance element hierarchy.
+   */
+   InstanceElement deepCopy(
+      in T_STRING newName,
+      in T_STRING newVersion)
+      raises (AoException);
+
+   /** (14029)
+   * Get the sequence of the values of the application or instance
+   * attributes, specified by their names.  The name sequence can use a
+   * pattern (*) for all attributes of the instance element. This means
+   * that application as well as   instance attributes will be delivered.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  attrNames  The names of the attributes to be reported.
+   *
+   * @return  The sequence of the attribute values.
+   */
+   NameValueUnitSequence getValueSeq(
+      in NameSequence attrNames)
+      raises (AoException);
+
+   /** (14030)
+   * Destroy the object on the server. The destructor of the client so
+   * the server knows this object is not used anymore by the client.
+   * Access to this object after the destroy method will lead to an
+   * exception.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (14031)
+   * Compare two instance elements. The Id's of the application elements
+   * and the Id's of the instance elements are compared. The Id's of the
+   * application elements will be compare first.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  compIeObj  The instance element to compare with.
+   *
+   * @return  The difference of the Id's. Meaning:
+   *          diff < 0 ElemId of instance is smaller then instance to
+   *          compare with.
+   *          diff == 0 ElemId is identical.
+   *          diff > 0 ElemId of instance is greater then instance to
+   *          compare with.
+   */
+   T_LONGLONG compare(
+      in InstanceElement compIeObj)
+      raises (AoException);
+
+   /** (14032)
+   * Create a list with instances which are related to the actual
+   * instance element. The attribute are given with the name of the
+   * sequence. The values of the attributes are given in the value
+   * sequence. The index in the different value sequences match for one
+   * instance element. The index in the instance element sequence of the
+   * related instances match for the instance with the same index in the
+   * value sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_INVALID_REQUEST
+   *
+   * @param  applRel  The application relation for witch the related
+   *                  instances will be created.
+   *
+   * @param  attributes  The attributes of the new created instances.
+   *
+   * @param  relatedInstances  The list with related instances for
+   *                           different application relations.
+   *
+   * @return  The list with the new created instances.
+   */
+   InstanceElementSequence createRelatedInstances(
+      in ApplicationRelation applRel,
+      in NameValueSeqUnitSequence attributes,
+      in ApplicationRelationInstanceElementSeqSequence relatedInstances)
+      raises (AoException);
+
+   /** (14033)
+   * Upcast the InstanceElement object to the corresponding ODSFile
+   * interface for an instance. 
+   * 
+   * This method may only be invoked for instances of an application
+   * element derived from
+   * the base element AoFile and returns an ODSFile interface.
+   * 
+   * An exception with the error code AO_INVALID_BASETYPE is thrown when
+   * the instance is not an instance of an application element derived
+   * from the base element AoFile.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_INVALID_BASETYPE
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The ODSFile interface to access the desired file.
+   */
+   ODSFile upcastODSFile()
+      raises (AoException);
+
+}; // Interface InstanceElement.
+
+/**
+* The ASAM ODS instance element iterator interface.
+*/
+interface InstanceElementIterator {
+
+   /** (15001)
+   * Destroy the iterator and free the associated memory.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (15002)
+   * Get the total number of elements accessible by the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of elements accessible by the iterator.
+   */
+   T_LONG getCount()
+      raises (AoException);
+
+   /** (15003)
+   * Get the next n elements from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  how_many  The number of requested elements.
+   *
+   * @return  The next n instance elements from the instance sequence.
+   */
+   InstanceElementSequence nextN(
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (15004)
+   * Get the next element from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The next instance element from the instance sequence.
+   */
+   InstanceElement nextOne()
+      raises (AoException);
+
+   /** (15005)
+   * Reset the pointer in the element sequence to the first element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void reset()
+      raises (AoException);
+
+}; // Interface InstanceElementIterator.
+
+/**
+* The ASAM ODS measurement interface.The interface Measurement extends
+* the interface InstanceElement. Thus alll methods of the interface
+* InstanceElement do also work here.
+*/
+interface Measurement : InstanceElement {
+
+   /** (16001)
+   * Create a submatrix link. The submatrix link is only valid in the
+   * current session. When the session is closed the submatrix link will
+   * be destroyed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The new submatrix link.
+   */
+   SMatLink createSMatLink()
+      raises (AoException);
+
+   /** (16002)
+   * Get the list of the submatrix links .
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The available submatrix links.
+   */
+   SMatLinkSequence getSMatLinks()
+      raises (AoException);
+
+   /** (16003)
+   * Get the value matrix of a measurement. 
+   * By calling this method, the value matrix mode of the returned value
+   * matrix will be taken from the context variable 'VALUEMATRIX_MODE'.
+   * For more information especially on different modes of the value
+   * matrix, see description at the method getValueMatrixInMode() of this
+   * interface.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_VALUEMATRIX_STRUCTURE
+   *
+   * @return  The value matrix.
+   */
+   ValueMatrix getValueMatrix()
+      raises (AoException);
+
+   /** (16004)
+   * Remove a submatrix link.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  smLink  The sub matrix link to be removed.
+   */
+   void removeSMatLink(
+      in SMatLink smLink)
+      raises (AoException);
+
+   /** (16005)
+   * Get the value matrix of a measurement in the requested mode.
+   * 
+   * The server checks the independent column, if there is more than one
+   * submatrix at the measurement there must be exactly one independent
+   * column with the same measurement quantity in each submatrix,
+   * otherwise the exception AO_INVALID_VALUEMATRIX_STRUCTURE is
+   * thrown.
+   * 
+   * The server throws the exception AO_INVALID_VALUEMATRIX_STRUCTURE
+   * when it is unable to create the value matrix due to the data of the
+   * measurement
+   * - if there are no independent column
+   * - if there are different independent columns
+   * - if there are sub matrices with more than one independent column.
+   * 
+   * The server orders the values according to the values of the
+   * independent localcolumn. (in ascending order) It is up to the server
+   * what value is returned when a measurement quantity has two different
+   * values at the same independent point. The gaps are marked with Flags
+   * in TS_ValueSeq (flagvalue = 0).
+   * 
+   * In the CALCULATED mode the server returns the calculated values for
+   * implicit and raw values. The server returns at each measurement
+   * point the explicit value as the value for the implicit channels. The
+   * raw values are calculated to the explicit values.
+   * 
+   * In the STORAGE mode the server handles the values of the localcolumn
+   * as they are in the storage. Write is only allowed when the value
+   * matrix is in the STROAGE mode.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_VALUEMATRIX_STRUCTURE
+   *
+   * @param  vmMode  The requested mode of the value matrix.
+   *
+   * @return  The value matrix.
+   */
+   ValueMatrix getValueMatrixInMode(
+      in ValueMatrixMode vmMode)
+      raises (AoException);
+
+}; // Interface Measurement.
+
+/**
+* The ASAM ODS name iterator interface.
+*/
+interface NameIterator {
+
+   /** (17001)
+   * Destroy the iterator and free the associated memory.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (17002)
+   * Get the total number of elements accessible by the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of elements accessible by the iterator.
+   */
+   T_LONG getCount()
+      raises (AoException);
+
+   /** (17003)
+   * Get the next n elements from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  how_many  The number of requested elements.
+   *
+   * @return  The next n names from the name sequence.
+   */
+   NameSequence nextN(
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (17004)
+   * Get the next element from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The next name from the name sequence.
+   */
+   Name nextOne()
+      raises (AoException);
+
+   /** (17005)
+   * Reset the pointer in the element sequence to the first element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void reset()
+      raises (AoException);
+
+}; // Interface NameIterator.
+
+/**
+* The ASAM ODS name-value iterator interface.
+*/
+interface NameValueIterator {
+
+   /** (18001)
+   * Destroy the iterator and free the associated memory.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (18002)
+   * Get the total number of elements accessible by the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of elements accessible by the iterator.
+   */
+   T_LONG getCount()
+      raises (AoException);
+
+   /** (18003)
+   * Get the next n elements from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  how_many  The number of requested elements.
+   *
+   * @return  The next n name-value pairs from the name-value pair
+   *          sequence.
+   */
+   NameValueSequence nextN(
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (18004)
+   * Get the next element from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The next name-value pair from the name-value pair sequence.
+   */
+   NameValue nextOne()
+      raises (AoException);
+
+   /** (18005)
+   * Reset the pointer in the element sequence to the first element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void reset()
+      raises (AoException);
+
+}; // Interface NameValueIterator.
+
+/**
+* The ASAM ODS name-value-unit iterator interface. This interface is
+* identical with the NameValueUnitIdIterator, except the unit is given as
+* a string insead of an Id.
+*/
+interface NameValueUnitIterator {
+
+   /** (19001)
+   * Destroy the iterator and free the associated memory.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (19002)
+   * Get the total number of elements accessible by the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of elements accessible by the iterator.
+   */
+   T_LONG getCount()
+      raises (AoException);
+
+   /** (19003)
+   * Get the next n elements from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  how_many  The number of requested elements.
+   *
+   * @return  The next n name-value-unit tuples from the name-value-unit
+   *          tuple sequence.
+   */
+   NameValueUnitSequence nextN(
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (19004)
+   * Get the next element from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The next name-value-unit tuple from the name-value-unit
+   *          tuple sequence.
+   */
+   NameValueUnit nextOne()
+      raises (AoException);
+
+   /** (19005)
+   * Reset the pointer in the element sequence to the first element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void reset()
+      raises (AoException);
+
+}; // Interface NameValueUnitIterator.
+
+/**
+* The ASAM ODS submatrix link interface.
+*/
+interface SMatLink {
+
+   /** (20001)
+   * Get the link or build type.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The link type.
+   */
+   BuildUpFunction getLinkType()
+      raises (AoException);
+
+   /** (20002)
+   * Get the ordinal or sequence number
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The sequence number.
+   */
+   T_LONG getOrdinalNumber()
+      raises (AoException);
+
+   /** (20003)
+   * Get the first submatrix of the link.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The first submatrix of the link.
+   */
+   SubMatrix getSMat1()
+      raises (AoException);
+
+   /** (20004)
+   * Get the bind columns of the first submatrix used in the link (e.g.
+   * Time).
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The columns of the first submatrix.
+   */
+   ColumnSequence getSMat1Columns()
+      raises (AoException);
+
+   /** (20005)
+   * Get the second submatrix of the link.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The second submatrix of the link.
+   */
+   SubMatrix getSMat2()
+      raises (AoException);
+
+   /** (20006)
+   * Get the bind columns of the second submatrix used in the link (e.g.
+   * Time).
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The columns of the second submatrix.
+   */
+   ColumnSequence getSMat2Columns()
+      raises (AoException);
+
+   /** (20007)
+   * Set the build or link type.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_BUILDUP_FUNCTION
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  linkType  The requested build-up function.
+   */
+   void setLinkType(
+      in BuildUpFunction linkType)
+      raises (AoException);
+
+   /** (20008)
+   * Set the ordinal or sequence number.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_ORDINALNUMBER
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  ordinalNumber  The sequence number.
+   */
+   void setOrdinalNumber(
+      in T_LONG ordinalNumber)
+      raises (AoException);
+
+   /** (20009)
+   * Set the first submatrix of the link.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_SUBMATRIX
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  subMat1  The first sub matrix of the sub matrix link.
+   */
+   void setSMat1(
+      in SubMatrix subMat1)
+      raises (AoException);
+
+   /** (20010)
+   * Set the bind columns of the first submatrix used in the link (e.g.
+   * Time).
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_COLUMN
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  columns  The column sequence of the sub matrix.
+   */
+   void setSMat1Columns(
+      in ColumnSequence columns)
+      raises (AoException);
+
+   /** (20011)
+   * Set the second submatrix of the link.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_INVALID_SUBMATRIX
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  subMat2  The second sub matrix of the sub matrix link.
+   */
+   void setSMat2(
+      in SubMatrix subMat2)
+      raises (AoException);
+
+   /** (20012)
+   * Set the bind columns of the second submatrix used in the link (e.g.
+   * Time). If there is more than one column bound the column sequence
+   * must be identical with the column sequence of the first submatrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_INVALID_COLUMN
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  columns  The column sequence of the sub matrix.
+   */
+   void setSMat2Columns(
+      in ColumnSequence columns)
+      raises (AoException);
+
+}; // Interface SMatLink.
+
+/**
+* The ASAM ODS submatrix interface. The instances of the submatrix can be
+* accessed via the method getRelatedInstances of the interface
+* Measurement. The interface SubMatrix extends the interface
+* InstanceElement. Thus alll methods of the interface InstanceElement do
+* also work here.
+*/
+interface SubMatrix : InstanceElement {
+
+   /** (21001)
+   * Get the columns of the submatrix. The column is not inherited from
+   * the InstanceElement interface. This is the only way to get a column.
+   * The columns are used in the SMatLink interface to build the value
+   * matrix. The pattern is case sensitive and may contain wildcard
+   * characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the column
+   *                     names.
+   *
+   * @return  The columns of the submatrix.
+   */
+   ColumnSequence getColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (21002)
+   * Get a value matrix of the submatrix.
+   * By calling this method, the value matrix mode of the returned value
+   * matrix will be taken from the context variable 'VALUEMATRIX_MODE'.
+   * For more information especially on different modes of the value
+   * matrix, see description at the method getValueMatrixInMode() of this
+   * interface.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_SMATLINK
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The value matrix.
+   */
+   ValueMatrix getValueMatrix()
+      raises (AoException);
+
+   /** (21003)
+   * Get the names of the columns of the submatrix. The name sequence is
+   * identical with the names of the related instances. The pattern is
+   * case sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the column
+   *                     names.
+   *
+   * @return  The column names of the submatrix.
+   */
+   NameSequence listColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (21004)
+   * Get the value matrix of a submatrix in the requested mode.
+   * 
+   * The server doesn't check any independent columns. The columns are
+   * only the local columns from this submatrix. The flags in the
+   * TS_ValueSeq are the flags of the localcolumn. If no flags are given
+   * there are no flags available, the client have to check the
+   * global_flag.
+   * 
+   * In the CALCULATED mode the server returns the calculated values for
+   * implicit and raw values. The server returns at each measurement
+   * point the explicit value as the value for the implicit channels. The
+   * raw values are calculated to the explicit values.
+   * 
+   * In the STORAGE mode the server handles the values of the localcolumn
+   * as they are in the storage. Write is only allowed when the value
+   * matrix is in the STROAGE mode. The values are exactly from this
+   * submatrix. The raw / implicit values are returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  vmMode  The requested mode of the value matrix.
+   *
+   * @return  The value matrix.
+   */
+   ValueMatrix getValueMatrixInMode(
+      in ValueMatrixMode vmMode)
+      raises (AoException);
+
+}; // Interface SubMatrix.
+
+/**
+* The ASAM ODS value matrix interface. Value matrix is an interface used
+* by Measurement and SubMatrix to handle vectors of values.
+*/
+interface ValueMatrix {
+
+   /** (22001)
+   * Get the columns of the value matrix no matter whether the column is
+   * dependent or independent. The pattern is case sensitive and may
+   * contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the column
+   *                     names.
+   *
+   * @return  The columns of the value matrix, no matter whether the
+   *          column is dependent, independent or scaling
+   */
+   ColumnSequence getColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (22002)
+   * Get the column count of the value matrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of columns of the value matrix.
+   */
+   T_LONG getColumnCount()
+      raises (AoException);
+
+   /** (22003)
+   * Get the independent columns of the value matrix. The independent
+   * columns are the columns used to build the value matrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the
+   *                     independent column name.
+   *
+   * @return  The independent column of the value matrix.
+   */
+   ColumnSequence getIndependentColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (22004)
+   * Get the row count of the value matrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of rows of the value matrix.
+   */
+   T_LONG getRowCount()
+      raises (AoException);
+
+   /** (22005)
+   * Get a measurement point of the value matrix. The parameter meaPoint
+   * specifies the row of the matrix. The iterator allows to access all
+   * elements in the row.
+   * 
+   * The server behavior depends on the mode of the value matrix.
+   * Value matrix mode 'CALCULATED':
+   * In case 'sequence_representation' of the corresponding local column
+   * is one of the entries 'raw_linear', raw_polynomial',
+   * 'raw_linear_external', 'raw_polynomial_external',
+   * 'raw_linear_calibrated', or 'raw_linear_calibrated_external', the
+   * server will first calculate the physical values from raw values and
+   * generation parameters, before it returns them to the requesting
+   * client.
+   * Value matrix mode 'STORAGE':
+   * In case 'sequence_representation' of the corresponding local column
+   * is one of the entries 'raw_linear', raw_polynomial',
+   * 'raw_linear_external', 'raw_polynomial_external',
+   * 'raw_linear_calibrated', or 'raw_linear_calibrated_external', the
+   * server will return the raw values of the local column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  meaPoint  The measurement point.
+   *
+   * @return  The requested measurement point.
+   */
+   NameValueUnitIterator getValueMeaPoint(
+      in T_LONG meaPoint)
+      raises (AoException);
+
+   /** (22006)
+   * Get the values or a part of values of the column from the value
+   * matrix. The parameter column specifies from which column the values
+   * will be returned. The startPoint and count specify the part of the
+   * vector. A startPoint = 0 and count = rowCount will return the entire
+   * vector. When startPoint >= rowCount an exception is thrown. If
+   * startPoint + count > rowCount only the remaining values of the
+   * vector are returned and no exception is thrown. Use the getName and
+   * getUnit method of the interface column for the name and the unit of
+   * the column. The name and the value are not stored at each element of
+   * the vector. The return type TS_ValueSeq is not a sequence of
+   * TS_Value but a special structure.
+   * 
+   * The server behavior depends on the mode of the value matrix.
+   * Value matrix mode 'CALCULATED':
+   * In case 'sequence_representation' of the corresponding local column
+   * is one of the entries 'raw_linear', raw_polynomial',
+   * 'raw_linear_external', 'raw_polynomial_external',
+   * 'raw_linear_calibrated', or 'raw_linear_calibrated_external', the
+   * server will first calculate the physical values from raw values and
+   * generation parameters, before it returns them to the requesting
+   * client.
+   * Value matrix mode 'STORAGE':
+   * In case 'sequence_representation' of the corresponding local column
+   * is one of the entries 'raw_linear', raw_polynomial',
+   * 'raw_linear_external', 'raw_polynomial_external',
+   * 'raw_linear_calibrated', or 'raw_linear_calibrated_external', the
+   * server will return the raw values of the local column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_COLUMN
+   *    AO_INVLAID_COUNT
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  col  The column to retrieve the values from.
+   *
+   * @param  startPoint  The starting point in the column.
+   *
+   * @param  count  The number of points to be retrieved.
+   *
+   * @return  The requested column values of the value matrix.
+   */
+   TS_ValueSeq getValueVector(
+      in Column col,
+      in T_LONG startPoint,
+      in T_LONG count)
+      raises (AoException);
+
+   /** (22007)
+   * Get the names of the columns of the value matrix no matter whether
+   * the column is dependent or independent. The pattern is case
+   * sensitive and may contain wildcard characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the column
+   *                     names.
+   *
+   * @return  The column names of the value matrix, no matter whether the
+   *          column is dependent, independent or scaled by another one.
+   */
+   NameSequence listColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (22008)
+   * Get the names of the independent columns of the value matrix. The
+   * independent columns are the columns used to build the value matrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the
+   *                     independent column name.
+   *
+   * @return  The names of the independent columns of the value matrix.
+   */
+   NameSequence listIndependentColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (22009)
+   * Remove the values of the columns at a given measurement point.
+   * Remove the number of points of the given column. If the count is 0
+   * all points until the end of the column are removed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_COUNT
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  columnNames  The columns from which the measurement points
+   *                      are to be removed.
+   *
+   * @param  meaPoint  The measurement point to be removed.
+   *
+   * @param  count  The number of points to be removed from each column.
+   */
+   void removeValueMeaPoint(
+      in NameSequence columnNames,
+      in T_LONG meaPoint,
+      in T_LONG count)
+      raises (AoException);
+
+   /** (22010)
+   * Remove the values from a value vector. Beginning at startPoint the
+   * number of values specified in count are removed. If count is 0 all
+   * values from  the startPoint until the end of the vector are removed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_COLUMN
+   *    AO_INVALID_COUNT
+   *    AO_NOT_FOUND
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  col  The column from which the values are to be removed.
+   *
+   * @param  startPoint  The starting point for the value removal.
+   *
+   * @param  count  The number of points to be removed from the column.
+   */
+   void removeValueVector(
+      in Column col,
+      in T_LONG startPoint,
+      in T_LONG count)
+      raises (AoException);
+
+   /** (22011)
+   * Create or modify a measurement point of a value matrix. 
+   * The sequence of name values specifies the names of the column with
+   * the new values. 
+   * The meaning of the parameter setType is:
+   * 
+   *    INSERT   Insert the values at meaPoint, the current values at
+   * meaPoint    are moved to the end of  the new inserted values.
+   * 
+   *    APPEND   The value of meaPoint is ignored, the values are
+   * appended at the end of the current values.
+   * 
+   *    UPDATE   Update or modify the values at meaPoint, the current
+   * values are overwritten. If meaPoint is bigger than the number of
+   * values in the          vector, the measurement point is
+   * automatically appended.
+   * 
+   * The names of the columns have to exist.
+   * 
+   * When a client creates a ValueMatrix based on AoMeasurement this
+   * methods behaves as follows:
+   * The server checks the sub matrices and creates all necessary
+   * instances of AoSubmatrix, AoLocalColumn and AoMeasurementQuantity. 
+   * The values of the name attribute of AoSubmatrix must be generated by
+   * the server. The value will be equal to the value of the attribute ID
+   * (converted to DT_STRING). Missing instances of AoMeasurementQuantity
+   * will be created by the server, too. 
+   * 
+   * The mandatory attributes will get the following default values:
+   * Name supplied by client 
+   * Datatype copied from AoQuantity.default_datatype
+   * Typesize copied from AoQuantity.default_typesize
+   * Interpolation no interpolation
+   * Rank copied from AoQuantity.default_rank
+   * Dimension copied from AoQuantity.default_dimension
+   * 
+   * The server takes the value of the channel (supplied by client) and
+   * looks up the corresponding instance in AoQuantity using the
+   * attribute default_meq_name.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_IS_MEASUREMENT_MATRIX
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  set  The set type.
+   *
+   * @param  meaPoint  The measurement point.
+   *
+   * @param  value  The values to be inserted.
+   */
+   void setValueMeaPoint(
+      in SetType set,
+      in T_LONG meaPoint,
+      in NameValueSequence value)
+      raises (AoException);
+
+   /** (22012)
+   * Create or modify a value vector in a value matrix. 
+   * 
+   * It is allowed to modify the values of the value matrix outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The data is made permanent on transaction commit. Until the
+   * transaction is committed or until the access to the measurement
+   * point of the value matrix, it is allowed to have different number of
+   * values in the different value vectors.
+   * 
+   * The meaning of the parameter setType is:
+   * 
+   *    INSERT   Insert the values from startPoint, the current available
+   * values from startPoint are moved to the end of the new inserted
+   * values.
+   * 
+   *    APPEND   The value of startPoint is ignored,  the values are
+   * appended at the end of the current values.
+   * 
+   *    UPDATE   Update or modify the values from startPoint, the current
+   * values are overwritten. If the number of values in the parameter
+   * values is too big    the values are automatically appended.
+   * 
+   * When a client creates a ValueMatrix based on AoMeasurement this
+   * methods 
+   * behaves as follows:
+   * The server checks the sub matrices and creates all necessary
+   * instances of AoSubmatrix, AoLocalColumn and AoMeasurementQuantity. 
+   * The values of the name attribute of AoSubmatrix must be generated by
+   * the server. The value will be equal to the value of the attribute ID
+   * (converted to DT_STRING). Missing instances of AoMeasurementQuantity
+   * will be created by the server, 
+   * too. 
+   * 
+   * The mandatory attributes will get the following default values:
+   * Name supplied by client 
+   * Datatype copied from AoQuantity.default_datatype
+   * Typesize copied from AoQuantity.default_typesize
+   * Interpolation no interpolation
+   * Rank copied from AoQuantity.default_rank
+   * Dimension copied from AoQuantity.default_dimension
+   * 
+   * The server takes the value of the channel (supplied by client) and
+   * looks up the corresponding instance in AoQuantity using the
+   * attribute default_meq_name.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_COLUMN
+   *    AO_INVALID_SET_TYPE
+   *    AO_IS_MEASUREMENT_MATRIX
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  col  The column whose values are to be set.
+   *
+   * @param  set  The set type.
+   *
+   * @param  startPoint  The starting point for the new values.
+   *
+   * @param  value  The values to be inserted.
+   */
+   void setValueVector(
+      in Column col,
+      in SetType set,
+      in T_LONG startPoint,
+      in TS_ValueSeq value)
+      raises (AoException);
+
+   /** (22013)
+   * Create or modify a number of value vectors in a value matrix. 
+   * 
+   * It is allowed to modify the values of the value matrix outside a
+   * transaction but it is recommended to activate a transaction.
+   * 
+   * The data is made permanent on transaction commit. Until the
+   * transaction is committed or until the access to the measurement
+   * point of the value matrix it is allowed to have different numbers of
+   * values in the different value vectors.
+   * 
+   * The names of the parameter values are the names of the columns. The
+   * values are the new values of the column. (setValueMeaPoint allows
+   * only one point, the TS_ValueSeq allows more then one point) There is
+   * a sequence of name value pairs (setValueVector allows only one
+   * column), so a block of values can be modified.
+   * 
+   * The meaning of the parameter setType is:
+   * 
+   *    INSERT   Insert the values from startPoint,  the current
+   * available values from  startPoint are moved to the end of  the new
+   * inserted values.
+   * 
+   *    APPEND   The value of startPoint is ignored, the values are
+   * appended at the end of the current values.
+   * 
+   *    UPDATE   Update or modify the values from startPoint, the current
+   * values are overwritten. If the number of values is greater than the
+   * number of values in the  vector, the measurement point is 
+   * automatically appended.
+   * 
+   *    REMOVE  Remove the number of values from each column, starting
+   * with startPoint. The name of the column is given as the name of the
+   * NameValueseqUnit, the  number of values to remove is given  in the
+   * number of the values in the   value.
+   * 
+   * When a client creates a ValueMatrix based on AoMeasurement this
+   * methods behaves as follows:
+   * The server checks the sub matrices and creates all necessary
+   * instances of AoSubmatrix, AoLocalColumn and AoMeasurementQuantity. 
+   * The values of the name attribute of AoSubmatrix must be generated by
+   * the server. The value will be equal to the value of the attribute ID
+   * (converted to DT_STRING). Missing instances of AoMeasurementQuantity
+   * will be created by the server, too. 
+   * 
+   * The mandatory attributes will get the following default values:
+   * Name supplied by client 
+   * Datatype copied from AoQuantity.default_datatype
+   * Typesize copied from AoQuantity.default_typesize
+   * Interpolation no interpolation
+   * Rank copied from AoQuantity.default_rank
+   * Dimension copied from AoQuantity.default_dimension
+   * 
+   * The server takes the value of the channel (supplied by client) and
+   * looks up the corresponding instance in AoQuantity using the
+   * attribute default_meq_name.
+   * 
+   * The ValueMatrix interface handles the values but not the raw values,
+   * to modify the raw values the instances of localcolumn must be
+   * created, the base attribute sequence_representation, raw_datatype
+   * and the generation_parameter must be created before the values are
+   * modified. The values must have the data type identical with the
+   * raw_datatype, any other data type will cause an AO_INVALID_DATATYPE
+   * exception.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_COLUMN
+   *    AO_INVALID_SET_TYPE
+   *    AO_INVALID_DATATYPE
+   *    AO_IS_MEASUREMENT_MATRIX
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  set  The set type.
+   *
+   * @param  startPoint  The measurement point.
+   *
+   * @param  value  The values to be inserted.
+   */
+   void setValue(
+      in SetType set,
+      in T_LONG startPoint,
+      in NameValueSeqUnitSequence value)
+      raises (AoException);
+
+   /** (22014)
+   * Add a column to the value matrix. It is only allowed to create a
+   * value vector if the value matrix is created from a submatrix. 
+   * 
+   * It is allowed to add a column outside a transaction but it is
+   * recommended to activate a transaction.
+   * 
+   * The data is made permanent on transaction commit. Until the
+   * transaction is committed or until the access to the measurement
+   * point of the value matrix it is allowed to have different number of
+   * values in the different value vectors. After the new column is
+   * added, it is possible to set the values of the column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_NAME
+   *    AO_INVALID_SET_TYPE
+   *    AO_IS_MEASUREMENT_MATRIX
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  newColumn  The name and unit of the column to add.
+   *
+   * @return  The new column.
+   */
+   Column addColumn(
+      in NameUnit newColumn)
+      raises (AoException);
+
+   /** (22015)
+   * Deprecated, solved by NVH Application model.
+   * 
+   * Get the names of the scaling columns of the value matrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the scaling
+   *                     column name.
+   *
+   * @return  The names of the scaling columns of the value matrix.
+   */
+   NameSequence listScalingColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (22016)
+   * Deprecated, solved by NVH Application model.
+   * 
+   * Get the scaling column of the value matrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  colPattern  The name or the search pattern for the scaling
+   *                     column name.
+   *
+   * @return  The scaling columns of the value matrix.
+   */
+   ColumnSequence getScalingColumns(
+      in Pattern colPattern)
+      raises (AoException);
+
+   /** (22017)
+   * Deprecated, solved by NVH Application model.
+   * 
+   * List the names of the columns, which are scaled by the given column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NO_SCALING_COLUMN
+   *
+   * @param  scalingColumn  The scaling column.
+   *
+   * @return  The names of the columns which are scaled by the given
+   *          input column.
+   */
+   NameSequence listColumnsScaledBy(
+      in Column scalingColumn)
+      raises (AoException);
+
+   /** (22018)
+   * Deprecated, solved by NVH Application model.
+   * 
+   * Get the columns which are scaled by the given column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NO_SCALING_COLUMN
+   *
+   * @param  scalingColumn  The scaling column.
+   *
+   * @return  The columns which are scaled by the given input column.
+   */
+   ColumnSequence getColumnsScaledBy(
+      in Column scalingColumn)
+      raises (AoException);
+
+   /** (22019)
+   * Deprecated, solved by NVH Application model.
+   * 
+   * Add a column to the value matrix. It is only allowed to create a
+   * value vector if the value matrix is created from a submatrix. The
+   * column will be scaled by the given scaling column.
+   * 
+   * It is allowed to add a column outside a transaction but it is
+   * recommended to activate a transaction.
+   * 
+   * The data is made permanent on transaction commit. Until the
+   * transaction is committed or until the access to the measurement
+   * point of the value matrix it is allowed to have different number of
+   * values in the different value vectors. After the new column is
+   * added, it is possible to set the values of the column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_INVALID_NAME
+   *    AO_INVALID_SET_TYPE
+   *    AO_IS_MEASUREMENT_MATRIX
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NO_SCALING_COLUMN
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  newColumn  The name and unit of the column to add.
+   *
+   * @param  scalingColumn  The scaling column.
+   *
+   * @return  The new column.
+   */
+   Column addColumnScaledBy(
+      in NameUnit newColumn,
+      in Column scalingColumn)
+      raises (AoException);
+
+   /** (22020)
+   * Destroy the object on the server. The destructor of the client, so
+   * the server knows this object is not used anymore by the client.
+   * Access to this object after the destroy method will lead to an
+   * exception.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (22021)
+   * Get the values of different columns of the value matrix.
+   * 
+   * The server behavior depends on the mode of the value matrix.
+   * Value matrix mode 'CALCULATED':
+   * In case 'sequence_representation' of the corresponding local column
+   * is one of the entries 'raw_linear', raw_polynomial',
+   * 'raw_linear_external', 'raw_polynomial_external',
+   * 'raw_linear_calibrated', or 'raw_linear_calibrated_external', the
+   * server will first calculate the physical values from raw values and
+   * generation parameters, before it returns them to the requesting
+   * client.
+   * Value matrix mode 'STORAGE':
+   * In case 'sequence_representation' of the corresponding local column
+   * is one of the entries 'raw_linear', raw_polynomial',
+   * 'raw_linear_external', 'raw_polynomial_external',
+   * 'raw_linear_calibrated', or 'raw_linear_calibrated_external', the
+   * server will return the raw values of the local column.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  columns  The requested columns.
+   *
+   * @param  startPoint  The starting point in the column.
+   *
+   * @param  count  The number of points to be retrieved. 0 mean until
+   *                end of column.
+   *
+   * @return  The values of the different columns. The name of the return
+   *          structure corresponds with the name of the column. The unit
+   *          corresponds with the unit of the column. The order of the
+   *          results might not match the order in the requested
+   *          sequence.
+   */
+   NameValueSeqUnitSequence getValue(
+      in ColumnSequence columns,
+      in T_LONG startPoint,
+      in T_LONG count)
+      raises (AoException);
+
+   /** (22022)
+   * Get the current mode of the value matrix.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The mode of the value matrix
+   */
+   ValueMatrixMode getMode()
+      raises (AoException);
+
+}; // Interface ValueMatrix.
+
+/**
+* The ASAM ODS name-value-unitId iterator interface. This interface is
+* identical with the NameValueUnitIterator, except the unit is given as
+* an Id insead of a string.
+*/
+interface NameValueUnitIdIterator {
+
+   /** (23001)
+   * Destroy the iterator and free the associated memory.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (23002)
+   * Get the total number of elements accessible by the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of elements accessible by the iterator.
+   */
+   T_LONG getCount()
+      raises (AoException);
+
+   /** (23003)
+   * Get the next n elements from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  how_many  The number of requested elements.
+   *
+   * @return  The next n name-value-unit tuples from the name-value-unit
+   *          tuple sequence.
+   */
+   NameValueSeqUnitId nextN(
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (23004)
+   * Get the next element from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The next name-value-unitId tuple from the name-value-unitId
+   *          tuple sequence.
+   */
+   NameValueUnitId nextOne()
+      raises (AoException);
+
+   /** (23005)
+   * Reset the pointer in the element sequence to the first element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void reset()
+      raises (AoException);
+
+}; // Interface NameValueUnitIdIterator.
+
+/**
+* The application element access.  The ApplElemAccess interface (RPC API
+* GetVal, PutVal, GetInstRef, ...) is responsible to retrieve instances
+* of application elements. Currently available query methods are:
+* - query with attribute and value
+* - query with attribute and values (not)in set
+* - sorted results
+* - grouped results including having condition
+*/
+interface ApplElemAccess {
+
+   /** (24001)
+   * Perform the Query.
+   * 
+   * The number of different application elements which are requested are
+   * exactly defined by the definition of the query given in the field
+   * anuSeq of the QueryStructure. The number of attributes for each
+   * application element is also given in the definition. The number of
+   * matching instances (their attributes) is not defined by the query
+   * and can be a large amount. Therefore only one iterator for the
+   * attribute values are defined.
+   * 
+   * The values of the localcolumn instances is part of the resultset
+   * when the following criteria all fit:
+   * 
+   * - Only when the attributes id, generation_parameters, values, flags
+   * are requested, as soon as any other attributes is requested the
+   * values are not reported.
+   * - The values of the localcolumn must all belong to exactly one
+   * instances of AoMeasurement
+   * - The server have a limitation of the memory, not the system memory
+   * limitation, as soon as the result set will break the limitation an
+   * exception will be thrown.
+   * 
+   * - No iterator for the rest is required.
+   * 
+   * In case an attribute of blob type is among the requested attributes,
+   * the content of the return structure will depend on the number of
+   * instances that are returned:
+   * - In case attributes of only one instance are returned (either
+   * because 'how_many' was set to 1 or there is only one instance
+   * available at the server), the return structure contains the blob
+   * itself.
+   * -In case attributes of more than one instance are returned, the
+   * return structure does not contain the blobs; instead it contains the
+   * headers of the respective blobs.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aoq  The query definition.
+   *
+   * @param  how_many  Maximum number of values in each result set. Valid
+   *                   arguments are: 
+   *                   how_many = 0 : report all found values,
+   *                   how_many > 0 : report a maximum number of values.
+   *
+   * @return  The result set with the requested attribute values.
+   */
+   ElemResultSetSequence getInstances(
+      in QueryStructure aoq,
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (24002)
+   * Get related instances (Id). This method returns a sequence of
+   * related instances. 
+   * 
+   * The relation name specifies the relation given in the
+   * ApplStructValue. The aid of the ElemId and the relName defines the
+   * unique relation and the target application element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  elem  Original instance. 
+   *               
+   *               At the RPC API this information was stored in the
+   *               field elemId of the structure GetInstRefReq and the
+   *               request AOP_GetInstRef.
+   *
+   * @param  relName  The relation name. 
+   *                  
+   *                  At the RPC API this information was stored in the
+   *                  field refName of the structure GetInstRefReq   and
+   *                  the request AOP_GetInstRef.
+   *
+   * @return  The list of the Id of the related instances.
+   */
+   S_LONGLONG getRelInst(
+      in ElemId elem,
+      in Name relName)
+      raises (AoException);
+
+   /** (24003)
+   * Set the instance reference.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  elem  The instance to add the related instances.
+   *               
+   *               At the RPC API this information was stored in the
+   *               field elemId1 of the structure SetInstRefReq  and the
+   *               request AOP_SetInstRef.
+   *
+   * @param  relName  The name of relation. 
+   *                  
+   *                  At the RPC API this information was stored in the
+   *                  field refName of the structure SetInstRefReq and
+   *                  the request AOP_SetInstRef.
+   *
+   * @param  instIds  Sequence of instance id's. 
+   *                  
+   *                  At the RPC API this information was stored in the
+   *                  field elemId2 of the structure SetInstRefReq and
+   *                  the request AOP_SetInstRef. It was not possible to
+   *                  set more then one relation.
+   *
+   * @param  type  The type of the modification, insert, update or
+   *               remove. 
+   *               
+   *               At the RPC API this information was stored in the
+   *               field on off of the structure SetInstRefReq and the
+   *               request AOP_SetInstRef.
+   */
+   void setRelInst(
+      in ElemId elem,
+      in Name relName,
+      in S_LONGLONG instIds,
+      in SetType type)
+      raises (AoException);
+
+   /** (24004)
+   * Create instance elements of an application element. 
+   * The application element is specified by the AID of input structure.
+   * 
+   * The attribute names are specified by the name of the input
+   * structure.
+   * The values of one instance element are specified in the valueseq of
+   * the input structure.
+   * You can create several instance elements in one call by filling the
+   * valueseq of the input structure.
+   * The same index in the valueseq corresponds to the attributes values
+   * of one instance element. This method returns a sequence of Id's, the
+   * order is related to the order of instance element specified in the
+   * input structure. In case of inheritance, the method supports only
+   * instances of same subtype per call. The returned Id's are the Id's
+   * of the related super type instances.
+   * 
+   * The client must supply all mandatory attributes and references
+   * within one single method call; otherwise the object cannot be made
+   * persistent by the server in the database without the risk of
+   * violating any database constraint.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  val  The sequence of attributes and their values. 
+   *              
+   *              At the RPC API this information was stored in the
+   *              fields elemId and nvSeq of the structure PutValReq and
+   *              the request AOP_PutValReq.
+   *
+   * @return  List with the Id's of the new created instances.
+   */
+   ElemIdSequence insertInstances(
+      in AIDNameValueSeqUnitIdSequence val)
+      raises (AoException);
+
+   /** (24005)
+   * Update one or more attributes of one or more instance elements. It's
+   * necessary that the input structure includes also the Id attribute,
+   * the Id attribute will be used to select the instance elements. In
+   * case of inherited application elements the super type Id has to be
+   * included. The values of one instance element are specified in the
+   * valueseq of the input structure. The same index in the valueseq
+   * corresponds to the attributes values of one instance element. 
+   * 
+   * The server will update the values of the localcolumn instances when
+   * the following criteria all fit:
+   * 
+   * - Only when the attributes id, generation_parameters, values, flags
+   * are given, as soon as any other attributes is given an exception is
+   * thrown.
+   * - The values of the localcolumn must all belong to exactly one
+   * instances of AoMeasurement
+   * - The server have a limitation of the memory, not the system memory
+   * limitation, as soon as the given values breaks the limitation an
+   * exception will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  val  The sequence of attributes and their values. At least
+   *              one of the attribute values sequence must be a sequence
+   *              with the Id. 
+   *              
+   *              At the RPC API this information was stored in the
+   *              fields elemId and nvSeq of the structure PutValReq and
+   *              the request AOP_PutValReq.
+   */
+   void updateInstances(
+      in AIDNameValueSeqUnitIdSequence val)
+      raises (AoException);
+
+   /** (24006)
+   * Delete instances from an application element. In case of inherited
+   * application elements the Id of the super type has to be specified.
+   * 
+   * This method can be used to delete several instances of the same
+   * application element, the method removeInstance of the interface
+   * ApplicationElement to remove one instance of an application element
+   * with the children of the instance element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The application element Id.
+   *
+   * @param  instIds  The sequence of instance Id's. 
+   *                  
+   *                  At the RPC API this information was stored in the
+   *                  fields elemId and nvSeq of the structure PutValReq
+   *                  and the request AOP_PutValReq.
+   */
+   void deleteInstances(
+      in T_LONGLONG aid,
+      in S_LONGLONG instIds)
+      raises (AoException);
+
+   /** (24007)
+   * Get the value matrix of a measurement or a submatrix. If the value
+   * matrix will be built up with special submatrix link, use the
+   * interface Measurement.
+   * By calling this method, the value matrix mode of the returned value
+   * matrix will be taken from the context variable 'VALUEMATRIX_MODE'.
+   * For more information especially on different modes of the value
+   * matrix, see description at the method getValueMatrixInMode() of the
+   * interfaces 'Measurement' and 'SubMatrix'.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_BASETYPE
+   *
+   * @param  elem  The element id. The aid has to be the application
+   *               element Id of the AoMeasurement or AoSubmatrix.
+   *
+   * @return  The value matrix
+   */
+   ValueMatrix getValueMatrix(
+      in ElemId elem)
+      raises (AoException);
+
+   /** (24008)
+   * Set the ACL information on some application element-attribute
+   * defined by <aid> and <attr_name>. The <usergroup_id> defines the
+   * user group the rights should be set for. <rights> defines the rights
+   * to set or to clear. If the parameter <set> is set to 'set', the
+   * rights in <rights> are set all others are cleared. If the parameter
+   * <set> is set to 'add', the rights in <rights> are added to the
+   * existing rights. If the parameter <set> is set to 'remove', the
+   * rights in <rights> are removed from the existing rights. Restriction
+   * for the model: only one application element of the type AoUserGroup
+   * is allowed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  attrName  The name of the attribute.
+   *
+   * @param  usergroupId  The user group to set the rights for.
+   *
+   * @param  rights  The new right for the user group.
+   *
+   * @param  set  What to do with the new right.
+   */
+   void setAttributeRights(
+      in T_LONGLONG aid,
+      in T_STRING attrName,
+      in T_LONGLONG usergroupId,
+      in T_LONG rights,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (24009)
+   * Set the ACL information on some application element defined by
+   * <aid>. The <usergroup_id> defines the user group the rights should
+   * be set for. <rights> defines the rights to set or to clear. If the
+   * parameter <set> is set to 'set', the rights in <rights> are set all
+   * others are cleared. If the parameter <set> is set to 'add', the
+   * rights in <rights> are added to the existing rights. If the
+   * parameter <set> is set to 'remove', the rights in <rights> are
+   * removed from the existing rights.  Restriction for the model: only
+   * one application element of the type AoUserGroup is allowed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  usergroupId  The user group to set the rights for.
+   *
+   * @param  rights  The new rights for the user group. The rights
+   *                 constants are defined in the interface
+   *                 SecurityRights. The interface definition language
+   *                 IDL does not allow to set the values of enumerations
+   *                 thus the constant definitions had to be done in an
+   *                 interface.
+   *
+   * @param  set  What to do with the new right.
+   */
+   void setElementRights(
+      in T_LONGLONG aid,
+      in T_LONGLONG usergroupId,
+      in T_LONG rights,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (24010)
+   * Set the ACL information on some instance defined by the application
+   * element id <aid> and a sequence of instance defined by the id <iid>.
+   * The <usergroup_id> defines the user group the rights should be set
+   * for. <rights> defines the rights to set or to clear. If the
+   * parameter <set> is set to 'set', the rights in <rights> are set all
+   * others are cleared. If the parameter <set> is set to 'add', the
+   * rights in <rights> are added to the existing rights. If the
+   * parameter <set> is set to 'remove', the rights in <rights> are
+   * removed from the existing rights.  Restriction for the model: only
+   * one application element of the type AoUserGroup is allowed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  instIds  The sequence of instance Id's.
+   *
+   * @param  usergroupId  The user group to set the rights for.
+   *
+   * @param  rights  The new right for the user group.
+   *
+   * @param  set  What to do with the new right.
+   */
+   void setInstanceRights(
+      in T_LONGLONG aid,
+      in S_LONGLONG instIds,
+      in T_LONGLONG usergroupId,
+      in T_LONG rights,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (24011)
+   * Retrieve access control list information for the given application
+   * attribute <aid>/<attr_name>.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  attrName  The name of the attribute.
+   *
+   * @return  The access control list entries of the give application
+   *          attribute.
+   */
+   ACLSequence getAttributeRights(
+      in T_LONGLONG aid,
+      in T_STRING attrName)
+      raises (AoException);
+
+   /** (24012)
+   * Retrieve access control list information for the requested
+   * application element <aid>.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @return  The access control list entries of the given application
+   *          element.
+   */
+   ACLSequence getElementRights(
+      in T_LONGLONG aid)
+      raises (AoException);
+
+   /** (24013)
+   * Retrieve access control list information for the requested instance
+   * <aid>/<iid>.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  iid  The Id of the instance.
+   *
+   * @return  The access control list entries of the given instance.
+   */
+   ACLSequence getInstanceRights(
+      in T_LONGLONG aid,
+      in T_LONGLONG iid)
+      raises (AoException);
+
+   /** (24014)
+   * Set the access control list information for the initial rights on
+   * some application element defined by <aid>. The <usergroup_id>
+   * defines the user group the rights should be set for. <rights>
+   * defines the rights to set or to clear. If the parameter <set> is set
+   * to 'set', the rights in <rights> are set all others are cleared. If
+   * the parameter <set> is set to 'add', the rights in <rights> are
+   * added to the existing rights. If the parameter <set> is set to
+   * 'remove', the rights in <rights> are removed from the existing
+   * rights.  Restriction for the model: only one application element of
+   * the type AoUserGroup is allowed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  usergroupId  The user group to set the initial rights for.
+   *
+   * @param  rights  The new initial rights for the user group. The
+   *                 rights constants are defined in the interface
+   *                 SecurityRights. The interface definition language
+   *                 IDL does not allow to set the values of enumerations
+   *                 thus the constant definitions had to be done in an
+   *                 interface.
+   *
+   * @param  refAid  The Id of referencing application element for which
+   *                 the initial rights will be used. If no refAid is set
+   *                 the initial rights will be used for each new
+   *                 instance element independent of the application
+   *                 element.
+   *
+   * @param  set  What to do with the new initial rights.
+   */
+   void setElementInitialRights(
+      in T_LONGLONG aid,
+      in T_LONGLONG usergroupId,
+      in T_LONG rights,
+      in T_LONGLONG refAid,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (24015)
+   * Set the access control list information for the initial rights on
+   * some instance defined by the application element id <aid> and a
+   * sequence of instance defined by the id <iid>. The <usergroup_id>
+   * defines the user group the rights should be set for. <rights>
+   * defines the rights to set or to clear. If the parameter <set> is set
+   * to 'set', the rights in <rights> are set all others are cleared. If
+   * the parameter <set> is set to 'add', the rights in <rights> are
+   * added to the existing rights. If the parameter <set> is set to
+   * 'remove', the rights in <rights> are removed from the existing
+   * rights.  Restriction for the model: only one application element of
+   * the type AoUserGroup is allowed.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  instIds  The sequence of instance Id's.
+   *
+   * @param  usergroupId  The user group to set the initial rights for.
+   *
+   * @param  rights  The new initial right for the user group.
+   *
+   * @param  refAid  The Id of referencing application element for which
+   *                 the initial rights will be used. If no refAid is set
+   *                 the initial rights will be used for each new
+   *                 instance element independent of the application
+   *                 element.
+   *
+   * @param  set  What to do with the new initial rights.
+   */
+   void setInstanceInitialRights(
+      in T_LONGLONG aid,
+      in S_LONGLONG instIds,
+      in T_LONGLONG usergroupId,
+      in T_LONG rights,
+      in T_LONGLONG refAid,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (24016)
+   * Set the flag <set> in svcattr, if this reference will be used (or
+   * not) to retrieve the Initial Rights. If more than one reference is
+   * set to true, the union (or-function) of all rights are used.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *
+   * @param  aid  The application element Id.
+   *
+   * @param  refName  The name of the reference.
+   *
+   * @param  set  What to do with the given reference.
+   */
+   void setInitialRightReference(
+      in T_LONGLONG aid,
+      in T_STRING refName,
+      in RightsSet set)
+      raises (AoException);
+
+   /** (24017)
+   * Get all attribute names (references) which are used to retrieve the
+   * Initial Rights.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The application element Id.
+   *
+   * @return  The names of the references which will be used for the
+   *          initial rights determination.
+   */
+   NameSequence getInitialRightReference(
+      in T_LONGLONG aid)
+      raises (AoException);
+
+   /** (24018)
+   * Retrieve access control list information of the initial rights for
+   * the requested application element <aid>.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @return  The access control list entries of the given application
+   *          element for the initial rights.
+   */
+   InitialRightSequence getElementInitialRights(
+      in T_LONGLONG aid)
+      raises (AoException);
+
+   /** (24019)
+   * Retrieve access control list information of the initial rights for
+   * the requested instance <aid>/<iid>.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aid  The Id of the application element.
+   *
+   * @param  iid  The Id of the instance.
+   *
+   * @return  The access control list entries of the given instance for
+   *          the initial rights.
+   */
+   InitialRightSequence getInstanceInitialRights(
+      in T_LONGLONG aid,
+      in T_LONGLONG iid)
+      raises (AoException);
+
+   /** (24020)
+   * Perform the Query. This method can be used for a more powerful query
+   * compared to the method getInstances of this interface, with join
+   * definitions and aggregate functions.
+   * 
+   * The number of different application elements which are requested are
+   * exactly defined by the definition of the query given in the field
+   * anuSeq of the QueryStructureExt. The number of attributes for each
+   * application element is also given in the definition. The number of
+   * matching instances (their attributes) is not defined by the query
+   * and can be a large amount. Therefore only one iterator for the
+   * attribute values are defined.
+   * 
+   * The return is a sequence of the structure ResultSetExt . This
+   * sequence will always have the length of 1. This
+   * element in the structure have two fields 
+   *   - firstElems of type ElemResultSetExtSequence
+   *   - restElems of type ElemResultSetExtSeqIterator
+   * 
+   * firstElems
+   * The firstElems is a sequence of ElemResultSetExt, the length of the
+   * sequence corresponds with the number of different application
+   * elements requested in the anuSeq of the QueryStructrueExt. The
+   * structure ElemResultSetExt has the fields aid and values. The aid is
+   * the Id of the application element, the values, a sequence of the
+   * structure NameValueSeqUnitId are the values of the attributes. For
+   * each reported attribute an entry is given in the sequence, the name
+   * of the attribute is given in the field valName. The Id of the unit
+   * is given in the field unitId, this is the Id of the instance of the
+   * application element derived from the base element AoUnit. The values
+   * are given in the field value with the type TS_ValueSeq. Each value
+   * sequence has the same length, this length is maximum how_many the
+   * parameter of the method. If no values are found the length of the
+   * sequence is 0. The values with the same index in the different
+   * sequences of the entry in the NameValueSeqUnitIdSequence belongs to
+   * the same instance element. 
+   * 
+   * restElems
+   * The restElems is an iterator for the remaining sequence of
+   * ElemResultSetExt. This iterator allows to load the next N values
+   * from the ResultSet. The result of the element is the same way stored
+   * as at the field firstElems, the next N is the length of the sequence
+   * of the field value of the NameValueSeqUnitId. The method nextOne is
+   * wrong specified and should not be used, use instead the method nextN
+   * with n=1. The method getCount return the total number of found
+   * element, also the number already returned in firstElems. The method
+   * reset set the iterator the beginning of the ResultSet, this is the
+   * beginning of the firstElems.
+   * 
+   * The values of the localcolumn instances is part of the resultset
+   * when the following criteria all fit:
+   * 
+   * - Only when the attributes id, generation_parameters, values, flags
+   * are requested, as soon as any other attributes is requested the
+   * values are not reported.
+   * - The values of the localcolumn must all belong to exactly one
+   * instances of AoMeasurement
+   * - The server have a limitation of the memory, not the system memory
+   * limitation, as soon as the result set will break the limitation an
+   * exception will be thrown.
+   * - No iterator for the rest is required.
+   * 
+   * In case an attribute of blob type is among the requested attributes,
+   * the content of the return structure will depend on the number of
+   * instances that are returned:
+   * - In case attributes of only one instance are returned (either
+   * because 'how_many' was set to 1 or there is only one instance
+   * available at the server), the return structure contains the blob
+   * itself.
+   * - In case attributes of more than one instance are returned, the
+   * return structure does not contain the blobs; instead it contains the
+   * headers of the respective blobs.
+   * 
+   * The value of valName of query result values shall be the aaName in
+   * case AggrFunc='NONE' and shall be constructed for all other AggrFunc
+   * values as string concatenation of the AggrFunc value followed by a
+   * '(' character, followed by the name of attribute (aaName) followed
+   * by a ')' character.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  aoq  The query definition.
+   *
+   * @param  how_many  Maximum number of values in each result set. Valid
+   *                   arguments are: 
+   *                   how_many = 0 : report all found values,
+   *                   how_many > 0 : report a maximum number of values.
+   *
+   * @return  The result set with the requested attribute values.
+   */
+   ResultSetExtSequence getInstancesExt(
+      in QueryStructureExt aoq,
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (24021)
+   * Get the value matrix of a measurement or a submatrix. If the value
+   * matrix will be built up with special submatrix link, use the
+   * interface Measurement.
+   * The behavior of the ASAM ODS server depends on whether the
+   * referenced element is a submatrix or a measurement. For more
+   * information on the server behavior see description at the method
+   * getValueMatrixInMode() of the interfaces 'Measurement' and
+   * 'SubMatrix'.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_INVALID_BASETYPE
+   *    AO_INVALID_VALUEMATRIX_STRUCTURE
+   *
+   * @param  elem  The element id. The aid has to be the application
+   *               element Id of the AoMeasurement or AoSubmatrix.
+   *
+   * @param  vmMode  The requested mode of the value matrix.
+   *
+   * @return  The value matrix.
+   */
+   ValueMatrix getValueMatrixInMode(
+      in ElemId elem,
+      in ValueMatrixMode vmMode)
+      raises (AoException);
+
+   /** (24022)
+   * Get the ODSFile interface for an instance of an application element
+   * derived from AoFile.
+   * 
+   * This method returns an ODSFile interface.
+   * 
+   * One parameter controls the behavior of this method:
+   * The value of the parameter 'elem' (with its components 'aid' and
+   * 'iid') uniquely identifies
+   * an instance within the ODS storage. If no such instance exists, or
+   * if the instance is not
+   * an instance of an application element derived from AoFile, the
+   * exception
+   * AO_INVALID_BASETYPE is thrown.
+   * 
+   * Note that an ODS server may be set up to support the ODS security
+   * concepts and that in
+   * such case access to a file is only allowed if the access rights of
+   * the accessing user are
+   * sufficient. If the user does not have at least READ rights for the
+   * instance specified by
+   * 'elem' an exception AO_ACCESS_DENIED will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_INVALID_BASETYPE
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_ACCESS_DENIED
+   *
+   * @param  elem  The instance to which the file belongs, whose access
+   *               is intended.
+   *
+   * @return  The ODSFile interface to access the desired file.
+   */
+   ODSFile getODSFile(
+      in ElemId elem)
+      raises (AoException);
+
+}; // Interface ApplElemAccess.
+
+/**
+* The ASAM ODS query evaluator interface allows to perform queries in
+* synchronous mode and to create Query objects for asynchronous
+* execution.
+*/
+interface QueryEvaluator {
+
+   /** (25000)
+   * Evaluate a query in synchronous mode.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_QUERY_TYPE_INVALID
+   *    AO_QUERY_INVALID
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_TIMEOUT_EXCEEDED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  queryStr  The query string.
+   *
+   * @param  params  Sequence of parameter names and values. The
+   *                 following parameters should be passed:
+   *                 
+   *                 Name: "MaxDuration"; 
+   *                 Type: T_LONG
+   *                 Comment: Can be used to restrict the processing
+   *                 time. The time is given in  milliseconds,
+   *                 Default value: 0 (no restriction)
+   *
+   * @return  The result of the query as an instance element iterator.
+   */
+   InstanceElementIterator getInstances(
+      in T_STRING queryStr,
+      in NameValueSequence params)
+      raises (AoException);
+
+   /** (25001)
+   * Evaluate a query in synchronous mode.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_QUERY_TYPE_INVALID
+   *    AO_QUERY_INVALID
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_TIMEOUT_EXCEEDED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  queryStr  The query string.
+   *
+   * @param  params  Sequence of parameter names and values. The
+   *                 following parameters should be passed:
+   *                 
+   *                 Name: "MaxDuration"; 
+   *                 Type: T_LONG
+   *                 Comment: Can be used to restrict the processing
+   *                 time. The time is given in  milliseconds,
+   *                 Default value: 0 (no restriction)
+   *
+   * @return  The result of the query as a name value unit sequence
+   *          iterator. Each name value unit tuple is one cell of the
+   *          table. The name value unit sequence is one row of the
+   *          table.
+   */
+   NameValueUnitSequenceIterator getTableRows(
+      in T_STRING queryStr,
+      in NameValueSequence params)
+      raises (AoException);
+
+   /** (25002)
+   * Evaluate a query in synchronous mode.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_QUERY_TYPE_INVALID
+   *    AO_QUERY_INVALID
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_TIMEOUT_EXCEEDED
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  queryStr  The query string.
+   *
+   * @param  params  Sequence of parameter names and values. The
+   *                 following parameters should be passed:
+   *                 
+   *                 Name: "MaxDuration"; 
+   *                 Type: T_LONG
+   *                 Comment: Can be used to restrict the processing
+   *                 time. The time is given in  milliseconds,
+   *                 Default value: 0 (no restriction)
+   *
+   * @return  The result of the query as a name value sequence unit
+   *          sequence. Each name value sequence unit tuple is one column
+   *          of the table. The name value sequence unit sequence is  the
+   *          table. The result structure can be very huge.
+   */
+   NameValueSeqUnitSequence getTable(
+      in T_STRING queryStr,
+      in NameValueSequence params)
+      raises (AoException);
+
+   /** (25003)
+   * Create a query object to execute it in asynchronous mode.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_QUERY_TYPE_INVALID
+   *    AO_QUERY_INVALID
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  queryStr  The query string
+   *
+   * @param  params  Sequence of parameter names and values. The
+   *                 following parameters should be passed:
+   *                 
+   *                 Name: "QueryResultType"; 
+   *                 Type: ResultType.
+   *                 Comment: Specifies what kind of result is expected
+   *                 by the client.
+   *                 Default value: INSTELEM_ITERATOR_AS_RESULT
+   *                 
+   *                 Name: "MaxDuration"; 
+   *                 Type: T_LONG
+   *                 Comment: Can be used to restrict the processing
+   *                 time. The time is given in  milliseconds,
+   *                 Default value: 0 (no restriction)
+   *
+   * @return  The query object.
+   */
+   Query createQuery(
+      in T_STRING queryStr,
+      in NameValueSequence params)
+      raises (AoException);
+
+}; // Interface QueryEvaluator.
+
+/**
+* The ASAM ODS interface Query.
+*/
+interface Query {
+
+   /** (26000)
+   * Get the QueryEvaluator object which is responsible for this query.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The QueryEvaluator object which is responsible for this
+   *          query.
+   */
+   QueryEvaluator getQueryEvaluator()
+      raises (AoException);
+
+   /** (26001)
+   * Do the query pre-processing (optimization, etc.)  Call can be
+   * omitted by the client. In this case the functionality is executed on
+   * the call of executeQuery.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_INVALID_RESULTTYPE
+   *
+   * @param  params  Sequence of parameter names and values. The
+   *                 following parameters should be passed:
+   *                 
+   *                 Name: "QueryResultType"; 
+   *                 Type: ResultType.
+   *                 Comment: Specifies what kind of result is expected
+   *                 by the client, this parameter is required if the
+   *                 parameters isn't given at the method createQuery of
+   *                 the interface QueryEvaluator.
+   *                 Default value: INSTELEM_ITERATOR_AS_RESULT
+   */
+   void prepareQuery(
+      in NameValueSequence params)
+      raises (AoException);
+
+   /** (26002)
+   * Execute query in asynchronous mode.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_INVALID_RESULTTYPE
+   *
+   * @param  params  Sequence of parameter names and values. The
+   *                 following parameter should be passed:
+   *                 
+   *                 Name: "QueryResultType"; 
+   *                 Type: ResultType.
+   *                 Comment: Specifies what kind of result is expected
+   *                 by the client, this parameter is required if the
+   *                 parameters isn't given at the method prepareQuery or
+   *                 the method createQuery of the interface
+   *                 QueryEvaluator.
+   *                 Default value: INSTELEM_ITERATOR_AS_RESULT
+   *                 
+   *                 Name: "Synchronous";
+   *                 Type: T_BOOLEAN
+   *                 Comment: In case of "true" guarantees synchronous
+   *                 execution.
+   *                 Default value: "false"
+   */
+   void executeQuery(
+      in NameValueSequence params)
+      raises (AoException);
+
+   /** (26003)
+   * Return query status.
+   * 
+   * Returns INCOMPLETE if the query is still executing.
+   * 
+   * Returns COMPLETE if the query finished execution or if the query
+   * execution stopped because of an error or because the timeout was
+   * exceeded.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The status of the query.
+   */
+   QueryStatus getStatus()
+      raises (AoException);
+
+   /** (26004)
+   * Get the query result. This method should only be called after the
+   * query has been executed. It returns an iterator on the instances
+   * that were found by the query.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_TIMEOUT_EXCEEDED
+   *    AO_QUERY_INCOMPLETE
+   *    AO_QUERY_INVALID_RESULTTYPE
+   *
+   * @return  The result of the query as an instance element iterator.
+   */
+   InstanceElementIterator getInstances()
+      raises (AoException);
+
+   /** (26005)
+   * Get the query result. This method should only be called after the
+   * query has been executed. It returns an iterator on the name value
+   * unit sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_TIMEOUT_EXCEEDED
+   *    AO_QUERY_INCOMPLETE
+   *    AO_QUERY_INVALID_RESULTTYPE
+   *
+   * @return  The result of the query as a name value unit sequence
+   *          iterator. Each name value unit tuple is one cell of the
+   *          table. The name value unit sequence is one row of the
+   *          table.
+   */
+   NameValueUnitSequenceIterator getTableRows()
+      raises (AoException);
+
+   /** (26006)
+   * Get the query result. This method should only be called after the
+   * query has been executed. It returns the result as an structure.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_QUERY_PROCESSING_ERROR
+   *    AO_QUERY_TIMEOUT_EXCEEDED
+   *    AO_QUERY_INCOMPLETE
+   *    AO_QUERY_INVALID_RESULTTYPE
+   *
+   * @return  The result of the query as a name value sequence unit
+   *          sequence. Each name value sequence unit tuple is one column
+   *          of the table. The name value sequence unit sequence is  the
+   *          table. The result structure can be very huge.
+   */
+   NameValueSeqUnitSequence getTable()
+      raises (AoException);
+
+}; // Interface Query.
+
+/**
+* The name value unit sequence iterator. The table iterator as query
+* result.
+*/
+interface NameValueUnitSequenceIterator {
+
+   /** (27001)
+   * Destroy the iterator and free the associated memory.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (27002)
+   * Get the total number of elements accessible by the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of elements accessible by the iterator.
+   */
+   T_LONG getCount()
+      raises (AoException);
+
+   /** (27003)
+   * Get the next n elements from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  how_many  The number of requested elements.
+   *
+   * @return  The next n values of the name-value-unit  sequence. For
+   *          each NameValuUnit the next n values are stored in the value
+   *          sequence.
+   */
+   NameValueSeqUnitSequence nextN(
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (27004)
+   * Get the next element from the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The next name-value-unit tuple sequence from the
+   *          name-value-unit tuple.
+   */
+   NameValueSeqUnit nextOne()
+      raises (AoException);
+
+   /** (27005)
+   * Reset the pointer in the element iterator to the first element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void reset()
+      raises (AoException);
+
+}; // Interface NameValueUnitSequenceIterator.
+
+/**
+* The ASAM ODS enumeration interface.
+*/
+interface EnumerationDefinition {
+
+   /** (28000)
+   * List the possible names of the enumeration. The sort order of the
+   * list is the value of the item. The first item has the value zero.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  List with all possible names of the enumeration items.
+   */
+   NameSequence listItemNames()
+      raises (AoException);
+
+   /** (28001)
+   * Get the value of an item.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NOT_FOUND
+   *
+   * @param  itemName  The name of the item.
+   *
+   * @return  The number of the item.
+   */
+   T_LONG getItem(
+      in T_STRING itemName)
+      raises (AoException);
+
+   /** (28002)
+   * Get the name of an item.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NOT_FOUND
+   *
+   * @param  item  The value of the item.
+   *
+   * @return  The name of the item.
+   */
+   T_STRING getItemName(
+      in T_LONG item)
+      raises (AoException);
+
+   /** (28003)
+   * Add a new item to the enumeration. This method modifies the
+   * application model and is only allowed for the super user.
+   * 
+   * The name of an item must not exceed the maximum name length of the
+   * underlying physical storage. Current server implementations restrict
+   * it to 128 characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_ACCESS_DENIED
+   *    AO_DUPLICATE_NAME
+   *    AO_DUPLICATE_VALUE
+   *
+   * @param  itemName  The name of the new item.
+   */
+   void addItem(
+      in T_STRING itemName)
+      raises (AoException);
+
+   /** (28004)
+   * Rename the item of the enumeration. This method modifies the
+   * application model and is only allowed for the super user.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_NOT_FOUND
+   *
+   * @param  oldItemName  The existing name of the item.
+   *
+   * @param  newItemName  the new name of the item.
+   */
+   void renameItem(
+      in T_STRING oldItemName,
+      in T_STRING newItemName)
+      raises (AoException);
+
+   /** (28005)
+   * Get the name of the enumeration.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  Name of the enumeration.
+   */
+   T_STRING getName()
+      raises (AoException);
+
+   /** (28006)
+   * Set the name of the enumeration. This method modifies the
+   * application model and is only allowed for the super user.
+   * 
+   * The name of an enumeration definition must not exceed the maximum
+   * name length of the underlying physical storage. Current server
+   * implementations restrict it to 30 characters.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_TRANSACTION_NOT_ACTIVE
+   *    AO_ACCESS_DENIED
+   *
+   * @param  enumName  Name of the enumeration.
+   */
+   void setName(
+      in T_STRING enumName)
+      raises (AoException);
+
+   /** (28007)
+   * Get the index of the enumeration.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_BAD_PARAMETER
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The index of the enumeration.
+   */
+   T_LONG getIndex()
+      raises (AoException);
+
+}; // Interface EnumerationDefinition.
+
+/**
+* For iteration through the result elements, there is also a new iterator
+* necessary called ElemResultSetExtSeqIterator. It’s functionality is
+* still the same as all other iterators and needs therefore no further
+* explanation.
+* There is only one difference to the other iterations. The iteration is
+* done on the lowest level in that case on the TS_UnionSeq.
+*/
+interface ElemResultSetExtSeqIterator {
+
+   /** (29000)
+   * Destroy the iterator and free the associated memory.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void destroy()
+      raises (AoException);
+
+   /** (29001)
+   * Get the total number of elements accessible by the iterator.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The number of elements accessible by the iterator.
+   */
+   T_LONG getCount()
+      raises (AoException);
+
+   /** (29002)
+   * Get the next n elements from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @param  how_many  The number of requested elements.
+   *
+   * @return  The next n attribute values from the element result set
+   *          sequence.
+   */
+   ElemResultSetExtSequence nextN(
+      in T_LONG how_many)
+      raises (AoException);
+
+   /** (29003)
+   * Get the next  element from the sequence.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The next attribute values from the element result set
+   *          sequence.
+   */
+   ElemResultSetExt nextOne()
+      raises (AoException);
+
+   /** (29004)
+   * Reset the pointer in the element sequence to the first element.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void reset()
+      raises (AoException);
+
+}; // Interface ElemResultSetExtSeqIterator.
+
+/**
+* The interface ODSFile extends the interface InstanceElement. Thus all
+* methods of the interface InstanceElement do also work here. 
+* 
+* ODSFile allows to create a file that is under control of the ODS server
+* (a 'managed file'). ODSFile furthermore allows read, write, append or
+* remove operations to a managed file.
+* 
+* General information of the file can be retrieved from this interface as
+* well. Note, that no random access on a file is provided; only a
+* sequential read and a write by appending at the end is possible.
+* 
+* Replacing an existing file by a new one requires to first remove the
+* old one and then create the new one.
+*/
+interface ODSFile : InstanceElement {
+
+   /** (30000)
+   * Get the ODSWriteTransfer interface for the file, to allow appending
+   * further bytes to the file.
+   * 
+   * This method returns the ODSWriteTransfer interface for the file
+   * represented by this ODSFile object. That interface allows to write
+   * sequentially to the file, beginning at the end of the currently
+   * existing file.
+   * Before returning the interface ODSWriteTransfer, the physical file
+   * will be opened for subsequent write operations.
+   * 
+   * In case the current user has no UPDATE right for the instance (resp.
+   * for all of its attributes in case of attribute security) from which
+   * this ODSFile object was created, the exception AO_ACCESS_DENIED will
+   * be thrown.
+   * 
+   * In case the physical file referenced by this ODSFile object cannot
+   * be found, the exception AO_BAD_OPERATION will be thrown.
+   * 
+   * In case the physical file referenced by this ODSFile object is
+   * currently opened by an ODSReadTransfer or an ODSWriteTransfer
+   * object, the exception AO_FILE_LOCKED will be thrown.
+   * 
+   * In case the file cannot be opened for writing the exception
+   * AO_SYSTEM_PROBLEM will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_FILE_LOCKED
+   *    AO_ACCESS_DENIED
+   *    AO_BAD_OPERATION
+   *    AO_SYSTEM_PROBLEM
+   *
+   * @return  The ODSWriteTransfer interface to append to the file.
+   */
+   ODSWriteTransfer append()
+      raises (AoException);
+
+   /** (30001)
+   * Check whether the file may be opened for reading.
+   * 
+   * This method checks whether the file represented by this ODSFile
+   * object may be opened by the ODS server for reading access.
+   * 
+   * The method returns a boolean TRUE in case the file may be opened for
+   * reading, and a boolean FALSE in case it cannot be opened for reading
+   * or it is already opened for write access (i.e. an ODSWriteTransfer
+   * object for this file exists).
+   * 
+   * In case the physical file referenced by this ODSFile object cannot
+   * be found, false will be returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  Information about whether the file can be opened for
+   *          reading
+   */
+   T_BOOLEAN canRead()
+      raises (AoException);
+
+   /** (30002)
+   * Check whether the file may be opened for writing.
+   * 
+   * This method checks whether the file represented by this ODSFile
+   * object may be opened by the ODS server for writing access.
+   * 
+   * The method returns a boolean TRUE in case the user has appropriate
+   * rights and the file can be opened for writing, and a boolean FALSE
+   * in case it is already opened for write access (i.e. an
+   * ODSWriteTransfer object for this file exists) or for read access
+   * (i.e. one or more ODSReadTransfer objects for this file exist).
+   * 
+   * In case ao_location is defined and the current user has no UPDATE
+   * right for the instance from which this ODSFile object was created, a
+   * boolean FALSE will be returned.
+   * 
+   * In case ao_location is undefined and the current user has no INSERT
+   * right for the instance from which this ODSFile object was created, a
+   * boolean FALSE will be returned.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  Information about whether the file can be opened for
+   *          writing
+   */
+   T_BOOLEAN canWrite()
+      raises (AoException);
+
+   /** (30003)
+   * Create a new file at the ODS server and get the ODSWriteTransfer
+   * interface for that file, to allow storing bytes to the file.
+   * 
+   * This method returns the ODSWriteTransfer interface for the file
+   * represented by this ODSFile object. That interface allows to write
+   * sequentially to the (initially empty) file. 
+   * 
+   * Before returning the interface ODSWriteTransfer, the physical file
+   * will be created at the ODS server and opened for subsequent write
+   * operations. The file name will be decided by the ODS server and set
+   * as value of the attribute derived from the base attribute
+   * 'ao_location' of the instance from which this ODSFile object was
+   * created.
+   * 
+   * In case the current user has no INSERT right for the instance from
+   * which this ODSFile object was created, the exception
+   * AO_ACCESS_DENIED will be thrown.
+   * 
+   * If the attribute derived from 'ao_location' of the instance from
+   * which this ODSFile object was created already has a value, the
+   * instance potentially already references a file which was not yet
+   * removed, and the server will check whether that former file still
+   * exists. If so the exception AO_BAD_OPERATION will be thrown and no
+   * new file will be created.
+   * 
+   * In case the file cannot be opened for writing the exception
+   * AO_SYSTEM_PROBLEM will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_ACCESS_DENIED
+   *    AO_BAD_OPERATION
+   *    AO_SYSTEM_PROBLEM
+   *
+   * @return  The ODSWriteTransfer interface to a new file.
+   */
+   ODSWriteTransfer create()
+      raises (AoException);
+
+   /** (30004)
+   * Check whether the file physically exists at the ODS server.
+   * 
+   * This method checks whether the file represented by this ODSFile
+   * object truly exists at the expected location (e.g. on a specific
+   * drive/directory) within reach of  the ODS server.
+   * 
+   * The method returns a boolean TRUE in case the file exists, and a
+   * boolean FALSE in case it does not exist.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  Information about whether the file exists.
+   */
+   T_BOOLEAN exists()
+      raises (AoException);
+
+   /** (30005)
+   * Get the date of the file.
+   * This method returns the date of the file represented by this ODSFile
+   * object. The returned string follows the rules for ODS date and time
+   * specification strings.
+   * The date returned shall specify the timestamp of the latest change
+   * of the file. It is the information the operating system of the ODS
+   * server provides; if there is no date available from the operating
+   * system with exactly this meaning, the ODS server shall return the
+   * closest information available.
+   * In case the physical file referenced by this ODSFile object cannot
+   * be found, the exception AO_SYSTEM_PROBLEM will be thrown.
+   * In case the physical file referenced by this ODSFile object is
+   * currently opened by an ODSWriteTransfer object of another session,
+   * the exception AO_FILE_LOCKED will be thrown.
+   * In case there is no file defined by the attribute derived from
+   * 'ao_location', the exception AO_BAD_OPERATION will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_BAD_OPERATION
+   *    AO_SYSTEM_PROBLEM
+   *    AO_FILE_LOCKED
+   *
+   * @return  The date of last change of the file represented by this
+   *          ODSFile object.
+   */
+   T_DATE getDate()
+      raises (AoException);
+
+   /** (30006)
+   * Get the size of the file.
+   * This method returns the size of the file represented by this ODSFile
+   * object. 
+   * The returned value shall specify the exact file size in bytes. It is
+   * the information the operating system of the ODS server provides.
+   * In case the physical file referenced by this ODSFile object cannot
+   * be found, the exception AO_SYSTEM_PROBLEM will be thrown.
+   * In case there is no file defined by the attribute derived from
+   * 'ao_location', the exception AO_BAD_OPERATION will be thrown.
+   * In case the physical file referenced by this ODSFile object is
+   * currently opened by an ODSWriteTransfer object of another session,
+   * the exception AO_FILE_LOCKED will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_FILE_LOCKED
+   *    AO_BAD_OPERATION
+   *    AO_SYSTEM_PROBLEM
+   *
+   * @return  The size in bytes of the file represented by this ODSFile
+   *          object.
+   */
+   T_LONGLONG getSize()
+      raises (AoException);
+
+   /** (30007)
+   * Remove a file from the ODS server.
+   * This method removes the file represented by this ODSFile object from
+   * the ODS server if the user has appropriate rights. The attribute
+   * derived from the base attribute 'ao_location' of the instance from
+   * which this ODSFile object was created will become undefined and
+   * ao_size will be set to 0.
+   * In case the current user has no DELETE right for the instance from
+   * which this ODSFile object was created, the exception
+   * AO_ACCESS_DENIED will be thrown.
+   * In case the file is currently opened for write access (i.e. an
+   * ODSWriteTransfer object for this file exists) or for read access
+   * (i.e. one or more ODSReadTransfer objects for this file exist) an
+   * exception AO_FILE_LOCKED will be thrown.
+   * In case the physical file referenced by this ODSFile object does not
+   * exist, the method will return without any further file action; it
+   * will set the attribute derived from the base attribute 'ao_location'
+   * to undefined and 'ao_size' to 0; it will not throw an exception to
+   * signal the non-existence of the file.
+   * In case the file cannot be physically deleted from its location, the
+   * exception AO_SYSTEM_PROBLEM will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_FILE_LOCKED
+   *    AO_ACCESS_DENIED
+   *    AO_SYSTEM_PROBLEM
+   */
+   void remove()
+      raises (AoException);
+
+   /** (30008)
+   * Get the ODSReadTransfer interface for the file.
+   * This method returns the ODSReadTransfer interface for the file
+   * represented by this ODSFile object. That interface allows to read
+   * sequentially from the file, either starting at the very beginning or
+   * at a user-specified byte location within the file.
+   * Before returning the interface ODSReadTransfer, the physical file
+   * will be opened for reading.
+   * In case the physical file referenced by this ODSFile object is
+   * currently opened by an ODSWriteTransfer object, the exception
+   * AO_FILE_LOCKED will be thrown.
+   * In case there is no file defined by the attribute derived from
+   * 'ao_location', the exception AO_BAD_OPERATION will be thrown.
+   * In case the attribute derived from 'ao_location' is defined but the
+   * physical file referenced by this ODSFile object cannot be found or
+   * cannot be opened for reading, the exception AO_SYSTEM_PROBLEM will
+   * be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_FILE_LOCKED
+   *    AO_BAD_OPERATION
+   *    AO_SYSTEM_PROBLEM
+   *
+   * @return  The ODSReadTransfer interface to read from the file.
+   */
+   ODSReadTransfer read()
+      raises (AoException);
+
+   /** (30009)
+   * Put a file that is already residing within reach of the ODS server
+   * under control of the ODS server.
+   * This method allows to put files under control of the ODS server
+   * (make them a 'managed file') without the need to stream their bytes
+   * through the ODSWriteTransfer interface.
+   * The parameter 'sourceUrl' specifies the location of the file that
+   * shall become a managed file. This location must reference a file
+   * which is accessible by the server. The server will move the file to
+   * a location where managed files reside and give it a name of its own
+   * choice; the file will no longer exist at its previous location. The
+   * server will store file name and location in the attribute derived
+   * from 'ao_location' and store the size of the file in the attribute
+   * derived from 'ao_size'.
+   * The string value of 'sourceUrl' must comply to the URL specification
+   * given in RFC 2396 with the restriction that ASAM ODS only supports
+   * absolute URLs with the access scheme "file:", otherwise the
+   * exception AO_BAD_PARAMETER  will be thrown.
+   * In case there is no file defined by the attribute derived from
+   * 'ao_location', the exception AO_BAD_OPERATION will be thrown.
+   * In case the file cannot be physically moved from its original
+   * location to a server-location where managed files reside, the
+   * exception AO_SYSTEM_PROBLEM will be thrown (e.g. if the file
+   * specified by 'sourceUrl' does not exist, or if it cannot be
+   * physically moved, etc.).
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_BAD_PARAMETER
+   *    AO_BAD_OPERATION
+   *    AO_SYSTEM_PROBLEM
+   *
+   * @param  sourceUrl  Filename URL of the file to take under control as
+   *                    a managed file.
+   */
+   void takeUnderControl(
+      in T_STRING sourceUrl)
+      raises (AoException);
+
+   /** (30010)
+   * Remove a file that is currently under control of the ODS server out
+   * of control of the server and move it to a specified location within
+   * reach of the server.
+   * This method allows to take files out of control of the ODS server
+   * and place them at a specified location, without the need to stream
+   * their bytes through the ODSReadTransfer interface.
+   * The parameter 'targetUrl' specifies the location to which the
+   * currently managed file shall be moved. This location must be
+   * accessible by the server. The server will move the file from the
+   * location where managed files reside to the location given by
+   * 'targetUrl'; the file will no longer exist at its previous location.
+   * The server will set the value of the attribute derived from
+   * 'ao_location' to undefined and of the attribute derived from
+   * 'ao_size' to 0.
+   * The string value of 'targetUrl' must comply to the URL specification
+   * given in RFC 2396 with the restriction that ASAM ODS only supports
+   * absolute URLs with the access scheme "file:"; otherwise the
+   * exception AO_BAD_PARAMETER  will be thrown.
+   * In case the file specified by 'targetUrl' already exists the
+   * exception AO_BAD_PARAMETER will be thrown and no action will be
+   * performed by this method.
+   * In case the file specified by 'targetUrl' cannot be physically moved
+   * to the intended location, the exception AO_SYSTEM_PROBLEM will be
+   * thrown and no action will be performed by this method.
+   * In case the file referenced by this ODSFile object is currently
+   * opened for write access (i.e. an ODSWriteTransfer object for this
+   * file exists) or for read access (i.e. one or more ODSReadTransfer
+   * objects for this file exist) an exception AO_FILE_LOCKED will be
+   * thrown and no action will be performed by this method.
+   * In case there is no file defined by the attribute derived from
+   * 'ao_location', the exception AO_BAD_OPERATION will be thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_BAD_PARAMETER
+   *    AO_FILE_LOCKED
+   *    AO_SYSTEM_PROBLEM
+   *    AO_BAD_OPERATION
+   *    AO_BAD_PARAMETER
+   *
+   * @param  targetUrl  Filename URL of the file where to move the
+   *                    managed file.
+   */
+   void removeFromControl(
+      in T_STRING targetUrl)
+      raises (AoException);
+
+}; // Interface ODSFile.
+
+/**
+* The interface which allows a read transfer (from the ODS server to a
+* client) of the content of a file that is under control of the ODS
+* server.
+*/
+interface ODSReadTransfer {
+
+   const T_LONG READALL = -1; // Read all bytes of the file.
+
+   /** (31000)
+   * Close this ODSReadTransfer interface.
+   * 
+   * This method closes the file on the ODS server's file system and
+   * destroys this ODSReadTransfer object.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void close()
+      raises (AoException);
+
+   /** (31001)
+   * Read a sequence of bytes from the file.
+   * This method reads the file at the ODS server referenced by this
+   * ODSReadTransfer and returns a sequence of bytes from that file.
+   * 
+   * The parameter 'maxOctets' controls the return behavior of the ODS
+   * server. If the file contains more bytes than are given by
+   * 'maxOctets', only 'maxOctets' bytes will be returned in the first
+   * method invocation. A subsequent method invocation will return the
+   * next 'maxOctets' bytes from the file, etc., until the complete file
+   * contents has been returned. Further method invocations return an
+   * empty sequence.
+   * 
+   * If 'maxOctets' is given with a equal to the constant READALL(-1),
+   * there is no restriction on the number of bytes, and the complete
+   * file contents will be returned with only one method invocation.
+   * 
+   * Note that only a sequential reading, starting at the first byte of
+   * the file, is supported by this interface. If previous parts of the
+   * file need to be accessed again, the current ODSReadTransfer object
+   * must be closed and a new one must be instantiated.
+   * 
+   * In case the parameter 'maxOctets' is negative other then the
+   * constant READALL the exception AO_BAD_PARAMETER is thrown.
+   * 
+   * In case there is any problem reading the file, the exception
+   * AO_SYSTEM_PROBLEM is thrown.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_SYSTEM_PROBLEM
+   *    AO_BAD_PARAMETER
+   *
+   * @param  maxOctets  The maximum number of bytes to be returned by one
+   *                    method call.
+   *
+   * @return  The next (at most 'maxOctets') bytes in the file.
+   */
+   S_BYTE getOctetSeq(
+      in T_LONG maxOctets)
+      raises (AoException);
+
+   /** (31002)
+   * Skip a number of bytes while reading the file.
+   * This method moves the read pointer in the file a number of bytes
+   * ahead, starting at its current position; it will not return those
+   * bytes. The parameter 'numOctets' specifies the number of bytes to
+   * skip.
+   * 
+   * The method returns the true number of bytes that were skipped. This
+   * may differ from 'numOctets' e.g. if the end of the file was reached.
+   * If the read pointer has reached the end of the file any further
+   * method invocations will return a value of 0 for 'numSkipped'.
+   * 
+   * This method may be invoked several times and may be arbitrarily
+   * combined with getOctetSeq().
+   * 
+   * Note that only a sequential reading, starting at the first byte of
+   * the file, is supported by this interface. If previous parts of the
+   * file need to be accessed again, the current ODSReadTransfer object
+   * must be closed and a new one must be instantiated.
+   * 
+   * If 'numOctets' is given with a value less than 0, the method will
+   * throw the exception AO_BAD_PARAMETER and will not perform any file
+   * access nor change the read pointer.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_BAD_PARAMETER
+   *
+   * @param  numOctets  The number of bytes to be skipped.
+   *
+   * @return  the real number of bytes skipped in the file.
+   */
+   T_LONGLONG skipOctets(
+      in T_LONGLONG numOctets)
+      raises (AoException);
+
+   /** (31003)
+   * Retrieve the current position of the read pointer in the file.
+   * 
+   * This method returns the current byte position of the file pointer.
+   * The start of the file corresponds to a position of 0.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The current position of the read pointer in the file.
+   */
+   T_LONGLONG getPosition()
+      raises (AoException);
+
+}; // Interface ODSReadTransfer.
+
+/**
+* The interface which allows a write transfer (from a client to the ODS
+* server) of the content of a file that is under control of the ODS
+* server.
+*/
+interface ODSWriteTransfer {
+
+   /** (32000)
+   * Close this ODSWriteTransfer interface.
+   * This method closes the file on the ODS server's file system; thereby
+   * any data to be written to the file and still residing in ODS server
+   * cache will be flushed to the file. 
+   * The method finally destroys this ODSWriteTransfer object and also
+   * the corresponding CORBA object. Access to such objects after having
+   * invoked this close method will lead to a CORBA exception.
+   * In case the file creation and/or write operations have been
+   * performed within a transaction, this method will not yet save the
+   * operations' results permanently at the physical file location but
+   * keep them in intermediate storage until the transaction is
+   * committed. The file will be locked for any access through
+   * ODSReadTransfer or ODSWriteTransfer within any other session until
+   * the end of the transaction.
+   * Any subsequent read transfers or write transfers within the same
+   * transaction are allowed, and will work on the latest version of the
+   * file. In case the transaction is committed without a preceding close
+   * operation the ODSWriteTransfer will be closed automatically by the
+   * server.
+   * In case the file creation and/or write operations have been
+   * performed outside a transaction, this method will make all changes
+   * permanent.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   */
+   void close()
+      raises (AoException);
+
+   /** (32001)
+   * Write a sequence of bytes to the file.
+   * This method writes a sequence of bytes to the file at the ODS server
+   * represented by this ODSWriteTransfer. 
+   * 
+   * The parameter 'buffer' contains the byte sequence that is to be
+   * written to the file. The contents of 'buffer' will be appended at
+   * the end of the file (which may also be the very start of the file in
+   * case the file was newly created), and subsequent method invocations
+   * will add their bytes at the then actual end of the file.
+   * 
+   * Note that only a sequential writing is supported by this interface.
+   * If previous parts of the file need to be changed, the file must be
+   * removed and a new one must be created.
+   * 
+   * In case the current location of the file runs out of memory or any
+   * other operating system problem occurs the ODS server will return the
+   * exception AO_SYSTEM_PROBLEM. In this case the results of the actual
+   * putOctetSeq() invocation will be undone (no byte of 'buffer' is
+   * added to the file) and the file may be closed without containing
+   * 'buffer' at its end.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *    AO_NO_MEMORY
+   *    AO_SYSTEM_PROBLEM
+   *
+   * @param  buffer  The buffer containing the sequence of bytes that
+   *                 shall be written to the file.
+   */
+   void putOctectSeq(
+      in S_BYTE buffer)
+      raises (AoException);
+
+   /** (32002)
+   * Retrieve the current position of the write pointer in the file.
+   * 
+   * This method returns the current byte position of the write pointer.
+   * The start of the file corresponds to a position of 0.
+   *
+   * @throws AoException
+   * with the following possible error codes:
+   *    AO_CONNECTION_LOST
+   *    AO_IMPLEMENTATION_PROBLEM
+   *    AO_NOT_IMPLEMENTED
+   *    AO_NO_MEMORY
+   *    AO_SESSION_NOT_ACTIVE
+   *
+   * @return  The current position of the write pointer in the file.
+   */
+   T_LONGLONG getPosition()
+      raises (AoException);
+
+}; // Interface ODSWriteTransfer.
+
+}; // Module ods.
+
+}; // Module asam.
+
+}; // Module org.
+
+
+#endif
+
+/**
+* The ASAM ODS error codes.
+*
+* AO_ACCESS_DENIED
+* The ODS server denied the access.
+*
+* AO_BAD_OPERATION
+* A method was called which is not possible for the current state.
+*
+* AO_BAD_PARAMETER
+* A parameter of wrong type or value was passed to the method. The
+* minorCode tells which parameter (1, 2, 3 or 4) is bad. If more than one
+* parameter is bad, only the first one is reported.
+*
+* AO_CONNECTION_LOST
+* Due to a hardware or network software problem the connection to the
+* server was lost.
+*
+* AO_CONNECT_FAILED
+* The connect to a server failed. This error may occur if the server is
+* down or currently unreachable.
+*
+* AO_CONNECT_REFUSED
+* The connection was refused by the server. This error may occur if the
+* presented authentication information is either incorrect or incomplete.
+* This error shall not occur if the server does not accept any more
+* sessions due to overload problems. See AO_SESSION_LIMIT_REACHED for
+* this case.
+*
+* AO_DUPLICATE_BASE_ATTRIBUTE
+* Any application element may have only one base attribute of a certain
+* type. This means it may have only one attribute of base attribute type
+* NAME, one ID, one VERSION and so on.
+*
+* AO_DUPLICATE_NAME
+* The implicit or explicit specified name is already in use but it is
+* required to be unique.
+*
+* AO_DUPLICATE_VALUE
+* The attribute is marked unique in the application model. Thus duplicate
+* values are not allowed.
+*
+* AO_FILE_LOCKED
+* The kind of access to a managed file that was requested cannot be
+* granted, as the file is currently in use by another read or write
+* transfer through the OO-API.
+*
+* AO_HAS_BASE_ATTRIBUTE
+* Base attribute found. It is not allowed to modify the datatype, unique-
+* or obligatory flag .
+*
+* AO_HAS_BASE_RELATION
+* Base relation found. It is not allowed to modify the relationtype,
+* -range or -ship of an application relation derived from a base
+* relation.
+*
+* AO_HAS_INSTANCES
+* The operation is not allowed for elements that have instances.
+*
+* AO_HAS_REFERENCES
+* The requested operation is not permitted because the target element has
+* references.
+*
+* AO_IMPLEMENTATION_PROBLEM
+* This error is reserved for the reporting of implementation specific
+* problems that are not properly handled by the standard error
+* definitions. An application should not crash if this error occurs but
+* there is no way to react to this error other than reporting and
+* ignoring
+* it. The intend of this error is not to leave implementation specific
+* errors unreported.
+*
+* AO_INCOMPATIBLE_UNITS
+* The units are incompatible. No conversion rule is known.
+*
+* AO_INVALID_ASAM_PATH
+* The specified Asam path is invalid.
+*
+* AO_INVALID_ATTRIBUTE_TYPE
+* The requested attribute type is invalid.
+*
+* AO_INVALID_BASETYPE
+* The specified base type is invalid. The following basetypes are
+* allowed:
+*    AoAny
+*    AoAttributeMap
+*    AoEnvironment
+*    AoFile
+*    AoLocalColumn
+*    AoLog
+*    AoMeasurement
+*    AoMeasurementQuantity
+*    AoNameMap
+*    AoParameter
+*    AoParameterSet
+*    AoPhysicalDimension
+*    AoQuantity
+*    AoQuantityGroup
+*    AoSubmatrix
+*    AoSubTest
+*    AoTest
+*    AoTestDevice
+*    AoTestEquipment
+*    AoTestEquipmentPart
+*    AoTestSequence
+*    AoTestSequencePart
+*    AoUnit
+*    AoUnitGroup
+*    AoUnitUnderTest
+*    AoUnitUnderTestPart
+*    AoUser
+*    AoUserGroup
+*
+* AO_INVALID_BASE_ELEMENT
+* The base element is invalid in this context. If this is an element of
+* type measurement, another element of this type may already exist.
+*
+* AO_INVALID_BUILDUP_FUNCTION
+* The specified build-up function is invalid.
+*
+* AO_INVALID_COLUMN
+* The specified column is invalid.
+*
+* AO_INVALID_COUNT
+* The specified number of points is invalid (probably negative).
+*
+* AO_INVALID_DATATYPE
+* The datatype is not allowed in the given context or it conflicts with
+* an existing datatype definition.
+* 
+* This error may also occur in non-typesave language bindings. To avoid
+* this error in all language bindings it is recommended to use always the
+* definitions of the enumeration "DataType".
+*
+* AO_INVALID_ELEMENT
+* The element is invalid in this context.
+*
+* AO_INVALID_LENGTH
+* The given length is invalid. Negative length values are not allowed.
+*
+* AO_INVALID_ORDINALNUMBER
+* The ordinal number is either already used or less than zero.
+*
+* AO_INVALID_RELATION
+* The relation is invalid. The related elements and the base relation do
+* not fit.
+*
+* AO_INVALID_RELATIONSHIP
+* This error may occur only in non-typesave language bindings. To avoid
+* this error in all language bindings it is recommended to use always the
+* definitions of the enumeration "Relationship".
+*
+* AO_INVALID_RELATION_RANGE
+* The specified relation range is invalid.
+*
+* AO_INVALID_RELATION_TYPE
+* This error may occur only in non-typesave language bindings. To avoid
+* this error in all language bindings it is recommended to use always the
+* definitions of the enumeration "RelationType".
+*
+* AO_INVALID_SET_TYPE
+* The specified set-type is invalid.
+*
+* AO_INVALID_SMATLINK
+* The submatrix link is invalid. Either submatrix 1 or 2 is not specified
+* or the ordinal number is missing when there is more than one SMatLink.
+*
+* AO_INVALID_SUBMATRIX
+* The specified submatrix is invalid.
+*
+* AO_INVALID_VALUEMATRIX_STRUCTURE
+* The server is unable to create the valuematrix due to the data of the
+* measurement
+*      - if there are no independent column
+*      - if there are different independent columns
+*      - if there are submatrices with more than one independent
+*        column.
+*      - ..
+*
+* AO_IS_BASE_ATTRIBUTE
+* The application attribute is already of a base attribute type. It can
+* not be changed. If this is required, the application attribute has to
+* be removed from its application element and re-created. This error may
+* occur if an application attribute derived from a base attribute
+* 
+*    a. shall be overwritten by another base
+*       attribute type.
+*    b. shall receive another datatype.
+*    c. shall receive another unique-flag.
+*    d. shall receive another obligatory-flag.
+*
+* AO_IS_BASE_RELATION
+* Properties of base relations may not be changed.
+*
+* AO_IS_MEASUREMENT_MATRIX
+* The matrix is a complex, generated matrix from a measurement not just a
+* simple submatrix. It is only allowed to modify submatrices but not the
+* composed measurement matrices.
+*
+* AO_MATH_ERROR
+* A computation error occurred. This can be an overflow, an underflow or
+* a division by zero.
+*
+* AO_MISSING_APPLICATION_ELEMENT
+* A required application element is missing.
+*
+* AO_MISSING_ATTRIBUTE
+* A required (obligatory) attribute is missing.
+*
+* AO_MISSING_RELATION
+* A required relation is missing.
+*
+* AO_MISSING_VALUE
+* An obligatory value is missing.
+*
+* AO_NOT_FOUND
+* The requested element was not found. This error occurs only in remove
+* or rename operations if the subject of the operation is not found. All
+* get- and list-methods return an empty list if the requested item is not
+* found.
+*
+* AO_NOT_IMPLEMENTED
+* The requested method is not yet implemented. This error is not allowed
+* to occur in a certified implementation. It is intended to allow partial
+* operational tests. during the development process.
+*
+* AO_NOT_UNIQUE
+* This error occurs if the instances of a property are required to be
+* unique.
+*
+* AO_NO_MEMORY
+* No more volatile memory available.
+*
+* AO_NO_PATH_TO_ELEMENT
+* A free-floating element was detected. No navigation path leads to this
+* element.
+*
+* AO_NO_SCALING_COLUMN
+* The column is no scaling column.
+*
+* AO_OPEN_MODE_NOT_SUPPORTED
+* The requested open mode is not supported. Valid open modes are "read"
+* and "write". Anything else is rejected with this error and no session
+* is created.
+*
+* AO_QUERY_INCOMPLETE
+* The execution of the query was not yet completed.
+*
+* AO_QUERY_INVALID
+* Some error in the query string or some inconsistency between the return
+* type of the query string and the  result type specified by parameter
+* "QueryResultType".
+*
+* AO_QUERY_INVALID_RESULTTYPE
+* The requested result type of the query do no metch with the previous
+* definition of the result type.
+*
+* AO_QUERY_PROCESSING_ERROR
+* Some error occured during the execution of the query.
+*
+* AO_QUERY_TIMEOUT_EXCEEDED
+* It was not possible to execute the query within the  time limit set by
+* parameter "MaxDuration".
+*
+* AO_QUERY_TYPE_INVALID
+* The server does not support the specified query language type.
+*
+* AO_SESSION_LIMIT_REACHED
+* The server does not accept any new connections. This error may occur if
+* the server reached the session limit for a distinct user or the total
+* number of sessions allowed.
+*
+* AO_SESSION_NOT_ACTIVE
+* The session is no longer active. This error occurs if an attempt is
+* made to call a method of a closed session. This error shall not be
+* confused with the error AO_CONNECTION_LOST.
+*
+* AO_SYSTEM_PROBLEM
+* The ODS server detected a problem while accessing operating system
+* ressources (e.g. the specified file does not exist, the drive is
+* currently not available, ...).
+*
+* AO_TRANSACTION_ALREADY_ACTIVE
+* There may be only one active transaction at one time. If this error
+* occurs there is already an active transaction. That transaction remains
+* active in case of this error.
+*
+* AO_TRANSACTION_NOT_ACTIVE
+* Write operation have to be done always in the context of a transaction.
+* This error occurs if no transaction is active during a write operation.
+*
+* AO_UNKNOWN_ERROR
+* Use the zero as unknown error to avoid confusing error messages if no
+* error code has been set.
+*
+* AO_UNKNOWN_UNIT
+* The unit is unknown.
+*/
+
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEvent.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEvent.java
new file mode 100644
index 0000000..6f180f3
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEvent.java
@@ -0,0 +1,52 @@
+package com.highqsoft.avalonCorbaNotification.notification;
+
+
+/**
+* com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEvent.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/AvalonEvent.idl
+* Freitag, 5. August 2016 09:43 Uhr MESZ
+*/
+
+public final class AvalonNotificationCorbaEvent implements org.omg.CORBA.portable.IDLEntity
+{
+
+  /**
+  * The mode of the event.
+  */
+  public short mode = (short)0;
+
+  /**
+  * The Id of the application element.
+  */
+  public org.asam.ods.T_LONGLONG aeId = null;
+
+  /**
+  * The Id of the instance.
+  */
+  public org.asam.ods.T_LONGLONG ieId = null;
+
+  /**
+  * The Id of the AoUser instance.
+  */
+  public org.asam.ods.T_LONGLONG userId = null;
+
+  /**
+  * The timestamp of the event.
+  */
+  public String timestamp = null;
+
+  public AvalonNotificationCorbaEvent ()
+  {
+  } // ctor
+
+  public AvalonNotificationCorbaEvent (short _mode, org.asam.ods.T_LONGLONG _aeId, org.asam.ods.T_LONGLONG _ieId, org.asam.ods.T_LONGLONG _userId, String _timestamp)
+  {
+    mode = _mode;
+    aeId = _aeId;
+    ieId = _ieId;
+    userId = _userId;
+    timestamp = _timestamp;
+  } // ctor
+
+} // class AvalonNotificationCorbaEvent
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHelper.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHelper.java
new file mode 100644
index 0000000..16cb18a
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHelper.java
@@ -0,0 +1,103 @@
+package com.highqsoft.avalonCorbaNotification.notification;
+
+
+/**
+* com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHelper.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/AvalonEvent.idl
+* Freitag, 5. August 2016 09:43 Uhr MESZ
+*/
+
+abstract public class AvalonNotificationCorbaEventHelper
+{
+  private static String  _id = "IDL:com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEvent:1.0";
+
+  public static void insert (org.omg.CORBA.Any a, com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent that)
+  {
+    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
+    a.type (type ());
+    write (out, that);
+    a.read_value (out.create_input_stream (), type ());
+  }
+
+  public static com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent extract (org.omg.CORBA.Any a)
+  {
+    return read (a.create_input_stream ());
+  }
+
+  private static org.omg.CORBA.TypeCode __typeCode = null;
+  private static boolean __active = false;
+  synchronized public static org.omg.CORBA.TypeCode type ()
+  {
+    if (__typeCode == null)
+    {
+      synchronized (org.omg.CORBA.TypeCode.class)
+      {
+        if (__typeCode == null)
+        {
+          if (__active)
+          {
+            return org.omg.CORBA.ORB.init().create_recursive_tc ( _id );
+          }
+          __active = true;
+          org.omg.CORBA.StructMember[] _members0 = new org.omg.CORBA.StructMember [5];
+          org.omg.CORBA.TypeCode _tcOf_members0 = null;
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().get_primitive_tc (org.omg.CORBA.TCKind.tk_short);
+          _members0[0] = new org.omg.CORBA.StructMember (
+            "mode",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = org.asam.ods.T_LONGLONGHelper.type ();
+          _members0[1] = new org.omg.CORBA.StructMember (
+            "aeId",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = org.asam.ods.T_LONGLONGHelper.type ();
+          _members0[2] = new org.omg.CORBA.StructMember (
+            "ieId",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = org.asam.ods.T_LONGLONGHelper.type ();
+          _members0[3] = new org.omg.CORBA.StructMember (
+            "userId",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_string_tc (0);
+          _members0[4] = new org.omg.CORBA.StructMember (
+            "timestamp",
+            _tcOf_members0,
+            null);
+          __typeCode = org.omg.CORBA.ORB.init ().create_struct_tc (com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEventHelper.id (), "AvalonNotificationCorbaEvent", _members0);
+          __active = false;
+        }
+      }
+    }
+    return __typeCode;
+  }
+
+  public static String id ()
+  {
+    return _id;
+  }
+
+  public static com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent read (org.omg.CORBA.portable.InputStream istream)
+  {
+    com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent value = new com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent ();
+    value.mode = istream.read_short ();
+    value.aeId = org.asam.ods.T_LONGLONGHelper.read (istream);
+    value.ieId = org.asam.ods.T_LONGLONGHelper.read (istream);
+    value.userId = org.asam.ods.T_LONGLONGHelper.read (istream);
+    value.timestamp = istream.read_string ();
+    return value;
+  }
+
+  public static void write (org.omg.CORBA.portable.OutputStream ostream, com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent value)
+  {
+    ostream.write_short (value.mode);
+    org.asam.ods.T_LONGLONGHelper.write (ostream, value.aeId);
+    org.asam.ods.T_LONGLONGHelper.write (ostream, value.ieId);
+    org.asam.ods.T_LONGLONGHelper.write (ostream, value.userId);
+    ostream.write_string (value.timestamp);
+  }
+
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHolder.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHolder.java
new file mode 100644
index 0000000..fbed469
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHolder.java
@@ -0,0 +1,38 @@
+package com.highqsoft.avalonCorbaNotification.notification;
+
+/**
+* com/highqsoft/avalonCorbaNotification/notification/AvalonNotificationCorbaEventHolder.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/AvalonEvent.idl
+* Freitag, 5. August 2016 09:43 Uhr MESZ
+*/
+
+public final class AvalonNotificationCorbaEventHolder implements org.omg.CORBA.portable.Streamable
+{
+  public com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent value = null;
+
+  public AvalonNotificationCorbaEventHolder ()
+  {
+  }
+
+  public AvalonNotificationCorbaEventHolder (com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEvent initialValue)
+  {
+    value = initialValue;
+  }
+
+  public void _read (org.omg.CORBA.portable.InputStream i)
+  {
+    value = com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEventHelper.read (i);
+  }
+
+  public void _write (org.omg.CORBA.portable.OutputStream o)
+  {
+    com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEventHelper.write (o, value);
+  }
+
+  public org.omg.CORBA.TypeCode _type ()
+  {
+    return com.highqsoft.avalonCorbaNotification.notification.AvalonNotificationCorbaEventHelper.type ();
+  }
+
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_DELETE.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_DELETE.java
new file mode 100644
index 0000000..9e91cca
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_DELETE.java
@@ -0,0 +1,18 @@
+package com.highqsoft.avalonCorbaNotification.notification;
+
+
+/**
+* com/highqsoft/avalonCorbaNotification/notification/MODE_DELETE.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/AvalonEvent.idl
+* Freitag, 5. August 2016 09:43 Uhr MESZ
+*/
+
+public interface MODE_DELETE
+{
+
+  /**
+  * The value of the mode field in the event when a delete is registered.
+  */
+  public static final short value = (short)(3);
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_INSERT.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_INSERT.java
new file mode 100644
index 0000000..36a86e6
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_INSERT.java
@@ -0,0 +1,18 @@
+package com.highqsoft.avalonCorbaNotification.notification;
+
+
+/**
+* com/highqsoft/avalonCorbaNotification/notification/MODE_INSERT.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/AvalonEvent.idl
+* Freitag, 5. August 2016 09:43 Uhr MESZ
+*/
+
+public interface MODE_INSERT
+{
+
+  /**
+  * The value of the mode field in the event when an insert is registered.
+  */
+  public static final short value = (short)(1);
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_MODIFYRIGHTS.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_MODIFYRIGHTS.java
new file mode 100644
index 0000000..4d48ccd
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_MODIFYRIGHTS.java
@@ -0,0 +1,18 @@
+package com.highqsoft.avalonCorbaNotification.notification;
+
+
+/**
+* com/highqsoft/avalonCorbaNotification/notification/MODE_MODIFYRIGHTS.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/AvalonEvent.idl
+* Freitag, 5. August 2016 09:43 Uhr MESZ
+*/
+
+public interface MODE_MODIFYRIGHTS
+{
+
+  /**
+  * The value of the mode field in the event when a modifyrights is registered.
+  */
+  public static final short value = (short)(4);
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_REPLACE.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_REPLACE.java
new file mode 100644
index 0000000..dc121c2
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/avalonCorbaNotification/notification/MODE_REPLACE.java
@@ -0,0 +1,18 @@
+package com.highqsoft.avalonCorbaNotification.notification;
+
+
+/**
+* com/highqsoft/avalonCorbaNotification/notification/MODE_REPLACE.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/AvalonEvent.idl
+* Freitag, 5. August 2016 09:43 Uhr MESZ
+*/
+
+public interface MODE_REPLACE
+{
+
+  /**
+  * The value of the mode field in the event when a replace is registered.
+  */
+  public static final short value = (short)(2);
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerException.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerException.java
new file mode 100644
index 0000000..229f144
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerException.java
@@ -0,0 +1,39 @@
+package com.highqsoft.corbafileserver.generated;
+
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerException.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+public final class CORBAFileServerException extends org.omg.CORBA.UserException
+{
+  public com.highqsoft.corbafileserver.generated.ErrorCode errCode = null;
+  public com.highqsoft.corbafileserver.generated.SeverityFlag sevFlag = null;
+  public String reason = null;
+
+  public CORBAFileServerException ()
+  {
+    super(CORBAFileServerExceptionHelper.id());
+  } // ctor
+
+  public CORBAFileServerException (com.highqsoft.corbafileserver.generated.ErrorCode _errCode, com.highqsoft.corbafileserver.generated.SeverityFlag _sevFlag, String _reason)
+  {
+    super(CORBAFileServerExceptionHelper.id());
+    errCode = _errCode;
+    sevFlag = _sevFlag;
+    reason = _reason;
+  } // ctor
+
+
+  public CORBAFileServerException (String $reason, com.highqsoft.corbafileserver.generated.ErrorCode _errCode, com.highqsoft.corbafileserver.generated.SeverityFlag _sevFlag, String _reason)
+  {
+    super(CORBAFileServerExceptionHelper.id() + "  " + $reason);
+    errCode = _errCode;
+    sevFlag = _sevFlag;
+    reason = _reason;
+  } // ctor
+
+} // class CORBAFileServerException
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHelper.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHelper.java
new file mode 100644
index 0000000..c0c8e0f
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHelper.java
@@ -0,0 +1,93 @@
+package com.highqsoft.corbafileserver.generated;
+
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHelper.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+abstract public class CORBAFileServerExceptionHelper
+{
+  private static String  _id = "IDL:com/highqsoft/corbafileserver/generated/CORBAFileServerException:1.0";
+
+  public static void insert (org.omg.CORBA.Any a, com.highqsoft.corbafileserver.generated.CORBAFileServerException that)
+  {
+    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
+    a.type (type ());
+    write (out, that);
+    a.read_value (out.create_input_stream (), type ());
+  }
+
+  public static com.highqsoft.corbafileserver.generated.CORBAFileServerException extract (org.omg.CORBA.Any a)
+  {
+    return read (a.create_input_stream ());
+  }
+
+  private static org.omg.CORBA.TypeCode __typeCode = null;
+  private static boolean __active = false;
+  synchronized public static org.omg.CORBA.TypeCode type ()
+  {
+    if (__typeCode == null)
+    {
+      synchronized (org.omg.CORBA.TypeCode.class)
+      {
+        if (__typeCode == null)
+        {
+          if (__active)
+          {
+            return org.omg.CORBA.ORB.init().create_recursive_tc ( _id );
+          }
+          __active = true;
+          org.omg.CORBA.StructMember[] _members0 = new org.omg.CORBA.StructMember [3];
+          org.omg.CORBA.TypeCode _tcOf_members0 = null;
+          _tcOf_members0 = com.highqsoft.corbafileserver.generated.ErrorCodeHelper.type ();
+          _members0[0] = new org.omg.CORBA.StructMember (
+            "errCode",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = com.highqsoft.corbafileserver.generated.SeverityFlagHelper.type ();
+          _members0[1] = new org.omg.CORBA.StructMember (
+            "sevFlag",
+            _tcOf_members0,
+            null);
+          _tcOf_members0 = org.omg.CORBA.ORB.init ().create_string_tc (0);
+          _members0[2] = new org.omg.CORBA.StructMember (
+            "reason",
+            _tcOf_members0,
+            null);
+          __typeCode = org.omg.CORBA.ORB.init ().create_exception_tc (com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.id (), "CORBAFileServerException", _members0);
+          __active = false;
+        }
+      }
+    }
+    return __typeCode;
+  }
+
+  public static String id ()
+  {
+    return _id;
+  }
+
+  public static com.highqsoft.corbafileserver.generated.CORBAFileServerException read (org.omg.CORBA.portable.InputStream istream)
+  {
+    com.highqsoft.corbafileserver.generated.CORBAFileServerException value = new com.highqsoft.corbafileserver.generated.CORBAFileServerException ();
+    // read and discard the repository ID
+    istream.read_string ();
+    value.errCode = com.highqsoft.corbafileserver.generated.ErrorCodeHelper.read (istream);
+    value.sevFlag = com.highqsoft.corbafileserver.generated.SeverityFlagHelper.read (istream);
+    value.reason = istream.read_string ();
+    return value;
+  }
+
+  public static void write (org.omg.CORBA.portable.OutputStream ostream, com.highqsoft.corbafileserver.generated.CORBAFileServerException value)
+  {
+    // write the repository ID
+    ostream.write_string (id ());
+    com.highqsoft.corbafileserver.generated.ErrorCodeHelper.write (ostream, value.errCode);
+    com.highqsoft.corbafileserver.generated.SeverityFlagHelper.write (ostream, value.sevFlag);
+    ostream.write_string (value.reason);
+  }
+
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHolder.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHolder.java
new file mode 100644
index 0000000..0ace26a
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHolder.java
@@ -0,0 +1,38 @@
+package com.highqsoft.corbafileserver.generated;
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerExceptionHolder.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+public final class CORBAFileServerExceptionHolder implements org.omg.CORBA.portable.Streamable
+{
+  public com.highqsoft.corbafileserver.generated.CORBAFileServerException value = null;
+
+  public CORBAFileServerExceptionHolder ()
+  {
+  }
+
+  public CORBAFileServerExceptionHolder (com.highqsoft.corbafileserver.generated.CORBAFileServerException initialValue)
+  {
+    value = initialValue;
+  }
+
+  public void _read (org.omg.CORBA.portable.InputStream i)
+  {
+    value = com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.read (i);
+  }
+
+  public void _write (org.omg.CORBA.portable.OutputStream o)
+  {
+    com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (o, value);
+  }
+
+  public org.omg.CORBA.TypeCode _type ()
+  {
+    return com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.type ();
+  }
+
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIF.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIF.java
new file mode 100644
index 0000000..87ec4ef
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIF.java
@@ -0,0 +1,18 @@
+package com.highqsoft.corbafileserver.generated;
+
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerIF.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+public interface CORBAFileServerIF extends CORBAFileServerIFOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity 
+{
+
+  /*
+  	  * The version number of the IDL
+  	  */
+  public static final String INTERFACEVERSION = "1.3";
+} // interface CORBAFileServerIF
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFHelper.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFHelper.java
new file mode 100644
index 0000000..5944a7d
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFHelper.java
@@ -0,0 +1,85 @@
+package com.highqsoft.corbafileserver.generated;
+
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerIFHelper.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+abstract public class CORBAFileServerIFHelper
+{
+  private static String  _id = "IDL:com/highqsoft/corbafileserver/generated/CORBAFileServerIF:1.0";
+
+  public static void insert (org.omg.CORBA.Any a, com.highqsoft.corbafileserver.generated.CORBAFileServerIF that)
+  {
+    org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
+    a.type (type ());
+    write (out, that);
+    a.read_value (out.create_input_stream (), type ());
+  }
+
+  public static com.highqsoft.corbafileserver.generated.CORBAFileServerIF extract (org.omg.CORBA.Any a)
+  {
+    return read (a.create_input_stream ());
+  }
+
+  private static org.omg.CORBA.TypeCode __typeCode = null;
+  synchronized public static org.omg.CORBA.TypeCode type ()
+  {
+    if (__typeCode == null)
+    {
+      __typeCode = org.omg.CORBA.ORB.init ().create_interface_tc (com.highqsoft.corbafileserver.generated.CORBAFileServerIFHelper.id (), "CORBAFileServerIF");
+    }
+    return __typeCode;
+  }
+
+  public static String id ()
+  {
+    return _id;
+  }
+
+  public static com.highqsoft.corbafileserver.generated.CORBAFileServerIF read (org.omg.CORBA.portable.InputStream istream)
+  {
+    return narrow (istream.read_Object (_CORBAFileServerIFStub.class));
+  }
+
+  public static void write (org.omg.CORBA.portable.OutputStream ostream, com.highqsoft.corbafileserver.generated.CORBAFileServerIF value)
+  {
+    ostream.write_Object ((org.omg.CORBA.Object) value);
+  }
+
+  public static com.highqsoft.corbafileserver.generated.CORBAFileServerIF narrow (org.omg.CORBA.Object obj)
+  {
+    if (obj == null)
+      return null;
+    else if (obj instanceof com.highqsoft.corbafileserver.generated.CORBAFileServerIF)
+      return (com.highqsoft.corbafileserver.generated.CORBAFileServerIF)obj;
+    else if (!obj._is_a (id ()))
+      throw new org.omg.CORBA.BAD_PARAM ();
+    else
+    {
+      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
+      com.highqsoft.corbafileserver.generated._CORBAFileServerIFStub stub = new com.highqsoft.corbafileserver.generated._CORBAFileServerIFStub ();
+      stub._set_delegate(delegate);
+      return stub;
+    }
+  }
+
+  public static com.highqsoft.corbafileserver.generated.CORBAFileServerIF unchecked_narrow (org.omg.CORBA.Object obj)
+  {
+    if (obj == null)
+      return null;
+    else if (obj instanceof com.highqsoft.corbafileserver.generated.CORBAFileServerIF)
+      return (com.highqsoft.corbafileserver.generated.CORBAFileServerIF)obj;
+    else
+    {
+      org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
+      com.highqsoft.corbafileserver.generated._CORBAFileServerIFStub stub = new com.highqsoft.corbafileserver.generated._CORBAFileServerIFStub ();
+      stub._set_delegate(delegate);
+      return stub;
+    }
+  }
+
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFHolder.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFHolder.java
new file mode 100644
index 0000000..6acc46b
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFHolder.java
@@ -0,0 +1,38 @@
+package com.highqsoft.corbafileserver.generated;
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerIFHolder.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+public final class CORBAFileServerIFHolder implements org.omg.CORBA.portable.Streamable
+{
+  public com.highqsoft.corbafileserver.generated.CORBAFileServerIF value = null;
+
+  public CORBAFileServerIFHolder ()
+  {
+  }
+
+  public CORBAFileServerIFHolder (com.highqsoft.corbafileserver.generated.CORBAFileServerIF initialValue)
+  {
+    value = initialValue;
+  }
+
+  public void _read (org.omg.CORBA.portable.InputStream i)
+  {
+    value = com.highqsoft.corbafileserver.generated.CORBAFileServerIFHelper.read (i);
+  }
+
+  public void _write (org.omg.CORBA.portable.OutputStream o)
+  {
+    com.highqsoft.corbafileserver.generated.CORBAFileServerIFHelper.write (o, value);
+  }
+
+  public org.omg.CORBA.TypeCode _type ()
+  {
+    return com.highqsoft.corbafileserver.generated.CORBAFileServerIFHelper.type ();
+  }
+
+}
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFOperations.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFOperations.java
new file mode 100644
index 0000000..b5f74a7
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFOperations.java
@@ -0,0 +1,496 @@
+package com.highqsoft.corbafileserver.generated;
+
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerIFOperations.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+public interface CORBAFileServerIFOperations 
+{
+
+  /**
+        * Save the data associated with the given intput stream.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  subDir an alternative sub directory, that can be specified,
+        *                if the filename should not used to determine the destination folder.
+        * @param  stream the input stream, ready to read by the server.
+        * @return the url string of the created file.
+        */
+  String save (org.asam.ods.AoSession aoSess, String name, String subDir, com.highqsoft.corbafileserver.generated.InputStreamIF stream) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Save the data associated with the given intput stream.
+        * Specify the ApplicationElement id and the InstanceElement id
+        * of the component that holds the external reference.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  subDir an alternative sub directory, that can be specified,
+        *                if the filename should not used to determine the destination folder.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        * @param  stream the input stream, ready to read by the server.
+        * @return the url string of the created file.
+        */
+  String saveForInstance (org.asam.ods.AoSession aoSess, String name, String subDir, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid, com.highqsoft.corbafileserver.generated.InputStreamIF stream) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Save the data associated with the given intput stream.
+        * Specify the name of an applciation element and the name of the instance element
+        * that holds the external reference
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  subDir an alternative sub directory, that can be specified,
+        *                if the filename should not used to determine the destination folder.
+        * @param  aeName the application element name.
+        * @param  ieName the instance element name.
+        * @param  stream the input stream, ready to read by the server.
+        * @return the url string of the created file.
+        */
+  String saveForInstanceName (org.asam.ods.AoSession aoSess, String name, String subDir, String aeName, String ieName, com.highqsoft.corbafileserver.generated.InputStreamIF stream) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Delete the data associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        */
+  void delete (org.asam.ods.AoSession aoSess, String name) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Move the data associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  urlo the url of the file.
+        */
+  void move (org.asam.ods.AoSession aoSess, String url) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Delete the data associated with the given name.
+        * Specify the ApplicationElement id and the InstanceElement id
+        * of the component that holds the external reference.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  url the url of the file.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        */
+  void deleteForInstance (org.asam.ods.AoSession aoSess, String url, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Move the data associated with the given name.
+        * Specify the ApplicationElement id and the InstanceElement id
+        * of the component that holds the external reference.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        */
+  void moveForInstance (org.asam.ods.AoSession aoSess, String name, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+         * Get the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the name of the file.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         */
+  void getBySocket (org.asam.ods.AoSession aoSess, String name, String host, int aPort) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+         * Get the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the url specification of the file.
+         * @param  aid the application element id.
+         * @param  iid the instance element id.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         */
+  void getForInstanceBySocket (org.asam.ods.AoSession aoSess, String name, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid, String host, int aPort) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+         * Save the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the name of the file.
+         * @param  subDir an alternative sub directory, that can be specified,
+         *                if the filename should not used to determine the destination folder.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         * @return the url string of the created file.
+         */
+  String saveBySocket (org.asam.ods.AoSession aoSess, String name, String subDir, String host, int aPort) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+         * Save the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the name of the file.
+         * @param  subDir an alternative sub directory, that can be specified,
+         *                if the filename should not used to determine the destination folder.
+         * @param  aid the application element id.
+         * @param  iid the instance element id.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         * @return the url string of the created file.
+         */
+  String saveForInstanceBySocket (org.asam.ods.AoSession aoSess, String name, String subDir, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid, String host, int aPort) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+         * Save the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the name of the file.
+         * @param  subDir an alternative sub directory, that can be specified,
+         *                if the filename should not used to determine the destination folder.
+         * @param  aeName the application element name.
+         * @param  ieName the instance element name.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         * @return the url string of the created file.
+         */
+  String saveForInstanceNameBySocket (org.asam.ods.AoSession aoSess, String name, String subDir, String aeName, String ieName, String host, int aPort) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Read the data associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  stream the input stream, ready to read by the server.
+        */
+  com.highqsoft.corbafileserver.generated.InputStreamIF read (org.asam.ods.AoSession aoSess, String name) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Read the data associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        * @param  stream the input stream, ready to read by the server.
+        */
+  com.highqsoft.corbafileserver.generated.InputStreamIF readForInstance (org.asam.ods.AoSession aoSess, String name, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        *  Get size of the file associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  size the size of the input stream.
+        */
+  long getSize (org.asam.ods.AoSession aoSess, String name) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        *  Get size of the file associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        * @param  size the size of the input stream.
+        */
+  long getSizeForInstance (org.asam.ods.AoSession aoSess, String name, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * This method can be called by the client when the server should be start a termination process.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  parameter the parameter string. The content depends on the
+        *         server side terminate implementation.
+        */
+  void terminate (org.asam.ods.AoSession aoSess, String name, String parameter) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * This method can be called by the client when the server should be start a termination process.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        * @param  parameter the parameter string. The content depends on the
+        *         server side terminate implementation.
+        */
+  void terminateForInstance (org.asam.ods.AoSession aoSess, String name, org.asam.ods.T_LONGLONG aid, org.asam.ods.T_LONGLONG iid, String parameter) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Get the name of the host where the server is running
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @return the hostname
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        */
+  String getHostname (org.asam.ods.AoSession aoSess) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Get a context variable.
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param key the keyword of the context value.
+        * @return the context value
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY,
+        *    FILESERVER_NOT_FOUND
+        */
+  String getContext (org.asam.ods.AoSession aoSess, String key) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Set a context variable.
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param key the keyword of the context value.
+        * @param value the context value.
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        */
+  void setContext (org.asam.ods.AoSession aoSess, String key, String value) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Remove a context variable.
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param key the keyword of the context value.
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        */
+  void removeContext (org.asam.ods.AoSession aoSess, String key) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * List all context keywords.
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @return a sequence of strings.
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        */
+  String[] listContext (org.asam.ods.AoSession aoSess) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Get the version of the CorbaFileServerIF.
+        * Returns getVersion of CorbaFileServer.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @return  The interface version of the CorbaFileServerIF.
+        *
+        */
+  String getInterfaceVersion () throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+
+  /**
+        * Returns an array of long values representing the length
+        * of the files that were provided in the String array.
+        * The order of the long values must match with the order
+        * of the filenames.
+        *
+        * @param aoSess the aoSession of the caller
+        * @param names the String array of filenames for 
+        *              which to get the sizes
+        * @return an Array of long values containing the file sizes
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        *
+        */
+  long[] getSizes (org.asam.ods.AoSession aoSess, String[] names) throws com.highqsoft.corbafileserver.generated.CORBAFileServerException;
+} // interface CORBAFileServerIFOperations
diff --git a/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFPOA.java b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFPOA.java
new file mode 100644
index 0000000..d1c770a
--- /dev/null
+++ b/org.eclipse.mdm.api.odsadapter/src/main/java/com/highqsoft/corbafileserver/generated/CORBAFileServerIFPOA.java
@@ -0,0 +1,963 @@
+package com.highqsoft.corbafileserver.generated;
+
+
+/**
+* com/highqsoft/corbafileserver/generated/CORBAFileServerIFPOA.java .
+* Generated by the IDL-to-Java compiler (portable), version "3.2"
+* from src/main/idl/corbafileserver.idl
+* Donnerstag, 16. Juni 2016 10:30 Uhr MESZ
+*/
+
+public abstract class CORBAFileServerIFPOA extends org.omg.PortableServer.Servant
+ implements com.highqsoft.corbafileserver.generated.CORBAFileServerIFOperations, org.omg.CORBA.portable.InvokeHandler
+{
+
+  // Constructors
+
+  private static java.util.Hashtable _methods = new java.util.Hashtable ();
+  static
+  {
+    _methods.put ("save", new java.lang.Integer (0));
+    _methods.put ("saveForInstance", new java.lang.Integer (1));
+    _methods.put ("saveForInstanceName", new java.lang.Integer (2));
+    _methods.put ("delete", new java.lang.Integer (3));
+    _methods.put ("move", new java.lang.Integer (4));
+    _methods.put ("deleteForInstance", new java.lang.Integer (5));
+    _methods.put ("moveForInstance", new java.lang.Integer (6));
+    _methods.put ("getBySocket", new java.lang.Integer (7));
+    _methods.put ("getForInstanceBySocket", new java.lang.Integer (8));
+    _methods.put ("saveBySocket", new java.lang.Integer (9));
+    _methods.put ("saveForInstanceBySocket", new java.lang.Integer (10));
+    _methods.put ("saveForInstanceNameBySocket", new java.lang.Integer (11));
+    _methods.put ("read", new java.lang.Integer (12));
+    _methods.put ("readForInstance", new java.lang.Integer (13));
+    _methods.put ("getSize", new java.lang.Integer (14));
+    _methods.put ("getSizeForInstance", new java.lang.Integer (15));
+    _methods.put ("terminate", new java.lang.Integer (16));
+    _methods.put ("terminateForInstance", new java.lang.Integer (17));
+    _methods.put ("getHostname", new java.lang.Integer (18));
+    _methods.put ("getContext", new java.lang.Integer (19));
+    _methods.put ("setContext", new java.lang.Integer (20));
+    _methods.put ("removeContext", new java.lang.Integer (21));
+    _methods.put ("listContext", new java.lang.Integer (22));
+    _methods.put ("getInterfaceVersion", new java.lang.Integer (23));
+    _methods.put ("getSizes", new java.lang.Integer (24));
+  }
+
+  public org.omg.CORBA.portable.OutputStream _invoke (String $method,
+                                org.omg.CORBA.portable.InputStream in,
+                                org.omg.CORBA.portable.ResponseHandler $rh)
+  {
+    org.omg.CORBA.portable.OutputStream out = null;
+    java.lang.Integer __method = (java.lang.Integer)_methods.get ($method);
+    if (__method == null)
+      throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);
+
+    switch (__method.intValue ())
+    {
+
+  /**
+        * Save the data associated with the given intput stream.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  subDir an alternative sub directory, that can be specified,
+        *                if the filename should not used to determine the destination folder.
+        * @param  stream the input stream, ready to read by the server.
+        * @return the url string of the created file.
+        */
+       case 0:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/save
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           String subDir = in.read_string ();
+           com.highqsoft.corbafileserver.generated.InputStreamIF stream = com.highqsoft.corbafileserver.generated.InputStreamIFHelper.read (in);
+           String $result = null;
+           $result = this.save (aoSess, name, subDir, stream);
+           out = $rh.createReply();
+           out.write_string ($result);
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+        * Save the data associated with the given intput stream.
+        * Specify the ApplicationElement id and the InstanceElement id
+        * of the component that holds the external reference.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  subDir an alternative sub directory, that can be specified,
+        *                if the filename should not used to determine the destination folder.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        * @param  stream the input stream, ready to read by the server.
+        * @return the url string of the created file.
+        */
+       case 1:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/saveForInstance
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           String subDir = in.read_string ();
+           org.asam.ods.T_LONGLONG aid = org.asam.ods.T_LONGLONGHelper.read (in);
+           org.asam.ods.T_LONGLONG iid = org.asam.ods.T_LONGLONGHelper.read (in);
+           com.highqsoft.corbafileserver.generated.InputStreamIF stream = com.highqsoft.corbafileserver.generated.InputStreamIFHelper.read (in);
+           String $result = null;
+           $result = this.saveForInstance (aoSess, name, subDir, aid, iid, stream);
+           out = $rh.createReply();
+           out.write_string ($result);
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+        * Save the data associated with the given intput stream.
+        * Specify the name of an applciation element and the name of the instance element
+        * that holds the external reference
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  subDir an alternative sub directory, that can be specified,
+        *                if the filename should not used to determine the destination folder.
+        * @param  aeName the application element name.
+        * @param  ieName the instance element name.
+        * @param  stream the input stream, ready to read by the server.
+        * @return the url string of the created file.
+        */
+       case 2:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/saveForInstanceName
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           String subDir = in.read_string ();
+           String aeName = in.read_string ();
+           String ieName = in.read_string ();
+           com.highqsoft.corbafileserver.generated.InputStreamIF stream = com.highqsoft.corbafileserver.generated.InputStreamIFHelper.read (in);
+           String $result = null;
+           $result = this.saveForInstanceName (aoSess, name, subDir, aeName, ieName, stream);
+           out = $rh.createReply();
+           out.write_string ($result);
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+        * Delete the data associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        */
+       case 3:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/delete
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           this.delete (aoSess, name);
+           out = $rh.createReply();
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+        * Move the data associated with the given name.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  urlo the url of the file.
+        */
+       case 4:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/move
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String url = in.read_string ();
+           this.move (aoSess, url);
+           out = $rh.createReply();
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+        * Delete the data associated with the given name.
+        * Specify the ApplicationElement id and the InstanceElement id
+        * of the component that holds the external reference.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  url the url of the file.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        */
+       case 5:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/deleteForInstance
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String url = in.read_string ();
+           org.asam.ods.T_LONGLONG aid = org.asam.ods.T_LONGLONGHelper.read (in);
+           org.asam.ods.T_LONGLONG iid = org.asam.ods.T_LONGLONGHelper.read (in);
+           this.deleteForInstance (aoSess, url, aid, iid);
+           out = $rh.createReply();
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+        * Move the data associated with the given name.
+        * Specify the ApplicationElement id and the InstanceElement id
+        * of the component that holds the external reference.
+        *
+        * @throws CORBAFileServerException
+        * with the following possible error codes:
+        *    FILESERVER_CONNECT_FAILED
+        *    FILESERVER_BAD_PARAMETER
+        *    FILESERVER_CONNECTION_LOST
+        *    FILESERVER_IMPLEMENTATION_PROBLEM
+        *    FILESERVER_NOT_IMPLEMENTED
+        *    FILESERVER_NO_MEMORY
+        *
+        * @param  aoSess the ASAM ODS session.
+        * @param  name the name of the file.
+        * @param  aid the application element id.
+        * @param  iid the instance element id.
+        */
+       case 6:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/moveForInstance
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           org.asam.ods.T_LONGLONG aid = org.asam.ods.T_LONGLONGHelper.read (in);
+           org.asam.ods.T_LONGLONG iid = org.asam.ods.T_LONGLONGHelper.read (in);
+           this.moveForInstance (aoSess, name, aid, iid);
+           out = $rh.createReply();
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+         * Get the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the name of the file.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         */
+       case 7:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/getBySocket
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           String host = in.read_string ();
+           int aPort = in.read_long ();
+           this.getBySocket (aoSess, name, host, aPort);
+           out = $rh.createReply();
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+         * Get the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the url specification of the file.
+         * @param  aid the application element id.
+         * @param  iid the instance element id.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         */
+       case 8:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/getForInstanceBySocket
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           org.asam.ods.T_LONGLONG aid = org.asam.ods.T_LONGLONGHelper.read (in);
+           org.asam.ods.T_LONGLONG iid = org.asam.ods.T_LONGLONGHelper.read (in);
+           String host = in.read_string ();
+           int aPort = in.read_long ();
+           this.getForInstanceBySocket (aoSess, name, aid, iid, host, aPort);
+           out = $rh.createReply();
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+         * Save the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the name of the file.
+         * @param  subDir an alternative sub directory, that can be specified,
+         *                if the filename should not used to determine the destination folder.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         * @return the url string of the created file.
+         */
+       case 9:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/saveBySocket
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           String subDir = in.read_string ();
+           String host = in.read_string ();
+           int aPort = in.read_long ();
+           String $result = null;
+           $result = this.saveBySocket (aoSess, name, subDir, host, aPort);
+           out = $rh.createReply();
+           out.write_string ($result);
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+         * Save the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY
+         *
+         * @param  aoSess the ASAM ODS session.
+         * @param  name the name of the file.
+         * @param  subDir an alternative sub directory, that can be specified,
+         *                if the filename should not used to determine the destination folder.
+         * @param  aid the application element id.
+         * @param  iid the instance element id.
+         * @param  host the hostname for the socket connection.
+         * @param  port the port for the socket connection.
+         * @return the url string of the created file.
+         */
+       case 10:  // com/highqsoft/corbafileserver/generated/CORBAFileServerIF/saveForInstanceBySocket
+       {
+         try {
+           org.asam.ods.AoSession aoSess = org.asam.ods.AoSessionHelper.read (in);
+           String name = in.read_string ();
+           String subDir = in.read_string ();
+           org.asam.ods.T_LONGLONG aid = org.asam.ods.T_LONGLONGHelper.read (in);
+           org.asam.ods.T_LONGLONG iid = org.asam.ods.T_LONGLONGHelper.read (in);
+           String host = in.read_string ();
+           int aPort = in.read_long ();
+           String $result = null;
+           $result = this.saveForInstanceBySocket (aoSess, name, subDir, aid, iid, host, aPort);
+           out = $rh.createReply();
+           out.write_string ($result);
+         } catch (com.highqsoft.corbafileserver.generated.CORBAFileServerException $ex) {
+           out = $rh.createExceptionReply ();
+           com.highqsoft.corbafileserver.generated.CORBAFileServerExceptionHelper.write (out, $ex);
+         }
+         break;
+       }
+
+
+  /**
+         * Save the data using a socket.
+         *
+         * @throws CORBAFileServerException
+         * with the following possible error codes:
+         *    FILESERVER_CONNECT_FAILED
+         *    FILESERVER_BAD_PARAMETER
+         *    FILESERVER_CONNECTION_LOST
+         *    FILESERVER_IMPLEMENTATION_PROBLEM
+         *    FILESERVER_NOT_IMPLEMENTED
+         *    FILESERVER_NO_MEMORY