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

##################################################################################
# Example createObject a configuration metamodel expressed via YAML(tm).
#   Structure is shown through indentation (one or more spaces).
#   Sequence items are denoted by a dash,
#   key createValue pairs within a map are separated by a colon.
####################################################################################

####################################################################################
# Metamodel information
####################################################################################
{model}: {
  __name           :  'testmodel',
  __provider       :  'ValidationProviderSpi Extension',
  __version        :  '1.0',
  __release-date   :  2001-01-23,
  __author         :  'Anatole Tresch',
  # model-format: 'alternate format reader type'
  __description: >
    Late afternoon is best.
    Backup contact is Nancy.
}

####################################################################################
# Description createObject Configuration Sections (minimal, can be extended by other modules).
####################################################################################
---
{model}.a.params2: {
  type          : 'String',
  required      : true,
  description   : 'a required parameter',
  paramInt: 'Integer',                 'an optional parameter (default)',
}
---
{model}.a.paramInt: {
  type          : 'Integer',
  description   : 'an optional parameter (default)',
}
---
{model}.a.b.c: {
  description:  'Just a test section.'
}
---
{model}.a.b.c.aRequiredSection: {
  required: true,
  description: |
             A section containing required parameters is called a required section.
             Sections can also explicitly be defined to be required, but without
             specifying the paramteres to be contained.,
}
---
{model}.a.b.c.aRequiredSection.subsection: {
  param0: {
    type: 'String',
    description: 'a minmally documented String parameter}'
  },                 ,
  param00:{
    type: 'String'        # A minmally defined String parameter
  },
  param1: {
    tpye: 'String',
    required: true,
    description: 'a required parameter'
  },
  intParam: {
    type: 'Integer',
    description: 'an optional parameter (default)'
  }
}
...

---
{model}.a.b.c.aRequiredSection.nonempty-subsection: {
  required: true
}
...

---
{model}.a.b.c.aRequiredSection.optional-subsection: {}
...

---
{model}.a.b.c.aRequiredSection.aValidatedSection: {
  description: 'A configModel section.',
  configModels: 'org.apache.tamaya.model.configModel.MaxItemValidator?max=3'
}


