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);
        }