Пример #1
0
        public virtual ITypedValue SetValue(ITypedValue value)
        {
            // determine serializer to use
            serializer = Serializers.FindSerializerForValue(value,
                                                            Context.ProcessEngineConfiguration.FallbackSerializerFactory);
            serializerName = serializer.Name;

            if (value is UntypedValueImpl)
            {
                value = serializer.ConvertToTypedValue((UntypedValueImpl)value);
            }

            //// set new value
            WriteValue(value, valueFields);

            // cache the value
            cachedValue = value;

            // ensure that we serialize the object on command context flush
            // if it can be implicitly changed
            if (isNotifyOnImplicitUpdates && IsMutableValue(cachedValue))
            {
                Context.CommandContext.RegisterCommandContextListener(this);
            }

            return(value);
        }
        public virtual IVariableSerializers Join(IVariableSerializers other)
        {
            var copy = new DefaultVariableSerializers();

            // "other" serializers override existing ones if their names match
            foreach (var thisSerializer in serializerMap.Values)
            {
                ITypedValueSerializer serializer = other.GetSerializerByName(thisSerializer.Name);

                if (serializer == null)
                {
                    serializer = thisSerializer;
                }

                copy.AddSerializer(serializer);
            }

            // add all "other" serializers that did not exist before to the end of the list
            foreach (ITypedValueSerializer otherSerializer in other.Serializers)
            {
                if (!copy.serializerMap.ContainsKey(otherSerializer.Name))
                {
                    copy.AddSerializer(otherSerializer);
                }
            }


            return(copy);
        }
Пример #3
0
        protected internal virtual void EnsureSerializerInitialized()
        {
            if ((serializerName != null) && (serializer == null))
            {
                serializer = Serializers.GetSerializerByName(serializerName);

                if (serializer == null)
                {
                    serializer = GetFallbackSerializer(serializerName);
                }

                if (serializer == null)
                {
                    throw Log.SerializerNotDefinedException(this);
                }
            }
        }
        public virtual ITypedValueSerializer FindSerializerForValue(ITypedValue value,
                                                                    IVariableSerializerFactory fallBackSerializerFactory)
        {
            var defaultSerializationFormat = Context.ProcessEngineConfiguration.DefaultSerializationFormat;

            IList <ITypedValueSerializer> matchedSerializers =
                new List <ITypedValueSerializer>();

            IValueType type = value.Type;

            if (type != null && type.IsAbstract)
            {
                throw new ProcessEngineException("Cannot serialize value of abstract type " + type.Name);
            }

            foreach (var serializer in serializerMap.Values)
            {
                if (type == null || serializer.Type.Equals(type))
                {
                    if (serializer.CanHandle(value))
                    {
                        matchedSerializers.Add(serializer);
                        if (serializer.Type.IsPrimitiveValueType)
                        {
                            break;
                        }
                    }
                }
            }

            if (matchedSerializers.Count == 0)
            {
                if (fallBackSerializerFactory != null)
                {
                    ITypedValueSerializer serializer = fallBackSerializerFactory.GetSerializer <ITypedValue>(value);
                    if (serializer != null)
                    {
                        return(serializer);
                    }
                }

                throw new ProcessEngineException("Cannot find serializer for value '" + value + "'.");
            }
            if (matchedSerializers.Count == 1)
            {
                return(matchedSerializers[0]);
            }
            // ambiguous match, use default serializer
            if (!ReferenceEquals(defaultSerializationFormat, null))
            {
                foreach (var typedValueSerializer in matchedSerializers)
                {
                    if (defaultSerializationFormat.Equals(typedValueSerializer.SerializationDataFormat))
                    {
                        return(typedValueSerializer);
                    }
                }
            }
            // no default serialization dataformat defined or default dataformat cannot serialize this value => use first serializer
            return(matchedSerializers[0]);
        }
 public virtual IVariableSerializers RemoveSerializer(ITypedValueSerializer serializer)
 {
     serializerMap.Remove(serializer.Name);
     return(this);
 }
 public virtual IVariableSerializers AddSerializer(ITypedValueSerializer serializer, int index)
 {
     serializerMap[serializer.Name] = serializer;
     return(this);
 }
 public virtual IVariableSerializers AddSerializer(ITypedValueSerializer serializer)
 {
     return(AddSerializer(serializer, serializerMap.Count));
 }