package com.tandbergtv.metadata.test.search;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tandbergtv.metadatamanager.model.Asset;
import com.tandbergtv.metadatamanager.search.AssetSearchService;
import com.tandbergtv.metadatamanager.search.FieldInfo;
import com.tandbergtv.metadatamanager.search.LogicalOperator;
import com.tandbergtv.metadatamanager.search.MetadataValueFieldInfo;
import com.tandbergtv.metadatamanager.search.SearchField;
import com.tandbergtv.metadatamanager.search.SearchInfo;
import com.tandbergtv.metadatamanager.search.SortField;
import com.tandbergtv.workflow.util.SortingOrder;

public class SortTest extends TestCase {

	private ApplicationContext context;

	@Override
	public void setUp() throws Exception {
		super.setUp();

		try {
			this.context = new ClassPathXmlApplicationContext(new String[] {
					"MetadataBeansContext.xml",
					"file:tests/MetadataManager_JTA_DBContext_UnitTest.xml",
					"file:tests/DataSource_UnitTest.xml" });
		} catch (Exception e) {
			System.out.print(e);
		}
	}

	@Override
	public void tearDown() throws Exception {
		super.tearDown();
	}
	
	public void testSort() {
		SearchInfo info = new SearchInfo();
		List<SearchField> fields = new ArrayList<SearchField>();
		
		FieldInfo field = new MetadataValueFieldInfo(
				"/tns:Fields/tns:Version/tns:Major",
				LogicalOperator.DOESNOTCONTAINUNPARSABLE, "");
		field.setAssetType("TITLE");
		fields.add(field);
		
		info.setFields(fields);

		SortField sf = new SortField();
		sf.setOrder(SortingOrder.DESCENDING);
		sf.setTtvxpath("/tns:Fields/tns:Description/tns:Text");
		sf.setAssetType("TITLE");
		
		try {
			// build query
			AssetSearchService service = (AssetSearchService) context.getBean("assetSearch");
			String query = service.getQuery("searchResults", "sortResults", info, sf);			
			// add order by clause for testing
			query += "order by ordValue DESC";
			
			System.out.println("String field search query: " + query);
			
			// get assets
			List<Asset> matchingAssets = (List<Asset>) service.search(query);
			for(Asset a : matchingAssets) {
				System.out.println(a);
			}
		} catch (Exception e) {
			System.out.println(e);
		}
	}
	
}
