source: trunk/CrypPlugins/P2PEditor/P2PEditor.cs @ 1545

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

o CrypP2P: refactored P2PBase, removed race condition and unused code

File size: 6.7 KB
Line 
1/*
2   Copyright 2010 Paul Lelgemann, University of Duisburg-Essen
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.ComponentModel;
20using System.Windows.Controls;
21using Cryptool.Core;
22using Cryptool.P2P;
23using Cryptool.P2P.Worker;
24using Cryptool.P2PEditor.Distributed;
25using Cryptool.P2PEditor.GUI;
26using Cryptool.PluginBase;
27using Cryptool.PluginBase.Editor;
28
29namespace Cryptool.P2PEditor
30{
31    [EditorInfo("p2p")]
32    [Author("Paul Lelgemann", "lelgemann@cryptool.org", "Uni Duisburg-Essen", "http://www.uni-due.de")]
33    [PluginInfo("Cryptool.P2PEditor.Resources.Attributes", false, "P2P Interface",
34        "Control interface for the integrated P2P network.", null,
35        "P2PEditor/images/icon.png")]
36    public class P2PEditor : IEditor
37    {
38        private readonly JobListManager _jobListManager;
39
40        public P2PEditor()
41        {
42            _jobListManager = new JobListManager(this);
43
44            Presentation = new P2PEditorPresentation(this, _jobListManager);
45            Settings = new P2PEditorSettings(this);
46        }
47
48        #region IEditor Members
49
50        public event ChangeDisplayLevelHandler OnChangeDisplayLevel;
51
52        public event SelectedPluginChangedHandler OnSelectedPluginChanged;
53
54        public event ProjectTitleChangedHandler OnProjectTitleChanged;
55
56        public event OpenProjectFileHandler OnOpenProjectFile;
57
58        public event EditorSpecificPluginsChanged OnEditorSpecificPluginsChanged;
59
60        public void New()
61        {
62            GuiLogMessage("P2PEditor: New()", NotificationLevel.Debug);
63
64            ((P2PEditorPresentation) Presentation).ShowJobCreation();
65
66            if (OnSelectedPluginChanged != null)
67            {
68                OnSelectedPluginChanged(this, new PluginChangedEventArgs(this, "P2P Configuration", DisplayPluginMode.Normal));
69            }
70        }
71
72        public void Open(string fileName)
73        {
74            GuiLogMessage("P2PEditor: Open(" + fileName + ")", NotificationLevel.Debug);
75        }
76
77        public void Save(string fileName)
78        {
79            GuiLogMessage("P2PEditor: Save(" + fileName + ")", NotificationLevel.Debug);
80        }
81
82        public void Add(Type type)
83        {
84            GuiLogMessage("P2PEditor: Add(" + type + ")", NotificationLevel.Debug);
85        }
86
87        public void AddEditorSpecific(EditorSpecificPluginInfo espi)
88        {
89            GuiLogMessage("P2PEditor: AddEditorSpecific()", NotificationLevel.Debug);
90        }
91
92        public void DeleteEditorSpecific(EditorSpecificPluginInfo espi)
93        {
94            GuiLogMessage("P2PEditor: DeleteEditorSpecific()", NotificationLevel.Debug);
95        }
96
97        public void Undo()
98        {
99            GuiLogMessage("P2PEditor: Undo()", NotificationLevel.Debug);
100        }
101
102        public void Redo()
103        {
104            GuiLogMessage("P2PEditor: Redo()", NotificationLevel.Debug);
105        }
106
107        public void ShowHelp()
108        {
109            GuiLogMessage("P2PEditor: ShowHelp()", NotificationLevel.Debug);
110        }
111
112        public void ShowSelectedPluginDescription()
113        {
114            GuiLogMessage("P2PEditor: ShowSelectedPluginDescription()", NotificationLevel.Debug);
115        }
116
117        public bool CanUndo
118        {
119            get { return false; }
120        }
121
122        public bool CanRedo
123        {
124            get { return false; }
125        }
126
127        public bool CanExecute
128        {
129            get { return !P2PManager.Instance.IsP2PConnected() && !P2PManager.Instance.IsP2PConnecting; }
130        }
131
132        public bool CanStop
133        {
134            // TODO design problem? when set to true, CrypWin will terminate execute Stop() (and terminate the P2P connection) when switching back to an AnotherEditor instance
135            // get { return P2PManager.Instance.IsP2PConnected() && !P2PManager.Instance.IsP2PConnecting; }
136            get { return false; }
137        }
138
139        public bool HasChanges
140        {
141            get { return false; }
142        }
143
144        public DisplayLevel DisplayLevel { get; set; }
145
146        public List<EditorSpecificPluginInfo> EditorSpecificPlugins
147        {
148            get { return new List<EditorSpecificPluginInfo>(); }
149        }
150
151        public event StatusChangedEventHandler OnPluginStatusChanged;
152
153        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
154
155        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
156
157        public ISettings Settings { get; private set; }
158
159        public UserControl Presentation { get; private set; }
160
161        public UserControl QuickWatchPresentation
162        {
163            get { throw new NotImplementedException(); }
164        }
165
166        public void PreExecution()
167        {
168        }
169
170        public void Execute()
171        {
172            RunConnectionWorker();
173        }
174
175        private void RunConnectionWorker()
176        {
177            var connectionWorker = new ConnectionWorker(P2PManager.Instance.P2PBase);
178            connectionWorker.BackgroundWorker.RunWorkerCompleted += ((P2PEditorPresentation) Presentation).ConnectionWorkerCompleted;
179            connectionWorker.Start();
180        }
181
182        public void PostExecution()
183        {
184        }
185
186        public void Pause()
187        {
188        }
189
190        public void Stop()
191        {
192            RunConnectionWorker();
193        }
194
195        public void Initialize()
196        {
197        }
198
199        public void Dispose()
200        {
201        }
202
203        public event PropertyChangedEventHandler PropertyChanged;
204
205        public PluginManager PluginManager
206        {
207            get { return null; }
208            set { }
209        }
210
211        #endregion
212
213        public void GuiLogMessage(string message, NotificationLevel notificationLevel)
214        {
215            if (OnGuiLogNotificationOccured == null) return;
216
217            var args = new GuiLogEventArgs(message, this, notificationLevel) {Title = "-"};
218            OnGuiLogNotificationOccured(this, args);
219        }
220
221        public void SendOpenProjectFileEvent(string filename)
222        {
223            if (OnOpenProjectFile != null) OnOpenProjectFile(this, filename);
224        }
225    }
226}
Note: See TracBrowser for help on using the repository browser.