示例#1
0
        public Config GetConfig(string moduleName)
        {
            Logger.Log(LogLevel.Info, "Converting config of plugin {0}", moduleName);
            try
            {
                var module        = GetModuleFromManager(moduleName);
                var serialization = CreateSerialization(module);

                var config      = GetConfig(module, false);
                var configModel = new Config
                {
                    Root = EntryConvert.EncodeObject(config, serialization)
                };
                return(configModel);
            }
            catch (Exception ex)
            {
                Logger.LogException(LogLevel.Warning, ex, "Failed to convert config of {0}", moduleName);
#if USE_WCF
                var ctx = WebOperationContext.Current;
                // ReSharper disable once PossibleNullReferenceException
                ctx.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
#else
                Response.StatusCode = (int)HttpStatusCode.InternalServerError;
#endif
                return(null);
            }
        }
        public void AddItemToCollectionWhichIsArray()
        {
            //Arrange
            var dummy = new DummyClassIList();

            dummy.Number      = 10;
            dummy.Name        = "Thomas";
            dummy.SingleClass = null;
            dummy.SubArray    = new[] { new SubClass {
                                            Foo = (float)1.2, Enum = DummyEnum.ValueB
                                        } };
            dummy.SubList = new List <SubClass> {
                new SubClass {
                    Foo = (float)3.4, Enum = DummyEnum.ValueA
                }
            };
            dummy.SubEnumerable = new List <SubClass> {
                new SubClass {
                    Foo = (float)3.4, Enum = DummyEnum.ValueA
                }
            };
            dummy.SubDictionary = new Dictionary <int, SubClass>();
            dummy.SubIList      = new int[] { 1, 2, 3, 7 };

            var entry = EntryConvert.EncodeObject(dummy);
            var x     = entry.SubEntries.FirstOrDefault(e => e.Identifier == "SubIList");

            x.SubEntries.Add(x.Prototypes.First());

            //Act
            EntryConvert.UpdateInstance(dummy, entry);

            //Assert
            Assert.AreEqual(dummy.SubIList.Count, 5);
        }
        public void ConvertFromModelAndBackToModel()
        {
            // Arrange
            var dummyClass       = CreateDummyServer();
            var dummyClassClient = new EntryModelDummyClient();

            // Act
            var serverEntry = EntryConvert.EncodeObject(dummyClass, new DefaultSerialization {
                FormatProvider = new CultureInfo("en-us")
            });

            var clientConverter = EntryToModelConverter.Create <EntryModelDummyClient>(new CultureInfo("en-us"));

            clientConverter.FromModel(serverEntry, dummyClassClient);

            // Assert
            // Check server to client conversion
            Assert.AreEqual(73, dummyClassClient.Value);
            Assert.AreEqual(true, dummyClassClient.HasAnything);
            Assert.AreEqual("0.5", dummyClassClient.Class.Value);
            Assert.AreEqual("ValueB", dummyClassClient.Class.Enum);
            Assert.AreEqual(2, dummyClassClient.Collection.Count());
            Assert.AreEqual(2, dummyClassClient.Dictionary.Count <EntryModelSubClassDummyClient>());
            Assert.AreEqual("15.8", dummyClassClient.Dictionary["1"].Value);
            Assert.AreEqual("Unset", dummyClassClient.Dictionary["1"].Enum);
            Assert.AreEqual("435.2", dummyClassClient.Dictionary["2"].Value);
            Assert.AreEqual("ValueA", dummyClassClient.Dictionary["2"].Enum);

            // Arrange
            dummyClassClient.Value       = 174;
            dummyClassClient.HasAnything = false;
            dummyClassClient.Class.Value = "15.8";
            dummyClassClient.Class.Enum  = "ValueA";
            dummyClassClient.Collection.Remove(dummyClassClient.Collection.First());
            dummyClassClient.Collection.First().Value = "90";
            dummyClassClient.Collection.First().Enum  = "ValueA";
            dummyClassClient.Dictionary["1"].Value = "10076";
            dummyClassClient.Dictionary["1"].Enum  = "ValueB";
            dummyClassClient.Dictionary.Remove("2");

            // Act
            clientConverter.ToModel(dummyClassClient, serverEntry);

            EntryConvert.UpdateInstance(dummyClass, serverEntry, new DefaultSerialization {
                FormatProvider = new CultureInfo("en-us")
            });

            // Assert
            // Check client to server conversion
            Assert.AreEqual(174, dummyClass.Value);
            Assert.AreEqual(false, dummyClass.HasAnything);
            Assert.AreEqual(15.8f, dummyClass.Class.Value);
            Assert.AreEqual(DummyEnum.ValueA, dummyClass.Class.Enum);
            Assert.AreEqual(1, dummyClass.Collection.Count);
            Assert.AreEqual(90f, dummyClass.Collection.First().Value);
            Assert.AreEqual(DummyEnum.ValueA, dummyClass.Collection.First().Enum);
            Assert.AreEqual(1, dummyClass.Dictionary.Count);
            Assert.AreEqual(10076f, dummyClass.Dictionary[1].Value);
            Assert.AreEqual(DummyEnum.ValueB, dummyClass.Dictionary[1].Enum);
        }
        public void RemoveItemFromEntryDictionary()
        {
            // Arrange
            var dummyClass  = CreateDummyServer();
            var dummyClient = CreateDummyClient();

            // Act
            var serverEntry = EntryConvert.EncodeObject(dummyClass, new DefaultSerialization {
                FormatProvider = new CultureInfo("en-us")
            });

            dummyClient.Dictionary.Remove("2");

            var clientConverter = EntryToModelConverter.Create <EntryModelDummyClient>(new CultureInfo("en-us"));

            clientConverter.ToModel(dummyClient, serverEntry);

            // Assert
            Assert.AreEqual(1, dummyClient.Dictionary.Count());
            Assert.AreEqual("4.6", dummyClient.Dictionary["1"].Value);
            Assert.AreEqual("ValueA", dummyClient.Dictionary["1"].Enum);

            Assert.AreEqual(1, serverEntry.SubEntries[5].SubEntries.Count);
            Assert.AreEqual("4.6", serverEntry.SubEntries[5].SubEntries[0].SubEntries[0].Value.Current);
            Assert.AreEqual("ValueA", serverEntry.SubEntries[5].SubEntries[0].SubEntries[1].Value.Current);
        }
        public void AddItemToEntryCollection()
        {
            // Arrange
            var dummyClass  = CreateDummyServer();
            var dummyClient = CreateDummyClient();

            // Act
            var serverEntry = EntryConvert.EncodeObject(dummyClass, new DefaultSerialization {
                FormatProvider = new CultureInfo("en-us")
            });

            dummyClient.Collection.Add(typeof(EntryModelSubClassDummyClient).Name);

            var clientConverter = EntryToModelConverter.Create <EntryModelDummyClient>(new CultureInfo("en-us"));

            clientConverter.ToModel(dummyClient, serverEntry);

            // Assert
            Assert.AreEqual(3, dummyClient.Collection.Count());
            Assert.IsNull(dummyClient.Collection.Last().Value);
            Assert.IsNull(dummyClient.Collection.Last().Enum);

            Assert.AreEqual(3, serverEntry.SubEntries[4].SubEntries.Count);
            Assert.AreEqual(typeof(EntryModelSubClassDummyClient).Name, serverEntry.SubEntries[4].SubEntries[2].Value.Current);
        }
        public void FormatProviderTest(string cultureName)
        {
            // Arrange
            var formatProvider = new CultureInfo(cultureName);
            var serialization  = new DefaultSerialization {
                FormatProvider = formatProvider
            };

            var dummy = new DummyClass
            {
                Number      = 1001,
                SingleClass = new SubClass {
                    Foo = 1.1234f
                }
            };

            // Act
            var encoded      = EntryConvert.EncodeObject(dummy, serialization);
            var dummyDecoded = EntryConvert.CreateInstance <DummyClass>(encoded, serialization);

            // Assert
            Assert.AreEqual(1001.ToString(formatProvider), encoded.SubEntries[0].Value.Current);
            Assert.AreEqual(1.1234f.ToString(formatProvider), encoded.SubEntries[3].SubEntries[0].Value.Current);

            Assert.AreEqual(1001, dummyDecoded.Number);
            Assert.AreEqual(1.1234f, dummyDecoded.SingleClass.Foo);
        }
        public void RemoveEntry(CollectionType type, int prefill, int[] removedIndexes)
        {
            // Arrange
            var obj     = Prebuild(type, prefill);
            var encoded = EntryConvert.EncodeObject(obj);

            // Act
            var colEntry = CollectionEntry(encoded.SubEntries, type);

            if (type == CollectionType.Dictionary)
            {
                colEntry.SubEntries.RemoveAll(e => removedIndexes.Contains(int.Parse(e.Identifier) - 1));
            }
            else
            {
                colEntry.SubEntries.RemoveAll(e => removedIndexes.Contains(int.Parse(e.Identifier)));
            }
            EntryConvert.UpdateInstance(obj, encoded);

            // Assert
            var collection = ExtractCollection(type, obj);
            var totalSize  = prefill - removedIndexes.Length;

            Assert.AreEqual(totalSize, collection.Count, "New size invalid");


            if (type == CollectionType.Dictionary)
            {
                var array = (collection as IEnumerable <KeyValuePair <int, SubClass> >).ToArray();
                for (var i = 0; i < prefill; i++)
                {
                    if (removedIndexes.Contains(i))
                    {
                        continue;
                    }

                    var match = array.FirstOrDefault(e => e.Key == i + 1);
                    Assert.NotNull(match);
                }
            }
            else
            {
                var array = (collection as IEnumerable <SubClass>).ToArray();
                for (var i = 0; i < prefill; i++)
                {
                    if (removedIndexes.Contains(i))
                    {
                        continue;
                    }

                    var match = array.FirstOrDefault(e => e.Foo == i + 1);
                    Assert.NotNull(match);
                }
            }
        }
        public void UpdateDictionary()
        {
            // Arrange
            var dummy = new DictionaryClass
            {
                SubDictionary = new Dictionary <string, int>
                {
                    { "077", 6 },
                    { "088", 9 }
                },
                EnumDictionary = new Dictionary <string, DummyEnum>
                {
                    { "011", DummyEnum.Unset },
                    { "022", DummyEnum.ValueB }
                }
            };

            var encoded = EntryConvert.EncodeObject(dummy);

            var entry1 = encoded.SubEntries[1];
            var entry2 = encoded.SubEntries[2];


            for (var i = 1; i <= 2; i++)
            {
                var newInstance = entry1.Prototypes[0].Instantiate();
                newInstance.Value.Current = (1 + i).ToString();
                newInstance.DisplayName   = "Key" + i;
                entry1.SubEntries.Add(newInstance);
            }

            entry1.SubEntries[0].Value.Current = "123";
            entry1.SubEntries[0].DisplayName   = "022";

            for (var i = 1; i <= 3; i++)
            {
                var newInstance = entry2.Prototypes[0].Instantiate();
                newInstance.Value.Current = ((DummyEnum)(i % 3)).ToString();
                newInstance.DisplayName   = "Key_0121" + i;
                entry2.SubEntries.Add(newInstance);
            }

            entry2.SubEntries[0].Value.Current = DummyEnum.ValueA.ToString();
            entry2.SubEntries[0].DisplayName   = "555";

            // Act
            EntryConvert.UpdateInstance(dummy, encoded);

            // Assert
            Assert.AreEqual(5, dummy.EnumDictionary.Count);
            Assert.AreEqual(4, dummy.SubDictionary.Count);
            Assert.AreEqual(123, dummy.SubDictionary["022"]);
            Assert.AreEqual(DummyEnum.ValueA, dummy.EnumDictionary["555"]);
        }
        public void UpdateEntries(CollectionType type)
        {
            // Arrange
            var obj     = Prebuild(type, 3);
            var encoded = EntryConvert.EncodeObject(obj);

            // Act
            var colEntry = CollectionEntry(encoded.SubEntries, type);

            if (type == CollectionType.Dictionary)
            {
                foreach (var entry in colEntry.SubEntries)
                {
                    //change "Key" + 10
                    entry.DisplayName = "1" + entry.SubEntries[0].Value.Current;
                    // change "Value"
                    entry.SubEntries[0].Value.Current = "1" + entry.SubEntries[0].Value.Current;
                    entry.SubEntries[1].Value.Current = entry.SubEntries[1].Value.Possible[2];
                }

                EntryConvert.UpdateInstance(obj, encoded);

                // Assert
                var collection = ExtractCollection(type, obj);

                for (var i = 0; i < collection.Count; i++)
                {
                    Assert.IsTrue(obj.SubDictionary.ContainsKey(11 + i));
                    Assert.AreEqual((float)11 + i, obj.SubDictionary[11 + i].Foo);
                    Assert.AreEqual(DummyEnum.ValueB, obj.SubDictionary[11 + i].Enum);
                }
            }
            else
            {
                foreach (var entry in colEntry.SubEntries)
                {
                    entry.SubEntries[0].Value.Current = "1" + entry.SubEntries[0].Value.Current;
                    entry.SubEntries[1].Value.Current = entry.SubEntries[1].Value.Possible[2];
                }
                EntryConvert.UpdateInstance(obj, encoded);

                // Assert
                var collection = ExtractCollection(type, obj);

                var array = (collection as IEnumerable <SubClass>).ToArray();

                for (var i = 0; i < collection.Count; i++)
                {
                    Assert.AreEqual((float)11 + i, array[i].Foo);
                    Assert.AreEqual(DummyEnum.ValueB, array[i].Enum);
                }
            }
        }
        public void SurviveGetterException()
        {
            // Arrange
            var dummy = new ExceptionDummy();

            // Act
            var encoded = EntryConvert.EncodeObject(dummy);

            // Assert
            Assert.NotNull(encoded);
            Assert.AreEqual(EntryValueType.Exception, encoded.SubEntries[0].Value.Type);
            Assert.NotNull(encoded.SubEntries[0].Value.Current);
        }
        public void NonLocalized()
        {
            // Arrange
            var dummyClass = new DummyClass();

            // Act
            Thread.CurrentThread.CurrentUICulture = _germanCulture;
            var entriesGerman = EntryConvert.EncodeObject(dummyClass);

            // Assert
            Assert.AreEqual(nameof(DummyClass.SingleClassNonLocalized), entriesGerman.SubEntries[14].DisplayName);
            Assert.IsNull(entriesGerman.SubEntries[14].Description);
        }
 public ActionResult <ProductCustomization> GetProductCustomization()
 {
     return(new ProductCustomization
     {
         ProductTypes = GetProductTypes(),
         RecipeTypes = GetRecipeTypes(),
         Importers = _productManagement.Importers.Select(i => new ProductImporter
         {
             Name = i.Key,
             Parameters = EntryConvert.EncodeObject(i.Value)
         }).ToArray()
     });
 }
        public void UpdatePrimitiveList()
        {
            // Arrange
            var defaultSerialization = new DefaultSerialization {
                FormatProvider = new CultureInfo("en-US")
            };

            var dummy = new ListDummy
            {
                Number     = 0,
                DoubleList = new List <double> {
                    1.7, 2.5, 3
                },
                EnumList = new List <DummyEnum> {
                    DummyEnum.ValueA, DummyEnum.Unset, DummyEnum.ValueB
                }
            };

            var encoded = EntryConvert.EncodeObject(dummy, defaultSerialization);
            var ent     = encoded.SubEntries[1];
            var ent2    = encoded.SubEntries[2];

            // Act
            encoded.SubEntries[0].Value.Current = "5";
            ent.SubEntries[1].Value.Current     = 12.34d.ToString(defaultSerialization.FormatProvider);
            var newInstance = ent.Prototypes[0].Instantiate();

            newInstance.Value.Current = 133.7d.ToString(defaultSerialization.FormatProvider);
            ent.SubEntries.Add(newInstance);

            ent2.SubEntries[1].Value.Current = "ValueB";
            newInstance = ent2.Prototypes[0].Instantiate();
            newInstance.Value.Current = "ValueA";
            ent2.SubEntries.Add(newInstance);

            EntryConvert.UpdateInstance(dummy, encoded, defaultSerialization);

            // Assert
            Assert.AreEqual(5, dummy.Number);
            Assert.AreEqual(4, dummy.DoubleList.Count);
            Assert.AreEqual(1.7, dummy.DoubleList[0]);
            Assert.AreEqual(12.34, dummy.DoubleList[1]);
            Assert.AreEqual(3.0, dummy.DoubleList[2]);
            Assert.AreEqual(133.7, dummy.DoubleList[3]);

            Assert.AreEqual(4, dummy.EnumList.Count);
            Assert.AreEqual(DummyEnum.ValueA, dummy.EnumList[0]);
            Assert.AreEqual(DummyEnum.ValueB, dummy.EnumList[1]);
            Assert.AreEqual(DummyEnum.ValueB, dummy.EnumList[2]);
            Assert.AreEqual(DummyEnum.ValueA, dummy.EnumList[3]);
        }
        public void UpdateArray()
        {
            // Arrange
            var dummy = new ArrayDummy
            {
                Array = new[] { 2, 5, 7 },
                Keys  = new[] { "test1_2", "test_02", "1245" },
                Enums = new[] { DummyEnum.Unset, DummyEnum.ValueB, DummyEnum.ValueA }
            };

            // Act
            var encoded = EntryConvert.EncodeObject(dummy);
            var entry1  = encoded.SubEntries[0];
            var entry2  = encoded.SubEntries[1];
            var entry3  = encoded.SubEntries[2];

            entry1.SubEntries[1].Value.Current = "42";
            var instance1 = encoded.SubEntries[0].Prototypes[0].Instantiate();

            instance1.Value.Current = "1337";
            entry1.SubEntries.Add(instance1);

            entry2.SubEntries[2].Value.Current = "hallo";
            var instance2 = entry2.Prototypes[0].Instantiate();

            instance2.Value.Current = "new_Value";
            entry2.SubEntries.Add(instance2);

            entry3.SubEntries[0].Value.Current = "ValueA";
            var instance3 = entry3.Prototypes[0].Instantiate();

            instance3.Value.Current = "ValueB";
            entry3.SubEntries.Add(instance3);

            EntryConvert.UpdateInstance(dummy, encoded);

            // Assert
            Assert.AreEqual(4, dummy.Array.Length);
            Assert.AreEqual(42, dummy.Array[1]);
            Assert.AreEqual(1337, dummy.Array[3]);
            Assert.AreEqual(4, dummy.Keys.Length);
            Assert.AreEqual("test1_2", dummy.Keys[0]);
            Assert.AreEqual("test_02", dummy.Keys[1]);
            Assert.AreEqual("hallo", dummy.Keys[2]);
            Assert.AreEqual("new_Value", dummy.Keys[3]);
            Assert.AreEqual(DummyEnum.ValueA, dummy.Enums[0]);
            Assert.AreEqual(DummyEnum.ValueB, dummy.Enums[1]);
            Assert.AreEqual(DummyEnum.ValueA, dummy.Enums[2]);
            Assert.AreEqual(DummyEnum.ValueB, dummy.Enums[3]);
        }
        public void MemoryStreamEncode()
        {
            // Arrange
            var testString  = "This is a test";
            var streamDummy = new MemoryStreamDummy(testString);

            // Act
            var entry = EntryConvert.EncodeObject(streamDummy);

            // Assert
            Assert.AreEqual(1, entry.SubEntries.Count);
            Assert.AreEqual(EntryValueType.Stream, entry.SubEntries[0].Value.Type);
            Assert.AreEqual("VGhpcyBpcyBhIHRlc3Q=", entry.SubEntries[0].Value.Current);
        }
        public void EncodeReadonlyCollection()
        {
            // Arrange
            var dummy = new ListDummy();

            // Act
            var encoded = EntryConvert.EncodeObject(dummy);

            // Assert
            var readList = encoded.SubEntries[3];

            Assert.AreEqual(1, readList.SubEntries.Count);
            Assert.IsTrue(readList.Value.IsReadOnly);
            Assert.IsEmpty(readList.Prototypes);
        }
