00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Collections.Generic;
00014 using System.Data;
00015 using System.Threading;
00016 using System.Web.Services.Protocols;
00017 using System.Windows.Forms;
00018 using Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.QueueManagerPlugin.Controls;
00019 using Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.QueueManagerPlugin.Properties;
00020 using Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.QueueManagerPlugin.QueueWebService;
00021 using Mcs.Epm.MicrosoftProject.mpFx.Client.Shared;
00022 using Microsoft.Office.Project.Server.Library;
00023 using SortOrder = Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.QueueManagerPlugin.QueueWebService.SortOrder;
00024
00025 namespace Mcs.Epm.MicrosoftProject.mpFx.Client.Plugins.QueueManagerPlugin.Forms
00026 {
00027
00028
00029
00030 public partial class QueueManagerForm : Form
00031 {
00032 #region Structures
00033
00034 public struct PROCESS_OPTIONS
00035 {
00036 public List<QueueMsgType> JobTypes;
00037 public List<JobState> JobStates;
00038 public DateTime StartDate;
00039 public DateTime EndDate;
00040 public SortColumn SortColumn;
00041 public SortOrder SortOrder;
00042 public int NumberOfItems;
00043 public int Interval;
00044 }
00045
00046 #endregion
00047
00048 #region Private Delegates
00049
00050 private delegate void OnRowChangeEventHandler(QueueStatusDataSet.StatusRow row, bool exists);
00051 private delegate void OnExceptionEventHandler(object sender, Exception exception);
00052
00053 #endregion
00054
00055 #region Instance Data
00056
00057 private readonly QueueManagerPlugin _QueueManagerPlugin;
00058
00059 private QueueSystem _QueueWebService;
00060 private QueueStatusDataSet _LastResult;
00061
00062 private ListPickerControl _JobTypesPickerControl;
00063 private ListPickerControl _StatusesPickerControl;
00064 private ListPickerControl _ColumnsPickerControl;
00065
00066 private readonly ToolStripControlHost _StartDateToolStripControlHost;
00067 private readonly ToolStripControlHost _EndDateToolStripControlHost;
00068 private readonly ToolStripControlHost _StartTimeDateToolStripControlHost;
00069 private readonly ToolStripControlHost _EndTimeDateToolStripControlHost;
00070
00071 private readonly ManualResetEvent _StopRequestEvent = new ManualResetEvent(false);
00072 private readonly ManualResetEvent _StoppedIndicatorEvent = new ManualResetEvent(true);
00073
00074 private Thread _ReadThread;
00075 private PROCESS_OPTIONS _ProcessOptions;
00076
00077 private readonly object _SetProcessOptionsLock;
00078 private readonly object _ProcessOptionsLock;
00079
00080 private int _NumberOfItems;
00081 private string _SelectedSortOrderValue;
00082 private string _SelectedSortColumnValue;
00083
00084 #endregion
00085
00086 #region Constructors
00087
00088 public QueueManagerForm(QueueManagerPlugin queueManagerPlugin)
00089 {
00090 InitializeComponent();
00091
00092 if (queueManagerPlugin == null)
00093 {
00094 throw new ArgumentNullException("queueManagerPlugin");
00095 }
00096
00097 _QueueManagerPlugin = queueManagerPlugin;
00098
00099 #region Date and Time Picker Hosting
00100
00101 _StartDateToolStripControlHost = new ToolStripControlHost(startDateTimePicker);
00102 _StartTimeDateToolStripControlHost = new ToolStripControlHost(startTimeDateTimePicker);
00103
00104 toolStrip.Items.Insert(3, _StartDateToolStripControlHost);
00105 toolStrip.Items.Insert(4, _StartTimeDateToolStripControlHost);
00106
00107 _EndDateToolStripControlHost = new ToolStripControlHost(endDateTimePicker);
00108 _EndTimeDateToolStripControlHost = new ToolStripControlHost(endTimeDateTimePicker);
00109
00110 toolStrip.Items.Insert(6, _EndDateToolStripControlHost);
00111 toolStrip.Items.Insert(7, _EndTimeDateToolStripControlHost);
00112
00113 startDateTimePicker.Visible = true;
00114 endDateTimePicker.Visible = true;
00115 endTimeDateTimePicker.Visible = true;
00116 endDateTimePicker.Visible = true;
00117
00118 #endregion
00119
00120 try
00121 {
00122 LoadQueueInformation();
00123 }
00124 catch (Exception exception)
00125 {
00126 MessageBox.Show(this,
00127 exception.Message,
00128 Resources.PluginName,
00129 MessageBoxButtons.OK,
00130 MessageBoxIcon.Error);
00131
00132 }
00133
00134 _ProcessOptionsLock = new object();
00135 _SetProcessOptionsLock = new object();
00136 }
00137
00138 private void SetProcessOptions(List<QueueMsgType> jobTypes, List<JobState> jobStates, DateTime startDate, DateTime endDate, int numItems, SortColumn sortColumn, SortOrder sortOrder)
00139 {
00140 lock (_SetProcessOptionsLock)
00141 {
00142 _ProcessOptions.JobStates = jobStates;
00143 _ProcessOptions.JobTypes = jobTypes;
00144 _ProcessOptions.StartDate = startDate;
00145 _ProcessOptions.EndDate = endDate;
00146 _ProcessOptions.NumberOfItems = numItems;
00147 _ProcessOptions.SortColumn = sortColumn;
00148 _ProcessOptions.SortOrder = sortOrder;
00149 }
00150 }
00151
00152 #endregion
00153
00154 #region Private Methods
00155
00156 private void LoadQueueInformation()
00157 {
00158
00159
00160 CreateQueueWebService();
00161
00162 LoadSortColumns();
00163
00164 LoadSortOrders();
00165
00166 LoadColumns();
00167
00168 LoadJobTypesPickerControl();
00169
00170 LoadJobStatusesPickerControl();
00171
00172 }
00173
00174 private void LoadSortColumns()
00175 {
00176 foreach (string name in Enum.GetNames(typeof(SortColumn)))
00177 {
00178 if (!name.Equals("Undefined", StringComparison.CurrentCultureIgnoreCase))
00179 {
00180 string displayName = Tools.GetDecameledString(name);
00181 sortColumnToolStripComboBox.Items.Add(displayName);
00182 }
00183 }
00184
00185 if (string.IsNullOrEmpty(Settings.Default.LastSortColumn))
00186 {
00187 sortColumnToolStripComboBox.Text = "Queue ID";
00188 }
00189 else
00190 {
00191 sortColumnToolStripComboBox.Text = Tools.GetDecameledString(Settings.Default.LastSortColumn);
00192 }
00193 }
00194
00195 private void LoadSortOrders()
00196 {
00197 foreach (string name in Enum.GetNames(typeof(SortOrder)))
00198 {
00199 if (!name.Equals("Undefined", StringComparison.CurrentCultureIgnoreCase))
00200 {
00201 string displayName = Tools.GetDecameledString(name);
00202 sortOrderToolStripComboBox.Items.Add(displayName);
00203 }
00204 }
00205
00206 if (string.IsNullOrEmpty(Settings.Default.LastSortOrder))
00207 {
00208 sortOrderToolStripComboBox.Text = "Ascending";
00209 }
00210 else
00211 {
00212 sortOrderToolStripComboBox.Text = Tools.GetDecameledString(Settings.Default.LastSortOrder);
00213 }
00214 }
00215
00216 private void CreateQueueWebService()
00217 {
00218 _QueueWebService = new QueueSystem();
00219
00220 _QueueWebService.Url = _QueueManagerPlugin.ProjectServer.WebServices.Queue.Url;
00221 _QueueWebService.UseDefaultCredentials = _QueueManagerPlugin.ProjectServer.WebServices.Queue.UseDefaultCredentials;
00222 _QueueWebService.Credentials = _QueueManagerPlugin.ProjectServer.WebServices.Queue.Credentials;
00223
00224 _QueueWebService.ReadAllJobStatusCompleted += _QueueWebService_ReadAllJobStatusCompleted;
00225 }
00226
00227 private void LoadJobStatusesPickerControl()
00228 {
00229 Dictionary<string, ListPickerControl.ListItem> statuses = new Dictionary<string, ListPickerControl.ListItem>();
00230
00231 CreateList(Settings.Default.SelelectedCompletionStatuses.Split(','), typeof(JobState), statuses);
00232
00233 _StatusesPickerControl = new ListPickerControl("Completion Statuses", statuses, true);
00234 _StatusesPickerControl.OnListChanged += _StatusesPickerControl_OnListChanged;
00235 _StatusesPickerControl.Dock = DockStyle.Fill;
00236
00237 completionStatusesPanel.Controls.Add(_StatusesPickerControl);
00238 _StatusesPickerControl.BringToFront();
00239 }
00240
00241 private void LoadJobTypesPickerControl()
00242 {
00243 Dictionary<string, ListPickerControl.ListItem> jobTypes = new Dictionary<string, ListPickerControl.ListItem>();
00244
00245 CreateList(Settings.Default.SelectedJobTypes.Split(','), typeof(QueueMsgType), jobTypes);
00246
00247 _JobTypesPickerControl = new ListPickerControl("Job Types", jobTypes, true);
00248 _JobTypesPickerControl.OnListChanged += _JobTypesPickerControl_OnListChanged;
00249 _JobTypesPickerControl.Dock = DockStyle.Fill;
00250
00251 jobTypesPanel.Controls.Add(_JobTypesPickerControl);
00252 _JobTypesPickerControl.BringToFront();
00253 }
00254
00255 private void LoadColumns()
00256 {
00257 List<string> list = new List<string>(Settings.Default.DisplayedColumns.Split(','));
00258 Dictionary<string, ListPickerControl.ListItem> columns = new Dictionary<string, ListPickerControl.ListItem>();
00259
00260 using (QueueStatusDataSet queueStatusDataSet = new QueueStatusDataSet())
00261 {
00262 foreach (DataColumn column in queueStatusDataSet.Status.Columns)
00263 {
00264 ListPickerControl.ListItem item = new ListPickerControl.ListItem();
00265
00266 item.Value = column;
00267 item.Name = column.ColumnName;
00268 item.DisplayName = Tools.GetDecameledString(item.Name).Replace("GUID", string.Empty);
00269 item.Selected = list.Contains(item.Name);
00270 item.Type = column.DataType;
00271 columns.Add(item.Name, item);
00272
00273 DataGridViewTextBoxColumn gridColumn = CreateGridColumn(item);
00274
00275 gridColumn.Visible = item.Selected;
00276 queueDataGridView.Columns.Add(gridColumn);
00277 }
00278 }
00279
00280 _ColumnsPickerControl = new ListPickerControl("Columns", columns, true);
00281 _ColumnsPickerControl.OnListChanged += _ColumnsPickerControl_OnListChanged;
00282 _ColumnsPickerControl.OnSelectedItemAdded += _ColumnsPickerControl_OnSelectedItemAdded;
00283 _ColumnsPickerControl.OnSelectedItemRemoved += _ColumnsPickerControl_OnSelectedItemRemoved;
00284 _ColumnsPickerControl.Dock = DockStyle.Fill;
00285
00286 columnsPanel.Controls.Add(_ColumnsPickerControl);
00287 _ColumnsPickerControl.BringToFront();
00288 }
00289
00290 private void ReadQueue()
00291 {
00292 if (_StopRequestEvent.WaitOne(0))
00293 {
00294 _StoppedIndicatorEvent.Set();
00295 return;
00296 }
00297
00298 List<ListPickerControl.ListItem> selectedJobTypes = _JobTypesPickerControl.SelectedItems;
00299 List<QueueMsgType> jobTypes = new List<QueueMsgType>();
00300
00301 foreach (ListPickerControl.ListItem jobType in selectedJobTypes)
00302 {
00303 if ((QueueMsgType)jobType.Value != QueueMsgType.Unknown)
00304 {
00305 jobTypes.Add((QueueMsgType)jobType.Value);
00306 }
00307 }
00308
00309 List<ListPickerControl.ListItem> selectedStatuses = _StatusesPickerControl.SelectedItems;
00310 List<JobState> jobStates = new List<JobState>();
00311
00312 foreach (ListPickerControl.ListItem status in selectedStatuses)
00313 {
00314 if ((JobState)status.Value != JobState.Unknown)
00315 {
00316 jobStates.Add((JobState)status.Value);
00317 }
00318 }
00319
00320 DateTime startDate = ToDateTime(startDateTimePicker.Value.ToShortDateString(),
00321 startTimeDateTimePicker.Value.ToLongTimeString());
00322
00323 DateTime endDate = ToDateTime(endDateTimePicker.Value.ToShortDateString(),
00324 endTimeDateTimePicker.Value.ToLongTimeString());
00325
00326 SortColumn sortColumn =
00327 (SortColumn)Enum.Parse(typeof(SortColumn), SortColumnValue);
00328
00329 SortOrder sortOrder =
00330 (SortOrder)Enum.Parse(typeof(SortOrder), SortOrderValue);
00331
00332 SetProcessOptions(jobTypes, jobStates, startDate, endDate, _NumberOfItems, sortColumn, sortOrder);
00333
00334 PROCESS_OPTIONS processOptions = ProcessOptions;
00335
00336 _QueueWebService.ReadAllJobStatusAsync(processOptions.JobStates.ToArray(),
00337 processOptions.JobTypes.ToArray(),
00338 processOptions.StartDate,
00339 processOptions.EndDate,
00340 processOptions.NumberOfItems,
00341 true,
00342 processOptions.SortColumn,
00343 processOptions.SortOrder);
00344 }
00345
00346 private string SortOrderValue
00347 {
00348 get
00349 {
00350 return _SelectedSortOrderValue;
00351 }
00352 }
00353
00354 private string SortColumnValue
00355 {
00356 get
00357 {
00358 if (string.IsNullOrEmpty(_SelectedSortColumnValue))
00359 {
00360 _SelectedSortColumnValue = "QueueId";
00361
00362 }
00363
00364 return _SelectedSortColumnValue;
00365 }
00366 }
00367
00368 public PROCESS_OPTIONS ProcessOptions
00369 {
00370 get
00371 {
00372 PROCESS_OPTIONS processOptions;
00373
00374 lock (_ProcessOptionsLock)
00375 {
00376 processOptions = _ProcessOptions;
00377 }
00378
00379 return processOptions;
00380 }
00381 }
00382
00383 private static DateTime ToDateTime(string date, object time)
00384 {
00385 return Convert.ToDateTime(date + " " + time);
00386 }
00387
00388 private void StopReadingQueue()
00389 {
00390 stopToolStripButton.Enabled = false;
00391
00392 if (_ReadThread != null)
00393 {
00394 _QueueManagerPlugin.DoOnStatusChanged(new OnStatusChangedArgs("Cancelling..."));
00395 _StopRequestEvent.Set();
00396
00397 while (!_StoppedIndicatorEvent.WaitOne(200))
00398 {
00399 Application.DoEvents();
00400 }
00401
00402 _QueueManagerPlugin.DoOnStatusChanged(new OnStatusChangedArgs(string.Empty));
00403 }
00404
00405 FreeLastResult();
00406
00407 startToolStripButton.Enabled = true;
00408 stopToolStripButton.Enabled = false;
00409 }
00410
00411 private void ProcessResults(Exception error, QueueStatusDataSet results)
00412 {
00413 if (_LastResult == null)
00414 {
00415 foreach (QueueStatusDataSet.StatusRow statusRow in results.Status.Rows)
00416 {
00417 Invoke(new OnRowChangeEventHandler(OnRowChange), new object[] { statusRow, false });
00418 }
00419 }
00420 else
00421 {
00422 bool found = false;
00423
00424 foreach (QueueStatusDataSet.StatusRow row in results.Status.Rows)
00425 {
00426 foreach (QueueStatusDataSet.StatusRow previousResultRow in _LastResult.Status.Rows)
00427 {
00428 if (previousResultRow.JobGUID ==
00429 row.JobGUID)
00430 {
00431 found = true;
00432 break;
00433 }
00434 }
00435
00436 if (found)
00437 {
00438 Invoke(new OnRowChangeEventHandler(OnRowChange), new object[] { row, true });
00439 }
00440 else
00441 {
00442 Invoke(new OnRowChangeEventHandler(OnRowChange), new object[] { row, false });
00443 }
00444
00445 found = false;
00446 }
00447 }
00448
00449 FreeLastResult();
00450
00451 _LastResult = results;
00452
00453 if (error != null || _StopRequestEvent.WaitOne(0))
00454 {
00455 _StoppedIndicatorEvent.Set();
00456 return;
00457 }
00458
00459 PROCESS_OPTIONS processOptions = ProcessOptions;
00460 if (processOptions.Interval > 0)
00461 {
00462 Thread.Sleep(processOptions.Interval * 1000);
00463 }
00464 ReadQueue();
00465 }
00466
00467 private void OnRowChange(QueueStatusDataSet.StatusRow row, bool exists)
00468 {
00469 if (exists)
00470 {
00471 UpdateQueueRow(row);
00472 }
00473 else
00474 {
00475 AddQueueRow(row);
00476 }
00477 }
00478
00479 private void UpdateQueueRow(QueueStatusDataSet.StatusRow status)
00480 {
00481 foreach (DataGridViewRow row in queueDataGridView.Rows)
00482 {
00483 if (new Guid(row.Cells["JobGUID"].Value.ToString()) == status.JobGUID && (int)Enum.Parse(typeof(QueueMsgType), row.Cells["MessageType"].Value.ToString()) == status.MessageType)
00484 {
00485 foreach (DataColumn column in status.Table.Columns)
00486 {
00487 row.Cells[column.ColumnName].Value = GetValue(status[column], column.ColumnName);
00488 }
00489
00490 break;
00491 }
00492 }
00493 }
00494
00495 private void FreeLastResult()
00496 {
00497 if (_LastResult != null)
00498 {
00499 _LastResult.Dispose();
00500 _LastResult = null;
00501 }
00502 }
00503
00504 private void AddQueueRow(DataRow statusRow)
00505 {
00506 List<object> values = new List<object>();
00507
00508 foreach (DataGridViewColumn column in queueDataGridView.Columns)
00509 {
00510 values.Add(GetValue(statusRow[column.Name], column.Name));
00511
00512 }
00513
00514 queueDataGridView.Rows.Add(values.ToArray());
00515 }
00516
00517 private object GetValue(object value, string columnName)
00518 {
00519 string valueString = value.ToString();
00520 switch (columnName)
00521 {
00522 case "JobInfoGUID":
00523 Guid testGuid = new Guid(valueString);
00524 if (_QueueManagerPlugin.ProjectServer.Resources.ContainsKey(testGuid))
00525 {
00526 return _QueueManagerPlugin.ProjectServer.Resources[testGuid].Name;
00527 }
00528
00529 if (_QueueManagerPlugin.ProjectServer.Projects.ContainsKey(testGuid))
00530 {
00531 return _QueueManagerPlugin.ProjectServer.Projects[testGuid].Name;
00532 }
00533 return valueString;
00534
00535 case "MessageType":
00536 return Enum.Parse(typeof(QueueMsgType), valueString).ToString();
00537 case "JobCompletionState":
00538 return Enum.Parse(typeof(JobState), valueString).ToString();
00539 case "ErrorInfo":
00540 PSClientError error = new PSClientError(valueString);
00541 return Errors.FormatProjectError(error.GetAllErrors(), valueString);
00542 case "PercentComplete":
00543 return string.Format("{0}%", valueString);
00544 case "ResourceGUID":
00545 if (Tools.IsGuid(valueString))
00546 {
00547 try
00548 {
00549 EnterpriseResource resource =
00550 _QueueManagerPlugin.ProjectServer.Resources[new Guid(valueString)];
00551 if (resource != null)
00552 {
00553 return resource.Name;
00554 }
00555 }
00556 catch (Exception e)
00557 {
00558 Console.WriteLine(e);
00559 }
00560 }
00561 return string.Empty;
00562 default:
00563 return value.ToString();
00564 }
00565 }
00566
00567 private static string GetSaveString(IEnumerable<ListPickerControl.ListItem> list)
00568 {
00569 string saveString = string.Empty;
00570 foreach (ListPickerControl.ListItem item in list)
00571 {
00572 saveString = saveString + item.Name + ",";
00573 }
00574
00575 saveString = saveString.TrimEnd(',');
00576
00577 return saveString;
00578 }
00579
00580 private static void CreateList(IEnumerable<string> selectedList, Type enumType, IDictionary<string, ListPickerControl.ListItem> dictionary)
00581 {
00582 List<string> list = new List<string>(selectedList);
00583
00584 foreach (string name in Enum.GetNames(enumType))
00585 {
00586 ListPickerControl.ListItem listItem = new ListPickerControl.ListItem();
00587
00588 listItem.Value = Enum.Parse(enumType, name);
00589 listItem.Name = name;
00590 listItem.Selected = list.Contains(name);
00591
00592 dictionary.Add(name, listItem);
00593 }
00594 }
00595
00596 private static DataGridViewTextBoxColumn CreateGridColumn(ListPickerControl.ListItem item)
00597 {
00598 DataGridViewTextBoxColumn gridColumn = new DataGridViewTextBoxColumn();
00599 gridColumn.Name = item.Name;
00600 gridColumn.HeaderText = item.DisplayName;
00601 gridColumn.ValueType = item.Type;
00602 gridColumn.SortMode = DataGridViewColumnSortMode.Automatic;
00603 return gridColumn;
00604 }
00605
00606 private static void TestIsNumeric(ToolStripItem textBox, out int result)
00607 {
00608 if (int.TryParse(textBox.Text, out result))
00609 {
00610 return;
00611 }
00612
00613 textBox.Text = "0";
00614
00615 return;
00616 }
00617
00618 private void ResetGrid()
00619 {
00620 queueDataGridView.Rows.Clear();
00621 FreeLastResult();
00622 }
00623
00624 #endregion
00625
00626 #region Event Handlers
00627
00628 void _ColumnsPickerControl_OnSelectedItemRemoved(object sender, OnItemChangedEventHandlerArgs args)
00629 {
00630 if (queueDataGridView.Columns[args.Item.Name] != null)
00631 {
00632 queueDataGridView.Columns[args.Item.Name].Visible = false;
00633 }
00634 }
00635
00636 private void _ColumnsPickerControl_OnSelectedItemAdded(object sender, OnItemChangedEventHandlerArgs args)
00637 {
00638 if (queueDataGridView.Columns[args.Item.Name] != null)
00639 {
00640 queueDataGridView.Columns[args.Item.Name].Visible = true;
00641 }
00642 }
00643
00644 void _StatusesPickerControl_OnListChanged(object sender, EventArgs e)
00645 {
00646 ResetGrid();
00647 }
00648
00649 void _JobTypesPickerControl_OnListChanged(object sender, EventArgs e)
00650 {
00651 ResetGrid();
00652 }
00653
00654 void _ColumnsPickerControl_OnListChanged(object sender, EventArgs e)
00655 {
00656 ResetGrid();
00657 }
00658
00659 private void optionsToolStripButton_Click(object sender, EventArgs e)
00660 {
00661 optionsPanel.Visible = !optionsPanel.Visible;
00662 }
00663
00664 private void hideButton_Click(object sender, EventArgs e)
00665 {
00666 optionsPanel.Visible = false;
00667 }
00668
00669 private void QueueManagerForm_FormClosed(object sender, FormClosedEventArgs e)
00670 {
00671 _QueueWebService.CancelAsync(null);
00672 _QueueWebService.ReadAllJobStatusCompleted -= _QueueWebService_ReadAllJobStatusCompleted;
00673
00674 List<ListPickerControl.ListItem> list = _StatusesPickerControl.SelectedItems;
00675
00676 string saveString = GetSaveString(list);
00677
00678 Settings.Default.SelelectedCompletionStatuses = saveString;
00679
00680 list = _JobTypesPickerControl.SelectedItems;
00681
00682 saveString = GetSaveString(list);
00683
00684 Settings.Default.SelectedJobTypes = saveString;
00685
00686 list = _ColumnsPickerControl.SelectedItems;
00687
00688 saveString = GetSaveString(list);
00689
00690 Settings.Default.DisplayedColumns = saveString;
00691 Settings.Default.LastStartDate = ProcessOptions.StartDate;
00692 Settings.Default.LastEndDate = ProcessOptions.EndDate;
00693 Settings.Default.LastNumItems = ProcessOptions.NumberOfItems;
00694 Settings.Default.LastSortColumn = ProcessOptions.SortColumn.ToString();
00695 Settings.Default.LastSortOrder = ProcessOptions.SortOrder.ToString();
00696
00697 Settings.Default.Save();
00698
00699 StopReadingQueue();
00700
00701 }
00702
00703 private void startToolStripButton_Click(object sender, EventArgs e)
00704 {
00705 FreeLastResult();
00706 startToolStripButton.Enabled = false;
00707 stopToolStripButton.Enabled = true;
00708
00709 _StopRequestEvent.Reset();
00710 _StoppedIndicatorEvent.Reset();
00711
00712 _ReadThread = new Thread(ReadQueue);
00713 _ReadThread.Start();
00714 }
00715
00716 void _QueueWebService_ReadAllJobStatusCompleted(object sender, ReadAllJobStatusCompletedEventArgs e)
00717 {
00718 if (e.Cancelled)
00719 {
00720 _StoppedIndicatorEvent.Set();
00721 }
00722 else
00723 {
00724 ProcessResults(e);
00725 }
00726 }
00727
00728 private void ProcessResults(ReadAllJobStatusCompletedEventArgs e)
00729 {
00730 try
00731 {
00732 ProcessResults(e.Error, e.Result);
00733 }
00734 catch (Exception exception)
00735 {
00736 _StoppedIndicatorEvent.Set();
00737 Invoke(new OnExceptionEventHandler(OnException), new object[] { this, exception });
00738 }
00739
00740 }
00741
00742 private void OnException(object sender, Exception exception)
00743 {
00744 if (exception is SoapException)
00745 {
00746 MessageBox.Show(null,
00747 Errors.ProcessMSProjectErrors((SoapException)exception),
00748 Resources.PluginName,
00749 MessageBoxButtons.OK,
00750 MessageBoxIcon.Error);
00751
00752 }
00753 else if (exception.InnerException is SoapException)
00754 {
00755 MessageBox.Show(null,
00756 Errors.ProcessMSProjectErrors((SoapException)exception.InnerException),
00757 Resources.PluginName,
00758 MessageBoxButtons.OK,
00759 MessageBoxIcon.Error);
00760
00761 }
00762 else
00763 {
00764 MessageBox.Show(null,
00765 exception.Message,
00766 Resources.PluginName,
00767 MessageBoxButtons.OK,
00768 MessageBoxIcon.Error);
00769 }
00770
00771 StopReadingQueue();
00772
00773 }
00774
00775 private void stopToolStripButton_Click(object sender, EventArgs e)
00776 {
00777 StopReadingQueue();
00778 }
00779
00780 private void intervalToolStripTextBox_Click(object sender, EventArgs e)
00781 {
00782 PROCESS_OPTIONS processOptions = ProcessOptions;
00783
00784 TestIsNumeric(intervalToolStripTextBox, out processOptions.Interval);
00785
00786 SetProcessOptions(processOptions);
00787 }
00788
00789 private void SetProcessOptions(PROCESS_OPTIONS processOptions)
00790 {
00791 lock (_ProcessOptionsLock)
00792 {
00793 _ProcessOptions = processOptions;
00794 }
00795 }
00796
00797 private void itemsToolStripTextBox_Click(object sender, EventArgs e)
00798 {
00799 TestIsNumeric(itemsToolStripTextBox, out _NumberOfItems);
00800 }
00801
00802 private void sortColumnToolStripComboBox_SelectedIndexChanged(object sender, EventArgs e)
00803 {
00804 _SelectedSortColumnValue = sortColumnToolStripComboBox.Text.Replace(" ", "");
00805 ResetGrid();
00806 }
00807
00808 private void sortOrderToolStripComboBox_SelectedIndexChanged(object sender, EventArgs e)
00809 {
00810 _SelectedSortOrderValue = sortOrderToolStripComboBox.Text.Replace(" ", "");
00811 ResetGrid();
00812 }
00813
00814 private void itemsToolStripTextBox_TextChanged(object sender, EventArgs e)
00815 {
00816 TestIsNumeric(itemsToolStripTextBox, out _NumberOfItems);
00817 ResetGrid();
00818 }
00819
00820 #endregion
00821
00822 }
00823 }