source: trunk/CrypPlugins/WorkspaceManager/Model/ModelPersistance.cs @ 1746

Last change on this file since 1746 was 1746, checked in by kopal, 12 years ago

now PluginSettings will be persisted too

File size: 8.1 KB
Line 
1/*                             
2   Copyright 2010 Nils Kopal, Viktor M.
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System;
18using System.Collections.Generic;
19using System.Linq;
20using System.Text;
21using System.IO;
22using System.Xml.Serialization;
23using System.Runtime.Serialization.Formatters.Binary;
24using System.Reflection;
25using Cryptool.PluginBase;
26using XMLSerialization;
27
28namespace WorkspaceManager.Model
29{
30    /// <summary>
31    /// Class with static methods for loading and saving of WorkspaceModels
32    /// </summary>
33    public class ModelPersistance
34    {
35        /// <summary>
36        /// Deserializes a model from the given file with the given filename
37        /// </summary>
38        /// <param name="filename"></param>
39        /// <returns></returns>
40        public static WorkspaceModel loadModel(string filename, WorkspaceManager workspaceManagerEditor)
41        {
42            PersistantModel persistantModel = (PersistantModel)XMLSerialization.XMLSerialization.Deserialize(filename);
43            WorkspaceModel workspacemodel = persistantModel.WorkspaceModel;
44            workspacemodel.WorkspaceManagerEditor = workspaceManagerEditor;
45
46            foreach (PersistantPlugin persistantPlugin in persistantModel.PersistantPluginList)
47            {
48                foreach (PersistantSetting persistantSetting in persistantPlugin.PersistantSettingsList)
49                {
50
51                    PropertyInfo[] arrpInfo = persistantPlugin.PluginModel.Plugin.Settings.GetType().GetProperties();
52                    foreach (PropertyInfo pInfo in arrpInfo)
53                    {
54                        DontSaveAttribute[] dontSave = (DontSaveAttribute[])pInfo.GetCustomAttributes(typeof(DontSaveAttribute), false);
55                        if (dontSave.Length == 0)
56                        {
57                            if (pInfo.Name.Equals(persistantSetting.Name))
58                            {
59                                if (persistantSetting.Type.Equals("System.String"))
60                                {
61                                    pInfo.SetValue(persistantPlugin.PluginModel.Plugin.Settings, (String)persistantSetting.Value, null);
62                                }
63                                else if (persistantSetting.Type.Equals("System.Int16"))
64                                {
65                                    pInfo.SetValue(persistantPlugin.PluginModel.Plugin.Settings, System.Int16.Parse((String)persistantSetting.Value), null);
66                                }
67                                else if (persistantSetting.Type.Equals("System.Int32"))
68                                {
69                                    pInfo.SetValue(persistantPlugin.PluginModel.Plugin.Settings, System.Int32.Parse((String)persistantSetting.Value), null);
70                                }
71                                else if (persistantSetting.Type.Equals("System.Int64"))
72                                {
73                                    pInfo.SetValue(persistantPlugin.PluginModel.Plugin.Settings, System.Int64.Parse((String)persistantSetting.Value), null);
74                                }
75                                else if (persistantSetting.Type.Equals("System.Double"))
76                                {
77                                    pInfo.SetValue(persistantPlugin.PluginModel.Plugin.Settings, System.Double.Parse((String)persistantSetting.Value), null);
78                                }
79                                else if (persistantSetting.Type.Equals("System.Boolean"))
80                                {
81                                    pInfo.SetValue(persistantPlugin.PluginModel.Plugin.Settings, System.Boolean.Parse((String)persistantSetting.Value), null);
82                                }
83                            }
84                        }
85                    }
86                }
87            }
88
89            foreach (PluginModel pluginModel in workspacemodel.AllPluginModels)
90            {
91                pluginModel.Plugin.OnGuiLogNotificationOccured += workspaceManagerEditor.GuiLogNotificationOccured;
92                pluginModel.Plugin.OnPluginProgressChanged += pluginModel.PluginProgressChanged;
93                pluginModel.Plugin.OnPluginStatusChanged += pluginModel.PluginStatusChanged;
94            }
95               
96            foreach (ConnectorModel connectorModel in workspacemodel.AllConnectorModels)
97            {
98                if(connectorModel.Outgoing == true){
99                    connectorModel.PluginModel.Plugin.PropertyChanged += connectorModel.PropertyChangedOnPlugin;
100                }
101
102                if (connectorModel.IsDynamic == true)
103                {
104                    DynamicPropertyInfoAttribute dynamicPropertyInfoAttribute = connectorModel.PluginModel.Plugin.GetDynamicPropertyInfo();
105                    EventInfo eventinfo = connectorModel.PluginModel.PluginType.GetEvent(dynamicPropertyInfoAttribute.UpdateDynamicPropertiesEvent);
106                    eventinfo.AddEventHandler(connectorModel.PluginModel.Plugin, new DynamicPropertiesChanged(connectorModel.PropertyTypeChangedOnPlugin));
107                }
108            }
109
110            return workspacemodel;         
111        }
112
113        /// <summary>
114        /// Serializes the given model to a file with the given filename
115        /// </summary>
116        /// <param name="workspaceModel"></param>
117        /// <param name="filename"></param>
118        /// <returns></returns>
119        public static void saveModel(WorkspaceModel workspaceModel, string filename)
120        {
121            PersistantModel persistantModel = new PersistantModel();
122            persistantModel.WorkspaceModel = workspaceModel;
123
124            //Save all Settings of each Plugin
125            foreach (PluginModel pluginModel in workspaceModel.AllPluginModels)
126            {
127                PropertyInfo[] arrpInfo = pluginModel.Plugin.Settings.GetType().GetProperties();
128
129                PersistantPlugin persistantPlugin = new PersistantPlugin();
130                persistantPlugin.PluginModel = pluginModel;
131
132                foreach (PropertyInfo pInfo in arrpInfo)
133                {
134                    DontSaveAttribute[] dontSave = (DontSaveAttribute[])pInfo.GetCustomAttributes(typeof(DontSaveAttribute), false);
135                    if (pInfo.CanWrite && dontSave.Length == 0)
136                    {
137                        PersistantSetting persistantSetting = new PersistantSetting();
138                        persistantSetting.Value = "" + pInfo.GetValue(pluginModel.Plugin.Settings, null);
139                        persistantSetting.Name = pInfo.Name;
140                        persistantSetting.Type = pInfo.PropertyType.FullName;
141                        persistantPlugin.PersistantSettingsList.Add(persistantSetting);
142                    }
143
144                }
145                persistantModel.PersistantPluginList.Add(persistantPlugin);
146            }
147            XMLSerialization.XMLSerialization.Serialize(persistantModel, filename);
148        }
149    }
150
151    [Serializable]
152    public class PersistantModel{
153        public WorkspaceModel WorkspaceModel{get;set;}
154        public List<PersistantPlugin> PersistantPluginList = new List<PersistantPlugin>();
155    }
156
157    [Serializable]
158    public class PersistantPlugin
159    {
160        public PluginModel PluginModel { get; set; }
161        public List<PersistantSetting> PersistantSettingsList = new List<PersistantSetting>();
162    }
163
164    [Serializable]
165    public class PersistantSetting
166    {
167        public string Name {get;set;}
168        public string Type { get; set; }
169        public string Value { get; set; }
170    }
171
172}
Note: See TracBrowser for help on using the repository browser.