示例#17
0
        public EntryEditorViewModel()
        {
            var entryModel = new EntryClass
            {
                ArrayOfByte  = new byte[] { 0x01, 0xF3 },
                ChainOfChars = "HelloWorld",
                ListSubClass = new List <EntrySubClass>
                {
                    new EntrySubClass
                    {
                        AByte = 0x33
                    }
                },
                SubClass = new EntrySubClass
                {
                    AByte = 0xE2
                },
                ListEnum = new List <Visibility>
                {
                    Visibility.Hidden,
                    Visibility.Visible,
                    Visibility.Collapsed
                },
                ListBool = new List <bool>
                {
                    true,
                    false,
                    false
                },
                ListString = new List <string>
                {
                    "Hello",
                    "World"
                },
                File     = "",
                Password = "******"
            };

            var entry = EntryConvert.EncodeObject(entryModel);

            entry.DisplayName = "Root";
            EntryViewModels   = new EntryViewModel(entry);

            ShowExceptionCommand = new RelayCommand(ShowException);
            BeginEditCmd         = new RelayCommand(BeginEdit);
            EndEditCmd           = new RelayCommand(EndEdit);
            CancelEditCmd        = new RelayCommand(CancelEdit);
        }
示例#18
0
        public RecipeModel ConvertRecipe(IRecipe recipe)
        {
            // Transform to DTO and transmit
            var converted = new RecipeModel
            {
                Id         = recipe.Id,
                Name       = recipe.Name,
                Type       = recipe.GetType().Name,
                State      = recipe.State,
                Revision   = recipe.Revision,
                Properties = EntryConvert.EncodeObject(recipe, RecipeSerialization),
                IsClone    = recipe.Classification.HasFlag(RecipeClassification.Clone)
            };

            switch (recipe.Classification & RecipeClassification.CloneFilter)
            {
            case RecipeClassification.Unset:
                converted.Classification = RecipeClassificationModel.Unset;
                break;

            case RecipeClassification.Default:
                converted.Classification = RecipeClassificationModel.Default;
                break;

            case RecipeClassification.Alternative:
                converted.Classification = RecipeClassificationModel.Alternative;
                break;

            case RecipeClassification.Intermediate:
                converted.Classification = RecipeClassificationModel.Intermediate;
                break;

            case RecipeClassification.Part:
                converted.Classification = RecipeClassificationModel.Part;
                break;
            }

            var wpRecipe = recipe as IWorkplanRecipe;

            if (wpRecipe?.Workplan != null)
            {
                converted.WorkplanId    = wpRecipe.Workplan.Id;
                converted.WorkplanModel = ConvertWorkplan(wpRecipe.Workplan);
            }


            return(converted);
        }
        public void LocalizedClassDisplay()
        {
            // Arrange
            var subClass = new LocalizedClass();

            // Act
            Thread.CurrentThread.CurrentUICulture = _germanCulture;
            var entriesGerman = EntryConvert.EncodeObject(subClass);

            Thread.CurrentThread.CurrentUICulture = _invariantCulture;
            var entriesInvariant = EntryConvert.EncodeObject(subClass);

            // Assert
            Assert.AreEqual(strings.ResourceManager.GetString(nameof(strings.ClassName), _germanCulture), entriesGerman.DisplayName);
            Assert.AreEqual(strings.ResourceManager.GetString(nameof(strings.ClassName), _invariantCulture), entriesInvariant.DisplayName);
        }
        public void EncodeObject()
        {
            // Arrange
            var dummy = new DummyClass
            {
                Number      = 10,
                Name        = "Thomas",
                SingleClass = null,
                SubArray    = new[] { new SubClass {
                                          Foo = (float)1.2, Enum = DummyEnum.ValueB
                                      } },
                SubList = new List <SubClass> {
                    new SubClass {
                        Foo = (float)3.4, Enum = DummyEnum.ValueA
                    }
                },
                SubEnumerable = new List <SubClass> {
                    new SubClass {
                        Foo = (float)3.4, Enum = DummyEnum.ValueA
                    }
                },
                SubDictionary = new Dictionary <int, SubClass>()
            };

            dummy.SubDictionary.Add(1, new SubClass()
            {
                Enum = DummyEnum.ValueA, Foo = (float)3.4
            });
            dummy.SubDictionary.Add(2, new SubClass()
            {
                Enum = DummyEnum.ValueB, Foo = (float)3.5
            });

            // Act
            var encoded    = EntryConvert.EncodeObject(dummy).SubEntries;
            var encodedSub = encoded[4].SubEntries[0].SubEntries;

            // Assert
            DummyAssert(encoded, encodedSub);
            var expected = new[] { "10", "Thomas", "10" };

            for (var i = 0; i < 3; i++)
            {
                Assert.AreEqual(expected[i], encoded[i].Value.Current, "Property value missmatch");
            }
        }
