<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-lazy-init="true">
	
	<!-- imports -->
	<import resource="com.apldbio.sds.platform.model-config.xml"/>
	
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>hibernate.properties</value>
				<value>calibration.properties</value>
			</list>
		</property>
	</bean>
	
	<!-- alternative
	class="com.apldbio.sds.platform.eclipse.EclipseCommandExecutor"
	-->
	<bean id="eclipseCommandExecutor"
		class="com.apldbio.sds.platform.swing.util.SwingCommandExecutor"
		singleton="true">
	</bean>
	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName">
			<value>${hibernate.connection.driver_class}</value>
		</property>
		<property name="url">
			<value>${hibernate.connection.url}</value>
		</property>
		<property name="username">
			<value>${hibernate.connection.username}</value>
		</property>
		<property name="password">
			<value>${hibernate.connection.password}</value>
		</property>
		<property name="defaultAutoCommit">
			<value>false</value>
		</property>
	</bean>
	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="mappingResources">
			<list>
				<value>
					com/apldbio/sds/platform/experiment/flatwizard/model/Kit.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/experiment/Experiment.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/plate/Plate.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/feature/FeatureMap.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/sample/Sample.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/reagent/Marker.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/reagent/Allele.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/reagent/Dye.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/reagent/Detector.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/reagent/DetectorTask.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/reagent/DetectorTaskList.hbm.xml
				</value>
				<value>com/apldbio/sds/platform/tcprotocol/TCProtocol.hbm.xml
				</value>
				<value>
					com/apldbio/sds/platform/analysis/AnalysisProtocol.hbm.xml
				</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}
				</prop>
				<prop key="hibernate.jdbc.batch_size">
					${hibernate.jdbc.batch_size}
				</prop>
				<prop key="hibernate.jdbc.fetch_size">
					${hibernate.jdbc.fetch_size}
				</prop>
			</props>
		</property>
		<property name="dataSource">
			<ref bean="dataSource"/>
		</property>
	</bean>
	
	<bean id="hibernateConfiguration" factory-bean="&amp;sessionFactory"
		factory-method="getConfiguration">
	</bean>
	
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager"
		lazy-init="true">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>
	
	<bean id="sampleManagerTarget"
		class="com.apldbio.sds.platform.sample.SampleManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean id="sampleManager"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="sampleManagerTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="store">PROPAGATION_REQUIRED
				</prop>
				<prop key="delete">PROPAGATION_REQUIRED
				</prop>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly
				</prop>
				<prop key="load">PROPAGATION_REQUIRED, readOnly
				</prop>
			</props>
		</property>
	</bean>
	
	<bean id="dyeManagerTarget"
		class="com.apldbio.sds.platform.reagent.DyeManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean id="dyeManager"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="dyeManagerTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="store">PROPAGATION_REQUIRED
				</prop>
				<prop key="delete">PROPAGATION_REQUIRED
				</prop>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly
				</prop>
				<prop key="load">PROPAGATION_REQUIRED, readOnly
				</prop>
			</props>
		</property>
	</bean>

	<bean id="dyeCache"
		class="com.apldbio.sds.platform.reagent.DyeCache">
		<property name="dyeManager">
			<ref bean="dyeManager" />
		</property>
	</bean>

    <bean id="detectorManagerTarget"
		class="com.apldbio.sds.platform.reagent.DetectorManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean id="detectorManager"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="detectorManagerTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="store">PROPAGATION_REQUIRED
				</prop>
				<prop key="delete">PROPAGATION_REQUIRED
				</prop>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly
				</prop>
				<prop key="load">PROPAGATION_REQUIRED, readOnly
				</prop>
			</props>
		</property>
	</bean>
	
    <bean id="markerManagerTarget"
		class="com.apldbio.sds.platform.reagent.MarkerManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean id="markerManager"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="markerManagerTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="store">PROPAGATION_REQUIRED
				</prop>
				<prop key="delete">PROPAGATION_REQUIRED
				</prop>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly
				</prop>
				<prop key="load">PROPAGATION_REQUIRED, readOnly
				</prop>
			</props>
		</property>
	</bean>
	
	
	<bean id="tcProtocolManagerTarget"
		class="com.apldbio.sds.platform.tcprotocol.TCProtocolManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean id="tcProtocolManager"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="tcProtocolManagerTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="store">PROPAGATION_REQUIRED
				</prop>
				<prop key="delete">PROPAGATION_REQUIRED
				</prop>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly
				</prop>
				<prop key="load">PROPAGATION_REQUIRED, readOnly
				</prop>
			</props>
		</property>
	</bean>
	
	<bean id="analysisProtocolManagerTarget"
		class="com.apldbio.sds.platform.analysis.AnalysisProtocolManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean id="analysisProtocolManager"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="analysisProtocolManagerTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="store">PROPAGATION_REQUIRED
				</prop>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly
				</prop>
				<prop key="load">PROPAGATION_REQUIRED, readOnly
				</prop>
			</props>
		</property>
	</bean>
	
	<bean id="com.apldbio.sds.platform.analysis.IDDCtAnalysisSettings" class="com.apldbio.sds.platform.analysis.IDDCtAnalysisSettingsFactoryBean">
	</bean>
	
	
	<bean id="persistenceStoreTarget"
		class="com.apldbio.sds.platform.persistence.impl.HibernateStore">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<bean id="filePersistenceStore"
		class="com.apldbio.sds.platform.persistence.impl.FilePersistenceStoreDispatcher">
	</bean>
	
	<bean id="defaultTemperaturePersister"
		class="com.apldbio.sds.platform.experiment.TemperatureDataPersister">
	</bean>
	
	<bean id="persistenceStore"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="persistenceStoreTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="store">PROPAGATION_REQUIRED
				</prop>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly
				</prop>
				<prop key="load">PROPAGATION_REQUIRED, readOnly
				</prop>
			</props>
		</property>
	</bean>
	
	<!-- =================================================================== -->
	<!-- thermal protocol config -->
	<!-- =================================================================== -->
	<bean id="objectFactory"
		class="com.apldbio.sds.platform.plate.xml.ObjectFactory" singleton="true"
		lazy-init="true">
	</bean>
	
	<bean id="experimentTypeManager"
		class="com.apldbio.sds.platform.eclipse.experiment.ExperimentTypeManager"
		singleton="true">
	</bean>
  
	<bean id="wizardToolkitManager"
		class="com.apldbio.sds.platform.wizard.WizardToolkitManager"
		singleton="true">
	</bean>  
	
	<bean id="experimentContributorManager"
		class="com.apldbio.sds.platform.eclipse.experiment.EclipseExperimentContributorManager">
	</bean>
	
	<!--
	<bean id="loggerFactory" class="com.apldbio.sds.platform.log4j.Log4jLoggerFactoryFactoryBean" singleton="true">
	</bean>
	-->
	
	<bean id="plateExportFactory"
		class="com.apldbio.sds.platform.export.impl.PlateFactory" singleton="true">
	</bean>
	
	<bean id="multicomponentExportFactory"
		class="com.apldbio.sds.platform.export.impl.MulticomponentFactory" singleton="true">
	</bean>
	
	<bean id="rawdataExportFactory"
		class="com.apldbio.sds.platform.export.impl.RawDataFactory" singleton="true">
	</bean>
	
	<bean id="temperaturedataExportFactory"
		class="com.apldbio.sds.platform.export.impl.TemperatureDataFactory" singleton="true">
	</bean>
	
	<bean id="meltregionrawdataExportFactory"
		class="com.apldbio.sds.platform.export.impl.MeltRegionRawDataDataFactory" singleton="true">
	</bean>
	
	<bean id="meltregionderivativedataExportFactory"
		class="com.apldbio.sds.platform.export.impl.MeltRegionDerivativeDataDataFactory" singleton="true">
	</bean>
	
	
	<bean id="importHandler"
		class="com.apldbio.sds.platform.eclipse.experiment.importing.EclipseImportHandler">
    </bean>
	<!--
	<bean id="importHandler"
		class="com.apldbio.sds.platform.experiment.importing.ImportHandler">
		<property name="availableParsers">
			<list>
				<ref bean="rqImportParser"/>
				<ref bean="aqImportParser"/>
				<ref bean="snpImportParser"/>
			</list>
		</property>		
    </bean>
    <bean id="rqImportParser"
        class="com.apldbio.sds.experiment.gex.importing.ddct.RQParser">
    </bean>
    <bean id="aqImportParser"
        class="com.apldbio.sds.experiment.gex.importing.sc.AQParser">
    </bean>
    <bean id="snpImportParser"
        class="com.apldbio.sds.experiment.genotyping.importing.snp.SNPParser">
    </bean>
		class="com.apldbio.sds.platform.persistence.impl.SpringRepositoryManager" singleton="true">
    -->

	<bean id="repositoryManager"
		class="com.apldbio.sds.platform.persistence.impl.EclipseRepositoryManager" singleton="true">
	</bean>


	
	<bean id="instrumentErrorEvent"
		class="com.apldbio.sds.platform.instrument2.InstrumentEventType">
		<constructor-arg>
			<value>InstrumentErrorEvent</value>
		</constructor-arg>
	</bean>

	<bean id="instrumentRunCompleteEvent"
		class="com.apldbio.sds.platform.instrument2.InstrumentEventType">
		<constructor-arg>
			<value>InstrumentRunCompleteEvent</value>
		</constructor-arg>
	</bean>

	<bean id="instrumentProfileManager" singleton="true"
		class="com.apldbio.sds.platform.instrument2.service.PrefsInstrumentProfileManager">
	</bean>
	
	<bean id="quickStartPreferenceManager"
		class="com.apldbio.sds.platform.quickstart.PrefsQuickStartPreferenceManager">
	</bean>

	<bean id="domainManager"
		class="com.apldbio.sds.platform.eclipse.domain.EclipseDomainManager">
	</bean>
	
	<bean id="instrumentConsoleUseCaseController" factory-method="getInstance"
		class="com.apldbio.sds.platform.instrument2.editor.InstrumentConsoleUseCaseController" >
	</bean>

	
	<!-- =================================================================== -->
	<!--  pre-configured pipelines                                           -->
	<!-- =================================================================== -->
    <!-- shared realtime analysis pipeline. masn. -->
	<bean id="RealtimeAnalysisPipeline" class="com.apldbio.sds.platform.pipeline.AnalysisPipeline"
    	singleton="false">
    	<property name="commands">
        	<list>
				<ref local="PreprocessingTask"></ref>
				<ref local="preProcAccumulationTask"></ref>
				<ref local="MultiComponentTask"></ref>
				<ref local="CTAnalysisTask"></ref>
			</list>
		</property>
	</bean>
	
	
	<!-- =================================================================== -->
	<!--  pre-configured pipeline tasks                                      -->
	<!-- =================================================================== -->
	<!-- preproc (roi+quant) task -->
	<bean id="PreprocessingTask" class="com.apldbio.sds.platform.pipeline.PreprocessingTask" 
		singleton="true">
	</bean>

	<!-- multicomponent task -->
    <bean id="MultiComponentTask" class="com.apldbio.sds.platform.pipeline.MultiComponentTask">
		<property name="multicomponent">
			<bean class="com.apldbio.sds.platform.algorithms.multicomponent.impl.MultiComponentAnalysis" >
			     <property name="dyeDataPostProcessor">
			        <bean class="com.apldbio.sds.platform.algorithms.multicomponent.impl.NullDyeDataPostProcessor"/>
			     </property>
			</bean>
		</property>
	</bean>

	<!-- multicomponent data accumulation task -->
	<bean id="AccumulationTask" class="com.apldbio.sds.platform.pipeline.MultiComponentDataAccumulationTask">
	</bean>

	<!-- PreProcessing data accumulation task -->
	<bean id="preProcAccumulationTask" class="com.apldbio.sds.platform.pipeline.PreProcessingAccumulationTask">
	</bean>

	<!-- Rn, dRn and Ct analysis task -->
	<bean id="CTAnalysisTask" class="com.apldbio.sds.experiment.gex.pipeline.CTAnalysisTask" 
		singleton="false">
		<property name="CTAnalysis">
			<bean class="com.apldbio.sds.experiment.gex.analysis.impl.CTAnalysis" singleton="false"/>
		</property>
	</bean>
	
   <bean id="rnBasedMetricsAnalysisTask" class="com.apldbio.sds.platform.pipeline.RnBasedMetricsAnalysisTask"
      singleton="false">
      <property name="rnBasedMetricsAnalysis">
         <bean class="com.apldbio.sds.platform.algorithms.ct.impl.RnBasedMetricsAnalysis"/>
      </property>
   </bean>

	<!-- =================================================================== -->
	<!--  Module manager bean                                                -->
	<!-- =================================================================== -->
	<bean id="moduleManager" class="com.apldbio.sds.platform.eclipse.module.EclipseModuleManager">
	</bean>
	
	<!-- =================================================================== -->
	<!--  to doc                                      -->
	<!-- =================================================================== -->

    <!-- vfs manager -->
	<bean id="IInstrumentVFSManager" 
		class="com.apldbio.sds.platform.instrument.vfs.impl.EclipseInstrumentVFSManager"
		singleton= "true">
	</bean>
	
		
	<!-- This is currently the correct instrument manager to instantiate! TEB 8/11/2005 -->
	<bean id="instrumentManager"
		class="com.apldbio.sds.platform.instrument2.service.PlugableInstrumentManager"
		singleton="true">
		<property name="instrumentProfileManager">
		   <ref bean="instrumentProfileManager"/>
		</property>
		<property name="DNS">
		   <ref local="DNS"/>
		</property>
	</bean>

	
    <!-- domain name service -->
	<bean id="DNS" 
		class="com.apldbio.bonjour.DualDNSResolver"
		singleton= "true">
	</bean>
	
	<bean id="calibFactoryManager"
		class="com.apldbio.sds.platform.calibration.PlugableCalibrationManager"
		singleton="true">
	</bean>
	
	<bean id="instrumentprotocolmanager"
		class="com.apldbio.sds.platform.instrumentprotocol.PluginInstrumentProtocolManager"
		singleton="true">
	</bean>

	<bean id="experimentsupportvalidator"
		class="com.apldbio.sds.platform.experiment.DefaultExperimentSupportValidator"
		singleton="true">
	</bean>

	
</beans>