tamaya-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anat...@apache.org
Subject [11/11] incubator-tamaya git commit: Initial import from GitHub. Added PGP public key.
Date Wed, 26 Nov 2014 18:07:16 GMT
Initial import from GitHub.
Added PGP public key.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/cf59ebbd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/cf59ebbd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/cf59ebbd

Branch: refs/heads/master
Commit: cf59ebbd1b4ac03fb366b49268fc57c1a00f5616
Parents: a712f69
Author: atsticks <atsticks@gmail.com>
Authored: Wed Nov 26 18:58:12 2014 +0100
Committer: atsticks <atsticks@gmail.com>
Committed: Wed Nov 26 18:58:13 2014 +0100

----------------------------------------------------------------------
 .gitignore                                      |    8 +
 DISCLAIMER                                      |   10 +
 LICENSE                                         |  202 ++++
 NOTICE                                          |   11 +
 api/.gitignore                                  |   16 +
 api/pom.xml                                     |  127 +++
 .../main/asciidoc/JavaConfigSpecification.adoc  |  659 +++++++++++
 api/src/main/asciidoc/images/Thumbs.db          |  Bin 0 -> 308224 bytes
 api/src/main/asciidoc/images/highlighter.png    |  Bin 0 -> 128142 bytes
 api/src/main/asciidoc/images/icons/README       |    5 +
 .../main/asciidoc/images/icons/callouts/1.png   |  Bin 0 -> 329 bytes
 .../main/asciidoc/images/icons/callouts/10.png  |  Bin 0 -> 361 bytes
 .../main/asciidoc/images/icons/callouts/11.png  |  Bin 0 -> 565 bytes
 .../main/asciidoc/images/icons/callouts/12.png  |  Bin 0 -> 617 bytes
 .../main/asciidoc/images/icons/callouts/13.png  |  Bin 0 -> 623 bytes
 .../main/asciidoc/images/icons/callouts/14.png  |  Bin 0 -> 411 bytes
 .../main/asciidoc/images/icons/callouts/15.png  |  Bin 0 -> 640 bytes
 .../main/asciidoc/images/icons/callouts/2.png   |  Bin 0 -> 353 bytes
 .../main/asciidoc/images/icons/callouts/3.png   |  Bin 0 -> 350 bytes
 .../main/asciidoc/images/icons/callouts/4.png   |  Bin 0 -> 345 bytes
 .../main/asciidoc/images/icons/callouts/5.png   |  Bin 0 -> 348 bytes
 .../main/asciidoc/images/icons/callouts/6.png   |  Bin 0 -> 355 bytes
 .../main/asciidoc/images/icons/callouts/7.png   |  Bin 0 -> 344 bytes
 .../main/asciidoc/images/icons/callouts/8.png   |  Bin 0 -> 357 bytes
 .../main/asciidoc/images/icons/callouts/9.png   |  Bin 0 -> 357 bytes
 api/src/main/asciidoc/images/icons/caution.png  |  Bin 0 -> 2734 bytes
 api/src/main/asciidoc/images/icons/example.png  |  Bin 0 -> 2599 bytes
 api/src/main/asciidoc/images/icons/home.png     |  Bin 0 -> 1340 bytes
 .../main/asciidoc/images/icons/important.png    |  Bin 0 -> 2980 bytes
 api/src/main/asciidoc/images/icons/next.png     |  Bin 0 -> 1302 bytes
 api/src/main/asciidoc/images/icons/note.png     |  Bin 0 -> 2494 bytes
 api/src/main/asciidoc/images/icons/prev.png     |  Bin 0 -> 1348 bytes
 api/src/main/asciidoc/images/icons/tip.png      |  Bin 0 -> 2718 bytes
 api/src/main/asciidoc/images/icons/up.png       |  Bin 0 -> 1320 bytes
 api/src/main/asciidoc/images/icons/warning.png  |  Bin 0 -> 3214 bytes
 api/src/main/asciidoc/images/smallnew.png       |  Bin 0 -> 292 bytes
 api/src/main/asciidoc/images/test.png           |  Bin 0 -> 2494 bytes
 api/src/main/asciidoc/tasks.adoc                |  399 +++++++
 .../java/org/apache/tamaya/ConfigChangeSet.java |  172 +++
 .../apache/tamaya/ConfigChangeSetBuilder.java   |  323 ++++++
 .../java/org/apache/tamaya/ConfigException.java |   44 +
 .../java/org/apache/tamaya/ConfigOperator.java  |   37 +
 .../java/org/apache/tamaya/ConfigQuery.java     |   37 +
 .../java/org/apache/tamaya/Configuration.java   |  376 ++++++
 .../org/apache/tamaya/ConfigurationManager.java |  161 +++
 .../java/org/apache/tamaya/Environment.java     |  167 +++
 .../org/apache/tamaya/EnvironmentManager.java   |  136 +++
 .../main/java/org/apache/tamaya/MetaInfo.java   |   69 ++
 .../java/org/apache/tamaya/MetaInfoBuilder.java |  162 +++
 .../java/org/apache/tamaya/PropertyAdapter.java |   34 +
 .../org/apache/tamaya/PropertyAdapters.java     |   93 ++
 .../org/apache/tamaya/PropertyProvider.java     |  115 ++
 api/src/main/java/org/apache/tamaya/Stage.java  |  111 ++
 .../java/org/apache/tamaya/StageSupplier.java   |   33 +
 api/src/main/java/org/apache/tamaya/Stages.java |  118 ++
 .../org/apache/tamaya/annot/ConfigChanged.java  |   33 +
 .../tamaya/annot/ConfiguredProperties.java      |   39 +
 .../apache/tamaya/annot/ConfiguredProperty.java |   38 +
 .../org/apache/tamaya/annot/DefaultAreas.java   |   39 +
 .../org/apache/tamaya/annot/DefaultValue.java   |   39 +
 .../org/apache/tamaya/annot/LoadPolicy.java     |   47 +
 .../org/apache/tamaya/annot/WithConfig.java     |   40 +
 .../apache/tamaya/annot/WithConfigOperator.java |   42 +
 .../org/apache/tamaya/annot/WithLoadPolicy.java |   35 +
 .../tamaya/annot/WithPropertyAdapter.java       |   42 +
 .../java/org/apache/tamaya/spi/Bootstrap.java   |  156 +++
 .../spi/ConfigurationManagerSingletonSpi.java   |  116 ++
 .../tamaya/spi/DefaultServiceProvider.java      |   87 ++
 .../spi/EnvironmentManagerSingletonSpi.java     |  113 ++
 .../spi/PropertyAdaptersSingletonSpi.java       |   63 +
 .../org/apache/tamaya/spi/ServiceProvider.java  |   57 +
 .../apache/tamaya/spi/StagesSingletonSpi.java   |   84 ++
 .../test/java/annottext/AnnotatedConfig.java    |   51 +
 .../java/annottext/AnnotatedFullConfig.java     |   52 +
 api/src/test/resources/META-INF/beans.xml       |    0
 ....tamaya.spi.ConfigurationManagerSingletonSpi |    1 +
 ...he.tamaya.spi.EnvironmentManagerSingletonSpi |    1 +
 ...ache.tamaya.spi.PropertyAdaptersSingletonSpi |    1 +
 core/.gitignore                                 |   16 +
 core/pom.xml                                    |  140 +++
 core/src/main/asciidoc/design.adoc              | 1077 ++++++++++++++++++
 .../core/config/AbstractConfiguration.java      |  128 +++
 .../tamaya/core/config/ConfigLocation.java      |  116 ++
 .../core/config/ConfigurationBuilder.java       |  153 +++
 .../core/config/ConfigurationDecorator.java     |  109 ++
 .../core/config/ConfigurationFormats.java       |  122 ++
 .../core/config/ConfigurationProducer.java      |   56 +
 .../config/ConfigurationProducerBuilder.java    |   94 ++
 .../tamaya/core/config/Configurations.java      |   43 +
 .../config/EnvPropertiesConfigProvider.java     |   50 +
 .../core/config/FreezedConfiguration.java       |   88 ++
 .../tamaya/core/config/MapConfiguration.java    |   44 +
 .../tamaya/core/config/MetaInfoEditor.java      |  134 +++
 .../core/config/PropertyChangeConsumer.java     |   50 +
 .../config/SystemPropertiesConfigProvider.java  |   50 +
 .../tamaya/core/env/BuildableEnvironment.java   |  142 +++
 .../core/env/ConfiguredSystemProperties.java    |  341 ++++++
 .../tamaya/core/env/EnvironmentBuilder.java     |   77 ++
 .../tamaya/core/env/EnvironmentSelector.java    |   47 +
 .../ConfigurationInvocationHandler.java         |   51 +
 .../core/internal/DefaultConfigProvider.java    |   56 +
 ...DefaultConfigurationManagerSingletonSpi.java |  130 +++
 .../internal/DefaultExpressionEvaluator.java    |  139 +++
 .../DefaultPropertyAdaptersSingletonSpi.java    |  100 ++
 .../tamaya/core/internal/DefaultStage.java      |   69 ++
 .../internal/DefaultStagesSingletonSpi.java     |  108 ++
 .../tamaya/core/internal/MapConfiguration.java  |  121 ++
 .../apache/tamaya/core/internal/MetaConfig.java |   69 ++
 .../tamaya/core/internal/StageBuilder.java      |   81 ++
 .../internal/TestConfigServiceSingletonSpi.java |  102 ++
 .../TestEnvironmentManagerSingleton.java        |   57 +
 .../TestPropertyAdaptersSingletonSpiSpi.java    |   98 ++
 .../org/apache/tamaya/core/internal/Utils.java  |  126 ++
 .../internal/WeakConfigListenerManager.java     |  104 ++
 .../tamaya/core/internal/el/ELResolver.java     |  159 +++
 .../el/EnvironmentPropertyResolver.java         |   43 +
 .../internal/el/SystemPropertyResolver.java     |   44 +
 ...DependentApplicationEnvironmentProvider.java |  109 ++
 ...ssLoaderDependentEarEnvironmentProvider.java |  115 ++
 .../env/InitialEnvironmentProvider.java         |   92 ++
 .../internal/env/SingleEnvironmentManager.java  |  101 ++
 .../SystemClassLoaderEnvironmentProvider.java   |   96 ++
 .../DefaultConfigFormatsSingletonSpi.java       |   78 ++
 .../tamaya/core/internal/format/IniFormat.java  |   94 ++
 .../core/internal/format/PropertiesFormat.java  |   57 +
 .../internal/format/PropertiesXmlFormat.java    |   58 +
 .../inject/ConfigChangeCallbackMethod.java      |   54 +
 .../core/internal/inject/ConfiguredField.java   |  223 ++++
 .../inject/ConfiguredInstancesManager.java      |   85 ++
 .../core/internal/inject/ConfiguredMethod.java  |  198 ++++
 .../core/internal/inject/ConfiguredType.java    |  159 +++
 .../resources/AntPathClasspathResolver.java     |   54 +
 .../resources/AntPathClasspathsResolver.java    |   64 ++
 .../internal/resources/AntPathFileResolver.java |   48 +
 .../resources/AntPathFilesResolver.java         |   47 +
 .../resources/DefaultPathResourceLoader.java    |   78 ++
 .../core/internal/resources/PathResolver.java   |   45 +
 .../properties/AbstractPropertyProvider.java    |  110 ++
 .../properties/AbstractResourceConfigMap.java   |   86 ++
 .../properties/AggregatedPropertyProvider.java  |  137 +++
 .../core/properties/AggregationPolicy.java      |   38 +
 .../ClasspathModulePropertyProvider.java        |   80 ++
 .../properties/ClasspathPropertyProvider.java   |  146 +++
 .../properties/ContextualPropertyProvider.java  |  176 +++
 .../DefaultPropertyProviderManager.java         |   79 ++
 .../properties/DelegatingPropertyProvider.java  |  102 ++
 .../properties/EnvironmentPropertyProvider.java |   43 +
 .../properties/FileSystemPropertyProvider.java  |   97 ++
 .../properties/FilteredPropertyProvider.java    |   71 ++
 .../properties/FreezedPropertyProvider.java     |   92 ++
 .../IntersectingPropertyProvider.java           |   76 ++
 .../properties/MapBasedPropertyProvider.java    |  106 ++
 .../MapBasedPropertyProviderBuilder.java        |  123 ++
 .../properties/PathBasedPropertyProvider.java   |   74 ++
 .../properties/PropertyProviderManager.java     |   74 ++
 .../core/properties/PropertyProviders.java      |  469 ++++++++
 .../properties/ReplacingPropertyProvider.java   |  111 ++
 .../apache/tamaya/core/properties/Store.java    |   98 ++
 .../properties/SubtractingPropertyProvider.java |   75 ++
 .../SystemPropertiesPropertyProvider.java       |   52 +
 .../properties/UriBasedPropertyProvider.java    |   68 ++
 .../tamaya/core/spi/AdapterProviderSpi.java     |   37 +
 .../tamaya/core/spi/ConfigurationFormat.java    |   56 +
 .../spi/ConfigurationFormatsSingletonSpi.java   |   59 +
 .../core/spi/ConfigurationProviderSpi.java      |   41 +
 .../tamaya/core/spi/EnvironmentProvider.java    |   61 +
 .../tamaya/core/spi/ExpressionEvaluator.java    |   27 +
 .../tamaya/core/spi/ExpressionResolver.java     |   50 +
 .../core/spi/ObjectConfiguratorService.java     |   37 +
 .../tamaya/core/spi/PropertyAdapterService.java |   63 +
 .../apache/tamaya/core/spi/ResourceLoader.java  |   86 ++
 .../resources/META-INF/java-config-1.0.0.xsd    |   80 ++
 .../src/main/resources/META-INF/java-config.xml |   33 +
 .../resources/META-INF/meta-model.properties    |   39 +
 ....tamaya.core.internal.resources.PathResolver |   22 +
 ...g.apache.tamaya.core.spi.ConfigurationFormat |   21 +
 ...ya.core.spi.ConfigurationFormatsSingletonSpi |   19 +
 ...che.tamaya.core.spi.ConfigurationProviderSpi |   19 +
 ...g.apache.tamaya.core.spi.EnvironmentProvider |   22 +
 ...rg.apache.tamaya.core.spi.ExpressionResolver |   20 +
 .../org.apache.tamaya.core.spi.ResourceLoader   |   20 +
 ....tamaya.spi.ConfigurationManagerSingletonSpi |   19 +
 ...he.tamaya.spi.EnvironmentManagerSingletonSpi |   19 +
 ...ache.tamaya.spi.PropertyAdaptersSingletonSpi |   19 +
 .../org.apache.tamaya.spi.StagesSingletonSpi    |   19 +
 core/src/main/resources/log4j2.xml              |   31 +
 ...tionManagerSingletonSpiSingletonSpiTest.java |  119 ++
 .../java/org/apache/tamaya/JavaOneDemo.java     |   80 ++
 .../config/ClasspathModulePropertyMapTest.java  |   74 ++
 .../core/config/EnvironmentManagerTest.java     |   40 +
 .../tamaya/core/config/MutableConfigTest.java   |   48 +
 .../env/ConfiguredSystemPropertiesTest.java     |   48 +
 .../tamaya/core/env/EnvironmentManagerTest.java |  100 ++
 .../core/properties/PropertyProvidersTest.java  |   53 +
 .../internal/MutableTestConfigProvider.java     |   60 +
 .../tamaya/internal/TestConfigProvider.java     |   63 +
 .../samples/annotations/ConfigTemplate.java     |   67 ++
 .../samples/annotations/ConfiguredClass.java    |  119 ++
 .../samples/annotations/ConfiguredTest.java     |   43 +
 .../samples/devops/DeploymentProvider.java      |   43 +
 .../simple/SimplePropertiesAndCLISample.java    |   74 ++
 core/src/test/resources/META-INF/beans.xml      |   25 +
 .../test/resources/META-INF/config.properties   |   19 +
 .../test/resources/META-INF/config/example.ini  |   31 +
 .../META-INF/config/example.properties          |   31 +
 .../test/resources/META-INF/config/example.xml  |   25 +
 .../META-INF/env/application.properties         |   20 +
 core/src/test/resources/META-INF/env/ear.ini    |   20 +
 .../resources/META-INF/env/system.properties    |   19 +
 .../resources/META-INF/meta-model.properties    |   18 +
 ...che.tamaya.core.spi.ConfigurationProviderSpi |   22 +
 ...tamaya.core.spi.PropertyAdaptersSingletonSpi |   15 +
 core/src/test/resources/cfg/test.xml            |   26 +
 core/src/test/resources/test.properties         |   27 +
 incubator-tamaya.iml                            |  206 ++++
 keys/KEYS                                       |   19 +
 modules/cdi/pom.xml                             |  111 ++
 .../tamaya/ext/cdi/ConfigurationInjector.java   |   81 ++
 .../apache/tamaya/ext/cdi/ConfiguredFIeld.java  |  131 +++
 .../cdi/src/main/resources/META-INF/beans.xml   |   24 +
 .../javax.enterprise.inject.spi.Extension       |   19 +
 ...che.tamaya.core.spi.ConfigurationProviderSpi |   19 +
 .../apache/tamaya/ext/cdi/ConfiguredClass.java  |  104 ++
 .../apache/tamaya/ext/cdi/ConfiguredTest.java   |   38 +
 .../tamaya/ext/cdi/TestConfigProvider.java      |   47 +
 .../cdi/src/test/resources/META-INF/beans.xml   |   24 +
 modules/cdi/tamaya-ext-cdi (1).iml              |  220 ++++
 modules/cdi/tamaya-ext-cdi.iml                  |  221 ++++
 modules/managed/pom.xml                         |  102 ++
 .../apache/tamaya/management/ManagedConfig.java |   95 ++
 .../tamaya/management/ManagedConfigMBean.java   |  176 +++
 .../tamaya/management/ManagedEnvironment.java   |   69 ++
 .../management/ManagedEnvironmentMBean.java     |   89 ++
 .../src/main/resources/META-INF/beans.xml       |   24 +
 .../src/test/resources/META-INF/beans.xml       |   24 +
 modules/managed/tamaya-ext-managed.iml          |  220 ++++
 modules/pom.xml                                 |   59 +
 modules/tamaya-modules (1).iml                  |  213 ++++
 modules/tamaya-modules.iml                      |  214 ++++
 pom.xml                                         |  413 +++++++
 240 files changed, 19183 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..59829ca
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+.idea
+*.iml

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/DISCLAIMER
----------------------------------------------------------------------
diff --git a/DISCLAIMER b/DISCLAIMER
new file mode 100644
index 0000000..58fd3b9
--- /dev/null
+++ b/DISCLAIMER
@@ -0,0 +1,10 @@
+Apache Tamaya is an effort undergoing incubation at The Apache Software
+Foundation (ASF), sponsored by Apache Incubator PMC.
+
+Incubation is required of all newly accepted projects until a further review
+indicates that the infrastructure, communications, and decision making process
+have stabilized in a manner consistent with other successful ASF projects.
+
+While incubation status is not necessarily a reflection of the completeness
+or stability of the code, it does indicate that the project has yet to be
+fully endorsed by the ASF.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e093461
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,202 @@
+                                Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/NOTICE
----------------------------------------------------------------------
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..1be4b73
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,11 @@
+Apache Tamaya
+Copyright 2014 The Apache Software Foundation.
+
+Initial Contributors:
+Anatole Tresch (atsticks at gmail dot com)
+Werner Keil (werner dot keil at gmail dot com)
+Otávio Goncalves de Santana (otaviopolianasantana at gmail dot com)
+Juven Xu (juvenshun at gmail dot com)
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/.gitignore
----------------------------------------------------------------------
diff --git a/api/.gitignore b/api/.gitignore
new file mode 100644
index 0000000..3b54384
--- /dev/null
+++ b/api/.gitignore
@@ -0,0 +1,16 @@
+target/
+/doc
+target
+*.iml
+*.iws
+*.ipr
+.project
+.classpath
+.settings
+.metadata
+.idea
+.checkstyle
+atlassian-ide-plugin.xml
+.sonar-ide.properties
+*.patch
+*.log

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/pom.xml
----------------------------------------------------------------------
diff --git a/api/pom.xml b/api/pom.xml
new file mode 100644
index 0000000..b778508
--- /dev/null
+++ b/api/pom.xml
@@ -0,0 +1,127 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.tamaya</groupId>
+        <artifactId>tamaya-all</artifactId>
+        <version>0.1-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>tamaya-api</artifactId>
+    <name>Apache Tamaya - API</name>
+    <description>The API defines a complete SE based API for reading, creating an dmanaging of configuration and
+        environment data.
+    </description>
+    <packaging>jar</packaging>
+
+    <properties>
+        <maven.compile.targetLevel>1.8</maven.compile.targetLevel>
+        <maven.compile.sourceLevel>1.8</maven.compile.sourceLevel>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <additionalparam>-Xdoclint:none</additionalparam>
+                    <detectLinks>false</detectLinks>
+                    <keywords>true</keywords>
+                    <linksource>false</linksource>
+                    <failOnError>false</failOnError>
+                    <source>${maven.compile.sourceLevel}</source>
+                    <verbose>false</verbose>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${maven.compile.sourceLevel}</source>
+                    <target>${maven.compile.targetLevel}</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.jacoco</groupId>
+                <artifactId>jacoco-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>prepare-agent</id>
+                        <goals>
+                            <goal>prepare-agent</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <configuration>
+                    <sourceDirectory>src/main/asciidoc</sourceDirectory>
+                    <baseDir>${project.basedir}</baseDir>
+                    <eruby>erubis</eruby>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>output-html</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>process-asciidoc</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>target/docs</outputDirectory>
+                            <!-- sourceHighlighter>highlightjs</sourceHighlighter -->
+                            <sourceHighlighter>coderay</sourceHighlighter>
+                            <backend>html</backend>
+                            <embedAssets>true</embedAssets>
+                            <imagesDir>src/main/asciidoc/images/</imagesDir>
+                            <baseDir>src/main/asciidoc/</baseDir>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/JavaConfigSpecification.adoc
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/JavaConfigSpecification.adoc b/api/src/main/asciidoc/JavaConfigSpecification.adoc
new file mode 100644
index 0000000..e392915
--- /dev/null
+++ b/api/src/main/asciidoc/JavaConfigSpecification.adoc
@@ -0,0 +1,659 @@
+Apache Tamaya -- Documentation
+==============================
+:name: Tamaya
+:rootpackage: org.apache.tamaya
+:title: Apache Tamaya
+:revnumber: 0.1-SNAPSHOT
+:revremark: Incubator
+:revdate: November 2014
+:longversion: {revnumber} ({revremark}) {revdate}
+:authorinitials: ATR
+:author: Anatole Tresch, Anatole Tresch
+:email: <atsticks@gmail.com>
+:source-highlighter: coderay
+:website: http://tamaya.incubator.apache.org/
+:iconsdir: {imagesdir}/icons
+:toc:
+:toc-placement: manual
+:icons:
+:encoding: UTF-8
+:numbered:
+
+'''
+
+<<<
+
+-> add image : : https://raw.githubusercontent.com/JavaConfig/config-api/master/src/main/asciidoc/images/javaconfig.jpg[]
+
+toc::[]
+
+<<<
+:numbered!:
+-----------------------------------------------------------
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-----------------------------------------------------------
+
+:numbered:
+
+<<<
+
+== Introduction
+This document describes the {name} API for Configuration. The technical objective is to provide a
+unified configuration model in Java, targeting Java ME, SE as well as the EE platform.
+The API will provide support for key/value based application configuration. It will provide
+as well higher level APIs that are based on the low level ke</value pairs. Finally it will
+provide extension points for adding additional features and additional modules for extension
+or adaption.
+
+=== Working Group
+This work is being conducted as part of a community lead joint effort under the Apache Software Foundation. This
+specification is the result of the collaborative work of the members of the {name} Users Group and the community at
+large. Currently the project is lead by Anatole Tresch (atsticks at gmail.dot com).
+
+=== Goals
+Configuration is a key feature in all kind of programming languages. Basically configuration is the parametrization of
+well defined aspects of a software product without having to recompile/rebuild the code.
+
+==== Targets
+{name} targets to support all general configuration aspects, e.g.
+
+* spplication configuration
+** plugins
+** modules
+** components
+* Configuration of Java EE related aspects for Java enterprise application portability and dynamic provisioning, such as
+** Configuration of CDI (interceptors, decorators and alternatives)
+** Configuration of Bean Validation, JSF, web applications etc.
+* Configuration of instances within Java SE, e.g. by passing instances to a method that injects configured values, or by providing
+  accessors to evaluate current configuration vlues. This can be used explicitly or transparently by client code.
+
+Additionally the solution should support
+
+* multiple configuration locations, including remote locations
+* multiple configuration formats, including custom formats
+* multiple configuration loading mechanisms, including custom mechanisms. By default reading the classpath, files und URIs are supported by default.
+* type conversion
+* configuration of collections
+
+
+=== Required Java version
+The API is based on Java SE 8.0 language features.
+
+=== How this document is organized
+There are five main section in this document:
+
+* Use cases.
+* Requirements.
+* Specification.
+* Implementation Recommendations.
+* An appendix.
+
+<<<
+
+[[Use Cases]]
+== Use Cases
+
+This section describes some, but not all, of the use cases that should be covered with this JSR.
+
+[[UC Simple COnfiguration]]
+=== Simple Property Based Configuration
+
+In this most simple usage scenario an application is created that is preconfigured by some property files contained in the
+Java archive. Using the command line it is possible to redefine/override some of the properties, e.g. by using system properties.
+Typical example are small command line tools.
+
+-> It must be possible to define default configuration and package it with the (SE) application.
+
+-> It must be possible to consider system properties or other command line arguments for usage with configuration.
+
+-> It must be possible that command line arguments can override defaults configured.
+
+[[UC Advanced Property Based Configuration]]
+=== Advanced Property Based Configuration
+
+Enhancing the previous scenario, we might as well consider the current environment. Saying that our overriding mechanisms
+must be improved, since
+
+* some environment settings should not be overridable
+* some defaults should be overridden by environment or system properties, whereas others may not
+
+Additionally the user may have an option, where he is allowed to define an external configuration file that should be used to configure
+the application. This is especially useful for applications with lots of command line options (under windows even command
+execution may fail die to exceeding command length). Finally application developers may have their own formats in place, so the
+system should be able to support these formats.
+
+-> Environment properties must be considered as well.
+
+-> It must be possible to control overriding.
+
+-> It must be possible to dynamically add configuration locations to be considered.
+
+-> It must be possible to define customized configuration formats.
+
+[[UC Modularized Configuration]]
+=== Modularized Configuration
+
+When systems grow they must be modularized to keep control. Whereas that sounds not really fancy, it leads to additional things
+to be considered by a configuration system:
+
+* The different modules must have access to their own "module configuration".
+* Modules may want to define a contract, which properties may be overriden.
+
+Consequently
+
+-> Parts of Configuration must be identifiable and accessible in a isolated way.
+
+-> Module configuration requires partial isolation or other mechanisms to ensure only configuration aspects
+   that are allowed to be overriden can be overriden.
+
+[[UC Dynamic Provisioning]]
+=== Dynamic Provisioning
+
+In Cloud Computing, especially the PaaS and SaaS areas a typical use case would be that an application (or server)
+is deployed, configured and started dynamically. Typically things are controlled by some "active controller components",
+which are capable of
+* creating new nodes (using IaaS services)
+* deploying and starting the required runtime platform , e.g. as part of a PaaS solution.
+* deploying and starting the application modules.
+
+All these steps require some kind of configuration. As of today required files are often created on the target node
+before the systems are started, using proprietary formats and mechanism. Similarly accessing the configuration in place
+may require examining the file system or using again proprietary management functions. Of course, a configuration
+solution should not try to solve that, but it can provide a significant bunch of functionality useful in such scenarios:
+
+* provide remote capabilities for configuration
+* allow configuration to be updated remotely.
+* allow client code to listen for configuration changes and react as needed.
+
+Consequently:
+
+-> Ensure Configuration can be transferred over the network easily.
+
+-> Whereas many people will no think serializability is the solution, it would be much more useful to define
+   a text based format for serialization, e.g. in +XML+ or +JSON+.
+
+-> Similarly a management API should be defined, which allows to inspect the configuration in place, e.g. using
+   JMX or REST services.
+
+[[UC Java EE]]
+=== Java EE
+
+Considering Java EE different aspects should be considered:
+
+* Java EE is a complex multi-layered architecture with different levels of runtime contexts:
+** application server boot level (system classloader),
+** (optional) deployment/undeployment of ears (ear classloader),
+** (optional) deployment/undeployment of web applications (war classloader),
+** different runtime setups, e.g. EJB calls, MDB execution, Servlet Requests, scheduled and timed executions.
+* Configuring administrative resources (e.g. datasources, users, security etc) is typically vendor specific.
+* The environment is inherently multi-threaded.
+
+Given that a couple of additional requirements araise:
+
+-> Configuration must be contextual, depending on the current runtime context (e.g. boot level, ear, war, ...).
+
+-> Hereby contextual aspects can even exceed the levels described above, e.g. for SaaS scenarios.
+
+-> Resources can be unloaded, e.g. wars, ears can be restarted.
+
+-> The different contextual levels can also be used for overriding, e.g. application specific configuration
+may override ear or system configuration.
+
+-> Configuration may be read from different sources (different classloaders, files, databases, remote locations).
+
+-> Configuration may be read in different formats (deployment descriptors, +ServiceLoader+ configuration, alt-DD feature, ...)
+
+-> JSF also knows the concept of stages.
+
+-> Many SPI's of Java EE require the implementation of some well defined Java interface, so it would be useful if the
+   configuration solution supports easy implementation of such instances.
+
+-> In general it would be useful to model the +Environment+ explicitly.
+
+-> Configuration used as preferences is writable as well. This requires mutability to be modelled in way, without the
+   need of synchronization.
+
+-> JNDI can be used for configuration as well.
+
+[[UC MultiTenancy]]
+=== Scenario MultiTenancy
+In multi tenancy setups a hierarchical/graph model of contexts for configurations is required. For example there might
+be some kind of layering as follows:
+
+* Layer 0: Low level system configuration
+* Layer 1: Domain configuration
+* Layer 2: Default App configuration
+* Layer 3: Tenant specific configuration
+* Layer 4: User specific configuration
+
+Configurations made in the tenant or user layer override the default app configuration etc.
+
+-> It must be possible to structure Configuration in layers that can override/extend each other.
+
+-> The current environment must be capable of mapping tenant, user and other aspects, so a corresponding configuration
+   (or layer) can be derived.
+
+[[UC Java API]]
+=== Accessing Configuration
+
+So far we described much how configuration must be organized and managed, but we got not concrete, how it is accessed.
+Basically there are two basic scenarios to be distinguished, which mainly depend on the way how the lifecycle of a component
+to be configured is managed:
+
+* If the lifecycle is managed manually by the developer, the configuration system
+** can inject configuration values, when explicitly called to to so
+** can provide an accessor for configuration.
+* If the lifecycle is managed by some container such as a DI container, the configuration
+  system should leverage the functionality of the container, where possible.
+
+The most simplest way is using injection, e.g. a POJO can be written as follows:
+
+[source, java]
+.Configured POJO Example
+----------------------------------------------------
+public MyPojo {
+  @ConfigProperty("myCurrency")
+  @DefaultValue("CHF")
+  private String currency;
+
+  @ConfigProperty("myCurrencyRate")
+  private Long currencyRate;
+
+  // complex algorithm based on the currency
+}
+----------------------------------------------------
+
+Given a +ConfigManager+ I could then pass the instance for being configured:
+
+[source, java]
+.Configuring a POJO
+----------------------------------------------------
+MyPojo instance = new MyPojo();
+ConfigManager.configure(instance);
+----------------------------------------------------
+
+Another way of accessing configuration would be by defining a type safe templates
+providing access to the configured values and let the configuration system implement
+the interface:
+
+[source, java]
+.Type Safe Configuration Template Example
+----------------------------------------------------
+public interface MyConfig {
+  @ConfigProperty("myCurrency")
+  @DefaultValue("CHF")
+  String getCurrency();
+
+  @ConfigProperty("myCurrencyRate")
+  Long getCurrencyRate();
+
+}
+----------------------------------------------------
+
+The configuration system will then implement the
+interface using configuration as follows:
+
+[source, java]
+.Accessing a type safe Configuration Template
+----------------------------------------------------
+MyConfig config = ConfigManager.getConfiguration(MyConfig.class);
+----------------------------------------------------
+
+Finally there is a generic +Configuration+ type that can be used as well, which
+provides full access to all features:
+
+[source, java]
+.Accessing Configuration
+----------------------------------------------------
+Configuration config = ConfigManager.getConfiguration(Configuration.class);
+----------------------------------------------------
+
+
+[[UC Testing]]
+=== Testing
+When testing a Java solution, it must be possible to easily control the configuration provided, so isolated
+component tests can be written effectively. Also it should be possible to control/isolate the configuration level for
+each test case.
+
+-> isolation of configuration services is required
+
+-> API for controlling the configuration provided, required for according implementations in the testing frameworks.
+
+[[UC Staging]]
+=== Staging
+Different companies go through different staging levels during the development of software components. Currently only
+rarely the EE frameworks support staging aspects, nevertheless no broader, well modelled staging concept is defined.
+Different companies also have different staging or sub-staging levels in place, which also must be reflected.
+Especially with sub-stages inheritance of stage related configuration is common sense and should be supported.
+
+-> Main stages available and to be supported must be defined.
+
+-> Enable additional stages to be added, so also custom stages can be supported.
+
+
+[[UC CotsIntegration]]
+=== Custom of the Shelf (COTS) Integration
+When buying software from an external software company it is often very cumbersome to integrate, adapt and customize
+third party software to the internal operational requirements. Especially, when software is delivered as ear modules
+portability is often very difficult and time consuming. Configuration should enable COTS providers to define a
+customization contract, which also can be part of the COTS software interface and integration specifications. This
+would allow operations to better control and configure third party solutions as possible, whereas in the evaluation
+phase the integration and configuration options can explicitly be defined.
+
+-> It must be possible to document configuration aspects supported.
+
+-> Configuration must be overridable from external sources (the operations which must operate the COTS solution).
+
+<<<
+
+[[Requirements]]
+== Requirements
+=== Core Configuration Requirements
+Based on the scope and use cases described above the following core requirements can be identified:
+
+# Configuration is modelled as String based key/value pairs.
+# Configuration can be combined using the GoF composite pattern. Hereby different composition policies can be applied, such as
+  ## override: subsequent entries override existing ones.
+  ## substraction: keys present in the second configuration will be removed.
+  ## union-resolve: key/values were added, in case of conflicts a +ConfigException+ must be thrown.
+  ## union-ignore: similar to union, whereas duplicates are ignored (leaving the initial value loaded).
+  ## intersection:
+
+[[RequirementsServer]]
+=== Server Configuration Requirements
+shskjdhskhds sdkj ksjdks skjdskjd:
+
+. Req1
+. Req2
+
+[[RequirementsExtensions]]
+=== Extensions Requirements
+shskjdhskhds sdkj ksjdks skjdskjd:
+
+. Req1
+. Req2
+
+[[RequirementsNonFunctional]]
+=== Non Functional Requirements
+. Req1
+. Req2
+
+[[Specification]]
+== Specification
+=== Package and Project Structure
+==== Package Overview
+{name} defines the following packages:
+
++{rootpackage}.config+:: contains the main artifacts, such as +Environment, Configuration, PropertyProvider, ConfigurationOperator,
+ConfigurationQuery+, and the service interfaces +EnvironmentManager, ConfigurationManager+.
+
++{rootpackage}.spi+:: contains the <<SPI>> interfaces provided.
+
+[[Modules]]
+==== Module/Repository Overview
+The project's source code repository under [<<source>>] provides several modules:
+
+configuration-api:: contains the {name} API.
+configuration-se:: contains the Java SE 8 based implementation.
+configuration-me:: contains the Java ME 8 based implementation.
+configuration-examples:: finally contains several examples and demos.
+
+[[API Core]]
+=== Configuration Core API
+
+The following sections will describe these artifacts in more detail.
+
+[[API Configuration]]
+==== Modeling of Configuration
+
+Basically configuration is a very generic concept. Therefore it should be modelled in a generic way. The most simple
+and similarly most commonly used are simple literal key/value pairs. Using Strings as base representation of
+configuration comes with several huge advantages:
+
+* Strings are simple to understand
+* Strings are human readable and therefore easy to prove for correctness
+* Strings can easily be used within different language, different VMs, files or network communications.
+* Strings can easily be compared and manipulated
+* Strings can easily be searched, indexed and cached
+* It is very easy to provide Strings as configuration, which gives much flexibility for providing configuration in
+  production as well in testing.
+* and more
+
+On the other side there are also disadvantages:
+
+* Strings are inherently not type safe, they do not provide validation out of the box for special types, such as
+numbers,
+  dates etc.
+* Often you want not to work with Strings, but with according types.
+* Strings are not hierarchical, so mapping hierarchical structures requires some extra efforts.
+
+Nevertheless most of these advantages can be mitigated easily, hereby still keeping all the benefits from above:
+
+* Adding type safe converters on top of String allow to add any type easily, that can be directly mapped out of Strings.
+  This includes all common base types such as numbers, dates, time, but also timezones, formatting patterns and more.
+* Even more complex mappings can be easily realized, by using String not as a direct representation of configuration,
+  but a reference that defines where the more complex configuration artifact is available. This mechanism is similarly
+  easy to understand as parsing Strings to numbers, but is powerful enough to provide e.g. all kind of deployment
+  descriptors in Java EE.
+* Hierarchical and collection types can be mapped in different ways:
+** The keys of configuration can have additional syntax/semantics. E.g. when adding dor-separating path semantics
+*** trees/maps can also simply be mapped:
+
+[source,properties]
+.Using hierarchical keys to model a tree
+--------------------------------------------
+          a
+      /      \
+   a1=a1Value a2
+               \
+                a21=a21Value
+--------------------------------------------
+
+modelled as properties...
+
+[source,properties]
+.Using hierarchical keys to model a tree/map
+--------------------------------------------
+   a
+   a.a1=a1Value
+   a.a2
+   a.a2.a21
+--------------------------------------------
+
+   Hereby it is not necessary to add all keys, only the one that have values must be provided, so the following entries
+   basically define the same tree
+
+[source,properties]
+.Using hierarchical keys to model a tree (cont.)
+--------------------------------------------
+   a.[type]=map
+   a.a1=a1Value
+   a.a2.a21=a21Value
+--------------------------------------------
+
+
+*** list basically can also be mapped:
+
+[source,properties]
+.Using hierarchical keys to model a list
+--------------------------------------------
+   a=a1,a2,a3,a4,a0
+--------------------------------------------
+
+modelled as properties...
+
+[source,properties]
+.Using hierarchical keys to model a tree/map
+--------------------------------------------
+   a.[type]=list
+   # optional
+   # a.[comparator]=my.ComparatorClass
+   a.[children]=a1,a2,a3,a4,a0
+--------------------------------------------
+
+[API PropertyProvider]
+==== Property Providers
+
+We have seen that constrain configuration aspects to simple literal key/value pairs provides us with an easy to
+understand, generic, flexible, yet extendible mechanism. Looking at the Java language features a +vava.util.Map<String,
+String>+ and +java.util.Properties+ basically model these quite well out of the box.
+So it makes sense to build configuration on top of the JDK's +Map+ interface. This creates immediately additional
+benefits:
+
+* we inherit full Lambda and collection support
+* Maps are widely known and well understood
+
+Nevertheless there are some things to be considered:
+
+* Configuration also requires meta-data, such as
+** the origin of a certain configuration entry
+** the sensitivity of some data
+** the provider that have read the data
+** the time, when the data was read
+** the timestamp, when some data may be outdated
+** ...
+
+Basically the same is also the not related to some single configuration key, but also to a whole map.
+The +PropertyMap+ interface models exact these aspects and looks as illustrated below:
+
+[source,java]
+.Interface PropertyProvider
+--------------------------------------------
+public interface PropertyProvider{
+  Map<String,String> toMap();
+  MetaInfo getMetaInfo();
+  ...
+}
+--------------------------------------------
+
+Hereby
+
+* +getMetaInfo()+ return the meta information for the whole property map
+* +getMetaInfo(String)+ returns meta information for the a specific key in the property map
+* +isMutable()+ allows to easy check, if a property map is mutable, which is more elegant than catching
+  +NonSupportedOperation+ exception thrown on the acording methods of +Map+.
+* +reload()+ finally allows to reload a property map. It depenends on the implementing source, if this operation
+  has some effect. If the map changes an according +ConfigChange+ must be returned, describing the
+  changes applied.
+
+This simple model will be used within the spi, where configuration can be injected/provided from external resources.
+But we have seen, that we have to consider additional aspects, such as extendability and type safety. Therefore we
+extend +PropertyMap+ and hereby also apply the 'composite pattern', which results in the following key abstraction.
+
+[[API Configuration]]
+==== Configuration
+
+Configuration inherits all basic features from +PropertyMap+, but additionally adds additional functionality for
+type safety and extension mechanisms:
+
+[source,java]
+.Interface Configuration
+--------------------------------------------
+public interface Configuration extends PropertyProvider{
+  Boolean getBoolean(String key);
+  Boolean getBooleanOrDefault(String key, Boolean defaultValue);
+  Byte getByte(String key);
+  Byte getByteOrDefault(String key, Byte defaultValue);
+  Short getShort(String key);
+  Short getShortOrDefault(String key, Short defaultValue);
+  Integer getInteger(String key);
+  Integer getIntegerOrDefault(String key, Integer defaultValue);
+  Long getLong(String key);
+  Long getLongOrDefault(String key, Long defaultValue);
+  Float getFloat(String key);
+  Float getFloatOrDefault(String key, Float defaultValue);
+  Double getDouble(String key);
+  Double getDoubleOrDefault(String key, Double defaultValue);
+  <T> T getAdapted(String key, PropertyAdapter<T> adapter);
+  <T> T getAdaptedOrDefault(String key, PropertyAdapter<T> adapter, T defaultValue);
+  <T> T getOrDefault(String key, Class<T> type, T defaultValue);
+  <T> T get(String key, Class<T> type);
+  Set<String> getAreas();
+  Set<String> getTransitiveAreas();
+  Set<String> getAreas(Predicate<String> predicate);
+  Set<String> getTransitiveAreas(Predicate<String> predicate);
+  boolean containsArea(String key);
+  Configuration with(ConfigurationAdjuster adjuster);
+  <T> T query(ConfigurationQuery<T> query);
+}
+--------------------------------------------
+
+Hereby
+
+* +XXX getXXX(String)+ and +XXX getXXXOrDefault(String, XXX)+ provide type safe accessors for all basic wrapper types
+  of the JDK.
+* +getAdapted, getAdaptedOrDefault()+ allow accessing any type, hereby also passing a +PropertyAdapter+ that converts
+  the configured literal value to the type required.
+* +get(String, Class)+ and +getOrDefault(String, Class<T>, T)+ similarly allow type safe access of any type, but are
+  using predefined registered +PropertyAdapter+ instances (shown later in this document).
+* +getAreas()+, +getTransitiveAreas()+ allow to examine the hierarchical tree modeled by the configuration tree.
+  Optionally also predicates can be passed to select only part of the tree to be returned.
+* +containsArea+ allows to check, if an area is defined.
+* +with, query+ provide the extension points for adding additional functionality.
+
+==== ConfigurationManager
+
+The configuration manager provides access to configurations, currently available. It is modelled as a singleton:
+
+[source,java]
+.ConfigurationManager Singleton
+--------------------------------------------
+public final class ConfigurationManager{
+  <Configuration getConfiguration(Annotation... qualifiers);
+  <T> T getConfiguration(Class<T> configType, Annotation... qualifiers);
+  ...
+}
+--------------------------------------------
+
+Hereby
+
+* +getConfiguration()+ return the configuration valid for the current runtime environment.
+
+
+==== Environment
+
+The environment basically is also a simple +Map<String,String>+ similar to +System.getProperties()+ and +System
+.getenv()+ in the JDK. Nevertheless it provides additional functionality:
+
+* environments are hierarchical. Hereby all environments inherit from the root environment. The root environment
+  hereby must contain
+  ** all JDK's system properties, with same keys, values
+  ** all JDK's environment properties, prefixed with +env:+.
+  ** additionaly root properties as needed.
+* each environment also defines its +Stage+. Hereby, if not set explicitly the +Stage+ is inherited from the root
+  environment. Consequently the root environment must provide a +Stage+, which by default should be +Stage.Development+.
+
+
+==== EnvironmentManager
+
+Similar to the configuration manager the +EnvironmentManager+ provides programmatic access to the current environment
+and the root environment;
+
+[source,java]
+.EnvironmentManager Singleton
+--------------------------------------------
+public final class EnvironmentManager{
+  Environment getEnvironment();
+  Environment getRootEnvironment();
+}
+--------------------------------------------
+
+
+:numbered!:
+== APPENDIX
+

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/Thumbs.db
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/Thumbs.db b/api/src/main/asciidoc/images/Thumbs.db
new file mode 100644
index 0000000..ce5e659
Binary files /dev/null and b/api/src/main/asciidoc/images/Thumbs.db differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/highlighter.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/highlighter.png b/api/src/main/asciidoc/images/highlighter.png
new file mode 100644
index 0000000..b311459
Binary files /dev/null and b/api/src/main/asciidoc/images/highlighter.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/README
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/README b/api/src/main/asciidoc/images/icons/README
new file mode 100644
index 0000000..f12b2a7
--- /dev/null
+++ b/api/src/main/asciidoc/images/icons/README
@@ -0,0 +1,5 @@
+Replaced the plain DocBook XSL admonition icons with Jimmac's DocBook
+icons (http://jimmac.musichall.cz/ikony.php3). I dropped transparency
+from the Jimmac icons to get round MS IE and FOP PNG incompatibilies.
+
+Stuart Rackham

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/1.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/1.png b/api/src/main/asciidoc/images/icons/callouts/1.png
new file mode 100644
index 0000000..7d47343
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/10.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/10.png b/api/src/main/asciidoc/images/icons/callouts/10.png
new file mode 100644
index 0000000..997bbc8
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/10.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/11.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/11.png b/api/src/main/asciidoc/images/icons/callouts/11.png
new file mode 100644
index 0000000..ce47dac
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/11.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/12.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/12.png b/api/src/main/asciidoc/images/icons/callouts/12.png
new file mode 100644
index 0000000..31daf4e
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/12.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/13.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/13.png b/api/src/main/asciidoc/images/icons/callouts/13.png
new file mode 100644
index 0000000..14021a8
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/13.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/14.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/14.png b/api/src/main/asciidoc/images/icons/callouts/14.png
new file mode 100644
index 0000000..64014b7
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/14.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/15.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/15.png b/api/src/main/asciidoc/images/icons/callouts/15.png
new file mode 100644
index 0000000..0d65765
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/15.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/2.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/2.png b/api/src/main/asciidoc/images/icons/callouts/2.png
new file mode 100644
index 0000000..5d09341
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/3.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/3.png b/api/src/main/asciidoc/images/icons/callouts/3.png
new file mode 100644
index 0000000..ef7b700
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/3.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/4.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/4.png b/api/src/main/asciidoc/images/icons/callouts/4.png
new file mode 100644
index 0000000..adb8364
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/4.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/5.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/5.png b/api/src/main/asciidoc/images/icons/callouts/5.png
new file mode 100644
index 0000000..4d7eb46
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/5.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/6.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/6.png b/api/src/main/asciidoc/images/icons/callouts/6.png
new file mode 100644
index 0000000..0ba694a
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/6.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/7.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/7.png b/api/src/main/asciidoc/images/icons/callouts/7.png
new file mode 100644
index 0000000..472e96f
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/7.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/8.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/8.png b/api/src/main/asciidoc/images/icons/callouts/8.png
new file mode 100644
index 0000000..5e60973
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/8.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/callouts/9.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/callouts/9.png b/api/src/main/asciidoc/images/icons/callouts/9.png
new file mode 100644
index 0000000..a0676d2
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/callouts/9.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/caution.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/caution.png b/api/src/main/asciidoc/images/icons/caution.png
new file mode 100644
index 0000000..9a8c515
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/caution.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/example.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/example.png b/api/src/main/asciidoc/images/icons/example.png
new file mode 100644
index 0000000..1199e86
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/example.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/home.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/home.png b/api/src/main/asciidoc/images/icons/home.png
new file mode 100644
index 0000000..37a5231
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/home.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/important.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/important.png b/api/src/main/asciidoc/images/icons/important.png
new file mode 100644
index 0000000..be685cc
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/important.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/next.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/next.png b/api/src/main/asciidoc/images/icons/next.png
new file mode 100644
index 0000000..64e126b
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/next.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/note.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/note.png b/api/src/main/asciidoc/images/icons/note.png
new file mode 100644
index 0000000..7c1f3e2
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/note.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/prev.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/prev.png b/api/src/main/asciidoc/images/icons/prev.png
new file mode 100644
index 0000000..3e8f12f
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/prev.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/tip.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/tip.png b/api/src/main/asciidoc/images/icons/tip.png
new file mode 100644
index 0000000..f087c73
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/tip.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/up.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/up.png b/api/src/main/asciidoc/images/icons/up.png
new file mode 100644
index 0000000..2db1ce6
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/up.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/icons/warning.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/icons/warning.png b/api/src/main/asciidoc/images/icons/warning.png
new file mode 100644
index 0000000..d41edb9
Binary files /dev/null and b/api/src/main/asciidoc/images/icons/warning.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/smallnew.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/smallnew.png b/api/src/main/asciidoc/images/smallnew.png
new file mode 100644
index 0000000..411c2e1
Binary files /dev/null and b/api/src/main/asciidoc/images/smallnew.png differ

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/cf59ebbd/api/src/main/asciidoc/images/test.png
----------------------------------------------------------------------
diff --git a/api/src/main/asciidoc/images/test.png b/api/src/main/asciidoc/images/test.png
new file mode 100644
index 0000000..7c1f3e2
Binary files /dev/null and b/api/src/main/asciidoc/images/test.png differ


Mime
View raw message