blob: 866b9cc009bd65be091ae6c9ddd2c980eb8e7a4f [file] [log] [blame]
<%@ WebHandler Class="JayrockWeb.PhoneBook" Language="C#" %>
using System;
using System.Collections;
using System.Configuration;
using Agility.Extras.Spring;
using Jayrock.JsonRpc;
using Jayrock.JsonRpc.Web;
using Nexus.Core;
using Nexus.Core.Helpers;
using PhoneBook.Core;
using Spring.Context;
namespace JayrockWeb
{
public class PhoneBook : JsonRpcHandler
{
private IRequestCatalog catalog = null;
private IRequestCatalog GetCatalog()
{
if (catalog == null)
{
IApplicationContext factory = Objects.Factory();
catalog = factory.GetObject(App.CATALOG_KEY) as IRequestCatalog;
if (catalog == null)
throw new ConfigurationErrorsException("PhoneBook: GetCatalog()==null");
}
return catalog;
}
private RequestContext Execute(string command)
{
return (RequestContext) GetCatalog().ExecuteRequest(command);
}
[JsonRpcMethod(App.LAST_NAME_LIST, Idempotent = true)]
[JsonRpcHelp("Returns Last Name List as an array.")]
public string[] last_name_list()
{
RequestContext context = Execute(App.LAST_NAME_LIST);
KeyValueList list = context.Outcome as KeyValueList;
if (list == null) return null; // FIXME: Better error handling
ArrayList names = new ArrayList(list.Count);
foreach (KeyValue k in list)
{
names.Add(k.Value);
}
return (string[]) names.ToArray(typeof (String));
}
[JsonRpcMethod(App.ENTRY_LIST, Idempotent = true)]
[JsonRpcHelp("Returns the complete directory as an array of formatted IDictionary objects.")]
public AppEntryList entry_list()
{
IViewHelper helper = GetCatalog().GetHelperFor(App.ENTRY_LIST);
helper.Execute();
// if helper.IsNominal ... // FIXME: Better error handling
AppEntryList list = helper.Outcome as AppEntryList;
return list;
}
[JsonRpcMethod(App.ENTRY, Idempotent = true)]
[JsonRpcHelp("Returns an entry by key.")]
public AppEntry entry(string key)
{
IViewHelper helper = GetCatalog().GetHelperFor(App.ENTRY);
helper.Criteria[App.ENTRY_KEY] = key;
helper.Execute();
// if helper.IsNominal ... // FIXME: Better error handling
AppEntry entry = new AppEntry(helper.Criteria);
return entry;
}
[JsonRpcMethod(App.ENTRY_SAVE, Idempotent = true)]
[JsonRpcHelp("Saves the entry, insert or updating as appropriate.")]
public AppEntry entry_save(IDictionary input)
{
IViewHelper helper = GetCatalog().GetHelperFor(App.ENTRY_SAVE);
helper.Read(input,true);
helper.Execute();
// if helper.IsNominal ... // FIXME: Better error handling
AppEntry entry = new AppEntry(helper.Criteria);
return entry;
}
[JsonRpcMethod(App.ENTRY_DELETE, Idempotent = true)]
[JsonRpcHelp("Deletes an entry by key.")]
public AppEntry entry_delete(string key)
{
IViewHelper helper = GetCatalog().GetHelperFor(App.ENTRY_DELETE);
helper.Criteria[App.ENTRY_KEY] = key;
helper.Execute();
// if helper.IsNominal ... // FIXME: Better error handling
AppEntry entry = new AppEntry(helper.Criteria);
return entry;
}
}
}