/** * Add an object to the mapper * When the object is added, call all the mappingWaitings (views which need this object) * * @param name the mapped object name, ex : for function($user), the name will be "user" * @param object the mapped object */ public void MapObject(string name, Object obj) { MappedObjects.AddOrUpdate(name, obj); CarpaccioLogger.d(TAG, "map object [" + name + "," + obj.GetType().Name + "]"); //call the waiting objects List <MappingWaiting> waitingsForThisName = MappingWaitings.GetOrDefault(name); if (waitingsForThisName != null) { foreach (MappingWaiting mappingWaiting in waitingsForThisName) { CarpaccioLogger.d(TAG, "call waiting mapped " + mappingWaiting.CarpaccioAction.CompleteCall); string value = Evaluate(obj, mappingWaiting.Call); CarpaccioLogger.d(TAG, "call waiting value = " + value); if (value != null && MappingManagerCallback != null) { mappingWaiting.CarpaccioAction.Values = new[] { value }; //TODO MappingManagerCallback.CallActionOnView(mappingWaiting.CarpaccioAction, mappingWaiting.View); } } //remove all waitings for this name waitingsForThisName.Clear(); MappingWaitings.Remove(name); } }
public void AppendList(string mappedName, ArrayList list) { ArrayList savedList = MappedLists.GetOrDefault(mappedName); if (savedList == null) { CarpaccioLogger.e(TAG, "No list found for [" + mappedName + "]"); } else { savedList.AddRange(list); } }
/** * Called when a view loaded and call a mapping function * * @param view the calling view * @param mappedObject If available, the object to map with the view. Else add the view to mappingWaitings */ public void CallMappingOnView(CarpaccioAction action, View view, Object mappedObject) { if (action.IsCallMapping) { CarpaccioLogger.d(TAG, "callMappingOnView mapping=" + mappedObject + " action=" + action.CompleteCall + " view=" + view.GetType().Name); string arg = action.Args[0]; //only map the first argument string objectName; string call; if (arg.Contains(".")) //"$user.getName()" { call = arg.Substring(1, arg.Length - 1); // "user.getName()" objectName = call.Substring(0, arg.IndexOf('.') - 1); // "user" } else { objectName = arg.Substring(1, arg.Length - 1); // "user" call = objectName; // "user" } //if you already have the object if (mappedObject != null) { string value = Evaluate(mappedObject, call); CarpaccioLogger.d(TAG, "callMappingOnView evaluate(" + call + ")" + " on " + mappedObject.GetType().Name + " returned " + value); action.Values = new[] { value }; //TODO MappingManagerCallback.CallActionOnView(action, view); } else { //add to waiting List <MappingWaiting> waitings = MappingWaitings.GetOrDefault(objectName) ?? new List <MappingWaiting>(); //["user"] = List<MappingWaiting> waitings.Add(new MappingWaiting(view, action, call, objectName)); CarpaccioLogger.d(TAG, "added to waiting " + call + " for " + view.GetType().Name); MappingWaitings.AddOrUpdate(objectName, waitings); } } }
//object.image.getUrl() public string Evaluate(Object obj, string call) { if (!call.Contains(".")) //"object" { CarpaccioLogger.d(TAG, "call " + call + " on " + obj.GetType().Name); return(obj.ToString()); } string function = call.Substring(call.IndexOf('.') + 1); //image.getUrl(); or //image string callToGetObject; if (function.Contains(".")) { callToGetObject = function.Substring(0, function.IndexOf('.')); //image } else { callToGetObject = function; //image } string realCallToGetObject = GetFunctionName(callToGetObject); Object newObject = CarpaccioHelper.callFunction(obj, realCallToGetObject); if (newObject != null) { CarpaccioLogger.d(TAG, "call " + realCallToGetObject + " return =" + newObject.GetType().Name); if (newObject is Java.Lang.String) { return((string)newObject); } if (newObject is Java.Lang.Number) { return(String.ValueOf(newObject)); } return(Evaluate(newObject, function)); } CarpaccioLogger.d(TAG, "call " + realCallToGetObject + " return = NULL"); return(null); }
public void MapList(string name, ArrayList list) { CarpaccioLogger.d(TAG, "map list " + name + " size=" + list.Count); MappedLists.AddOrUpdate(name, list); }