content: /**
   *  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.
   */
  package org.apache.aries.blueprint;
  
  import java.net.URI;
  import java.util.Set;
  
  import org.osgi.service.blueprint.reflect.ComponentMetadata;
  import org.osgi.service.blueprint.reflect.Metadata;
  import org.w3c.dom.Element;
  import org.w3c.dom.Node;
  
  public interface ParserContext  {
      /**
       * Returns the DOM Node that was passed to the NamespaceHandler call for which
       * this ParserContext instance was created.
       */
      Node getSourceNode();
  
      ComponentDefinitionRegistry getComponentDefinitionRegistry();
      
      /**
       * Retrieve the <code>ComponentMetadata</code> of the component that
       * encloses the current <code>Node</code> that is to be parsed by a 
       * namespace handler.
       * 
       * In case of top-level components this method will return <code>null</code>.
       * @return the enclosing component's metadata or null if there is no enclosing component
       */
      ComponentMetadata getEnclosingComponent();
      
      /**
       * Create a new metadata instance of the given type. The returned
       * object will also implement the appropriate <code>MutableComponentMetadata</code>
       * interface, so as to allow the caller to set the properties of the 
       * metadata.
       *
       * Note that the returned object may not be initialised, so callers
       * should take care to assure every property needed by the blueprint
       * extender is set.
       *
       * @param type the class of the Metadata object to create
       * @param <T> The expected Metadata type to be created
       * @return a new instance
       */
      <T extends Metadata> T createMetadata(Class<T> type);
  
      /**
       * Invoke the blueprint parser to parse a DOM element.
       * @param type the class of the Metadata type to be parsed
       * @param enclosingComponent The component metadata that contains the Element
       * to be parsed
       * @param element The DOM element that is to be parsed
       * @param <T> The expected metadata type to be parsed
       */
      <T> T parseElement(Class<T> type, ComponentMetadata enclosingComponent, Element element);
  
      /** 
       * Generate a unique id following the same scheme that the blueprint container
       * uses internally
       */
      String generateId();
      
      /**
       * Get the default activation setting for the current blueprint file
       */
      String getDefaultActivation();
      
      /**
       * Get the default availability setting for the current blueprint file
       */
      String getDefaultAvailability();
      
      /**
       * Get the default timeout setting for the current blueprint file
       */
      String getDefaultTimeout();
  
      /**
       * Retrieve the set of namespaces
       */
      Set<URI> getNamespaces();
  
      /**
       * Retrieve the namespace handler for the given uri
       */
      NamespaceHandler getNamespaceHandler(URI namespaceUri);
  }
  
  