# Notices for Eclipse MDM|BL, openMDM(R) Eclipse Working Groupo

This content is produced and maintained by the Eclipse MDM|BL project.

* 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. 
Eclipse, and the Eclipse Logo are registered trademarks 
of the Eclipse Foundation.

## Copyright

All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.

## Declared Project Licenses

This program and the accompanying materials are made available under the terms
of the Eclipse Public License v. 1.0 which is available at
http://www.eclipse.org/legal/epl-v10.html.

SPDX-License-Identifier: EPL-1.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.
org.eclipse.mdm.realms.git	        - A GlassFish realm using ODS authentication.


## 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.4.jar (3.4)
    * 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

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

javax.annotation-api-1.2.jar(1.2)
    * 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-server-2.23.2.jar (2.23.2)
    * 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

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

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

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

@angular/common@2.4.8
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@angular/compiler@2.4.8 
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@angular/core@2.4.8
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@angular/forms@2.4.8
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@angular/http@2.4.8
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@angular/platform-browser-dynamic@2.4.8
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@angular/platform-browser@2.4.8
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@angular/router@3.4.8
    * License: MIT
    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
    * Project: https://github.com/angular/angular
    * Source:  https://github.com/angular/angular

@types/file-saver@0.0.0
    * License: MIT
    * Licence Path: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
    * Project: https://github.com/DefinitelyTyped/DefinitelyTyped
    * Source:  https://github.com/DefinitelyTyped/DefinitelyTyped

bootstrap@3.3.7
    * License: MIT
    * Licence Path: https://github.com/twbs/bootstrap/raw/master/LICENSE
    * Project: https://github.com/twbs/bootstrap
    * 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.4.1
    * 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

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

moment@2.17.1
    * License: MIT
    * Licence Path: https://github.com/moment/moment/raw/master/LICENSE
    * Project: https://github.com/moment/moment
    * Source:  https://github.com/moment/moment
    
ngx-bootstrap@1.9.1
    * License: MIT
    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/development/LICENSE
    * Project: https://valor-software.com/ngx-bootstrap
    * Source:  https://github.com/valor-software/ngx-bootstrap    

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

primeng@2.0.5
    * License: MIT
    * Licence Path: https://github.com/primefaces/primeng/raw/master/LICENSE.md
    * Project: https://github.com/primefaces/primeng
    * Source:  https://github.com/primefaces/primeng

reflect-metadata@0.1.3
    * License: Apache-2.0
    * Project: https://github.com/rbuckton/ReflectDecorators
    * Source:  https://github.com/rbuckton/ReflectDecorators

rxjs@5.1.0
    * License: Apache-2.0
    * Project: https://github.com/ReactiveX/RxJS
    * Source:  https://github.com/ReactiveX/RxJS

symbol-observable@1.2.0
    * License: MIT
    * Licence Path: https://github.com/blesh/symbol-observable/raw/master/license
    * Project: https://github.com/blesh/symbol-observable
    * Source:  https://github.com/blesh/symbol-observable

ts-helpers@1.1.1
    * License: MIT
    * Licence Path: https://github.com/ngParty/ts-helpers/raw/master/LICENSE
    * Project: https://github.com/ngParty/ts-helpers
    * Source:  https://github.com/ngParty/ts-helpers

zone.js@0.7.6
    * 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
    
ods530.idl
Permission of use:
From Hans-Georg Swolana, Chairman of the Board ASAM e.V.,
 Prof. Dr. Marcus Rieker, Member of the Board ASAM e.V.
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
Permission of use:
From Dr. Ralph Noerenberg
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. "

OMG Notification Service Specification Version: 1.1
The terms of use are defined in section "Freely Available And Available
Free" see: http://www.omg.org/gettingstarted/overview.htm

OMG Event Service Specification Version: 1.2
The terms of use are defined in section "Freely Available And Available
Free" see: http://www.omg.org/gettingstarted/overview.htm


## 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.
