Exemple #1
0
        internal TransformMetaData FindFirstMapMatch(string message)
        {
            string[]          mapsArray = _mapName.Split(new char[] { '|' }, StringSplitOptions.None);
            TransformMetaData mapMatch  = null;

            for (int i = 0; i < mapsArray.Length; i++)
            {
                try
                {
                    Type mapType = Type.GetType(mapsArray[i], true);

                    TransformMetaData map = TransformMetaData.For(mapType);

                    SchemaMetadata sourceSchema = map.SourceSchemas[0];

                    if (sourceSchema.SchemaName == message)
                    {
                        mapMatch = map;
                        break;
                    }
                }
                catch (Exception ex)
                {
                    throw new ApplicationException(string.Format("Error while trying to load MapType specification: {0}", mapsArray[i]), ex);
                }
            }

            return(mapMatch);
        }
Exemple #2
0
        internal TransformMetaData FindFirstMapMatch(ContextProperty property, string messageType)
        {
            string[]          mapsArray = _mapName.Split(new char[] { '|' }, StringSplitOptions.None);
            TransformMetaData mapMatch  = null;

            //Check Cache
            if (Maps.ContainsKey(messageType))
            {
                for (int i = 0; i < mapsArray.Length; i++)
                {
                    if (Maps[messageType].TryGetValue(mapsArray[i], out mapMatch) == true)
                    {
                        return(mapMatch);
                    }
                }
            }
            else
            {
                //Add cache for this messagetype
                Maps.TryAdd(messageType, new ConcurrentDictionary <string, TransformMetaData>());
            }

            //Check MapCache
            for (int i = 0; i < mapsArray.Length; i++)
            {
                try
                {
                    //When map exists in the same assembly as the pipeline you do not need to specify assembly
                    if (mapsArray[i].Contains(",") == false)
                    {
                        mapsArray[i] = String.Format("{0}, {1}", mapsArray[i], pipelineAssembly);
                    }

                    Type mapType = Type.GetType(mapsArray[i], true);

                    mapMatch = TransformMetaData.For(mapType);

                    SchemaMetadata sourceSchema = mapMatch.SourceSchemas[0];



                    if (property.PropertyName == "SchemaStrongName")
                    {
                        if (sourceSchema.ReflectedType.AssemblyQualifiedName == messageType)
                        {
                            Maps[messageType].TryAdd(mapsArray[i], mapMatch);
                            break;
                        }
                    }
                    else if (property.PropertyName == "MessageType" && sourceSchema.SchemaName == messageType)
                    {
                        Maps[messageType].TryAdd(mapsArray[i], mapMatch);
                        break;
                    }

                    mapMatch = null;
                }
                catch (Exception ex)
                {
                    throw new ApplicationException(string.Format("Error while trying to load MapType specification: {0}", mapsArray[i]), ex);
                }
            }

            return(mapMatch);
        }