<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->
<?eclipse version="3.0"?>
<plugin>
   <extension
         point="org.eclipse.ui.newWizards">
      <category
            id="org.apache.sling.ide.eclipse.ui"
            name="Sling">
      </category>
      <wizard
            category="org.apache.sling.ide.eclipse.ui"
            class="org.apache.sling.ide.eclipse.ui.wizards.np.NewSlingBundleWizard"
            icon="icons/obj16/sling.gif"
            id="org.apache.sling.ide.eclipse.ui.wizards.np.NewSlingBundleWizard"
            name="Sling Bundle Project"
            project="true">
      </wizard>
   </extension>
    <extension
         point="org.eclipse.ui.trace.traceComponents">
      <component
            id="org.eclipse.ui.trace.tracingPrefPage"
            label="Sling IDE Tooling">
         <bundle
               name="org.apache.sling.ide.eclipse-m2e-ui"></bundle>
      </component>
   </extension>
    <!-- marker to tell m2e that this plugin contains a lifecycle-mapping-metadata.xml -->
    <extension point="org.eclipse.m2e.core.lifecycleMappingMetadataSource">
    </extension>

    <extension
            point="org.eclipse.m2e.core.projectConfigurators">
        <!-- make sure this runs after the default java configurator, being provided by http://git.eclipse.org/c/m2e/m2e-core.git/tree/org.eclipse.m2e.jdt/plugin.xml#n42  -->
        <!-- the secondaryTo does only work in case the according configurator is bound to the same plugin execution -->
        <configurator
                class="org.apache.sling.ide.eclipse.m2e.internal.MavenBundlePluginProjectConfigurator"
                id="org.apache.sling.ide.eclipse.m2e.bundlePluginProjectConfigurator"
                name="Sling Bundle Configurator (for maven-bundle-plugin)"
                runsBefore="maven-bundle-plugin">
        </configurator>
        <configurator
                class="org.apache.sling.ide.eclipse.m2e.internal.BndMavenPluginProjectConfigurator"
                id="org.apache.sling.ide.eclipse.m2e.bndPluginProjectConfigurator"
                name="Sling Bundle Configurator (for bnd-maven-plugin)"
                runsAfter="org.eclipse.m2e.jdt.javaConfigurator?">
        </configurator>
        <configurator 
                id="org.apache.sling.ide.eclipse.m2e.configurator"
                class="org.apache.sling.ide.eclipse.m2e.internal.ContentPackageProjectConfigurator"
                name="Sling Content Package Configurator" />
        <configurator 
                id="org.apache.sling.ide.eclipse.m2e.slingstartConfigurator"
                class="org.apache.sling.ide.eclipse.m2e.internal.SlingstartProjectConfigurator"
                name="Sling Launchpad Configurator" />
    </extension>
    
    <!-- generic error marker (not bound to any quick fixes) for errors in any project configurators -->
    <extension point="org.eclipse.core.resources.markers"
         id="projectconfiguratorproblem" 
         name="Project Configurator Problem">
      <super type="org.eclipse.core.resources.problemmarker"/>
      <persistent value="true"/>
   </extension>
   
    <!-- custom marker used in the BundleProjectConfigurator, see http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2FresAdv_markers.htm -->
    <extension point="org.eclipse.core.resources.markers"
         id="bundleprojectnotsupportingm2e" 
         name="Bundle Project Not Supporting M2E">
      <super type="org.apache.sling.ide.eclipse-m2e-ui.projectconfiguratorproblem"/>
      <persistent value="true"/>
   </extension>
    
    <extension
         point="org.eclipse.ui.ide.markerSupport">
        <markerTypeCategory
              name="Sling IDE">
           <markerTypeReference
               id="org.apache.sling.ide.eclipse-m2e-ui.projectconfiguratorproblem">
           </markerTypeReference>
           <markerTypeReference
               id="org.apache.sling.ide.eclipse-m2e-ui.bundleprojectnotsupportingm2e">
           </markerTypeReference>
       </markerTypeCategory>
   </extension>
    
    <!--https://wiki.eclipse.org/FAQ_How_do_I_implement_Quick_Fixes_for_my_own_language%3F -->
    <extension point="org.eclipse.ui.ide.markerResolution">
      <markerResolutionGenerator
         markerType="org.apache.sling.ide.eclipse-m2e-ui.bundleprojectnotsupportingm2e"
         class="org.apache.sling.ide.eclipse.m2e.internal.BundleProjectNotSupportingM2EIncrementalBuildQuickFix"/>
   </extension>
    
	<extension point="org.eclipse.m2e.core.archetypeCatalogs">
		<remote url="http://repo1.maven.org/maven2/"
			description="Maven Central"/>
	</extension>
	
	<extension point="org.eclipse.ui.keywords">
      <keyword id="org.apache.sling.ide.eclipse.m2e" label="maven project configurator sling ide bundle content-package content-packages"/>
    </extension>
    
    <extension point="org.eclipse.core.runtime.preferences">
      <initializer class="org.apache.sling.ide.eclipse.m2e.internal.preferences.PreferencesInitializer">
      </initializer>
    </extension>
   
    <extension point="org.eclipse.ui.preferencePages">
      <page id="org.apache.sling.ide.eclipse.m2e.SlingIdePreferencePage"
            class="org.apache.sling.ide.eclipse.m2e.internal.MavenProjectConfiguratorPreferencesPage"
            name="Maven Project Configurator"
            category="org.apache.sling.ide.eclipse.ui.SlingIdePreferencePage">
         <keywordReference id="org.apache.sling.ide.eclipse.m2e"/>
      </page>
    </extension>
</plugin>
