void IPlugin.ProcessRepository(EA.Repository repository)
        {
            Log.Info("");

            string targetPath = GetTargetPath();

            StateGenSync.Types.StateMachineData data = m_IRepositoryHandler.HandleRepository(repository);

            StateGenSync.Types.Product iActionHandler = m_IInterfaceBuilder.CreateProduct(data.GetActions(), FILENAME_IACTIONHANDLER);

            StateGenSync.Types.Product iConditionHandler = m_IInterfaceBuilder.CreateProduct(data.GetGuards(), FILENAME_ICONDITIONHANDLER);

            StateGenSync.Types.Product iFsm = m_IInterfaceBuilder.CreateProduct(data.GetFsm().GetMethods(), data.GetFsm().GetInferfaceName() + ".hpp");

            StateGenSync.Types.Product fsmData = m_IFsmDataBuilder.CreateProduct(data, FILENAME_FSMDATA);

            StateGenSync.Types.Product events = m_IEnumBuilder.CreateProduct(data.GetEnumEvents(), FILENAME_EVENTS);

            StateGenSync.Types.Product activities = m_IEnumBuilder.CreateProduct(data.GetEnumActivities(), FILENAME_ACTIVITIES);

            StateGenSync.Types.Product conditionHandlerHeader = m_IClassHeaderBuilder.CreateProduct(data.GetGuards(), FILENAME_CONDITIONHANDLER, FILENAME_ICONDITIONHANDLER);

            StateGenSync.Types.Product actionHandlerHeader = m_IClassHeaderBuilder.CreateProduct(data.GetActions(), FILENAME_ACTIONHANDLER, FILENAME_IACTIONHANDLER);

            StateGenSync.Types.Product conditionHandlerImpl = m_IClassImplBuilder.CreateProduct(data.GetGuards(), FILENAME_CONDITIONHANDLERIMPL);

            StateGenSync.Types.Product actionHandlerImpl = m_IClassImplBuilder.CreateProduct(data.GetActions(), FILENAME_ACTIONHANDLERIMPL);

            StateGenSync.Types.Product fsmHandlerHeader = m_IFsmHandlerHeaderBuilder.CreateProduct(data.GetFsm().GetMethods(), FILENAME_FSMHANDLERHEADER);

            StateGenSync.Types.Product fsmHandlerImpl = m_IFsmHandlerImplBuilder.CreateProduct(FILENAME_FSMHANDLERIMPL);

            StateGenSync.Types.Product transitionRow = m_ITransitionRowBuilder.CreateProduct(FILENAME_TRANSITIONROW);

            m_IFileWriter.WriteProduct(targetPath, iActionHandler);
            m_IFileWriter.WriteProduct(targetPath, iConditionHandler);
            m_IFileWriter.WriteProduct(targetPath, iFsm);
            m_IFileWriter.WriteProduct(targetPath, fsmData);
            m_IFileWriter.WriteProduct(targetPath, events);
            m_IFileWriter.WriteProduct(targetPath, activities);
            m_IFileWriter.WriteProduct(targetPath, conditionHandlerHeader);
            m_IFileWriter.WriteProduct(targetPath, actionHandlerHeader);
            m_IFileWriter.WriteProduct(targetPath, conditionHandlerImpl);
            m_IFileWriter.WriteProduct(targetPath, actionHandlerImpl);
            m_IFileWriter.WriteProduct(targetPath, fsmHandlerHeader);
            m_IFileWriter.WriteProduct(targetPath, fsmHandlerImpl);
            m_IFileWriter.WriteProduct(targetPath, transitionRow);

            MessageBox.Show("Finish");
        }
        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);
        }