Subversion Repositories DevTools

Rev

Rev 2155 | Rev 2161 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2139 ghuddy 1
//-----------------------------------------------------------------------
2
// This is open source licensed under GPL
3
//
4
//
5
using System;
6
using System.Text;
7
using System.Globalization;
2141 ghuddy 8
using System.Collections;
2139 ghuddy 9
using System.Windows.Forms;
10
using ReqPro40;
2151 ghuddy 11
using System.Threading;
2139 ghuddy 12
 
13
namespace EA_ReqPro
14
{
15
   public class Main
16
   {
2141 ghuddy 17
      public String EA_Connect(EA.Repository Repository)
2139 ghuddy 18
      {
19
         return "a string";
20
      }
21
 
2151 ghuddy 22
      private Thread ourThread = null;
2139 ghuddy 23
 
2141 ghuddy 24
      public readonly static String GUI_OUTPUT_TAB_NAME = "EA_ReqPro";
2151 ghuddy 25
      public static EA.Repository EA_Repository = null;
2139 ghuddy 26
 
2155 ghuddy 27
      public static int abortRequests = 0;
2151 ghuddy 28
      public static bool mustAbort = false;
2139 ghuddy 29
 
2141 ghuddy 30
      /// <summary>
31
      /// Called when EA initialised. Creates an output tab for the add in.
32
      /// </summary>
33
      /// <param name="repository"></param>
34
      public void EA_OnPostInitialized(EA.Repository repository)
35
      {
36
         repository.CreateOutputTab(GUI_OUTPUT_TAB_NAME);
37
         repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
38
      }
2159 ghuddy 39
 
40
 
2141 ghuddy 41
      public void EA_Disconnect()
42
      {
43
         GC.Collect();
44
         GC.WaitForPendingFinalizers();
45
      }
2139 ghuddy 46
 
47
 
2141 ghuddy 48
      /// <summary>
49
      /// Event called when user clicks on an entry in the output
50
      /// window. If an element has been associated with the message, it will
51
      /// be automatically selected in the project browser.
52
      /// </summary>
53
      /// <param name="repository"></param>
54
      /// <param name="outputTabNea"></param>
55
      /// <param name="lineText"></param>
56
      /// <param name="lineIdentifier"></param>
57
      public void EA_OnOutputItemClicked( EA.Repository repository,
58
                                          String outputTabName,
59
                                          String lineText,
60
                                          Int32 identifier)
61
      {
62
         if ((outputTabName == GUI_OUTPUT_TAB_NAME) && (identifier > 0))
63
         {
64
            try
65
            {
2159 ghuddy 66
               EA.Package package = repository.GetPackageByID(identifier);
67
               repository.ShowInProjectView(package);
2141 ghuddy 68
            }
69
            catch
70
            {
71
               try
72
               {
2159 ghuddy 73
                  EA.Element element = repository.GetElementByID(identifier);
74
                  if (element.MetaType == "Package")
75
                  {
76
                     EA.Package package = repository.GetPackageByID(element.PackageID);
77
                     repository.ShowInProjectView(package);
78
                  }
79
                  else
80
                  {
81
                     repository.ShowInProjectView(element);
82
                  }
2141 ghuddy 83
               }
84
               catch
85
               {
2159 ghuddy 86
                  try
87
                  {
88
                     EA.Diagram diagram = repository.GetDiagramByID(identifier);
89
                     repository.ShowInProjectView(diagram);
90
                  }
91
                  catch
92
                  {
93
                  }
2141 ghuddy 94
               }
95
            }
96
         }
97
      }
2139 ghuddy 98
 
2141 ghuddy 99
 
100
      public object EA_GetMenuItems(EA.Repository repository, string location, string menu)
2139 ghuddy 101
      {
2151 ghuddy 102
         string[] ar;
103
 
2139 ghuddy 104
         switch( menu )
105
         {
106
            case "":
107
               return "-&EA_ReqPro";
108
 
2145 ghuddy 109
            case "-&EA_ReqPro":
2151 ghuddy 110
               if (ourThread != null && ourThread.IsAlive == true)
111
               {
2155 ghuddy 112
                  ar = new string[] {"&Abort Import/Export"};
2151 ghuddy 113
                  return ar;
114
               }
115
               else
116
               {
117
                  ar = new string[]{
118
                                   "&Import for Traceability Use",
119
                                   "&Display Change Log",
120
                                   "&Import for Document Model Use",
2155 ghuddy 121
                                   "&Export to ReqPro",
2151 ghuddy 122
                                   "&Export to ReqPro Compatible CSV File",
123
                                   "&Create Requirement Diagram",
2155 ghuddy 124
                                   "&Create Requirement Diagram Using Model Search"
2151 ghuddy 125
                  };
126
                  return ar;
127
               }
2139 ghuddy 128
         }
2151 ghuddy 129
 
2139 ghuddy 130
         return "";
131
      }
132
 
133
 
134
      bool IsProjectOpen(EA.Repository Repository)
135
      {
136
         try
137
         {
138
            EA.Collection collection = Repository.Models;
139
            return true;
140
         }
141
         catch
142
         {
143
            return false;
144
         }
145
      }
146
 
147
 
148
      public void EA_GetMenuState(EA.Repository repository, string location, string menuName, string itemName, ref bool isEnabled, ref bool isChecked)
149
      {
2151 ghuddy 150
         EA_Repository = repository;
151
 
2139 ghuddy 152
         object o;
153
         EA.ObjectType type;
154
 
155
         isChecked = false;
156
 
2151 ghuddy 157
 
2139 ghuddy 158
         if (IsProjectOpen(repository))
159
         {
160
            switch (itemName)
161
            {
2155 ghuddy 162
               case "&Abort Import/Export":
2141 ghuddy 163
               case "&Import for Document Model Use":
2155 ghuddy 164
               case "&Export to ReqPro":
2141 ghuddy 165
               case "&Export to ReqPro Compatible CSV File":
2145 ghuddy 166
               case "&Create Requirement Diagram":
2155 ghuddy 167
               case "&Create Requirement Diagram Using Model Search":
2145 ghuddy 168
               case "&Import for Traceability Use":
2141 ghuddy 169
                  isEnabled = true;
170
                  break;
171
 
172
               case "&Display Change Log":
173
                  type = repository.GetTreeSelectedItem(out o);
174
                  if ( (type == EA.ObjectType.otElement) && (((EA.Element)o).Name == "Change Log"))
2139 ghuddy 175
                  {
176
                     isEnabled = true;
177
                  }
178
                  else
179
                  {
180
                     isEnabled = false;
181
                  }
182
                  break;
183
            }
184
         }
185
         else
186
         {
187
            isEnabled = false;
188
         }
189
      }
190
 
191
 
192
      public void EA_MenuClick(EA.Repository repository, string location, string menu, string itemName)
193
      {
2151 ghuddy 194
         EA_Repository = repository;
195
 
2139 ghuddy 196
         switch( itemName )
197
         {
2155 ghuddy 198
            // This menu option appears only when a thread is active. It allows the user to initiate
199
            // an abort of the thread.
200
            case "&Abort Import/Export":
2151 ghuddy 201
               if (ourThread != null && ourThread.IsAlive == true)
202
               {
2155 ghuddy 203
                  if (abortRequests > 0)
204
                  {
205
                     // if user has made a second abort request, it is probably because the thread does not
206
                     // appear to be aborting. This can happen sometimes. I have noticed occasional lockups,
207
                     // and every time this happens, the thread seems to be locked up in a call to an EA
208
                     // automation interface function, so perhaps there is some wierd interaction between
209
                     // the thread and the use of the menu in the main EA process? Anyway, lets try to abort
210
                     // the thread now because it does not appear as if it is going to quit gracefully.
211
                     ourThread.Abort();
212
                     ReqProDatabase.close();
213
                     break;
214
                  }
215
                  else
216
                  {
217
                     // try to quit gracefully.
218
                     mustAbort = true;
219
                     abortRequests++;
220
                  }
2151 ghuddy 221
               }
222
               break;
223
 
2141 ghuddy 224
            case "&Import for Traceability Use":
2151 ghuddy 225
               if (ourThread == null || ourThread.IsAlive == false)
226
               {
227
                  ourThread = new Thread(new ThreadStart(ImportReqProDatabase_Thread));
228
                  ourThread.ApartmentState = ApartmentState.STA;
229
                  ourThread.Start();
230
               }
2139 ghuddy 231
               break;
232
 
2141 ghuddy 233
            case "&Import for Document Model Use":
2151 ghuddy 234
               if (ourThread == null || ourThread.IsAlive == false)
235
               {
236
                  ourThread = new Thread(new ThreadStart(CopyReqProDatabase_Thread));
237
                  ourThread.ApartmentState = ApartmentState.STA;
238
                  ourThread.Start();
239
               }
2139 ghuddy 240
               break;
241
 
2155 ghuddy 242
            case "&Export to ReqPro":
243
               if (ourThread == null || ourThread.IsAlive == false)
244
               {
245
                  ourThread = new Thread(new ThreadStart(ExportToReqPro_Thread));
246
                  ourThread.ApartmentState = ApartmentState.STA;
247
                  ourThread.Start();
248
               }
249
               break;
250
 
2141 ghuddy 251
            case "&Export to ReqPro Compatible CSV File":
252
               repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
2151 ghuddy 253
               repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);
2141 ghuddy 254
               ExportToReqProCSVForm export_dlg = new ExportToReqProCSVForm();
255
               DialogResult dlgRes = export_dlg.ShowDialog();
256
               if (dlgRes == DialogResult.OK)
2139 ghuddy 257
               {
2151 ghuddy 258
                  export_dlg.Export();
2139 ghuddy 259
               }
2141 ghuddy 260
               break;
2139 ghuddy 261
 
2141 ghuddy 262
            case "&Display Change Log":
2139 ghuddy 263
            {
2151 ghuddy 264
               ImportReqProDatabase import_parser = new ImportReqProDatabase();
2141 ghuddy 265
               EA.Element changeLog = (EA.Element)repository.GetTreeSelectedObject();
266
               repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
2151 ghuddy 267
               import_parser.displayChangeLog(changeLog);
2141 ghuddy 268
               break;
2139 ghuddy 269
            }
2145 ghuddy 270
 
271
            case "&Create Requirement Diagram":
272
            {
273
               ArrayList allowedElementTypes = new ArrayList();
274
               allowedElementTypes.Add("Requirement");
275
               //allowedElementTypes.Add("UseCase");
276
               ElementAccumulator reqLister = new ElementAccumulator(allowedElementTypes);
277
               EA.Package thePackage = (EA.Package)repository.GetTreeSelectedObject();
2153 ghuddy 278
               EA_Utilities.findAndProcessPackageElements( thePackage, reqLister, true );
2155 ghuddy 279
               createRequirementDiagram(thePackage, reqLister.Elements);
280
               break;
281
            }
2145 ghuddy 282
 
2155 ghuddy 283
            case "&Create Requirement Diagram Using Model Search":
284
            {
285
               QueryForm qf = new QueryForm();
286
               DialogResult qf_dlgRes = qf.ShowDialog();
287
               if (qf_dlgRes == DialogResult.OK)
2145 ghuddy 288
               {
2155 ghuddy 289
                  EA.Package thePackage = (EA.Package)repository.GetTreeSelectedObject();
290
                  EA.Collection c = EA_Repository.GetElementsByQuery(qf.textBox_query_name.Text, qf.textBox_search_term.Text);
291
                  createRequirementDiagram(thePackage, c);
2145 ghuddy 292
               }
293
               break;
294
            }
295
 
2139 ghuddy 296
         }
297
      }
298
 
2155 ghuddy 299
      private void createRequirementDiagram(EA.Package containerPackage, EA.Collection c)
300
      {
301
         EA.Diagram newDiagram = (EA.Diagram)containerPackage.Diagrams.AddNew("Requirements","Logical");
302
         newDiagram.Update();
303
         containerPackage.Update();
304
 
305
         foreach (EA.Element element in c)
306
         {
307
            EA.DiagramObject newDiagramObject = (EA.DiagramObject)newDiagram.DiagramObjects.AddNew("l=1;r=10;t=1;b=1", "");
308
            newDiagramObject.ElementID = element.ElementID;
309
            newDiagramObject.Update();
310
         }
311
         newDiagram.DiagramObjects.Refresh();
312
         containerPackage.Update();
2159 ghuddy 313
         EA_Repository.GetProjectInterface().LayoutDiagramEx( newDiagram.DiagramGUID,
2155 ghuddy 314
            EA.ConstLayoutStyles.lsDiagramDefault, 4, 20, 20, false);
315
      }
316
 
317
      private void createRequirementDiagram(EA.Package containerPackage, ArrayList elements)
318
      {
319
         EA.Diagram newDiagram = (EA.Diagram)containerPackage.Diagrams.AddNew("Requirements","Logical");
320
         newDiagram.Update();
321
         containerPackage.Update();
322
 
323
         foreach (EA.Element element in elements)
324
         {
325
            EA.DiagramObject newDiagramObject = (EA.DiagramObject)newDiagram.DiagramObjects.AddNew("l=1;r=10;t=1;b=1", "");
326
            newDiagramObject.ElementID = element.ElementID;
327
            newDiagramObject.Update();
328
         }
329
         newDiagram.DiagramObjects.Refresh();
330
         containerPackage.Update();
2159 ghuddy 331
         EA_Repository.GetProjectInterface().LayoutDiagramEx( newDiagram.DiagramGUID,
2155 ghuddy 332
            EA.ConstLayoutStyles.lsDiagramDefault, 4, 20, 20, false);
333
      }
334
 
335
 
2159 ghuddy 336
      /// <summary>
337
      /// Thread function for import for traceability use operation
2155 ghuddy 338
      /// </summary>
2151 ghuddy 339
      private static void ImportReqProDatabase_Thread()
340
      {
2155 ghuddy 341
         bool cancelled = false;
2151 ghuddy 342
         mustAbort = false;
2155 ghuddy 343
         abortRequests = 0;
2151 ghuddy 344
         EA_Repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
345
         EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);
2155 ghuddy 346
         ImportReqProDatabase import_parser = new ImportReqProDatabase();
2159 ghuddy 347
         import_parser.prompt_and_parse(ReqProDB_Artifact.MODE.TRACEABILITY, out cancelled);
2151 ghuddy 348
         if (mustAbort)
2155 ghuddy 349
         {
350
            EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME, "Import Aborted", -1);
2153 ghuddy 351
            MessageBoxEx.Show("Import Aborted", "Progress");
2155 ghuddy 352
         }
