private RevisionTypeDesc MakeTypeDesc(EventType eventType, PropertyRevisionEnum propertyRevision) { EventPropertyGetter[] keyPropertyGetters = PropertyUtility.GetGetters(eventType, RevisionSpec.KeyPropertyNames); var len = RevisionSpec.ChangesetPropertyNames.Length; var listOfGetters = new List <EventPropertyGetter>(); var listOfIndexes = new List <int>(); for (int i = 0; i < len; i++) { String propertyName = RevisionSpec.ChangesetPropertyNames[i]; EventPropertyGetter getter = null; if (propertyRevision != PropertyRevisionEnum.MERGE_EXISTS) { getter = eventType.GetGetter(RevisionSpec.ChangesetPropertyNames[i]); } else { // only declared properties may be used a dynamic properties to avoid confusion of properties suddenly appearing foreach (String propertyNamesDeclared in eventType.PropertyNames) { if (propertyNamesDeclared == propertyName) { // use dynamic properties getter = eventType.GetGetter(RevisionSpec.ChangesetPropertyNames[i] + "?"); break; } } } if (getter != null) { listOfGetters.Add(getter); listOfIndexes.Add(i); } } var changesetPropertyGetters = listOfGetters.ToArray(); var changesetPropertyIndex = new int[listOfIndexes.Count]; for (int i = 0; i < listOfIndexes.Count; i++) { changesetPropertyIndex[i] = listOfIndexes[i]; } return(new RevisionTypeDesc(keyPropertyGetters, changesetPropertyGetters, changesetPropertyIndex)); }
/// <summary>Ctor. </summary> /// <param name="propertyRevision">strategy to use</param> /// <param name="baseEventType">base type</param> /// <param name="deltaTypes">delta types</param> /// <param name="deltaNames">aliases of delta types</param> /// <param name="keyPropertyNames">names of key properties</param> /// <param name="changesetPropertyNames">names of properties that change</param> /// <param name="baseEventOnlyPropertyNames">properties only available on the base event</param> /// <param name="deltaTypesAddProperties">bool to indicate delta types add additional properties.</param> /// <param name="changesetPropertyDeltaContributed">flag for each property indicating whether its contributed only by a delta event</param> public RevisionSpec(PropertyRevisionEnum propertyRevision, EventType baseEventType, EventType[] deltaTypes, String[] deltaNames, String[] keyPropertyNames, String[] changesetPropertyNames, String[] baseEventOnlyPropertyNames, bool deltaTypesAddProperties, bool[] changesetPropertyDeltaContributed) { PropertyRevision = propertyRevision; BaseEventType = baseEventType; DeltaTypes = deltaTypes; DeltaNames = deltaNames; KeyPropertyNames = keyPropertyNames; ChangesetPropertyNames = changesetPropertyNames; BaseEventOnlyPropertyNames = baseEventOnlyPropertyNames; IsDeltaTypesAddProperties = deltaTypesAddProperties; ChangesetPropertyDeltaContributed = changesetPropertyDeltaContributed; }