<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  ~ 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.
  -->
<plexus>
  <components>
    <component>
      <role>org.codehaus.plexus.registry.Registry</role>
      <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
      <role-hint>commons-configuration</role-hint>
      <configuration>
        <properties>
          <system/>
          <jndi prefix="java:comp/env" config-optional="true"/>
          <xml fileName="${appserver.base}/conf/shared.xml" config-optional="true"
               config-name="org.apache.maven.shared.app.user" config-at="org.apache.maven.shared.app"
               config-forceCreate="true"/>
          <properties fileName="${appserver.base}/conf/security.properties" config-optional="true"
                      config-at="org.codehaus.plexus.redback"/>
          <!-- Defaults -->
          <properties fileName="org/apache/maven/continuum/security.properties" config-at="org.codehaus.plexus.redback"/>
        </properties>
      </configuration>
    </component>
  

    <!--
    | The mail notifier
    |-->
    <component>
      <role>org.apache.maven.continuum.notification.Notifier</role>
      <role-hint>mail</role-hint>
      <implementation>org.apache.maven.continuum.notification.mail.MailContinuumNotifier</implementation>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.velocity.VelocityComponent</role>
        </requirement>
        <requirement>
          <role>org.apache.continuum.dao.ProjectDao</role>
        </requirement>
        <requirement>
          <role>org.apache.continuum.dao.BuildResultDao</role>
        </requirement>
        <requirement>
          <role>mailSender</role>
          <role-hint>continuum</role-hint>
        </requirement>
        <requirement>
          <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.continuum.Continuum</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.continuum.reports.surefire.ReportTestSuiteGenerator</role>
          <field-name>reportTestSuiteGenerator</field-name>
          <role-hint>default</role-hint>
        </requirement>        
      </requirements>
      <configuration>
        <from-mailbox></from-mailbox>
        <from-name></from-name>
        <timestamp-format>EEE d MMM yyyy HH:mm:ss Z</timestamp-format>
        <!-- Customizable mail subject.  Use any combination of literal text, or state, project, or build attributes.
          Examples: 
            "[continuum] BUILD ${state}: ${project.groupId} ${project.name}"
              results in "[continuum] BUILD SUCCESSFUL: foo.bar Hello World"
            
            "[continuum] BUILD ${state}: ${project.name} ${project.scmTag}" 
              results in "[continuum] BUILD SUCCESSFULL: Hello World Branch001"
            
            "[continuum] BUILD ${state}: ${project.name} ${project.version}" 
              results in "[continuum] BUILD SUCCESSFUL: Hello World 2.1-SNAPSHOT"
            
            "[continuum] BUILD ${state}: ${project.name} ${build.durationTime}" 
              results in "[continuum] BUILD SUCCESSFUL: Hello World 2 sec"
            
            "[continuum] BUILD ${state}: ${project.name}, Build Def - ${build.buildDefinition.description}" 
              results in "[continuum] BUILD SUCCESSFUL: Hello World, Build Def - Nightly Test Build"
         -->
        <subject-format>[continuum] BUILD ${state}: ${project.projectGroup.name} - ${project.name} - ${build.buildDefinition.description}</subject-format>
        <includeBuildResult>true</includeBuildResult>
        <includeBuildSummary>true</includeBuildSummary>
        <includeTestSummary>true</includeTestSummary>
        <includeOutput>false</includeOutput>
        <alwaysSend>false</alwaysSend>
        <!--
        Setting this propery will make Continuum send all emails to
        this address instead the address specified in the project
        configuration
        -->        
        <toOverride></toOverride>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.jabber.JabberClient</role>
      <implementation>org.codehaus.plexus.jabber.DefaultJabberClient</implementation>
    </component>

    <component>
      <role>org.codehaus.plexus.msn.MsnClient</role>
      <implementation>org.codehaus.plexus.msn.DefaultMsnClient</implementation>
    </component>

    <!--
    | Velocity component used by the mail notifier
    |-->
    <component>
      <role>org.codehaus.plexus.velocity.VelocityComponent</role>
      <implementation>org.codehaus.plexus.velocity.DefaultVelocityComponent</implementation>
      <configuration>
        <properties>
          <property>
            <name>resource.loader</name>
            <value>threadContext</value>
          </property>
          <property>
            <name>threadContext.resource.loader.class</name>
            <value>org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader</value>
          </property>
          <property>
            <name>velocimacro.library</name>
            <value>org/apache/maven/continuum/notification/mail/templates/common.vm</value>
          </property>
        </properties>
      </configuration>
    </component>

    <component>
      <role>org.apache.maven.continuum.web.util.WorkingCopyContentGenerator</role>
      <implementation>org.apache.maven.continuum.web.util.WorkingCopyContentGenerator</implementation>
    </component>

    <component>
      <role>org.apache.maven.continuum.utils.ContinuumUrlValidator</role>
      <role-hint>continuumUrl</role-hint>
      <implementation>org.apache.maven.continuum.utils.ContinuumUrlValidator</implementation>
      <configuration>
        <allowedSchemes>
          <allowedScheme>http</allowedScheme>
          <allowedScheme>https</allowedScheme>
          <allowedScheme>ftp</allowedScheme>
          <!-- <allowedScheme>file</allowedScheme> -->
        </allowedSchemes>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.jdo.JdoFactory</role>
      <role-hint>users</role-hint>
      <implementation>org.codehaus.plexus.jdo.DataSourceConfigurableJdoFactory</implementation>
      <configuration>

        <connectionFactoryName>java:comp/env/jdbc/users</connectionFactoryName>
        <shutdownConnectionFactoryName>java:comp/env/jdbc/usersShutdown</shutdownConnectionFactoryName>

        <!-- JPOX and JDO configuration -->
        <persistenceManagerFactoryClass>org.jpox.PersistenceManagerFactoryImpl</persistenceManagerFactoryClass>
        <otherProperties>
          <property>
            <name>org.jpox.autoCreateSchema</name>
            <value>true</value>
          </property>
          <property>
            <name>org.jpox.validateTables</name>
            <value>false</value>
          </property>
          <property>
            <name>org.jpox.validateConstraints</name>
            <value>false</value>
          </property>
          <property>
            <name>org.jpox.validateColumns</name>
            <value>false</value>
          </property>
          <property>
            <name>org.jpox.autoStartMechanism</name>
            <value>None</value>
          </property>
          <property>
            <name>org.jpox.transactionIsolation</name>
            <value>READ_COMMITTED</value>
          </property>
          <property>
            <name>org.jpox.poid.transactionIsolation</name>
            <value>READ_COMMITTED</value>
          </property>
          <property>
            <name>org.jpox.rdbms.dateTimezone</name>
            <value>JDK_DEFAULT_TIMEZONE</value>
          </property>