2159 ghuddy 353
         else if (cancelled)
354
         {
355
            Main.WriteOutput("Import Cancelled",-1);
2155 ghuddy 356
         }
357
         abortRequests = 0;
358
         ReqProDatabase.close();
2151 ghuddy 359
      }
2139 ghuddy 360
 
2159 ghuddy 361
      /// <summary>
362
      /// Thread function for import for document model use operation
2155 ghuddy 363
      /// </summary>
2151 ghuddy 364
      private static void CopyReqProDatabase_Thread()
365
      {
2155 ghuddy 366
         bool cancelled = false;
2151 ghuddy 367
         mustAbort = false;
2155 ghuddy 368
         abortRequests = 0;
2151 ghuddy 369
         EA_Repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
370
         EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);
371
         CopyReqProDatabase copy_parser = new CopyReqProDatabase();
2155 ghuddy 372
         copy_parser.prompt_and_parse(ReqProDB_Artifact.MODE.DOC_MODEL, out cancelled);
2151 ghuddy 373
         if (mustAbort)
2155 ghuddy 374
         {
375
            EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME, "Import Aborted", -1);
2153 ghuddy 376
            MessageBoxEx.Show("Import Aborted", "Progress");
2155 ghuddy 377
         }
2159 ghuddy 378
         else if (cancelled)
