<?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.
*#
<componentConfig>
    <!-- Torque Component -->
    <torque>
       <configfile>/WEB-INF/conf/Torque.properties</configfile>
    </torque>
    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>
    <mimetype/>
    <crypto>
      <algorithm>
        <unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>
        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>
      </algorithm>
    </crypto>
    <localization>
      <bundles>
        <bundle>${package}.L10N</bundle>
      </bundles>
    </localization>
    <!-- Disable if you experience startup problems with Java8 -->
    <intake>
      <serialDataPath>WEB-INF/appData.ser</serialDataPath>
      <xmlPaths>
        <xmlPath>WEB-INF/conf/${turbine_intake_file}</xmlPath>
      </xmlPaths>
    </intake>
    <factory/>
    <pool/>
    <parser>
        <!-- <urlCaseFolding>lower</urlCaseFolding> -->
        <parameterEncoding>utf-8</parameterEncoding>
        <automaticUpload>true</automaticUpload>
    </parser>
    <!-- defining specific inspectors -->
    <json>
       <annotationInspectors>
            <primary>org.apache.fulcrum.json.jackson.SimpleNameIntrospector</primary>
            <secondary>com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector</secondary>
            <features>
              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">FAIL_ON_EMPTY_BEANS</feature>
              <feature value="false" type="com.fasterxml.jackson.databind.SerializationFeature">INDENT_OUTPUT</feature>
              <feature value="true" type="com.fasterxml.jackson.core.JsonParser">ALLOW_UNQUOTED_FIELD_NAMES</feature>
            </features>
        </annotationInspectors>
        <dateFormat>MM/dd/yyyy</dateFormat>
        <cacheFilters>true</cacheFilters>
        <!-- security feature -->
        <escapeCharsGlobal>true</escapeCharsGlobal>
        <!--  escapeCharsClass>net.example.EscapeCharClass</escapeCharsClass -->
        <defaultTyping type="OBJECT_AND_NON_CONCRETE" key="type"/><!-- defaultTyping type="NON_FINAL" key="type"/-->
        <!-- requires com.jayway dependency in pom -->
        <!-- useJsonPath>true</useJsonPath -->
    </json>
    
    <upload repository="/tmp" sizeMax="1048576" sizeThreshold="10240"/>
        <!-- These components belong to the Fulcrum-Security services -->        
    <securityService/>
    <authenticator/>
    <!--   <authenticator>
          <algorithm>java</algorithm>
          <cipher>SHA1</cipher>    </authenticator>   -->

    <modelManager/>
    <aclFactory/>
    
    <!--  
       Fulcrum Components, e.g. json, XmlRpcServerComponent, cft. Fulcrum Component Configurations 
     -->
       
     
     <!--  
     Pure Fulcrum Model
    -->
    <!--
     <userManager> 
       <className>org.apache.fulcrum.security.torque.om.TorqueTurbineUser</className>
    </userManager>
    <groupManager>
        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineGroup</className>
    </groupManager>
    <roleManager>
        <className>org.apache.fulcrum.security.torque.om.TorqueTurbineRole</className>
    </roleManager>
    <permissionManager>
        <className>org.apache.fulcrum.security.torque.om.TorqueTurbinePermission</className>
    </permissionManager>
    -->
 
     <!-- 
     Default classes implementing org.apache.fulcrum.security.model.turbine.entity interfaces 
     -->
    <!--userManager>
        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl</className>
    </userManager>
    <groupManager>
        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineGroupImpl</className>
    </groupManager>
    <roleManager>
        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbineRoleImpl</className>
    </roleManager>
    <permissionManager>
        <className>org.apache.fulcrum.security.model.turbine.entity.impl.TurbinePermissionImpl</className>
    </permissionManager -->
    
    <!-- 
     Custom Turbine ORM Torque classes could not yet be used: 
     - requires Torque 4.1 or if using Torque 4.0 reqires manually adding the interfaces in T-classes
     - requires attribute baseClass in fulcrum-turbine-schema.xml table elements set to appropriate org.apache.fulcrum.security.model.turbine.entity interfaces
     - requires attribute peerClass in fulcrum-turbine-schema.xml table elements set to org.apache.fulcrum.security.torque.peer.TorqueTurbinePeer 
     -->
     
     <userManager>
        <className>${package}.om.TurbineUser</className>
        <peerClassName>${package}.om.TurbineUserPeerImpl</peerClassName>
        <userGroupRoleManager><!-- using custom peers requires now since fulcrum security 1.1.2 this element -->
	        <!-- className>org.apache.fulcrum.security.torque.om.TurbineUserGroupRole</className-->
	        <peerClassName>${package}.om.TurbineUserGroupRolePeerImpl</peerClassName>
	    </userGroupRoleManager>
    </userManager>
    <groupManager><!-- might have lazy="true" attribute -->
        <className>${package}.om.TurbineGroup</className>
        <peerClassName>${package}.om.TurbineGroupPeerImpl</peerClassName>
    </groupManager>
    <roleManager><!-- might have lazy="true" attribute -->
        <className>${package}.om.TurbineRole</className>
        <peerClassName>${package}.om.TurbineRolePeerImpl</peerClassName>
    </roleManager>
    <permissionManager>
        <className>${package}.om.TurbinePermission</className>
        <peerClassName>${package}.om.TurbinePermissionPeerImpl</peerClassName>
    </permissionManager>
     <peerManager/>
     
</componentConfig>