<!--
          <property>
            <name>org.jpox.identifier.case</name>
            <value>PreserveCase</value>
          </property>
-->
        </otherProperties>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.jdo.JdoFactory</role>
      <implementation>org.codehaus.plexus.jdo.DataSourceConfigurableJdoFactory</implementation>
      <role-hint>continuum</role-hint>
      <configuration>
        <connectionFactoryName>java:comp/env/jdbc/continuum</connectionFactoryName>
        <shutdownConnectionFactoryName>java:comp/env/jdbc/continuum_shutdown</shutdownConnectionFactoryName>

        <persistenceManagerFactoryClass>org.jpox.PersistenceManagerFactoryImpl</persistenceManagerFactoryClass>

        <otherProperties>
          <!-- uncomment this property for mssql support - CONTINUUM-697 -->
          <!-- property>
            <name>javax.jdo.option.Mapping</name>
            <value>mssql</value>
          </property -->
          <property>
            <name>org.jpox.autoCreateSchema</name>
            <value>true</value>
          </property>
          <property>
            <name>org.jpox.validateTables</name>
            <value>false</value>
          </property>
          <property>
            <name>org.jpox.validateColumns</name>
            <value>false</value>
          </property>
          <property>
            <name>org.jpox.validateConstraints</name>
            <value>false</value>
          </property>
          <property>
            <name>org.jpox.autoStartMechanism</name>
            <value>None</value>
          </property>
          <property>
            <name>org.jpox.transactionIsolation</name>
            <value>READ_COMMITTED</value>
          </property>
          <property>
            <name>org.jpox.poid.transactionIsolation</name>
            <value>READ_COMMITTED</value>
          </property>
          <!-- this is required for some MySQL versions and configurations, see CONTINUUM-1113 -->
          <property>
            <name>org.jpox.rdbms.stringDefaultLength</name>
            <value>255</value>
          </property>
          <property>
            <name>org.jpox.autoCreateColumns</name>
            <value>true</value>
          </property>
			