379
         {
380
            Main.WriteOutput("Import Cancelled",-1);
2155 ghuddy 381
         }
382
         abortRequests = 0;
383
         ReqProDatabase.close();
2151 ghuddy 384
      }
385
 
2159 ghuddy 386
      /// <summary>
387
      /// Thread function for export to reqpro database operation
2155 ghuddy 388
      /// </summary>
389
      private static void ExportToReqPro_Thread()
390
      {
391
         bool cancelled = false;
392
         mustAbort = false;
393
         abortRequests = 0;
394
         EA_Repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
395
         EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);
396
         ExportToReqProDatabase export_parser = new ExportToReqProDatabase();
397
         export_parser.prompt_and_parse(ReqProDB_Artifact.MODE.EXPORT, out cancelled);
398
         if (mustAbort)
399
         {
400
            EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME, "Export Aborted", -1);
401
            MessageBoxEx.Show("Export Aborted", "Progress");
402
         }
2159 ghuddy 403
         else if (cancelled)
404
         {
405
            Main.WriteOutput("Export Cancelled",-1);
2155 ghuddy 406
         }
407
         abortRequests = 0;
408
         ReqProDatabase.close();
409
      }
410
 
2153 ghuddy 411
      public static void MessageBoxException(Exception exc)
412
      {
413
         MessageBoxException(exc, "Exception");
414
      }
415
 
416
      public static void MessageBoxException(Exception exc, string caption)
417
      {
2159 ghuddy 418
         MessageBoxEx.Show(exc.ToString(), caption, MessageBoxIcon.Error);
2153 ghuddy 419
      }
2155 ghuddy 420
 
2159 ghuddy 421
      public static void WriteOutput(string s, int id)
422
      {
423
         EA_Repository.WriteOutput( GUI_OUTPUT_TAB_NAME, s, id);
424
      }
2155 ghuddy 425
 
426
      public static void ClearOutput()
427
      {
428
         EA_Repository.ClearOutput(GUI_OUTPUT_TAB_NAME);
429
      }
430
      public static void WriteSeperator()
431
      {
432
         EA_Repository.WriteOutput( GUI_OUTPUT_TAB_NAME, "----------------------------------------------------------------------------------------------------------------------", -1);
433
      }
2139 ghuddy 434
   }
435
}