Rev 2153 | Rev 2161 | 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 int abortRequests = 0;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/Export"};return ar;}else{ar = new string[]{"&Import for Traceability Use","&Display Change Log","&Import for Document Model Use","&Export to ReqPro","&Export to ReqPro Compatible CSV File","&Create Requirement Diagram","&Create Requirement Diagram Using Model Search"};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/Export":case "&Import for Document Model Use":case "&Export to ReqPro":case "&Export to ReqPro Compatible CSV File":case "&Create Requirement Diagram":case "&Create Requirement Diagram Using Model Search":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 ){// This menu option appears only when a thread is active. It allows the user to initiate// an abort of the thread.case "&Abort Import/Export":if (ourThread != null && ourThread.IsAlive == true){if (abortRequests > 0){// if user has made a second abort request, it is probably because the thread does not// appear to be aborting. This can happen sometimes. I have noticed occasional lockups,// and every time this happens, the thread seems to be locked up in a call to an EA// automation interface function, so perhaps there is some wierd interaction between// the thread and the use of the menu in the main EA process? Anyway, lets try to abort// the thread now because it does not appear as if it is going to quit gracefully.ourThread.Abort();ReqProDatabase.close();break;}else{// try to quit gracefully.mustAbort = true;abortRequests++;}}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":if (ourThread == null || ourThread.IsAlive == false){ourThread = new Thread(new ThreadStart(ExportToReqPro_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":{ArrayList allowedElementTypes = new ArrayList();allowedElementTypes.Add("Requirement");//allowedElementTypes.Add("UseCase");ElementAccumulator reqLister = new ElementAccumulator(allowedElementTypes);EA.Package thePackage = (EA.Package)repository.GetTreeSelectedObject();EA_Utilities.findAndProcessPackageElements( thePackage, reqLister, true );createRequirementDiagram(thePackage, reqLister.Elements);break;}case "&Create Requirement Diagram Using Model Search":{QueryForm qf = new QueryForm();DialogResult qf_dlgRes = qf.ShowDialog();if (qf_dlgRes == DialogResult.OK){EA.Package thePackage = (EA.Package)repository.GetTreeSelectedObject();EA.Collection c = EA_Repository.GetElementsByQuery(qf.textBox_query_name.Text, qf.textBox_search_term.Text);createRequirementDiagram(thePackage, c);}break;}}}private void createRequirementDiagram(EA.Package containerPackage, EA.Collection c){EA.Diagram newDiagram = (EA.Diagram)containerPackage.Diagrams.AddNew("Requirements","Logical");newDiagram.Update();containerPackage.Update();foreach (EA.Element element in c){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();containerPackage.Update();EA_Repository.GetProjectInterface().LayoutDiagramEx( newDiagram.DiagramGUID,EA.ConstLayoutStyles.lsDiagramDefault, 4, 20, 20, false);}private void createRequirementDiagram(EA.Package containerPackage, ArrayList elements){EA.Diagram newDiagram = (EA.Diagram)containerPackage.Diagrams.AddNew("Requirements","Logical");newDiagram.Update();containerPackage.Update();foreach (EA.Element element in 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();containerPackage.Update();EA_Repository.GetProjectInterface().LayoutDiagramEx( newDiagram.DiagramGUID,EA.ConstLayoutStyles.lsDiagramDefault, 4, 20, 20, false);}/// <summary>/// Thread function for import for traceability use operation/// </summary>private static void ImportReqProDatabase_Thread(){bool cancelled = false;mustAbort = false;abortRequests = 0;EA_Repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);ImportReqProDatabase import_parser = new ImportReqProDatabase();import_parser.prompt_and_parse(ReqProDB_Artifact.MODE.TRACEABILITY, out cancelled);if (mustAbort){EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME, "Import Aborted", -1);MessageBoxEx.Show("Import Aborted", "Progress");}else if (cancelled){Main.WriteOutput("Import Cancelled",-1);}abortRequests = 0;ReqProDatabase.close();}/// <summary>/// Thread function for import for document model use operation/// </summary>private static void CopyReqProDatabase_Thread(){bool cancelled = false;mustAbort = false;abortRequests = 0;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, out cancelled);if (mustAbort){EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME, "Import Aborted", -1);MessageBoxEx.Show("Import Aborted", "Progress");}else if (cancelled){Main.WriteOutput("Import Cancelled",-1);}abortRequests = 0;ReqProDatabase.close();}/// <summary>/// Thread function for export to reqpro database operation/// </summary>private static void ExportToReqPro_Thread(){bool cancelled = false;mustAbort = false;abortRequests = 0;EA_Repository.EnsureOutputVisible(GUI_OUTPUT_TAB_NAME);EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME,"",-1);ExportToReqProDatabase export_parser = new ExportToReqProDatabase();export_parser.prompt_and_parse(ReqProDB_Artifact.MODE.EXPORT, out cancelled);if (mustAbort){EA_Repository.WriteOutput(GUI_OUTPUT_TAB_NAME, "Export Aborted", -1);MessageBoxEx.Show("Export Aborted", "Progress");}else if (cancelled){Main.WriteOutput("Export Cancelled",-1);}abortRequests = 0;ReqProDatabase.close();}public static void MessageBoxException(Exception exc){MessageBoxException(exc, "Exception");}public static void MessageBoxException(Exception exc, string caption){MessageBoxEx.Show(exc.ToString(), caption, MessageBoxIcon.Error);}public static void WriteOutput(string s, int id){EA_Repository.WriteOutput( GUI_OUTPUT_TAB_NAME, s, id);}public static void ClearOutput(){EA_Repository.ClearOutput(GUI_OUTPUT_TAB_NAME);}public static void WriteSeperator(){EA_Repository.WriteOutput( GUI_OUTPUT_TAB_NAME, "----------------------------------------------------------------------------------------------------------------------", -1);}}}