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

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

o P2PEditor fixes

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