/// <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;
        }
Esempio n. 4
0
        /// <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.");
        }
Esempio n. 6
0
        /// <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;
        }