示例#21
0
        private PartModel ConvertPart(IProductPartLink link)
        {
            // No link, no DTO!
            if (link is null || link.Product is null)
            {
                return(null);
            }

            var part = new PartModel
            {
                Id         = link.Id,
                Product    = ConvertProduct(link.Product, true),
                Properties = EntryConvert.EncodeObject(link, ProductSerialization)
            };

            return(part);
        }
        private ProductModel ConvertProduct(IProductType productType, bool flat)
        {
            var converted = _productCache.FirstOrDefault(p => p.Id == productType.Id);

            if (converted != null)
            {
                return(converted);
            }

            // Base object
            var identity = (ProductIdentity)productType.Identity ?? EmptyIdentity;

            converted = new ProductModel
            {
                Id         = productType.Id,
                Type       = productType.GetType().Name,
                Name       = productType.Name,
                State      = productType.State,
                Identifier = identity.Identifier,
                Revision   = identity.Revision
            };

            if (flat)
            {
                return(converted);
            }

            // Properties
            var properties = productType.GetType().GetProperties();

            converted.Properties = EntryConvert.EncodeObject(productType, ProductSerialization);

            // Files
            converted.Files = ConvertFiles(productType, properties);

            // Recipes
            var recipes = RecipeManagement.GetAllByProduct(productType);

            converted.Recipes = recipes.Select(ConvertRecipe).ToArray();

            // Parts
            ConvertParts(productType, properties, converted);

            _productCache.Add(converted);
            return(converted);
        }
        public void EncodeCollection()
        {
            // Arrange
            var values = new string[] { "Hello", "World" };

            // Act
            var encoded = EntryConvert.EncodeObject(values);

            // Assert
            Assert.NotNull(encoded);
            Assert.AreEqual(EntryValueType.Collection, encoded.Value.Type);
            Assert.AreEqual(2, encoded.SubEntries.Count);
            var se = encoded.SubEntries;

            Assert.AreEqual(values[0], se[0].Value.Current);
            Assert.AreEqual(values[1], se[1].Value.Current);
        }
        public void MemoryStreamDecode()
        {
            // Arrange
            var testString            = "This is a test";
            var streamDummy           = new MemoryStreamDummy(testString);
            var targetStreamDummy     = new MemoryStreamDummy("");
            var streamInstanceToCheck = targetStreamDummy.MemoryStream;
            var entry = EntryConvert.EncodeObject(streamDummy);

            // Act
            EntryConvert.UpdateInstance(targetStreamDummy, entry);

            // Assert
            var stringValue = Encoding.UTF8.GetString(targetStreamDummy.MemoryStream.ToArray());

            Assert.AreEqual(testString, stringValue);
            Assert.AreNotSame(streamInstanceToCheck, targetStreamDummy.MemoryStream);
        }
        public void MemoryStreamDecodeReuseCurrentStreamInitSizeIsGreaterThanNewData()
        {
            // Arrange
            var testString            = "A test";
            var dummyString           = "12345678912345";
            var streamDummy           = new MemoryStreamDummy(testString);
            var targetStreamDummy     = new MemoryStreamDummy(dummyString);
            var streamInstanceToCheck = targetStreamDummy.MemoryStream;
            var entry = EntryConvert.EncodeObject(streamDummy);

            // Act
            EntryConvert.UpdateInstance(targetStreamDummy, entry);

            // Assert
            var stringValue = Encoding.UTF8.GetString(targetStreamDummy.MemoryStream.ToArray());

            Assert.AreEqual(testString, stringValue);
            Assert.AreSame(streamInstanceToCheck, targetStreamDummy.MemoryStream);
        }
        /// <summary>
        /// Checks if resource and model are equal
        /// </summary>
        /// <param name="resource"></param>
        /// <param name="serialization"></param>
        /// <returns></returns>
        internal bool DifferentFrom(Resource resource, ICustomSerialization serialization)
        {
            // Do not compare values that were not transmitted
            if (resource.Descriptor == null || PartiallyLoaded)
            {
                return(false);
            }

            // Compare obvious base properties
            var different = resource.Name != Name || resource.Description != Description;

            if (different)
            {
                return(true);
            }

            var resourceProperties = EntryConvert.EncodeObject(resource.Descriptor, serialization);

            return(!Entry.ValuesEqual(Properties, resourceProperties));
        }
        public void FileStreamEncode()
        {
            // Arrange
            var testString   = "This is a test";
            var testFilePath = Path.Combine(TestContext.CurrentContext.TestDirectory, "text.txt");
            var streamDummy  = new FileStreamDummy(testFilePath, FileMode.Create);
            var testBytes    = Encoding.UTF8.GetBytes(testString);

            streamDummy.FileStream.Write(testBytes, 0, testBytes.Length);

            // Act
            var entry = EntryConvert.EncodeObject(streamDummy);

            // Assert
            Assert.AreEqual(1, entry.SubEntries.Count);
            Assert.AreEqual(EntryValueType.Stream, entry.SubEntries[0].Value.Type);
            Assert.AreEqual("VGhpcyBpcyBhIHRlc3Q=", entry.SubEntries[0].Value.Current);

            streamDummy.FileStream.Close();
            File.Delete(testFilePath);
        }
