/// <summary> /// Create /// </summary> /// <param name="session"></param> /// <param name="ptr"></param> /// <returns></returns> internal static MetadataObject Create(Session session, object ptr) { string fullName = GetV8Property(ptr, FullNameProperty) as string; MetadataObject meta; if (fullName.StartsWith(RussianConsts.Catalog)) { meta = new MetadataObject(session, MetadataType.Catalog, ptr); } else if (fullName.StartsWith(RussianConsts.Document)) { meta = new DocumentMetadata(session, ptr); } else { meta = new MetadataObject(session, MetadataType.Unknown, ptr); } meta.PutToCache(FullNameProperty, fullName); return meta; }
/// <summary> /// Create /// </summary> /// <param name="session"></param> /// <param name="ptr"></param> /// <returns></returns> internal static MetadataObject Create(Session session, object ptr) { string fullName = GetV8Property(ptr, FullNameProperty) as string; MetadataObject meta; if (fullName.StartsWith(RussianConsts.Catalog)) { meta = new MetadataObject(session, MetadataType.Catalog, ptr); } else if (fullName.StartsWith(RussianConsts.Document)) { meta = new DocumentMetadata(session, ptr); } else { meta = new MetadataObject(session, MetadataType.Unknown, ptr); } meta.PutToCache(FullNameProperty, fullName); return(meta); }
private void ReadV8XmlAsRequisite(XmlElement valueTag, MetadataObject reqMeta) { object value; if (reqMeta.Type.TryParseV8XmlValue(valueTag, out value)) { PutToCache(valueTag.Name, value); } }
internal protected object ConvertV8Value(object obj, TypeDescription typeDescription) { if (!IsInternalV8Object(obj)) { return(obj); } if (typeDescription != null) { var types = typeDescription.Types; if (types.Length == 1) { var typeInfo = types[0]; switch (typeInfo.Type) { case TypeEnum.DocumentRef: return(new DocumentRef(this.Session, typeInfo.ReferenceTypeName, obj)); case TypeEnum.CatalogRef: return(new CatalogRef(this.Session, typeInfo.ReferenceTypeName, obj)); case TypeEnum.EnumRef: return(new EnumRef(this.Session, typeInfo.ReferenceTypeName, obj)); } } } object ptrMeta; try { ptrMeta = InvokeV8Method(obj, RussianConsts.Metadata, new object[0]); } catch { ptrMeta = null; } if (ptrMeta == null) { return(null); } MetadataObject metadata = MetadataObject.Create(this.Session, ptrMeta); switch (metadata.MetadataType) { case MetadataType.Catalog: return(new CatalogRef(this.Session, metadata.Name, obj)); case MetadataType.Document: return(new DocumentRef(this.Session, metadata.Name, obj)); } //not implemented return(null); }