Exemplo n.º 1
0
 /// <summary>
 ///   Resolves the reference.
 /// </summary>
 /// <param name = "reference">The reference.</param>
 /// <returns></returns>
 public IIBItem ResolveReference(IBReference reference)
 {
     if (this.references.ContainsKey(reference.Value))
     {
         return this.references[reference.Value];
     }
     return null;
 }
		protected override void OnPropertyDeserialized (string name, object value)
		{
			if (name == "label")
				Label = (string) value;
			else if (name == "source")
				Source = (IBReference) value;
			else if (name == "destination")
				Destination = (IBReference) value;
			else
				base.OnPropertyDeserialized (name, value);
		}
Exemplo n.º 3
0
        static object ResolveIfReference(object o)
        {
            IBReference r = o as IBReference;

            if (r != null)
            {
                return(ResolveIfReference(r.Reference));
            }
            else
            {
                return(o);
            }
        }
 /// <summary>
 ///   Visits the specified item.
 /// </summary>
 /// <param Name = "item">The item.</param>
 public void Visit(IBReference item)
 {
 }
Exemplo n.º 5
0
		public void Add (IBReference reference)
		{
			unresolvedReferences.Add (reference);
		}
 /// <summary>
 ///   Visits the specified item.
 /// </summary>
 /// <param Name = "item">The item.</param>
 public void Visit(IBReference item)
 {
 }
		static object DeserializeInner (XElement element, Dictionary<string, Func<IBObject>> constructors, IReferenceResolver resolver)
		{
			switch (element.Name.ToString ()) {
			case "int":
				return Int32.Parse (element.Value);
			case "integer":
				return Int32.Parse (element.Attribute ("value").Value);
			case "nil":
				return null;
			case "string":
				XAttribute typeAtt = element.Attribute ("type");
				if (typeAtt != null) {
					switch (typeAtt.Value) {
					case "base64-UTF8":
						//FIXME: figure out the encoding they're using. why do we have to remove the last char to make it decode?
						string s = element.Value.Replace ("\n", "").Replace ("\r", "");
						int last = (s.Length / 4 ) * 4;
						return Encoding.UTF8.GetString (Convert.FromBase64String (s.Substring (0, last)));
					default:
						throw new Exception (String.Format ("Unknown string encoding type {0}", typeAtt.Value));
					}
				}
				return element.Value;
			case "characters":
				return element.Value;
			case "bool":
				return element.Value == "YES";
			case "boolean":
				return element.Attribute ("value").Value == "YES";
			case "double":
				return Double.Parse (element.Value);
			case "float":
				return float.Parse (element.Value);
			case "real":
				return float.Parse (element.Attribute ("value").Value);
			case "bytes":
				//FIXME: figure out the encoding they're using. it's not straight base 64
				return new AppleEvilByteArrayEncoding (element.Value);
			case "reference":
				var refAtt = element.Attribute ("ref");
				IBReference xibRef;
				if (refAtt != null) {
					xibRef = new IBReference (Int32.Parse (refAtt.Value));
					resolver.Add (xibRef);
				} else {
					//FIXME: handle null references more robustly
					xibRef = new IBReference (Int32.MinValue);
				}
				return xibRef;
			case "object":
				string className = element.Attribute ("class").Value;
				Func<IBObject> constructor;
				IBObject obj;
				if (constructors.TryGetValue (className, out constructor))
					obj = constructor ();
				else
					obj = new UnknownIBObject (className);
				return obj;
			default:
				throw new Exception (String.Format ("Cannot handle primitive type {0}", element.Name));
			}
		}
Exemplo n.º 8
0
 /// <summary>
 ///   Visits the specified item.
 /// </summary>
 /// <param Name = "item">The item.</param>
 public void Visit(IBReference item)
 {
     Console.WriteLine(item.ToString());
 }
Exemplo n.º 9
0
 /// <summary>
 ///   Visits the specified item.
 /// </summary>
 /// <param Name = "item">The item.</param>
 public void Visit(IBReference item)
 {
     Console.WriteLine(item.ToString());
 }