private void CleanUpTransitionTable() { foreach (Row roi in m_Data.GetTransitionTable().GetRows()) { if ((roi.GetNextActivity().GetElementType() != ElementType.Activity) && (roi.GetNextActivity().GetElementType() != ElementType.Decision)) { Log.Info("dirtyActivity=" + roi.GetNextActivity().GetName() + " elementType=" + roi.GetNextActivity().GetElementType()); EA.Connector dirtyConnector = m_DiagramOfInterest.GetConnectorByID(roi.GetID()); EA.Element dirtyActivity = m_DiagramOfInterest.GetElementByID(dirtyConnector.SupplierID); Activity correctNextActivity = new Activity(); bool isCleanedUp = false; foreach (EA.Connector c in dirtyActivity.Connectors) { EA.Element possibleActivity = m_DiagramOfInterest.GetElementByID(c.SupplierID); if (possibleActivity.Name == "ActivityFinal") { correctNextActivity = new Activity(possibleActivity.Name, EnumUtil.ParseEnum <ElementType>(possibleActivity.Type, ElementType.Unknown), possibleActivity.ElementID); isCleanedUp = true; } else { foreach (Row r in m_Data.GetTransitionTable().GetRows()) { if (possibleActivity.Name == r.GetCurrentActivity().GetName() && (r.GetCurrentActivity().GetElementType() == ElementType.StateNode || r.GetCurrentActivity().GetElementType() == ElementType.Activity)) { correctNextActivity = new Activity(possibleActivity.Name, EnumUtil.ParseEnum <ElementType>(possibleActivity.Type, ElementType.Unknown), possibleActivity.ElementID); isCleanedUp = true; } } } } if (isCleanedUp) { roi.SetNextActivity(correctNextActivity); roi.SetAction(correctNextActivity.GetName()); } else { m_Data.GetTransitionTable().GetRows().Remove(roi); } } } }
StateGenSync.Types.StateMachineData IRepositoryHandler.HandleRepository(EA.Repository activityDiagram) { m_Data = new StateGenSync.Types.StateMachineData(); EA.Package package = activityDiagram.GetTreeSelectedPackage(); m_DiagramOfInterest = activityDiagram; //MessageBox.Show(package.Name); foreach (EA.Element e in package.Elements) { ElementType type = EnumUtil.ParseEnum <ElementType>(e.Type, ElementType.Unknown); // MessageBox.Show(e.Type.ToString()); Log.Info(e.Type.ToString()); HandleType(type, e); } m_Data.GetTransitionTable().PrintTable(); CleanUpTransitionTable(); DeleteMergeNodeRows(); Log.Info("cleaned"); m_Data.GetTransitionTable().PrintTable(); m_Data.GetTransitionTable().GetRows().Sort(new TableComparer()); Log.Info("sorted"); m_Data.GetTransitionTable().PrintTable(); FillActionsAndGuards(); FetchEnumActivities(); return(m_Data); }