<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<!--
 #=============================================================================#
 # Copyright (c) 2007, 2020 Stephan Wahlbrink and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================#
-->

<plugin>
   
   <extension-point id="org.eclipse.statet.autonature.AutoConfigurations" 
         name="Auto Project Configurations"
         schema="schema/AutoConfigurations.exsd"/>
   
   <extension
         point="org.eclipse.ui.startup">
      <startup
            class="org.eclipse.statet.internal.eutils.autonature.nostart.AutoNatureStartup">
      </startup>
   </extension>
   
   <extension
         point="org.eclipse.ui.keywords">
      <keyword
            id="org.eclipse.statet.autonature.keywords.project"
            label="project nature">
      </keyword>
   </extension>
   <extension
         point="org.eclipse.ui.preferencePages">
      <page
            id="org.eclipse.statet.autonature.preferencePages.Config"
            category="org.eclipse.ui.preferencePages.Workspace"
            class="org.eclipse.statet.internal.eutils.autonature.AutoNaturePreferencePage"
            name="%preferencePages_name">
         <keywordReference
               id="org.eclipse.statet.autonature.keywords.project">
         </keywordReference>
      </page>
   </extension>
   
   <extension
         point="org.eclipse.ui.commands">
      <command
            id="org.eclipse.statet.autonature.commands.DetectAndConfigureProject"
            categoryId="org.eclipse.ui.category.project"
            name="%commands_DetectAndConfigureProject_name">
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.handlers">
      <handler
            commandId="org.eclipse.statet.autonature.commands.DetectAndConfigureProject"
            class="org.eclipse.statet.internal.eutils.autonature.wizards.ConfigureProjectHandler">
         <activeWhen>
            <with
                  variable="activeMenuSelection">
               <or>
                  <and>
                     <count
                           value="1"/>
                     <iterate>
                        <adapt
                              type="org.eclipse.core.resources.IProject"/>
                     </iterate>
                  </and>
                  <and>
                     <count
                           value="!"/>
                     <with
                           variable="activeSelection">
                        <count
                              value="1"/>
                        <iterate>
                           <adapt
                                 type="org.eclipse.core.resources.IProject"/>
                        </iterate>
                     </with>
                  </and>
               </or>
            </with>
         </activeWhen>
      </handler>
   </extension>
   
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            locationURI="popup:org.eclipse.ui.projectConfigure">
         <command
               commandId="org.eclipse.statet.autonature.commands.DetectAndConfigureProject"
               style="push">
         </command>
      </menuContribution>
   </extension>
   
</plugin>
