/// <summary> /// Initializes the specified process name. /// </summary> /// <param name="processName">Name of the process.</param> /// <param name="field">The field.</param> /// <param name="valueCalculator">The value calculator.</param> public void Init(string processName, SynchronizationField field, IValueCalculator valueCalculator) { if (field == null) return; var editableRootType = DynamicTypeManager.GetEditableRootType(processName); _field = field; _property = editableRootType.GetPropertyByName(field.SystemName); if (_property == null) throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Field \"{0}\" not found.", field.Name)); var crAttr = (CrossRefFieldAttribute)_property.GetCustomAttributes(typeof(CrossRefFieldAttribute), false).FirstOrDefault(); if (crAttr == null) throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Field \"{0}\" is not a cross reference.", field.Name)); _allowMultiple = crAttr.AllowMultiple; _referencedProcess = crAttr.ReferenceTableName; foreach (var keyField in field.KeyFields) { var builder = FilterBuilderFactory.CreateFilterBuilder(_referencedProcess, keyField, valueCalculator); _filterBuilders.Add(builder); } if (_filterBuilders.Count == 0) throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No key fields found for cross reference field \"{0}\".", field.Name)); }
/// <summary> /// Creates the filter builder. /// </summary> /// <param name="processName">Name of the process.</param> /// <param name="field">The field.</param> /// <param name="valueCalculator">The value calculator.</param> /// <returns>IFieldFilterBuilder.</returns> /// <exception cref="System.ArgumentException"></exception> public IFieldFilterBuilder CreateFilterBuilder(string processName, SynchronizationField field, IValueCalculator valueCalculator) { if (field == null) return null; var editableRootType = DynamicTypeManager.GetEditableRootType(processName); var prop = editableRootType.GetPropertyByName(field.SystemName); if (prop == null) throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Field \"{0}\" not found.", field.Name)); var crAttr = prop.GetCustomAttributes(typeof(CrossRefFieldAttribute), false).FirstOrDefault(); if (crAttr != null) { var crBuilder = new CrossReferenceFieldFilterBuilder(); Ioc.SatisfyImportsOnce(crBuilder); crBuilder.Init(processName, field, valueCalculator); return crBuilder; } var simpleBuilder = new SimpleFieldFilterBuilder(); Ioc.SatisfyImportsOnce(simpleBuilder); simpleBuilder.Init(processName, field, valueCalculator); return simpleBuilder; }
/// <summary> /// Initializes the specified process name. /// </summary> /// <param name="processName">Name of the process.</param> /// <param name="field">The field.</param> /// <param name="valueCalculator">The value calculator.</param> /// <exception cref="System.InvalidOperationException">States not supported.</exception> public void Init(string processName, SynchronizationField field, IValueCalculator valueCalculator) { var editableRootType = DynamicTypeManager.GetEditableRootType(processName); if (!typeof(ISupportStates).IsAssignableFrom(editableRootType)) throw new InvalidOperationException("States not supported."); _field = field; _valueCalculator = valueCalculator; }
/// <summary> /// Initializes the specified process name. /// </summary> /// <param name="processName">Name of the process.</param> /// <param name="field">The field.</param> /// <param name="valueCalculator">The value calculator.</param> /// <exception cref="System.ArgumentException"></exception> /// <exception cref="System.InvalidOperationException"></exception> public void Init(string processName, SynchronizationField field, IValueCalculator valueCalculator) { if (field == null) return; var editableRootType = DynamicTypeManager.GetEditableRootType(processName); _property = editableRootType.GetPropertyByName(field.SystemName); if (_property == null) throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Field \"{0}\" not found.", field.Name)); if (!_property.CanWrite) throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Field \"{0}\" is not writeable.", field.Name)); _field = field; _valueCalculator = valueCalculator; }
/// <summary> /// Initializes the specified process name. /// </summary> /// <param name="processName">Name of the process.</param> /// <param name="field">The field.</param> /// <param name="valueCalculator">The value calculator.</param> /// <exception cref="System.InvalidOperationException"> /// Versioning not supported. /// or /// No key fields found for version master. /// </exception> public void Init(string processName, SynchronizationField field, IValueCalculator valueCalculator) { if (field == null) return; var editableRootType = DynamicTypeManager.GetEditableRootType(processName); if (!typeof(ISupportVersioning).IsAssignableFrom(editableRootType)) throw new InvalidOperationException("Versioning not supported."); foreach (var keyField in field.KeyFields) { var builder = FilterBuilderFactory.CreateFilterBuilder(processName, keyField, valueCalculator); _filterBuilders.Add(builder); } if (_filterBuilders.Count == 0) throw new InvalidOperationException("No key fields found for version master."); }
/// <summary> /// Initializes the specified process name. /// </summary> /// <param name="processName">Name of the process.</param> /// <param name="field">The field.</param> /// <param name="valueCalculator">The value calculator.</param> public void Init(string processName, SynchronizationField field, IValueCalculator valueCalculator) { if (field == null) return; var editableRootType = DynamicTypeManager.GetEditableRootType(processName); _property = editableRootType.GetPropertyByName(field.SystemName); if (_property == null) throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Field \"{0}\" not found.", field.Name)); var fileAttr = _property.GetCustomAttributes(typeof(FileProcessAttribute), false).FirstOrDefault(); if (fileAttr == null) throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Field \"{0}\" is not a file.", field.Name)); _field = field; _valueCalculator = valueCalculator; }