public static void Call(Arebis.CodeGeneration.IGenerationHost host, IZetboxContext ctx, Templates.Serialization.SerializationMembersList serializationList, ObjectReferenceProperty prop) { if (host == null) { throw new ArgumentNullException("host"); } if (ctx == null) { throw new ArgumentNullException("ctx"); } if (prop == null) { throw new ArgumentNullException("prop"); } if (!prop.IsList()) { throw new ArgumentOutOfRangeException("prop", "prop must be a List-valued property"); } var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); var otherEnd = rel.GetOtherEnd(relEnd); string name = prop.Name; // whether or not the collection will be eagerly loaded bool eagerLoading = relEnd.Navigator != null && relEnd.Navigator.EagerLoading; string wrapperName = "_" + name; string wrapperClass = "OneNRelationList"; var exposedListType = otherEnd.HasPersistentOrder ? "IList" : "ICollection"; // the name of the position property var positionPropertyName = rel.NeedsPositionStorage(otherEnd.GetRole()) ? Construct.ListPositionPropertyName(otherEnd) : String.Empty; var otherName = otherEnd.Navigator == null ? relEnd.RoleName : otherEnd.Navigator.Name; var referencedInterface = otherEnd.Type.GetDataTypeString(); var referencedProxy = Mappings.ObjectClassHbm.GetProxyTypeReference(otherEnd.Type, host.Settings); Call(host, ctx, serializationList, name, eagerLoading, wrapperName, wrapperClass, exposedListType, positionPropertyName, otherName, referencedInterface, referencedProxy); }
public static ObjectClass GetReferencedObjectClass(this ObjectReferenceProperty prop) { if (prop == null) { throw new ArgumentNullException("prop"); } var rel = prop.RelationEnd.GetParent(); if (rel == null) { return(null); } var relEnd = prop.RelationEnd; if (relEnd == null) { return(null); } var otherEnd = rel.GetOtherEnd(relEnd); if (otherEnd == null) { return(null); } return(otherEnd.Type); }
protected override void ApplyObjectReferencePropertyTemplate(ObjectReferenceProperty prop) { var rel = Zetbox.App.Extensions.RelationExtensions.Lookup(ctx, prop); // Navigator can be NULL // Debug.Assert(rel.A.Navigator.ID == prop.ID || rel.B.Navigator.ID == prop.ID); RelationEnd relEnd = rel.GetEnd(prop); RelationEnd otherEnd = rel.GetOtherEnd(relEnd); if (rel.Storage == StorageType.Separate) { throw new InvalidOperationException("Separate Storage not implemented for ObjectReferenceProperty in 1:N"); } this.WriteLine(" /*"); RelationDebugTemplate.Call(Host, ctx, rel); this.WriteLine(" */"); this.WriteLine(" // object reference property"); Templates.Properties.ObjectReferencePropertyTemplate.Call( Host, ctx, this.MembersToSerialize, prop, true, true); }
public static void ToString(ObjectReferenceProperty obj, MethodReturnEventArgs <string> e) { e.Result = "-> " + e.Result; // already handled by base OnToString_Property() // ToStringHelper.FixupFloatingObjects(obj, e); }
public static void Call(Arebis.CodeGeneration.IGenerationHost host, IZetboxContext ctx, Serialization.SerializationMembersList serializationList, ObjectReferenceProperty prop) { if (ctx == null) { throw new ArgumentNullException("ctx"); } if (prop == null) { throw new ArgumentNullException("prop"); } if (!prop.IsList()) { throw new ArgumentOutOfRangeException("prop", "prop must be a List-valued property"); } string name = prop.Name; string wrapperClass = "OneNRelationList"; var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); var otherEnd = rel.GetOtherEnd(relEnd); var exposedListType = rel.NeedsPositionStorage(otherEnd.GetRole()) ? "IList" : "ICollection"; // the name of the position property var positionPropertyName = rel.NeedsPositionStorage(otherEnd.GetRole()) ? Construct.ListPositionPropertyName(otherEnd) : String.Empty; Call(host, ctx, serializationList, name, wrapperClass, exposedListType, rel, relEnd.GetRole(), positionPropertyName); }
public static void ToString(ObjectReferenceProperty obj, MethodReturnEventArgs<string> e) { e.Result = "-> " + e.Result; // already handled by base OnToString_Property() // ToStringHelper.FixupFloatingObjects(obj, e); }
public static void GetPropertyType(ObjectReferenceProperty obj, MethodReturnEventArgs <Type> e) { var def = obj.GetReferencedObjectClass(); e.Result = Type.GetType(def.Module.Namespace + "." + def.Name + ", " + Zetbox.API.Helper.InterfaceAssembly, true); PropertyActions.DecorateParameterType(obj, e, false, obj.GetIsList(), obj.RelationEnd.Parent.GetOtherEnd(obj.RelationEnd).HasPersistentOrder); }
protected override void ApplyObjectReferenceListTemplate(ObjectReferenceProperty prop) { var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); //var otherEnd = rel.GetOtherEnd(relEnd); // without navigator, there should be no property if (relEnd.Navigator == null) { return; } switch ((StorageType)rel.Storage) { case StorageType.MergeIntoA: case StorageType.MergeIntoB: case StorageType.Replicate: // simple and direct reference this.WriteLine(" // object list property"); ApplyObjectListPropertyTemplate(prop); break; case StorageType.Separate: this.WriteLine(" // collection entry list property"); ApplyCollectionEntryListTemplate(prop); break; default: throw new NotImplementedException("unknown StorageHint for ObjectReferenceProperty[IsList == true]"); } }
public static void Call(Arebis.CodeGeneration.IGenerationHost host, IZetboxContext ctx, Templates.Serialization.SerializationMembersList serializationList, ObjectReferenceProperty prop, bool callGetterSetterEvents, bool updateInverseNavigator) { if (ctx == null) { throw new ArgumentNullException("ctx"); } if (prop == null) { throw new ArgumentNullException("prop"); } string name = prop.Name; string ownInterface = prop.ObjectClass.GetDataTypeString(); string referencedInterface = String.Format( "{0}.{1}", prop.GetReferencedObjectClass().Module.Namespace, prop.GetReferencedObjectClass().Name); var rel = RelationExtensions.Lookup(ctx, prop); var endRole = rel.GetEnd(prop).GetRole(); var assocNameSuffix = String.Empty; Call(host, ctx, serializationList, ownInterface, name, referencedInterface, rel, endRole, callGetterSetterEvents, updateInverseNavigator, assocNameSuffix); }
public static void GetPropertyTypeString(ObjectReferenceProperty obj, MethodReturnEventArgs<string> e) { GetElementTypeString(obj, e); if (obj.RelationEnd != null) { PropertyActions.DecorateParameterType(obj, e, false, obj.GetIsList(), obj.RelationEnd.Parent.GetOtherEnd(obj.RelationEnd).HasPersistentOrder); } }
protected virtual void ApplyCollectionEntryListTemplate(ObjectReferenceProperty prop) { var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); Properties.CollectionEntryListProperty.Call(Host, ctx, this.MembersToSerialize, rel, relEnd.GetRole()); }
public static void GetIsList(ObjectReferenceProperty prop, MethodReturnEventArgs<bool> e) { if (prop == null) { throw new ArgumentNullException("prop"); } RelationEnd relEnd = prop.RelationEnd; Relation rel = relEnd.GetParent(); RelationEnd otherEnd = rel.GetOtherEnd(relEnd); e.Result = otherEnd.Multiplicity.UpperBound() > 1; }
public static void GetEnd(Relation rel, MethodReturnEventArgs<RelationEnd> e, ObjectReferenceProperty prop) { if (rel.A != null && rel.A.Navigator == prop) e.Result = rel.A; else if (rel.B != null && rel.B.Navigator == prop) e.Result = rel.B; else e.Result = null; }
protected override void ApplyCollectionEntryListTemplate(ObjectReferenceProperty prop) { var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); //var otherEnd = rel.GetOtherEnd(relEnd); Properties.CollectionEntryListProperty.Call(Host, ctx, this.MembersToSerialize, rel, relEnd.GetRole()); }
private static bool IsNullable(this ObjectReferenceProperty p) { if (p == null) { throw new ArgumentNullException("p"); } var relEnd = p.RelationEnd; var rel = relEnd.GetParent(); var otherEnd = rel.GetOtherEnd(relEnd); return(otherEnd.IsNullable()); }
public static void GetIsList(ObjectReferenceProperty prop, MethodReturnEventArgs <bool> e) { if (prop == null) { throw new ArgumentNullException("prop"); } RelationEnd relEnd = prop.RelationEnd; Relation rel = relEnd.GetParent(); RelationEnd otherEnd = rel.GetOtherEnd(relEnd); e.Result = otherEnd.Multiplicity.UpperBound() > 1; }
public static Relation Lookup(IZetboxContext ctx, ObjectReferenceProperty prop) { if (prop == null) { throw new ArgumentNullException("prop"); } if (prop.RelationEnd == null) { return(null); } return(prop.RelationEnd.AParent ?? prop.RelationEnd.BParent); }
public static void GetElementTypeString(ObjectReferenceProperty obj, MethodReturnEventArgs<string> e) { var def = obj.GetReferencedObjectClass(); if (def == null) { e.Result = "<no class>"; } else if (def.Module == null) { e.Result = "<no namespace>." + def.Name; } else { e.Result = def.Module.Namespace + "." + def.Name; } PropertyActions.DecorateElementType(obj, e, false); }
public static bool IsList(this ObjectReferenceProperty prop) { if (prop == null) { throw new ArgumentNullException("prop"); } if (prop.RelationEnd == null) { throw new InvalidOperationException(string.Format("Error: object reference property {0} on ObjectClass {1} has no relation end", prop.Name, prop.ObjectClass)); } RelationEnd relEnd = prop.RelationEnd; Relation rel = relEnd.GetParent(); RelationEnd otherEnd = rel.GetOtherEnd(relEnd); return(otherEnd.Multiplicity.UpperBound() > 1); }
public static void GetElementTypeString(ObjectReferenceProperty obj, MethodReturnEventArgs <string> e) { var def = obj.GetReferencedObjectClass(); if (def == null) { e.Result = "<no class>"; } else if (def.Module == null) { e.Result = "<no namespace>." + def.Name; } else { e.Result = def.Module.Namespace + "." + def.Name; } PropertyActions.DecorateElementType(obj, e, false); }
public static void Call(Arebis.CodeGeneration.IGenerationHost _host, IZetboxContext ctx, ObjectReferenceProperty prop) { if (_host == null) { throw new ArgumentNullException("_host"); } if (ctx == null) { throw new ArgumentNullException("ctx"); } if (prop == null) { throw new ArgumentNullException("prop"); } Relation rel = Zetbox.App.Extensions.RelationExtensions.Lookup(ctx, prop); RelationEnd relEnd = rel.GetEnd(prop); RelationEnd otherEnd = rel.GetOtherEnd(relEnd); string referencedInterface = otherEnd.Type.Module.Namespace + "." + otherEnd.Type.Name; string referencedImplementation = Mappings.ObjectClassHbm.GetWrapperTypeReference(otherEnd.Type, _host.Settings); string name = prop.Name; string implNameUnused = null; string fkBackingName = "_fk_" + name; string fkGuidBackingName = "_fk_guid_" + name; bool isExportable = relEnd.Type.ImplementsIExportable() && otherEnd.Type.ImplementsIExportable(); ReloadOneReference.Call(_host, ctx, referencedInterface, referencedImplementation, name, implNameUnused, fkBackingName, fkGuidBackingName, isExportable); }
public static void Call(Arebis.CodeGeneration.IGenerationHost host, IZetboxContext ctx, Templates.Serialization.SerializationMembersList serializationList, ObjectReferenceProperty prop, bool callGetterSetterEvents, bool updateInverseNavigator) { if (ctx == null) { throw new ArgumentNullException("ctx"); } if (prop == null) { throw new ArgumentNullException("prop"); } string name = prop.Name; string ownInterface = prop.ObjectClass.GetDataTypeString(); string referencedInterface = String.Format( "{0}.{1}", prop.GetReferencedObjectClass().Module.Namespace, prop.GetReferencedObjectClass().Name); var rel = RelationExtensions.Lookup(ctx, prop); var endRole = rel.GetEnd(prop).GetRole(); Call(host, ctx, serializationList, ownInterface, name, referencedInterface, rel, endRole, callGetterSetterEvents, updateInverseNavigator, String.Empty); }
protected override void ApplyObjectReferenceListTemplate(ObjectReferenceProperty prop) { // TODO: move debugging output into Templates this.WriteLine(" /*"); RelationDebugTemplate.Call(Host, ctx, Zetbox.App.Extensions.RelationExtensions.Lookup(ctx, prop)); this.WriteLine(" */"); var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); var otherEnd = rel.GetOtherEnd(relEnd); // without navigator, there should be no property if (relEnd.Navigator == null) { return; } switch ((StorageType)rel.Storage) { case StorageType.MergeIntoA: case StorageType.MergeIntoB: case StorageType.Replicate: // simple and direct reference this.WriteLine(" // object list property"); base.ApplyObjectReferenceListTemplate(relEnd.Navigator as ObjectReferenceProperty); break; case StorageType.Separate: this.WriteLine(" // collection reference property"); ApplyCollectionEntryListTemplate(rel, relEnd.GetRole()); break; default: throw new NotImplementedException("unknown StorageHint for ObjectReferenceProperty[IsList == true]"); } }
private void ApplyNMProperty( Relation rel, RelationEnd relEnd, RelationEnd otherEnd, ObjectReferenceProperty prop) { this.WriteLine(" <!-- NMProperty -->"); this.WriteLine(" <!-- rel={0} -->", rel.GetRelationClassName()); this.WriteLine(" <!-- relEnd={0} otherEnd={1} -->", relEnd.RoleName, otherEnd.RoleName); string nameAttr = String.Format("name=\"{0}\"", prop.Name); string tableName = rel.GetRelationTableName(); string tableAttr = String.Format("table=\"`{0}`\"", tableName); string relationEntryClassAttr = String.Format("class=\"{0}.{1}{2}+{1}Proxy,Zetbox.Objects.NHibernateImpl\"", rel.Module.Namespace, rel.GetRelationClassName(), ImplementationSuffix); string fkThisColumnAttr = String.Format("column=\"`{0}`\"", Construct.ForeignKeyColumnName(relEnd)); //string fkOtherColumnAttr = String.Format("column=\"`{0}`\"", Construct.ForeignKeyColumnName(otherEnd)); // always map as set, the wrapper has to translate/order the elements this.WriteObjects(" <set ", nameAttr, " ", tableAttr, " inverse=\"true\" cascade=\"all-delete-orphan\" batch-size=\"100\" "); if (prop.EagerLoading) { // TODO: re-think and re-test eagerloading //this.WriteObjects("lazy=\"false\" fetch=\"join\" "); } this.WriteLine(">"); this.WriteObjects(" <key ", fkThisColumnAttr, " />"); this.WriteLine(); this.WriteObjects(" <one-to-many ", relationEntryClassAttr, " />"); this.WriteLine(); this.WriteObjects(" </set>"); this.WriteLine(); }
public ObjectCollectionPropertyValueModel(INotifyingObject obj, ObjectReferenceProperty prop) : base(obj, prop) { }
public BaseObjectCollectionPropertyValueModel(INotifyingObject obj, ObjectReferenceProperty prop) : base(obj, prop) { this.objRefProp = prop; }
public static IValueModel GetDetachedValueModel(this Property prop, bool allowNullInput) { if (prop == null) { throw new ArgumentNullException("prop"); } var lb = prop.GetLabel(); if (prop is IntProperty) { return(new NullableStructValueModel <int>(lb, prop.Description, allowNullInput, false, prop.RequestedKind)); } else if (prop is BoolProperty) { return(new BoolValueModel(lb, prop.Description, allowNullInput, false, prop.RequestedKind)); } else if (prop is DoubleProperty) { return(new NullableStructValueModel <double>(lb, prop.Description, allowNullInput, false, prop.RequestedKind)); } else if (prop is DecimalProperty) { return(new DecimalValueModel(lb, prop.Description, allowNullInput, false, prop.RequestedKind)); } else if (prop is GuidProperty) { return(new NullableStructValueModel <Guid>(lb, prop.Description, allowNullInput, false, prop.RequestedKind)); } else if (prop is DateTimeProperty) { var dtp = (DateTimeProperty)prop; return(new DateTimeValueModel(lb, prop.Description, allowNullInput, false, dtp.DateTimeStyle ?? DateTimeStyles.DateTime, prop.RequestedKind)); } else if (prop is EnumerationProperty) { return(new EnumerationValueModel(lb, prop.Description, allowNullInput, false, prop.RequestedKind, ((EnumerationProperty)prop).Enumeration)); } else if (prop is StringProperty) { return(new ClassValueModel <string>(lb, prop.Description, allowNullInput, false, prop.RequestedKind)); } else if (prop is ObjectReferenceProperty) { ObjectReferenceProperty objRefProp = (ObjectReferenceProperty)prop; if (objRefProp.GetIsList()) { //var sorted = objRefProp.RelationEnd.Parent.GetOtherEnd(objRefProp.RelationEnd).HasPersistentOrder; //if (sorted) //{ // return new ObjectListValueModel(obj, objRefProp); //} //else //{ // return new ObjectCollectionValueModel(obj, objRefProp); //} } else { return(new ObjectReferenceValueModel(lb, prop.Description, allowNullInput, false, prop.RequestedKind, objRefProp.GetReferencedObjectClass())); } } else if (prop is CompoundObjectProperty) { return(new CompoundObjectValueModel(lb, prop.Description, allowNullInput, false, prop.RequestedKind, ((CompoundObjectProperty)prop).CompoundObjectDefinition)); } throw new NotImplementedException(string.Format("GetValueModel is not implemented for {0} properties yet", prop.GetPropertyTypeString())); }
public static void GetEnd(Relation rel, MethodReturnEventArgs <RelationEnd> e, ObjectReferenceProperty prop) { if (rel.A != null && rel.A.Navigator == prop) { e.Result = rel.A; } else if (rel.B != null && rel.B.Navigator == prop) { e.Result = rel.B; } else { e.Result = null; } }
protected virtual void ApplyObjectReferenceProperty(string prefix, ObjectReferenceProperty prop) { this.WriteLine("<!-- ObjectReferenceProperty -->"); var rel = Zetbox.App.Extensions.RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); var otherEnd = rel.GetOtherEnd(relEnd); string nameAttr = String.Format("name=\"{0}\"", prop.Name); string classAttr = String.Format("class=\"{0}\"", ObjectClassHbm.GetAssemblyQualifiedProxy(otherEnd.Type, this.Settings)); //string tableAttr = String.Format("table =\"`{0}`\" ", rel.GetAssociationName()); switch (rel.GetRelationType()) { case RelationType.one_one: if (rel.HasStorage(relEnd.GetRole())) { string columnAttr = String.Format("column=\"`{0}`\"", Construct.ForeignKeyColumnName(otherEnd, prefix)); this.WriteObjects(" <many-to-one ", nameAttr, " ", columnAttr, " ", classAttr, " unique=\"true\" "); if (prop.EagerLoading) { // TODO: re-think and re-test eagerloading //this.WriteObjects("fetch=\"join\" "); } this.WriteLine("/>"); } else { this.WriteObjects(" <one-to-one ", nameAttr, " ", classAttr, " constrained=\"false\" ", // constrained must be false, because else the reference is not optional(!) // TODO: re-think and re-test eagerloading //prop.EagerLoading ? "fetch=\"join\" " : String.Empty, "property-ref=\"" + (otherEnd.Navigator != null ? otherEnd.Navigator.Name : "(no nav)") + "\" />"); } break; case RelationType.one_n: if (otherEnd.Multiplicity.UpperBound() > 1) // we are 1-side { // always map as set, the wrapper has to translate/order the elements this.WriteObjects(" <set ", nameAttr, " batch-size=\"100\" cascade=\"none\" inverse=\"true\" "); if (prop.EagerLoading) { // TODO: re-think and re-test eagerloading //this.WriteObjects("lazy=\"false\" fetch=\"join\" "); } this.WriteLine(">"); string columnAttr = String.Format("column=\"`{0}`\"", Construct.ForeignKeyColumnName(relEnd, prefix)); this.WriteObjects(" <key ", columnAttr, " />"); this.WriteLine(); this.WriteObjects(" <one-to-many ", classAttr, " />"); this.WriteLine(); this.WriteLine(" </set>"); } else // we are n-side { string columnAttr = String.Format("column=\"`{0}`\"", Construct.ForeignKeyColumnName(otherEnd, prefix)); this.WriteObjects(" <many-to-one ", nameAttr, " ", columnAttr, " ", classAttr, " "); if (prop.EagerLoading) { // TODO: re-think and re-test eagerloading //this.WriteObjects("fetch=\"join\" "); } this.WriteLine("/>"); if (rel.NeedsPositionStorage(relEnd.GetRole())) { string posNameAttr = String.Format("name=\"{0}\"", Construct.ListPositionPropertyName(relEnd)); string posColumnAttr = String.Format("column=\"`{0}`\"", Construct.ListPositionColumnName(otherEnd, prefix)); this.WriteObjects(" <property ", posNameAttr, " ", posColumnAttr, " />"); this.WriteLine(); } } break; case RelationType.n_m: ApplyNMProperty(rel, relEnd, otherEnd, prop); break; default: throw new NotImplementedException(String.Format("Unknown RelationType {0} found", rel.GetRelationType())); } this.WriteLine(); }
protected override void ApplyObjectReferenceListTemplate(ObjectReferenceProperty prop) { var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); //var otherEnd = rel.GetOtherEnd(relEnd); // without navigator, there should be no property if (relEnd.Navigator == null) return; switch ((StorageType)rel.Storage) { case StorageType.MergeIntoA: case StorageType.MergeIntoB: case StorageType.Replicate: // simple and direct reference this.WriteLine(" // object list property"); ApplyObjectListPropertyTemplate(prop); break; case StorageType.Separate: this.WriteLine(" // collection entry list property"); ApplyCollectionEntryListTemplate(prop); break; default: throw new NotImplementedException("unknown StorageHint for ObjectReferenceProperty[IsList == true]"); } }
protected virtual void ApplyObjectReferenceListTemplate(ObjectReferenceProperty prop) { this.WriteLine(" // object reference list property"); ApplyListProperty(prop, this.MembersToSerialize); }
protected virtual void ApplyObjectReferencePropertyTemplate(ObjectReferenceProperty prop) { this.WriteLine(" // object reference property"); ApplyNotifyingValueProperty(prop, this.MembersToSerialize); }
protected override void ApplyObjectReferenceListTemplate(ObjectReferenceProperty prop) { // TODO: move debugging output into Templates this.WriteLine(" /*"); RelationDebugTemplate.Call(Host, ctx, Zetbox.App.Extensions.RelationExtensions.Lookup(ctx, prop)); this.WriteLine(" */"); var rel = RelationExtensions.Lookup(ctx, prop); var relEnd = rel.GetEnd(prop); var otherEnd = rel.GetOtherEnd(relEnd); // without navigator, there should be no property if (relEnd.Navigator == null) return; switch ((StorageType)rel.Storage) { case StorageType.MergeIntoA: case StorageType.MergeIntoB: case StorageType.Replicate: // simple and direct reference this.WriteLine(" // object list property"); base.ApplyObjectReferenceListTemplate(relEnd.Navigator as ObjectReferenceProperty); break; case StorageType.Separate: this.WriteLine(" // collection reference property"); ApplyCollectionEntryListTemplate(rel, relEnd.GetRole()); break; default: throw new NotImplementedException("unknown StorageHint for ObjectReferenceProperty[IsList == true]"); } }
protected override void ApplyObjectListPropertyTemplate(ObjectReferenceProperty prop) { Properties.ObjectListProperty.Call(Host, ctx, this.MembersToSerialize, prop); }
protected virtual void ApplyObjectListPropertyTemplate(ObjectReferenceProperty prop) { Properties.ObjectListProperty.Call(Host, ctx, this.MembersToSerialize, prop); }
public static Relation Lookup(IZetboxContext ctx, ObjectReferenceProperty prop) { if (prop == null) { throw new ArgumentNullException("prop"); } if (prop.RelationEnd == null) { return null; } return prop.RelationEnd.AParent ?? prop.RelationEnd.BParent; }
protected override void ApplyObjectReferencePropertyTemplate(ObjectReferenceProperty prop) { base.ApplyObjectReferencePropertyTemplate(prop); }
public static void GetPropertyType(ObjectReferenceProperty obj, MethodReturnEventArgs<Type> e) { var def = obj.GetReferencedObjectClass(); e.Result = Type.GetType(def.Module.Namespace + "." + def.Name + ", " + Zetbox.API.Helper.InterfaceAssembly, true); PropertyActions.DecorateParameterType(obj, e, false, obj.GetIsList(), obj.RelationEnd.Parent.GetOtherEnd(obj.RelationEnd).HasPersistentOrder); }
protected override void ApplyObjectReferencePropertyTemplate(ObjectReferenceProperty prop) { Properties.ObjectReferencePropertyTemplate.Call( Host, ctx, this.MembersToSerialize, prop, true, true); }
public static void GetPropertyTypeString(ObjectReferenceProperty obj, MethodReturnEventArgs <string> e) { GetElementTypeString(obj, e); PropertyActions.DecorateParameterType(obj, e, false, obj.GetIsList(), obj.RelationEnd.Parent.GetOtherEnd(obj.RelationEnd).HasPersistentOrder); }