示例#28
0
        public ProductModel ConvertProduct(IProductType productType, bool flat)
        {
            // Base object
            var identity  = (ProductIdentity)productType.Identity ?? EmptyIdentity;
            var converted = new ProductModel
            {
                Id         = productType.Id,
                Type       = productType.GetType().Name,
                Name       = productType.Name,
                State      = productType.State,
                Identifier = identity.Identifier,
                Revision   = identity.Revision
            };

            if (flat)
            {
                return(converted);
            }

            // Properties
            var properties = productType.GetType().GetProperties();

            converted.Properties = EntryConvert.EncodeObject(productType, ProductSerialization);

            // Files
            converted.Files = (from property in properties
                               where property.PropertyType == typeof(ProductFile)
                               select(ProductFile) property.GetValue(productType)).ToArray();
            converted.FileModels = ConvertFiles(productType, properties);

            // Recipes
            var recipes = RecipeManagement.GetAllByProduct(productType);

            converted.Recipes = recipes.Select(ConvertRecipe).ToArray();

            // Parts
            ConvertParts(productType, properties, converted);

            return(converted);
        }
        public Config GetConfig(string moduleName)
        {
            Logger.Log(LogLevel.Info, "Converting config of plugin {0}", moduleName);
            try
            {
                var module        = GetModuleFromManager(moduleName);
                var serialization = CreateSerialization(module);

                var config      = GetConfig(module, false);
                var configModel = new Config
                {
                    Root = EntryConvert.EncodeObject(config, serialization)
                };
                return(configModel);
            }
            catch (Exception ex)
            {
                Logger.LogException(LogLevel.Warning, ex, "Failed to convert config of {0}", moduleName);
                HttpHelper.SetStatusCode(HttpStatusCode.InternalServerError);
                return(null);
            }
        }
 private EntryModelDummyClient CreateDummyClient()
 {
     return(new EntryModelDummyClient
     {
         Value = 76,
         HasAnything = false,
         Class = new EntryModelSubClassDummyClient {
             Value = "0.2", Enum = "Unset"
         },
         Collection = new EntryCollection <EntryModelSubClassDummyClient>(EntryConvert.EncodeObject(
                                                                              new EntryModelListHelperDummy
         {
             Collection = new List <EntryModelSubClassDummyClient>
             {
                 new EntryModelSubClassDummyClient {
                     Value = "0.8", Enum = "ValueA"
                 },
                 new EntryModelSubClassDummyClient {
                     Value = "0.4", Enum = "Unset"
                 }
             }
         }).SubEntries[0]),
         Dictionary = new EntryDictionary <EntryModelSubClassDummyClient>(EntryConvert.EncodeObject(
                                                                              new EntryModelDictionaryHelperDummy
         {
             Dictionary = new Dictionary <int, EntryModelSubClassDummyClient>
             {
                 { 1, new EntryModelSubClassDummyClient {
                       Value = "4.6", Enum = "ValueA"
                   } },
                 { 2, new EntryModelSubClassDummyClient {
                       Value = "79.1", Enum = "ValueB"
                   } }
             }
         }
                                                                              ).SubEntries[0])
     });
 }