Subversion Repositories DevTools

Rev

Rev 2145 | Rev 2153 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

//-----------------------------------------------------------------------
// This is open source licensed under GPL
//
//
using System;
using System.Text;
using System.Globalization;
using System.Collections;
using System.Windows.Forms;
using ReqPro40;
using System.Threading;

namespace EA_ReqPro
{
   public class Main
   {
      public String EA_Connect(EA.Repository Repository)
      {
         return "a string";
      }

      private Thread ourThread = null;

      public readonly static String GUI_OUTPUT_TAB_NAME = "EA_ReqPro";
      public static EA.Repository EA_Repository = null;

      public static bool mustAbort = false;

      /// <summary>
      /// Called when EA initialised. Creates an output tab for the add in.
      /// </summary>
      /// <param name="repository"></param>
      public void EA_OnPostInitialized(EA.Repository repository)
      {
         repository.CreateOutputTab(GUI_OUTPUT_TAB_NAME);
         repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
      }
      
      
      public void EA_Disconnect()
      {
         GC.Collect();
         GC.WaitForPendingFinalizers();
      }


      /// <summary>
      /// Event called when user clicks on an entry in the output
      /// window. If an element has been associated with the message, it will
      /// be automatically selected in the project browser.
      /// </summary>
      /// <param name="repository"></param>
      /// <param name="outputTabNea"></param>
      /// <param name="lineText"></param>
      /// <param name="lineIdentifier"></param>
      public void EA_OnOutputItemClicked( EA.Repository repository,
                                          String outputTabName,
                                          String lineText,
                                          Int32 identifier)
      {
         if ((outputTabName == GUI_OUTPUT_TAB_NAME) && (identifier > 0))
         {
            try
            {
               EA.Element element = repository.GetElementByID(identifier);
               repository.ShowInProjectView(element);
            }
            catch
            {
               try
               {
                  EA.Package package = repository.GetPackageByID(identifier);
                  repository.ShowInProjectView(package);
               }
               catch
               {
               }
            }
         }
      }


      public object EA_GetMenuItems(EA.Repository repository, string location, string menu)
      {
         string[] ar;

         switch( menu )
         {
            case "":
               return "-&EA_ReqPro";

            case "-&EA_ReqPro":
               if (ourThread != null && ourThread.IsAlive == true)
               {
                  ar = new string[] {"&Abort Import"};
                  return ar;
               }
               else
               {
                  ar = new string[]{
                                   "&Import for Traceability Use",
                                   "&Display Change Log",
                                   "&Import for Document Model Use",
                                   "&Export to ReqPro Compatible CSV File",
                                   "&Create Requirement Diagram",
                  };
                  return ar;
               }
         }

         return "";
      }


      bool IsProjectOpen(EA.Repository Repository)
      {
         try
         {
            EA.Collection collection = Repository.Models;
            return true;
         }
         catch
         {
            return false;
         }
      }


      public void EA_GetMenuState(EA.Repository repository, string location, string menuName, string itemName, ref bool isEnabled, ref bool isChecked)
      {
         EA_Repository = repository;

         object o;
         EA.ObjectType type;

         isChecked = false;


         if (IsProjectOpen(repository))
         {
            switch (itemName)
            {
               case "&Abort Import":
               case "&Import for Document Model Use":
               case "&Export to ReqPro Compatible CSV File":
               case "&Create Requirement Diagram":
               case "&Import for Traceability Use":
                  isEnabled = true;
                  break;

               case "&Display Change Log":
                  type = repository.GetTreeSelectedItem(out o);
                  if ( (type == EA.ObjectType.otElement) && (((EA.Element)o).Name == "Change Log"))
                  {
                     isEnabled = true;
                  }
                  else
                  {
                     isEnabled = false;
                  }
                  break;

            }
         }
         else
         {
            isEnabled = false;
         }
      }


      public void EA_MenuClick(EA.Repository repository, string location, string menu, string itemName)
      {
         EA_Repository = repository;

         switch( itemName )
         {
            case "&Abort Import":
               if (ourThread != null && ourThread.IsAlive == true)
               {
                  mustAbort = true;
               }
               break;

            case "&Import for Traceability Use":
               if (ourThread == null || ourThread.IsAlive == false)
               {
                  ourThread = new Thread(new ThreadStart(ImportReqProDatabase_Thread));
                  ourThread.ApartmentState = ApartmentState.STA;
                  ourThread.Start();
               }
               break;

            case "&Import for Document Model Use":
               if (ourThread == null || ourThread.IsAlive == false)
               {
                  ourThread = new Thread(new ThreadStart(CopyReqProDatabase_Thread));
                  ourThread.ApartmentState = ApartmentState.STA;
                  ourThread.Start();
               }
               break;

            case "&Export to ReqPro Compatible CSV File":
               repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
               repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);
               ExportToReqProCSVForm export_dlg = new ExportToReqProCSVForm();
               DialogResult dlgRes = export_dlg.ShowDialog();
               if (dlgRes == DialogResult.OK)
               {
                  export_dlg.Export();
               }
               break;

            case "&Display Change Log":
            {
               ImportReqProDatabase import_parser = new ImportReqProDatabase();
               EA.Element changeLog = (EA.Element)repository.GetTreeSelectedObject();
               repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
               import_parser.displayChangeLog(changeLog);
               break;
            }

            case "&Create Requirement Diagram":
            {
               EA_Utilities EA_Utils = new EA_Utilities();
               ArrayList allowedElementTypes = new ArrayList();
               allowedElementTypes.Add("Requirement");
               //allowedElementTypes.Add("UseCase");
               ElementAccumulator reqLister = new ElementAccumulator(allowedElementTypes);
               EA.Package thePackage = (EA.Package)repository.GetTreeSelectedObject();
               EA_Utils.findAndProcessPackageElements( thePackage, reqLister, true );
               EA.Diagram newDiagram = (EA.Diagram)thePackage.Diagrams.AddNew("Requirements","Logical");
               newDiagram.Update();
               thePackage.Update();

               foreach (EA.Element element in reqLister.Elements)
               {
                  EA.DiagramObject newDiagramObject = (EA.DiagramObject)newDiagram.DiagramObjects.AddNew("l=1;r=10;t=1;b=1", "");
                  newDiagramObject.ElementID = element.ElementID;
                  newDiagramObject.Update();
               }
               newDiagram.DiagramObjects.Refresh();
               thePackage.Update();
               repository.GetProjectInterface().LayoutDiagramEx( newDiagram.DiagramGUID, 
                  EA.ConstLayoutStyles.lsDiagramDefault, 4, 20, 20, false);
               break;

            }

         }
      }

      private static void ImportReqProDatabase_Thread()
      {
         mustAbort = false;
         ImportReqProDatabase import_parser = new ImportReqProDatabase();
         EA_Repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
         EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);
         import_parser.prompt_and_parse(ReqProDB_Artifact.MODE.TRACEABILITY); 
         if (mustAbort)
            MessageBoxEx.Show("Import Aborted");
      }

      private static void CopyReqProDatabase_Thread()
      {
         mustAbort = false;
         EA_Repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);
         EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);
         CopyReqProDatabase copy_parser = new CopyReqProDatabase();
         copy_parser.prompt_and_parse(ReqProDB_Artifact.MODE.DOC_MODEL);
         if (mustAbort)
            MessageBoxEx.Show("Import Aborted");
      }

   }
}