using System;
using System.Collections;
using Plumtree.Remote.PRC;
using Plumtree.Remote.PRC.Search;

namespace SimpleSearch
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class Search
	{
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			if (args.Length < 4)
			{
				Console.Write("usage: SimpleSearch: soapendpoint username password querystring\n" +
					"For example: http://IP-GW-AS08:9080/ptapi/services/QueryInterfaceAPI Administrator plumtree *.doc");

				return;
			}

			try
			{
				String url = args[0];
				String username = args[1];
				String password = args[2];
				IRemoteSession session =
					RemoteSessionFactory.GetExplicitLoginContext(
					new System.Uri(url),
					username,
					password);
				ISearchFactory searchFactory = session.GetSearchFactory();
				IPortalSearchRequest searchRequest = searchFactory.CreatePortalSearchRequest();
				searchRequest.SetQuery(args[3]);
				searchRequest.SetResultsCount(0, 10);
				ISearchResponse searchResponse = searchRequest.Execute();

				//get information about the number of results returned
				Console.Write("Total matches is " + searchResponse.GetTotalCount());
				Console.Write("First result is " + searchResponse.GetFirstResultIndex());
				Console.Write("Number returned is " + searchResponse.GetReturnedCount());

				//iterate through the results
				ISearchResultSet resultSet = searchResponse.GetResultSet();
				IEnumerator results = resultSet.GetResults();
				while (results.MoveNext())
				{
					Console.Write("--------------------------------------------------");
					IPortalSearchResult result = (IPortalSearchResult) results.Current;
					Console.Write("name is " + result.GetName());
					Console.Write("class id is " + result.GetClassID());
					Console.Write("created is " + result.GetCreated());
					Console.Write("excerpt is " + result.GetExcerpt());
					Console.Write("last modified is " + result.GetLastModified());
					Console.Write("object id is " + result.GetObjectID());
					Console.Write("url is " + result.GetURL());
					Console.Write("icon url is " + result.GetIconURL());
					Console.Write("rank is " + result.GetRank());
				}
			}
			catch (Exception e)
			{
				Console.Write("Exception occured");
				Console.Write(e.Message);
				Console.Write(e.StackTrace);
			}
		}
	}
}
