<?xml version="1.0"?>
<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed 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.
 */
 -->

<document>

 <properties>
  <title>Turbine Services - Assembler Broker Service</title>
 </properties>

<body>

<section name="Assembler Broker Service">

<p>
In Turbine <strong>assemblers</strong> are the basis for all the
module types: pages, layouts, screens, navigations, and scheduled
jobs. The way that these module types fits together is defined in
the Turbine <a href="../fsd.html">specification</a> document.
</p>

<p>
The Assembler Broker Service allows these module types to
be loaded by one or more AssemblerFactory implementations.
</p>

</section>

<section name="Configuration">

<source><![CDATA[
# -------------------------------------------------------------------
# 
#  S E R V I C E S
#
# -------------------------------------------------------------------
# Classes for Turbine Services should be defined here.
# Format: services.[name].classname=[implementing class]
#
# To specify properties of a service use the following syntax:
# service.[name].[property]=[value]

services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
.
.
.

# -------------------------------------------------------------------
# 
#  A S S E M B L E R  B R O K E R  S E R V I C E
#
# -------------------------------------------------------------------
# A list of AssemblerFactory classes that will be registered 
# with TurbineAssemblerBrokerService
# -------------------------------------------------------------------

services.AssemblerBrokerService.screen=org.apache.turbine.util.assemblerbroker.java.JavaScreenFactory
services.AssemblerBrokerService.screen=org.apache.turbine.util.assemblerbroker.python.PythonScreenFactory
services.AssemblerBrokerService.action=org.apache.turbine.util.assemblerbroker.java.JavaActionFactory
services.AssemblerBrokerService.layout=org.apache.turbine.util.assemblerbroker.java.JavaLayoutFactory
services.AssemblerBrokerService.page=org.apache.turbine.util.assemblerbroker.java.JavaPageFactory
services.AssemblerBrokerService.navigation=org.apache.turbine.util.assemblerbroker.java.JavaNavigationFactory
services.AssemblerBrokerService.scheduledjob=org.apache.turbine.util.assemblerbroker.java.JavaScheduledJobFactory
]]></source>

</section>

<section name="Usage">

<p>
This service is used internally within Turbine. Therefore, we do not
document its usage here. It is best to simply look at the source code,
read the Javadocs and follow the logic.
</p>

</section>

</body>
</document>
