source: trunk/CrypPlugins/P2PEditor/Distributed/DistributedJob.cs @ 1530

Last change on this file since 1530 was 1530, checked in by Paul Lelgemann, 12 years ago

+ P2PEditor: Exception handling, if workspace data cannot be retrieved using P2P

File size: 3.7 KB
Line 
1using System;
2using System.ComponentModel;
3using System.IO;
4using System.Runtime.Serialization;
5using Cryptool.P2P;
6
7namespace Cryptool.P2PEditor.Distributed
8{
9    [Serializable]
10    public class DistributedJob : INotifyPropertyChanged, ISerializable
11    {
12        [NonSerialized] private String _localFilePath;
13
14        protected DistributedJob(SerializationInfo info, StreamingContext ctxt)
15        {
16            JobName = (string) info.GetValue("JobName", typeof (string));
17            JobDescription = (string) info.GetValue("JobDescription", typeof (string));
18            JobGuid = (Guid) info.GetValue("JobGuid", typeof (Guid));
19            JobOwner = (string) info.GetValue("JobOwner", typeof (string));
20            JobDate = (DateTime) info.GetValue("JobDate", typeof (DateTime));
21            FileName = (string) info.GetValue("FileName", typeof (string));
22        }
23
24        public DistributedJob()
25        {
26            JobGuid = Guid.NewGuid();
27        }
28
29        public Guid JobGuid { get; private set; }
30
31        public String JobName { get; set; }
32
33        public String JobDescription { get; set; }
34
35        public String JobOwner { get; set; }
36
37        public DateTime JobDate { get; set; }
38
39        private String FileName { get; set; }
40
41        public String LocalFilePath
42        {
43            get { return _localFilePath; }
44            set
45            {
46                if (value == _localFilePath) return;
47                _localFilePath = value;
48                OnPropertyChanged("LocalFilePath");
49            }
50        }
51
52        public String JobLabel
53        {
54            get { return JobName; }
55        }
56
57        #region INotifyPropertyChanged Members
58
59        public event PropertyChangedEventHandler PropertyChanged;
60
61        #endregion
62
63        #region ISerializable Members
64
65        public void GetObjectData(SerializationInfo info, StreamingContext context)
66        {
67            info.AddValue("JobName", JobName);
68            info.AddValue("JobDescription", JobDescription);
69            info.AddValue("JobGuid", JobGuid);
70            info.AddValue("JobOwner", P2PManager.Instance.P2PSettings.PeerName);
71            info.AddValue("JobDate", DateTime.Now);
72            info.AddValue("FileName", Path.GetFileName(LocalFilePath));
73        }
74
75        #endregion
76
77        public void ConvertRawWorkspaceToLocalFile(byte[] rawWorkspaceData)
78        {
79            string workspacePath = P2PManager.Instance.P2PSettings.WorkspacePath;
80            if (String.IsNullOrEmpty(workspacePath) || !Directory.Exists(workspacePath))
81            {
82                throw new ArgumentOutOfRangeException(workspacePath, "Workspace path is null, empty or does not exist.");
83            }
84
85            // Avoid overwriting previous versions of this workspace or workspaces with common names by adding an integer prefix
86            LocalFilePath = Path.Combine(workspacePath, JobOwner + "_" + FileName);
87            int counter = 0;
88            while (File.Exists(LocalFilePath))
89            {
90                LocalFilePath = Path.Combine(workspacePath, counter++ + "_" + JobOwner + "_" + FileName);
91            }
92
93            if (rawWorkspaceData == null || rawWorkspaceData.Length == 0)
94            {
95                throw new ArgumentOutOfRangeException(LocalFilePath, "Workspace could not be fetching using Peer-to-peer.");
96            }
97
98            File.WriteAllBytes(LocalFilePath, rawWorkspaceData);
99        }
100
101        private void OnPropertyChanged(string propertyName)
102        {
103            if (PropertyChanged != null)
104                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
105        }
106    }
107}
Note: See TracBrowser for help on using the repository browser.