Example #1
0
        private static ObjectData CreateObjectData(INakedObject nakedObject, bool ensurePersistent)
        {
            Log.DebugFormat("Compiling object data for {0}", nakedObject);

            var data = new ObjectData(nakedObject.Specification, nakedObject.Oid, nakedObject.Version);

            foreach (INakedObjectAssociation fieldAssoc in nakedObject.Specification.Properties)
            {
                if (!fieldAssoc.IsPersisted)
                {
                    continue;
                }

                INakedObject field = fieldAssoc.GetNakedObject(nakedObject);

                string fieldId = fieldAssoc.Id;

                if (fieldAssoc.IsCollection)
                {
                    data.AddInternalCollection(field, fieldId, ensurePersistent);
                }
                if (fieldAssoc.IsInline)
                {
                    data.AddInline(CreateObjectData(field, ensurePersistent), fieldId);
                }
                else if (fieldAssoc.Specification.IsEncodeable)
                {
                    bool isEmpty = fieldAssoc.IsEmpty(nakedObject);
                    if (field == null || isEmpty)
                    {
                        data.SaveValue(fieldId, isEmpty, null);
                    }
                    else
                    {
                        var    facet        = field.Specification.GetFacet <IEncodeableFacet>();
                        string encodedValue = facet.ToEncodedString(field);
                        data.SaveValue(fieldId, isEmpty, encodedValue);
                    }
                }
                else if (fieldAssoc.IsObject)
                {
                    data.AddAssociation(field, fieldId, ensurePersistent);
                }
            }

            return(data);
        }