<?xml version="1.0" encoding="UTF-8"?>
<plugin
   id="org.eclipse.jem.beaninfo"
   name="%pluginName"
   version="1.0.0"
   provider-name="%providerName"
   class="org.eclipse.jem.internal.beaninfo.adapters.BeaninfoPlugin">

   <runtime>
      <library name="beaninfo.jar">
         <export name="*"/>
         <packages prefixes="org.eclipse.jem.internal.beaninfo"/>
      </library>
   </runtime>
   <requires>
      <import plugin="org.eclipse.jem.proxy"/>
      <import plugin="com.ibm.etools.emf.event"/>
      <import plugin="org.eclipse.jdt.core"/>
      <import plugin="org.apache.xerces"/>
      <import plugin="org.eclipse.jem.workbench"/>
      <import plugin="org.eclipse.core.resources"/>
      <import plugin="org.eclipse.jdt.launching"/>
      <import plugin="org.eclipse.emf.ecore"/>
      <import plugin="org.eclipse.jem"/>
      <import plugin="org.eclipse.emf.ecore.xmi"/>
      <import plugin="com.ibm.wtp.common.util"/>
      <import plugin="com.ibm.wtp.emf.workbench"/>
      <import plugin="org.eclipse.osgi"/>
      
   </requires>


<!-- This extension point is for registering beaninfos based on classpath variable paths.
        Format is:
        <extension point="org.eclipse.jem..beaninfo.registrations">
          <variable path="avariablename" (or path="avariablename/something.jar")
               contributor="classname of an IConfigurationContributor">
            <beaninfos>
              <beaninfo kind="plugin" path="/apluginid/something.jar">
                <searchpath package="com.sun.corba.se.internal.ior"/>
                <searchpath package="org.eclipse.jem.beaninfo.testing.infos.project"/>
              </beaninfo>
              <searchpath package="com.sun.corba.se.internal.ior"/>
            </beaninfos>
          </variable>
        </extension>
        
        If it is of type "avariablename", then this info will be used for all variable classpath entries
        that start with this variable. This allows several bean class jars that are subpaths
        of a variable to share the same beaninfo information.
        
        If it is of type "avariablename/...", then this info will be used only for this particular
        path.
        
        If contributor is set, then using standard IExecutableExtension protocol, the contributor will
        instantiated and will be able to contribute to the remote vm. It needs to implement
        org.eclipse.jem.internal.proxy.core.IConfigurationContributor and can implement org.eclipse.core.runtime.IExecutableExtension
        if it needs parameters or to be called with the standard extension initialize information.
        
        There can be more than one for the same path, they will be concatenated together. Probably
        shouldn't do this in the same plugin, but it allows multiple plugins to contribute beaninfos
        to the same variable path. Though the final order is indeterminate since it is the order
        the extension points are processed.
        
        The <beaninfo> refer to the classes location that contains the beaninfo classes themselves
        to use with this variable path. There can be more than one. The <searchpath> within these are
        the searchpaths to use (in the order given) for that beaninfo class location.
        
        The <searchpath> not under a <beaninfo> are for when the beaninfo classes are located in the 
        jar the variable path points to. The jar in the variable path is in the actual project's
        classpath and buildpath. So in this the beaninfo classes are there too. This allows the packages
        to be added to the searchpath. -->
   <extension-point id="registrations" name="Registration of pre-defined beaninfos"/>
<!-- This extension point is registering beaninfo override xmi files. This documents will be used
        to pre-populate the beaninfos. Then they can say that the beaninfos from the remove vm
        are to merge into these beaninfos, or they can actually turn off introspection on the 
        remote vm on a per-class basis. The format is:
        
        <extension point="org.eclipse.jem.beaninfo.overrides">
          <override package="java" path="xyz/java"/>
          <override package="java.awt" path="xyzq/java/awt"/>          
        </extension>
        
        The package is matched on package for a class, and if it matches, it will take the
        path and append the non-matched portion of the package and class name and attach ".xmi" and see if that file exists. If it does, then that file is
        loaded with the overrides. It will search through all of the extensions with matching
        packages and applies them all. The order is indeterminate so the individual ones should
        not rely on ones from a different extension being applied first.
        
        A match is if the package of the class starts with a package from the overrides. For example,
        "java.awt.Component" will match overrides "java" and "java.awt". It will not match "java.a".
        It needs to match on a package fragment boundary (i.e. on the parts seperated by a period).
        
        So in the above example, if the class is java.awt.Component it will look for a file
        named "xyz/java/awt/Component.xmi". It will also match the second one, so it will also
        look for "yyzq/java/awt/Component.xmi".
        
        This allows you to have one directory for the lowest common part of your package names,
        and they would all be found in subdirectories of this.
        
        There is a special package mapping, called "..ROOT..". This is used to override java.lang.Object and
        any interface. It will use the ..ROOT...xmi file in the path, and it will apply the specified overrides
        to the java.lang.Object or the interface. This is used to apply a common consistent set of features
        to the root objects (Object and Interfaces are all root objects, i.e. there is no super type of these).
        In the diff file, to reference the root object in question, use notifier="#..ROOT..". An example extension point would be:
        
        <extension point="org.eclipse.jem.beaninfo.overrides">
          <override package="..ROOT.." path="platform:/plugin/myplugin/overrides"/>
        </extension>
        
        So in this case it will look for the file "platform:/plugin/myplugin/overrides/..ROOT...xmi".
        
        Since these can be in plugin directories, the path
        can use the "platform:/plugin/.../" format or it 
        can use the EMF URI Mapping extension point to access files within a plugin.
        -->
   <extension-point id="overrides" name="Registration of beaninfo override documents"/>

   <extension
         id="BeanInfoNature"
         name="%beaninfoNatureName"
         point="org.eclipse.core.resources.natures">
      <runtime>
         <run
               class="org.eclipse.jem.internal.beaninfo.adapters.BeaninfoNature">
         </run>
      </runtime>
   </extension>
   <extension
         point="org.eclipse.emf.ecore.generated_package">
      <package
            uri="http:///org/eclipse/jem/internal/beaninfo.ecore"
            class="org.eclipse.jem.internal.beaninfo.BeaninfoPackage">
      </package>
   </extension>
   <extension
         point="org.eclipse.team.core.fileTypes">
      <fileTypes
            type="text"
            extension="beaninfoConfig">
      </fileTypes>
      <fileTypes
            type="text"
            extension="override">
      </fileTypes>
   </extension>

</plugin>
