<?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>org.codehaus.plexus.mailsender.MailSender</role>
        </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>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.notification.RecipientSource</role>
      <implementation>org.apache.maven.continuum.notification.ContinuumRecipientSource</implementation>
      <configuration>
        <!--
        Setting this propery will make Continuum send all emails to
        this address instead the address specified in the project
        configuration
        -->
        <to-override></to-override>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.mailsender.MailSender</role>
      <implementation>org.codehaus.plexus.mailsender.javamail.JndiJavamailMailSender</implementation>
      <configuration>
        <jndiSessionName>java:comp/env/mail/Session</jndiSessionName>
      </configuration>
    </component>

    <!--
    | The jabber notifier
    |-->
    <component>
      <role>org.apache.maven.continuum.notification.Notifier</role>
      <role-hint>jabber</role-hint>
      <implementation>org.apache.maven.continuum.notification.jabber.JabberContinuumNotifier</implementation>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.jabber.JabberClient</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
        </requirement>
        <requirement>
          <role>org.apache.continuum.dao.ProjectDao</role>
        </requirement>
        <requirement>
          <role>org.apache.continuum.dao.BuildResultDao</role>
        </requirement>
      </requirements>
      <configuration>
        <alwaysSend>false</alwaysSend>
        <!-- from-address/>
        <from-password/>
        <host/>
        <port/>
        <sslConnection>true</sslConnection -->
      </configuration>
    </component>

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

    <!--
    | The MSN notifier
    |-->
    <component>
      <role>org.apache.maven.continuum.notification.Notifier</role>
      <role-hint>msn</role-hint>
      <implementation>org.apache.maven.continuum.notification.msn.MsnContinuumNotifier</implementation>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.msn.MsnClient</role>
        </requirement>
        <requirement>
          <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
        </requirement>
        <requirement>
          <role>org.apache.continuum.dao.ProjectDao</role>
        </requirement>
        <requirement>
          <role>org.apache.continuum.dao.BuildResultDao</role>
        </requirement>
      </requirements>
      <configuration>
        <alwaysSend>false</alwaysSend>
        <!-- from-address/>
        <from-password/ -->
      </configuration>
    </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.ehcache.EhcacheComponent</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>
