// Copyright (C) Stichting Deltares 2016. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; using Core.Common.Gui.PropertyBag; namespace Core.Common.Gui.Plugin { /// /// Information for creating object properties for a particular data object. /// public class PropertyInfo { /// /// Initializes a new instance of the class. /// public PropertyInfo() { CreateInstance = o => (IObjectProperties) Activator.CreateInstance(PropertyObjectType); } /// /// Gets or sets the type of the data to create properties for. /// public Type DataType { get; set; } /// /// Gets or sets the type of object properties to create. /// public Type PropertyObjectType { get; set; } /// /// Gets or sets the optional function used to create a new property instance. /// /// /// As an example, you could implement this as follows: /// var propertyInfo = new PropertyInfo < Folder, ModelImplementationFolderProperties > { CreateInstance = o => new ModelImplementationFolderProperties(o) }; /// public Func CreateInstance { get; set; } } /// /// Information for creating object properties for a particular data object. /// /// The type of the object to create object properties for. /// The type of the object properties to create. public class PropertyInfo where TProperty : IObjectProperties { /// /// Initializes a new instance of the class. /// public PropertyInfo() { CreateInstance = o => (TProperty) Activator.CreateInstance(PropertyObjectType); } /// /// Gets the type of the data to create properties for. /// public Type DataType { get { return typeof(TObject); } } /// /// Gets the type of object properties to create. /// public Type PropertyObjectType { get { return typeof(TProperty); } } /// /// Gets or sets the optional function used to create a new property instance. /// /// /// As an example, you could implement this as follows: /// var propertyInfo = new PropertyInfo < Folder, ModelImplementationFolderProperties > { CreateInstance = o => new ModelImplementationFolderProperties(o) }; /// public Func CreateInstance { get; set; } /// /// Performs an implicit conversion from to . /// /// The property information to convert. /// The result of the conversion. public static implicit operator PropertyInfo(PropertyInfo propertyInfo) { return new PropertyInfo { DataType = typeof(TObject), PropertyObjectType = typeof(TProperty), CreateInstance = o => propertyInfo.CreateInstance((TObject) o) }; } } }