예제 #1
0
        public static ImportExportModel FromXml(string xml)
        {
            var doc   = XElement.Parse(xml);
            var model = new ImportExportModel();

            foreach (var language in doc.Elements("language"))
            {
                var ci = new CultureInfo((string)language.Attribute("name"));

                var languageModel = new ImportExportModelLanguage(ci);

                foreach (var resourceSet in language.Elements("resourceSet"))
                {
                    var resourceSetModel = new ImportExportModelResourceSet
                    {
                        Name = resourceSet.Attribute("name") == null ? null : (string)resourceSet.Attribute("name")
                    };

                    foreach (var resource in resourceSet.Elements("resource"))
                    {
                        var resourceModel = new ImportExportModelResource
                        {
                            Key   = (string)resource.Attribute("key"),
                            Type  = (ResourceType)Enum.Parse(typeof(ResourceType), (string)resource.Attribute("type")),
                            Value = (string)resource.Attribute("value")
                        };

                        resourceSetModel.Resources.Add(resourceModel.Key, resourceModel);
                    }

                    languageModel.ResourceSets.Add(resourceSetModel);
                }

                model.Languages.Add(languageModel.Culture, languageModel);
            }

            return(model);
        }
예제 #2
0
        private void EvaluateAddOrUpdates(CultureInfo ci,
            ImportExportModelResourceSet resourceSet,
            DataConnection data,
            ImportResult result,
            IDictionary<string, IResourceKey> existingKeys,
            IDictionary<Tuple<Guid, string>, IResourceValue> existingValues)
        {
            foreach (var resource in resourceSet.Resources.Values)
            {
                IResourceKey existingKey;
                if (existingKeys.TryGetValue(resource.Key, out existingKey))
                {
                    var valueKey = Tuple.Create(existingKey.Id, ci.Name);

                    IResourceValue existingValue;
                    if (existingValues.TryGetValue(valueKey, out existingValue))
                    {
                        if (existingValue.Value == resource.Value)
                        {
                            result.ValuesWereTheSame++;
                        }
                        else
                        {
                            existingValue.Value = resource.Value;

                            if (existingValue.DataSourceId.ExistsInStore)
                            {
                                _valuesToUpdate.Add(existingValue);
                            }
                        }
                    }
                    else
                    {
                        var value = data.CreateNew<IResourceValue>();

                        value.Id = Guid.NewGuid();
                        value.KeyId = existingKey.Id;
                        value.Culture = ci.Name;
                        value.Value = resource.Value;

                        existingValues.Add(valueKey, value);
                        _valuesToAdd.Add(value);
                    }
                }
                else
                {
                    var key = data.CreateNew<IResourceKey>();

                    key.Id = Guid.NewGuid();
                    key.Key = resource.Key;
                    key.ResourceSet = resourceSet.Name;
                    key.Type = resource.Type.ToString();

                    existingKeys.Add(resource.Key, key);
                    _keysToAdd.Add(key);

                    var value = data.CreateNew<IResourceValue>();

                    value.Id = Guid.NewGuid();
                    value.KeyId = key.Id;
                    value.Culture = ci.Name;
                    value.Value = resource.Value;

                    existingValues.Add(Tuple.Create(value.Id, ci.Name), value);
                    _valuesToAdd.Add(value);
                }
            }
        }
        public ImportExportModel Export()
        {
            var model = new ImportExportModel();

            using (var data = new DataConnection())
            {
                foreach (var language in _languages)
                {
                    var ci = new CultureInfo(language);

                    var modelLanguage = new ImportExportModelLanguage(ci);

                    foreach (var resourceSet in _resourceSets)
                    {
                        var modelResourceSet = new ImportExportModelResourceSet
                        {
                            Name = String.IsNullOrEmpty(resourceSet) ? null : resourceSet
                        };

                        var keys = from key in data.Get <IResourceKey>()
                                   where key.ResourceSet == (resourceSet == String.Empty ? null : resourceSet)
                                   select key;

                        var query = from key in keys
                                    join value in data.Get <IResourceValue>() on key.Id equals value.KeyId
                                    where value.Culture == ci.Name
                                    select new
                        {
                            Key   = key.Key,
                            Type  = key.Type,
                            Value = value.Value
                        };

                        if (!String.IsNullOrEmpty(_ns))
                        {
                            query = from o in query
                                    where o.Key.StartsWith(_ns)
                                    select o;
                        }

                        foreach (var o in query)
                        {
                            var resourceModel = new ImportExportModelResource
                            {
                                Key   = o.Key,
                                Value = o.Value
                            };

                            if (!String.IsNullOrEmpty(o.Type))
                            {
                                resourceModel.Type = (ResourceType)Enum.Parse(typeof(ResourceType), o.Type);
                            }

                            modelResourceSet.Resources.Add(resourceModel.Key, resourceModel);
                        }

                        modelLanguage.ResourceSets.Add(modelResourceSet);
                    }

                    model.Languages.Add(ci, modelLanguage);
                }
            }

            return(model);
        }