Ejemplo n.º 1
0
        public void UnregisterXmlType(Type type, String name, String namespaceString)
        {
            ParamChecker.AssertParamNotNull(type, "type");
            ParamChecker.AssertParamNotNull(name, "name");
            if (namespaceString == null)
            {
                namespaceString = String.Empty;
            }

            XmlTypeKey xmlTypeKey = new XmlTypeKey();

            xmlTypeKey.Name      = name;
            xmlTypeKey.Namespace = namespaceString;

            writeLock.Lock();
            try
            {
                xmlTypeToClassMap.Remove(xmlTypeKey.Name, xmlTypeKey.Namespace);

                IList <XmlTypeKey> xmlTypeKeys = classToXmlTypeMap[type];
                xmlTypeKeys.Remove(xmlTypeKey);
                if (xmlTypeKeys.Count == 0)
                {
                    classToXmlTypeMap.Remove(type);
                }
            }
            finally
            {
                writeLock.Unlock();
            }
        }
Ejemplo n.º 2
0
        public Type GetType(String name, String namespaceString)
        {
            ParamChecker.AssertParamNotNull(name, "name");
            if (namespaceString == null)
            {
                namespaceString = String.Empty;
            }

            XmlTypeKey xmlTypeKey = new XmlTypeKey();

            xmlTypeKey.Name      = name;
            xmlTypeKey.Namespace = namespaceString;

            readLock.Lock();
            try
            {
                Type type = xmlTypeToClassMap.Get(name, namespaceString);
                if (type == null)
                {
                    if (Log.DebugEnabled)
                    {
                        LoggerHistory.DebugOnce(Log, this, "XmlTypeNotFound: name=" + name + ", namespace=" + namespaceString);
                    }
                    return(null);
                }
                return(type);
            }
            finally
            {
                readLock.Unlock();
            }
        }
Ejemplo n.º 3
0
        public void RegisterXmlType(Type type, String name, String namespaceString)
        {
            ParamChecker.AssertParamNotNull(type, "type");
            ParamChecker.AssertParamNotNull(name, "name");
            if (namespaceString == null)
            {
                namespaceString = String.Empty;
            }

            XmlTypeKey xmlTypeKey = new XmlTypeKey();

            xmlTypeKey.Name      = name;
            xmlTypeKey.Namespace = namespaceString;

            writeLock.Lock();
            try
            {
                Type typeToSet    = type;
                Type existingType = xmlTypeToClassMap.Get(name, namespaceString);
                if (existingType != null)
                {
                    if (type.IsAssignableFrom(existingType))
                    {
                        // Nothing else to to
                    }
                    else if (existingType.IsAssignableFrom(type))
                    {
                        typeToSet = existingType;
                    }
                    else if (typeof(IList <>).Equals(existingType) && typeof(ObservableCollection <>).Equals(type))
                    {
                        // Workaround for C# since the two collections are not assignable to eachother.
                        typeToSet = existingType;
                    }
                    else
                    {
                        throw new Exception("Error while registering '" + type.FullName + "': Unassignable type '" + existingType.FullName
                                            + "' already registered for: Name='" + name + "' Namespace='" + namespaceString + "'");
                    }
                }
                xmlTypeToClassMap.Put(name, namespaceString, typeToSet);

                IList <XmlTypeKey> xmlTypeKeys = DictionaryExtension.ValueOrDefault(classToXmlTypeMap, type);
                if (xmlTypeKeys == null)
                {
                    xmlTypeKeys = new List <XmlTypeKey>();
                    classToXmlTypeMap.Add(type, xmlTypeKeys);
                }
                xmlTypeKeys.Add(xmlTypeKey);
            }
            finally
            {
                writeLock.Unlock();
            }
        }