Example #1
0
        /// <summary>
        /// Create the IComponentMapping object for a specific component in a mapping depending on the type of mapping e.g. 1
        ///     DSD component - N local columns e.t.c.
        /// </summary>
        /// <param name="component">
        /// The component entity
        /// </param>
        /// <param name="mapping">
        /// The mapping entity
        /// </param>
        /// <returns>
        /// An IComponentMapping object based on the mapping or null if the mapping is not supported
        /// </returns>
        /// <exception cref="TranscodingException">
        /// Invalid or unsupported mapping
        /// </exception>
        public static IComponentMapping CreateComponentMapping(ComponentEntity component, MappingEntity mapping)
        {
            IComponentMapping componentMapping;

            if (mapping.Components.Count == 1)
            {
                // one component
                switch (mapping.Columns.Count)
                {
                case 0:     // no columns => constant mapping
                    if (mapping.Constant != null)
                    {
                        componentMapping = new ComponentMapping1C();
                    }
                    else
                    {
                        throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoMappingFormat1, mapping.Components[0]));
                    }

                    break;

                case 1:     // 1 to 1 mapping
                    if (mapping.Transcoding != null)
                    {
                        // with transcoding
                        if (mapping.Transcoding.TranscodingRules.ColumnAsKeyPosition.Count > 0 && mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition.Count > 0)
                        {
                            componentMapping = new ComponentMapping1To1T();
                        }
                        else
                        {
                            // transcoding enabled but no transcoding rules
                            // TODO log a warning
                            componentMapping = new ComponentMapping1To1();     // disable transcoding
                        }
                    }
                    else
                    {
                        // without transcoding
                        componentMapping = new ComponentMapping1To1();
                    }

                    break;

                default:     // N columns where N > 1
                    if (mapping.Transcoding != null)
                    {
                        // transcoding is mandatory
                        if (mapping.Transcoding.TranscodingRules.ColumnAsKeyPosition.Count > 0 && mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition.Count > 0)
                        {
                            // there are transcoding rules
                            componentMapping = new ComponentMapping1N();
                        }
                        else
                        {
                            throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingRulesFormat1, component.Id));
                        }
                    }
                    else
                    {
                        throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingFormat1, component.Id));
                    }

                    break;
                }
            }
            else if (mapping.Columns.Count == 1 && mapping.Components.Count > 1)
            {
                // N components to 1 column mapping
                if (mapping.Transcoding != null)
                {
                    // transcoding is mandatory
                    if (mapping.Transcoding.TranscodingRules.ColumnAsKeyPosition.Count > 0 && mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition.Count > 0)
                    {
                        // there are transcoding rules
                        componentMapping = new ComponentMappingNto1(mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition[component.SysId]);
                    }
                    else
                    {
                        throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingRulesFormat1, component.Id));
                    }
                }
                else
                {
                    throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingFormat1, component.Id));
                }
            }
            else
            {
                throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNNMapping, component.Id));
            }

            componentMapping.Mapping   = mapping;
            componentMapping.Component = component;
            return(componentMapping);
        }
        /// <summary>
        /// Create the IComponentMapping object for a specific component in a mapping depending on the type of mapping e.g. 1
        ///     DSD component - N local columns e.t.c.
        /// </summary>
        /// <param name="component">
        /// The component entity
        /// </param>
        /// <param name="mapping">
        /// The mapping entity
        /// </param>
        /// <returns>
        /// An IComponentMapping object based on the mapping or null if the mapping is not supported
        /// </returns>
        /// <exception cref="TranscodingException">
        /// Invalid or unsupported mapping
        /// </exception>
        public static IComponentMapping CreateComponentMapping(ComponentEntity component, MappingEntity mapping)
        {
            IComponentMapping componentMapping;
            if (mapping.Components.Count == 1)
            {
                // one component
                switch (mapping.Columns.Count)
                {
                    case 0: // no columns => constant mapping
                        if (mapping.Constant != null)
                        {
                            componentMapping = new ComponentMapping1C();
                        }
                        else
                        {
                            throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoMappingFormat1, mapping.Components[0]));
                        }

                        break;
                    case 1: // 1 to 1 mapping
                        if (mapping.Transcoding != null)
                        {
                            // with transcoding
                            if (mapping.Transcoding.TranscodingRules.ColumnAsKeyPosition.Count > 0 && mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition.Count > 0)
                            {
                                componentMapping = new ComponentMapping1To1T();
                            }
                            else
                            {
                                // transcoding enabled but no transcoding rules
                                // TODO log a warning
                                componentMapping = new ComponentMapping1To1(); // disable transcoding
                            }
                        }
                        else
                        {
                            // without transcoding
                            componentMapping = new ComponentMapping1To1();
                        }

                        break;
                    default: // N columns where N > 1
                        if (mapping.Transcoding != null)
                        {
                            // transcoding is mandatory
                            if (mapping.Transcoding.TranscodingRules.ColumnAsKeyPosition.Count > 0 && mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition.Count > 0)
                            {
                                // there are transcoding rules
                                componentMapping = new ComponentMapping1N();
                            }
                            else
                            {
                                throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingRulesFormat1, component.Id));
                            }
                        }
                        else
                        {
                            throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingFormat1, component.Id));
                        }

                        break;
                }
            }
            else if (mapping.Columns.Count == 1 && mapping.Components.Count > 1)
            {
                // N components to 1 column mapping 
                if (mapping.Transcoding != null)
                {
                    // transcoding is mandatory
                    if (mapping.Transcoding.TranscodingRules.ColumnAsKeyPosition.Count > 0 && mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition.Count > 0)
                    {
                        // there are transcoding rules
                        componentMapping = new ComponentMappingNto1(mapping.Transcoding.TranscodingRules.ComponentAsKeyPosition[component.SysId]);
                    }
                    else
                    {
                        throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingRulesFormat1, component.Id));
                    }
                }
                else
                {
                    throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNoTranscodingFormat1, component.Id));
                }
            }
            else
            {
                throw new TranscodingException(string.Format(CultureInfo.CurrentCulture, ErrorMessages.ComponentMappingNNMapping, component.Id));
            }

            componentMapping.Mapping = mapping;
            componentMapping.Component = component;
            return componentMapping;
        }