#-- # ============================================================================= # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu) # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # * The names of its contributors may not be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) 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 OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # ============================================================================= #++ require 'copland/class-factory' require 'copland/configuration-point' require 'copland/configuration/yaml/schema' require 'copland/configuration/yaml/utils' module Copland module Configuration module YAML # This delegate is responsible for processing configuration points in a # package descriptor. class ConfigurationPointProcessor include TypeValidator # Creates a new ConfigurationPointProcessor that feeds into the given # Package instance. The +options+ are used while processing each # configuration point. def initialize( package, options={} ) @package = package @options = options @schema = SchemaParser.new end # The list of recognized key values in a configuration point element. VALID_KEYS = [ "description", "type", "schema" ] # The list of required key values in a configuration point element. REQUIRED_KEYS = [ "type" ] # Create and return a new configuration point with the given name. # Initialize it with the data in the +doc+ parameter (which must be a # Hash). def process( name, doc ) ensure_element_type "configuration-point", doc, Hash validate_elements doc factory = Copland::ClassFactory.instance point = factory.get( Copland::ConfigurationPoint::POOL_NAME, doc["type"], @package, name, @options ) point.description = doc["description"] if doc['schema'] point.schema = @schema.process( point, doc['schema'] ) end return point end end end end end