<!--
          <property>
            <name>org.jpox.identifier.case</name>
            <value>PreserveCase</value>
          </property>
-->
        </otherProperties>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.scheduler.Scheduler</role>
      <implementation>org.codehaus.plexus.scheduler.DefaultScheduler</implementation>
      <role-hint>default</role-hint>
      <configuration>
        <properties>
          <property>
            <name>org.quartz.scheduler.instanceName</name>
            <value>continuumScheduler</value>
          </property>
          <property>
            <name>org.quartz.threadPool.class</name>
            <value>org.quartz.simpl.SimpleThreadPool</value>
          </property>
          <property>
            <name>org.quartz.threadPool.threadCount</name>
            <value>7</value>
          </property>
          <property>
            <name>org.quartz.threadPool.threadPriority</name>
            <value>4</value>
          </property>
          <property>
            <name>org.quartz.jobStore.class</name>
            <value>org.quartz.simpl.RAMJobStore</value>
          </property>
        </properties>
      </configuration>
    </component>

    <!--
     | Logger manager
     -->
    <component>
      <role>org.codehaus.plexus.logging.LoggerManager</role>
      <implementation>org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager</implementation>
      <lifecycle-handler>basic</lifecycle-handler>
    </component>

    <!-- START SNIPPET: ldap -->
    <!-- 
       Ldap Authentication can be enabled by setting enabling these components and setting the following configuration options in your security.properties file

       ============================================================
       user.manager.impl=ldap
       ldap.bind.authenticator.enabled=true
       redback.default.admin=admin
       redback.default.guest=guest
       security.policy.password.expiration.enabled=false

       ldap.config.hostname=ldap.hostname
       ldap.config.port=389
       ldap.config.base.dn=o=com
       ldap.config.context.factory=com.sun.jndi.ldap.LdapCtxFactory
       ldap.config.bind.dn=uid=myusername,o=com
       ldap.config.password=s3cr3t
       #ldap.config.authentication.method=
       ============================================================

       * ldap.config.hostname - The hostname of the ldap server
       * ldap.config.port - The port of the ldap server
       * ldap.config.base.dn - The baseDn of the ldap system
       * ldap.config.context.factory - context factory for ldap connections
       * ldap.config.bind.dn - the core user used for authentication the ldap server, must be able to perform the necessary searches, etc.
       * ldap.config.password - password for the bindDn for the root ldap connection

       until this process is better documented, the following is the document for configuration ldap with redback
      
       http://redback.codehaus.org/integration/ldap.html
    -->

    <!--
    
    this component manages the connection to the ldap server
     -->

    <!-- component>
      <role>org.codehaus.plexus.redback.common.ldap.connection.LdapConnectionFactory</role>
      <role-hint>configurable</role-hint>
      <implementation>org.codehaus.plexus.redback.common.ldap.connection.ConfigurableLdapConnectionFactory</implementation>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.redback.configuration.UserConfiguration</role>
        </requirement>
      </requirements>
    </component-->
    
    <!-- 
    
    this component manages the mapping of attributes in ldap to user information in redback. To configure the mapping, you can add the following properties in your security.properties

       ============================================================
       ldap.config.mapper.attribute.email=mail
       ldap.config.mapper.attribute.fullname=givenName
       ldap.config.mapper.attribute.password=userPassword
       ldap.config.mapper.attribute.user.id=cn
       ldap.config.mapper.attribute.user.base.dn=
       ldap.config.mapper.attribute.user.object.class=inetOrgPerson
       ldap.config.mapper.attribute.user.filter=(attributeName=value)
       ============================================================


     * email-attribute - The name of the attribute on a user that contains the email address
     * full-name-attribute - The name of the attribute on a user that contains the users fullName
     * password-attribute - The name of the attribute containing the users password, used for the authentiction using the user manager and not the ldap bind authenticator
     * user-id-attribute - The name of the attribute containing the users userId, most commonly cn or sn.
     * user-base-dn - The base dn that will be subtree searched for users.
     * user-object-class - the objectClass used in the ldap server for indentifying users, most commonly inetOrgPerson.
     -->
    
    <!-- component>
      <role>org.codehaus.plexus.redback.common.ldap.UserMapper</role>
      <role-hint>ldap</role-hint>
      <implementation>org.codehaus.plexus.redback.common.ldap.LdapUserMapper</implementation>
      <configuration>
        <email-attribute>email</email-attribute>
        <full-name-attribute>givenName</full-name-attribute>
        <password-attribute>userPassword</password-attribute>
        <user-id-attribute>cn</user-id-attribute>
        <user-base-dn>o=com</user-base-dn>
        <user-object-class>inetOrgPerson</user-object-class>
      </configuration>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.redback.configuration.UserConfiguration</role>
        </requirement>
      </requirements>
    </component-->
    
    <!--
     
    If caching is desired to improve performance then make uncomment this and make sure the following configuration parameter is in the security.properties
     
    user.manager.impl=cached
    -->
     
    <!-- component>
      <role>org.codehaus.plexus.redback.users.UserManager</role>
      <role-hint>cached</role-hint>
      <implementation>org.codehaus.plexus.redback.users.cached.CachedUserManager</implementation>
      <description>CachedUserManager</description>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.redback.users.UserManager</role>
          <role-hint>ldap</role-hint>
          <field-name>userImpl</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.cache.Cache</role>
          <role-hint>users</role-hint>
          <field-name>usersCache</field-name>
        </requirement>
      </requirements>
    </component-->
    
    <!-- 
    
    if using the user manager authenticator to authenticate the user and not the ldap bind authenticator make sure
    this definition has the correct password encoder
    
    Note: you should probably just use the ldap bind authenticator which is enabled by putting
    
    ldap.bind.authenticator.enabled=true
    
    in the security.properties
    -->
    
    <!-- component>
      <role>org.codehaus.plexus.redback.policy.UserSecurityPolicy</role>
      <role-hint>default</role-hint>
      <implementation>org.codehaus.plexus.redback.policy.DefaultUserSecurityPolicy</implementation>
      <description>User Security Policy.</description>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.redback.configuration.UserConfiguration</role>
          <field-name>config</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.redback.policy.PasswordEncoder</role>
          <role-hint>sha1</role-hint>
          <field-name>passwordEncoder</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.redback.policy.UserValidationSettings</role>
          <field-name>userValidationSettings</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.redback.policy.CookieSettings</role>
          <role-hint>rememberMe</role-hint>
          <field-name>rememberMeCookieSettings</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.redback.policy.CookieSettings</role>
          <role-hint>signon</role-hint>
          <field-name>signonCookieSettings</field-name>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.redback.policy.PasswordRule</role>
          <field-name>rules</field-name>
        </requirement>
      </requirements>
    </component-->
    <!-- END SNIPPET: ldap -->
  </components>

  <lifecycle-handler-manager implementation="org.codehaus.plexus.lifecycle.DefaultLifecycleHandlerManager">
    <default-lifecycle-handler-id>plexus</default-lifecycle-handler-id>
    <lifecycle-handlers>
      <lifecycle-handler implementation="org.codehaus.plexus.personality.plexus.PlexusLifecycleHandler">
        <id>plexus</id>
        <name>Plexus Lifecycle Handler</name>
        <begin-segment>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.LogEnablePhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.CompositionPhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.ContextualizePhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.AutoConfigurePhase"/>
          <phase implementation="org.codehaus.plexus.registry.RegistryConfigurePhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.ServiceablePhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializePhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.StartPhase"/>
        </begin-segment>
        <suspend-segment>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.SuspendPhase"/>
        </suspend-segment>
        <resume-segment>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.ResumePhase"/>
        </resume-segment>
        <end-segment>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.StopPhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.DisposePhase"/>
          <phase implementation="org.codehaus.plexus.personality.plexus.lifecycle.phase.LogDisablePhase"/>
        </end-segment>
      </lifecycle-handler>
    </lifecycle-handlers>
  </lifecycle-handler-manager>
</plexus>
