using Google.Protobuf; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Tango.BL.Enumerations; using Tango.FSE.Common.Diagnostics; using Tango.Integration.Operation; using Tango.Scripting.Basic; using Tango.Transport; namespace Tango.FSE.Procedures { public class ProcedureProject : Project { private static JsonSerializerSettings _jsonSettings; public PublishedProcedureProjectVisibilities Visibility { get; set; } public ObservableCollection Inputs { get; set; } public ObservableCollection Variables { get; set; } public ObservableCollection Resources { get; set; } public ObservableCollection Dialogs { get; set; } static ProcedureProject() { _jsonSettings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto, PreserveReferencesHandling = PreserveReferencesHandling.All, }; } public ProcedureProject() : base() { Visibility = PublishedProcedureProjectVisibilities.Public; ApartmentState = System.Threading.ApartmentState.STA; Inputs = new ObservableCollection(); Variables = new ObservableCollection(); Resources = new ObservableCollection(); Dialogs = new ObservableCollection(); } public static ProcedureProject New(String name) { ProcedureProject project = new ProcedureProject(); project.Name = name; project.Scripts.Add(Script.New("Program.csx", Encoding.UTF8.GetString(Properties.Resources.main_template), true)); project.Scripts.Add(Script.New("Service.csx", Encoding.UTF8.GetString(Properties.Resources.lib_template).Replace("@LibraryName", "Service"))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(String))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Enumerable))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Form))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(ProcedureProject))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(IDiagnosticsProvider))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(TechMonitors))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(PMR.Common.MessageType))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(ITransporter))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(IMachineOperator))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(IMessage))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(System.Drawing.Point))); project.ReferenceAssemblies.Add(ReferenceAssembly.FromType(typeof(Tango.DataStore.IDataStoreItem))); return project; } public String ToJson() { return JsonConvert.SerializeObject(this, _jsonSettings); } public static ProcedureProject FromJson(String json) { return JsonConvert.DeserializeObject(json, _jsonSettings); } } }