<?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.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean class="org.apache.oodt.commons.spring.postprocessor.SetIdBeanPostProcessor" />

  <!-- Command Line Actions -->
	<bean id="shutdown" class="org.apache.oodt.cas.catalog.cli.action.ShutdownCliAction">
		<property name="description" value="Shuts down the server for which the given client connects" />
	</bean>
	<bean id="query_all" class="org.apache.oodt.cas.catalog.cli.action.QueryCliAction">
		<property name="description" value="Performs a un-paged query to the server which the given client connects" />
	</bean>
	<bean id="reduced_query_all" class="org.apache.oodt.cas.catalog.cli.action.ReducedQueryCliAction">
		<property name="description" value="Performs a un-paged query to the server which the given client connects" />
	</bean>
	<bean id="query_paged" class="org.apache.oodt.cas.catalog.cli.action.PagedQueryCliAction">
		<property name="description" value="Performs a paged query to the server which the given client connects" />
	</bean>
	<bean id="reduced_query_paged" class="org.apache.oodt.cas.catalog.cli.action.ReducedPagedQueryCliAction">
		<property name="description" value="Performs a paged query to the server which the given client connects" />
	</bean>
	<bean id="load_catalogs" class="org.apache.oodt.cas.catalog.cli.action.LoadCatalogsCliAction">
		<property name="description" value="Loads the catalogs from the given spring xml file into the server for which the given client connects" />
	</bean>
	<bean id="load_catalog_repo" class="org.apache.oodt.cas.catalog.cli.action.LoadCatalogRepositoryCliAction">
		<property name="description" value="Loads the catalogs from the given repository from the given spring xml file into the server for which the given client connects" />
	</bean>
	<bean id="get_catalog_ids" class="org.apache.oodt.cas.catalog.cli.action.GetSupportedCatalogIdsCliAction">
		<property name="description" value="Gets a list of supported catalog ids from the server which the given client connects" />
	</bean>

</beans>