private void UiBtnCommandPrincipalKey_ButtonClicked(Object sender)
        {
            if (sender as FluentAPIForeignKey == null)
            {
                MessageBox.Show("Could not proceed. Selection type is not defined", "Info", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;
            }
            if (CreatePrimKeyUC == null)
            {
                CreatePrimaryKeyViewModel dataContext = new CreatePrimaryKeyViewModel(Dte, TextTemplating);
                string TemplatesFld = TemplatePathHelper.GetTemplatePath();
                dataContext.TemplateFolder = Path.Combine(TemplatesFld, "HasKeyTmplst");
                CreatePrimKeyUC            = new UserControlCreatePrimKey(dataContext);
            }

            CodeElement codeElement = (sender as FluentAPIForeignKey).CodeElementNavigationRef;

            (CreatePrimKeyUC.DataContext as CreatePrimaryKeyViewModel).SelectedEntity = new SolutionCodeElement()
            {
                CodeElementName     = codeElement.Name,
                CodeElementFullName = codeElement.FullName,
                CodeElementRef      = codeElement
            };

            CurrentUiStepId = 300;
            NextBtnCommandAction(sender);
        }
        public override void NextBtnCommandAction(Object param)
        {
            switch (CurrentUiStepId)
            {
            case 0:
                CurrentUiStepId = 1;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = false;
                SaveBtnEnabled  = false;
                if (SelectDbContextUC == null)
                {
                    SelectDbContextViewModel dataContext = new SelectDbContextViewModel(Dte);
                    dataContext.UiCommandCaption3 = "NameSpace: " + (InvitationUC.DataContext as InvitationViewModel).DefaultProjectNameSpace;
                    string folder = (InvitationUC.DataContext as InvitationViewModel).DestinationFolder;
                    if (!string.IsNullOrEmpty(folder))
                    {
                        dataContext.UiCommandCaption3 = dataContext.UiCommandCaption3 + "." + folder.Replace("\\", ".");
                    }
                    SelectDbContextUC = new UserControlSelectSource(dataContext);
                    dataContext.IsReady.IsReadyEvent += SelectDbContextViewModel_IsReady;
                    dataContext.UiCommandButtonClicked.ButtonClickedEvent += SelectDbContextViewModel_ButtonClicked;
                }
                (SelectDbContextUC.DataContext as SelectDbContextViewModel).DoAnaliseDbContext();

                this.CurrentUserControl = SelectDbContextUC;
                this.OnPropertyChanged("CurrentUserControl");
                break;

            case 1:
                CurrentUiStepId = 2;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = false;
                SaveBtnEnabled  = false;
                if (SelectSourceEntityUC == null)
                {
                    SelectEntityForGivenDbContextViewModel dataContext = new SelectEntityForGivenDbContextViewModel(Dte);
                    dataContext.IsReady.IsReadyEvent += SelectEntityForGivenDbContextViewModel_IsReady;
                    dataContext.UiCommandButtonClicked.ButtonClickedEvent += SelectEntityForGivenDbContextViewModel_ButtonClicked;
                    SelectSourceEntityUC = new UserControlSelectSource(dataContext);
                }
                (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedDbContext =
                    (SelectDbContextUC.DataContext as SelectDbContextViewModel).SelectedCodeElement;
                if ((SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedCodeElement != null)
                {
                    (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).DoAnalize();
                }
                else
                {
                    (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).CheckIsReady();
                }
                this.CurrentUserControl = SelectSourceEntityUC;
                this.OnPropertyChanged("CurrentUserControl");
                break;

            case 2:
                CurrentUiStepId = 3;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = false;
                if (SelectForeignKeyUC == null)
                {
                    SelectForeignKeyViewModel dataContext = new SelectForeignKeyViewModel(Dte);
                    dataContext.IsReady.IsReadyEvent += SelectForeignKeyViewModel_IsReady;
                    SelectForeignKeyUC = new UserControlSelectForeignKey(dataContext);
                    dataContext.PrincipalKeyButtonClicked.ButtonClickedEvent += UiBtnCommandPrincipalKey_ButtonClicked;
                    dataContext.ForeignKeyButtonClicked.ButtonClickedEvent   += UiBtnCommandForeignKey_ButtonClicked;
                }
                (SelectForeignKeyUC.DataContext as SelectForeignKeyViewModel).SelectedDbContext =
                    (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedDbContext;
                (SelectForeignKeyUC.DataContext as SelectForeignKeyViewModel).SelectedEntity =
                    (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedCodeElement;
                (SelectForeignKeyUC.DataContext as SelectForeignKeyViewModel).DoAnaliseEx();
                this.CurrentUserControl = SelectForeignKeyUC;
                this.OnPropertyChanged("CurrentUserControl");
                break;

            case 3:
                CurrentUiStepId = 4;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = true;
                if (CreateForeignKeyUC == null)
                {
                    CreateForeignKeyViewModel dataContext = new CreateForeignKeyViewModel(Dte, TextTemplating);
                    string TemplatesFld = TemplatePathHelper.GetTemplatePath();
                    dataContext.TemplateFolder                = Path.Combine(TemplatesFld, "ForeignKeyTmplts");
                    dataContext.TemplateOneToOneFolder        = Path.Combine(TemplatesFld, "ForeignKeyTmplts", "OneToOne");
                    dataContext.TemplateOneToCollectionFolder = Path.Combine(TemplatesFld, "ForeignKeyTmplts", "OneToCollection");
                    dataContext.IsReady.IsReadyEvent         += SelectForeignKeyViewModel_IsReady;
                    CreateForeignKeyUC = new UserControlCreateForeignKey(dataContext);
                }
                (CreateForeignKeyUC.DataContext as CreateForeignKeyViewModel).SelectedDbContext =
                    (SelectForeignKeyUC.DataContext as SelectForeignKeyViewModel).SelectedDbContext;
                (CreateForeignKeyUC.DataContext as CreateForeignKeyViewModel).SelectedEntity =
                    (SelectForeignKeyUC.DataContext as SelectForeignKeyViewModel).SelectedEntity;

                string navName = null;
                if (param is FluentAPIForeignKey)
                {
                    if ((param as FluentAPIForeignKey) != null)
                    {
                        navName = (param as FluentAPIForeignKey).NavigationName;
                    }
                }
                (CreateForeignKeyUC.DataContext as CreateForeignKeyViewModel).DoAnalise(navName);
                if (string.IsNullOrEmpty(navName))
                {
                    (CreateForeignKeyUC.DataContext as CreateForeignKeyViewModel).SelectedForeignKey =
                        (SelectForeignKeyUC.DataContext as SelectForeignKeyViewModel).SelectedForeignKey;
                }

                this.CurrentUserControl = CreateForeignKeyUC;
                this.OnPropertyChanged("CurrentUserControl");

                break;

            case 4:
                CurrentUiStepId = 1;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = true;
                NextBtnCommandAction(param);
                break;

            case 100:
                CurrentUiStepId = 101;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = false;
                if (T4SelectTemplateUC == null)
                {
                    Selectt4TemplateViewModel dataContext = new Selectt4TemplateViewModel();
                    string TemplatesFld = TemplatePathHelper.GetTemplatePath();
                    dataContext.TemplateFolder        = Path.Combine(TemplatesFld, "DbContextTmplts");
                    dataContext.IsReady.IsReadyEvent += Selectt4TemplateViewModel_IsReady;
                    T4SelectTemplateUC = new UserControlT4SelectTemplate(dataContext);
                }
                (T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).DoAnalise();
                this.CurrentUserControl = T4SelectTemplateUC;
                this.OnPropertyChanged("CurrentUserControl");
                break;

            case 101:
                CurrentUiStepId = 102;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = true;
                string templatePath101 = Path.Combine(
                    (T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).TemplateFolder,
                    (T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).SelectedTemplate);
                if (T4Editor == null)
                {
                    T4EditorViewModel dataContext = new T4EditorViewModel((T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).TemplateFolder);
                    dataContext.T4SelectedTemplate = (T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).SelectedTemplate;
                    dataContext.T4TempateCaption   = (T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).SelectedTemplate;
                    T4Editor = new UserControlT4Editor(dataContext);
                }
                else
                {
                    if (!templatePath101.Equals((T4Editor.DataContext as T4EditorViewModel).T4TempatePath, StringComparison.OrdinalIgnoreCase))
                    {
                        (T4Editor.DataContext as T4EditorViewModel).T4SelectedTemplate = (T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).SelectedTemplate;
                        (T4Editor.DataContext as T4EditorViewModel).T4TempateCaption   = (T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).SelectedTemplate;
                        (T4Editor.DataContext as T4EditorViewModel).T4TempatePath      = templatePath101;
                        (T4Editor.DataContext as T4EditorViewModel).ReadTemplate();
                    }
                }
                if (!(T4SelectTemplateUC.DataContext as Selectt4TemplateViewModel).ShowT4Template)
                {
                    NextBtnCommandAction(param);
                    return;
                }
                this.CurrentUserControl = T4Editor;
                this.OnPropertyChanged("CurrentUserControl");
                break;

            case 102:
                CurrentUiStepId = 103;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = false;
                if (GenerateDbContextUC == null)
                {
                    GenerateDbContextViewModel dataContext = new GenerateDbContextViewModel();
                    dataContext.IsReady.IsReadyEvent += GenerateDbContext_IsReady;
                    GenerateDbContextUC = new UserControlGenerate(dataContext);
                }
                (GenerateDbContextUC.DataContext as GenerateDbContextViewModel).GenText =
                    (T4Editor.DataContext as T4EditorViewModel).T4TempateText;

                string nameSpace102 = (InvitationUC.DataContext as InvitationViewModel).DefaultProjectNameSpace;
                string folder102    = (InvitationUC.DataContext as InvitationViewModel).DestinationFolder;
                if (!string.IsNullOrEmpty(folder102))
                {
                    nameSpace102 = nameSpace102 + "." + folder102.Replace("\\", ".");
                }
                (GenerateDbContextUC.DataContext as GenerateDbContextViewModel).DoGenerateDbContext(Dte, TextTemplating, (T4Editor.DataContext as T4EditorViewModel).T4TempatePath, nameSpace102, (SelectDbContextUC.DataContext as SelectDbContextViewModel).UiCommandProppertyName);
                this.CurrentUserControl = GenerateDbContextUC;
                this.OnPropertyChanged("CurrentUserControl");

                break;

            case 103:
                (SelectDbContextUC.DataContext as SelectDbContextViewModel).CollectProjectClasses((SelectDbContextUC.DataContext as SelectDbContextViewModel).SelectedProject);
                CurrentUiStepId = 0;
                NextBtnCommandAction(param);
                break;

            case 200:
                CurrentUiStepId = 201;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = true;
                if (CreatePrimKeyUC == null)
                {
                    CreatePrimaryKeyViewModel dataContext = new CreatePrimaryKeyViewModel(Dte, TextTemplating);
                    string TemplatesFld = TemplatePathHelper.GetTemplatePath();
                    dataContext.TemplateFolder = Path.Combine(TemplatesFld, "HasKeyTmplst");
                    CreatePrimKeyUC            = new UserControlCreatePrimKey(dataContext);
                }
                (CreatePrimKeyUC.DataContext as CreatePrimaryKeyViewModel).SelectedDbContext =
                    (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedDbContext;
                (CreatePrimKeyUC.DataContext as CreatePrimaryKeyViewModel).SelectedEntity =
                    (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedCodeElement;
                (CreatePrimKeyUC.DataContext as CreatePrimaryKeyViewModel).DoAnalise();
                this.CurrentUserControl = CreatePrimKeyUC;
                this.OnPropertyChanged("CurrentUserControl");
                break;

            case 201:
                CurrentUiStepId = 1;
                NextBtnCommandAction(param);
                break;

            case 300:
                CurrentUiStepId = 301;
                PrevBtnEnabled  = true;
                NextBtnEnabled  = true;
                if (CreatePrimKeyUC == null)
                {
                    CreatePrimaryKeyViewModel dataContext = new CreatePrimaryKeyViewModel(Dte, TextTemplating);
                    string TemplatesFld = TemplatePathHelper.GetTemplatePath();
                    dataContext.TemplateFolder = Path.Combine(TemplatesFld, "HasKeyTmplst");
                    CreatePrimKeyUC            = new UserControlCreatePrimKey(dataContext);
                }
                (CreatePrimKeyUC.DataContext as CreatePrimaryKeyViewModel).SelectedDbContext =
                    (SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedDbContext;
                //(CreatePrimKeyUC.DataContext as CreatePrimaryKeyViewModel).SelectedEntity =
                //(SelectSourceEntityUC.DataContext as SelectEntityForGivenDbContextViewModel).SelectedCodeElement;
                (CreatePrimKeyUC.DataContext as CreatePrimaryKeyViewModel).DoAnalise();
                this.CurrentUserControl = CreatePrimKeyUC;
                this.OnPropertyChanged("CurrentUserControl");
                break;

            case 301:
                CurrentUiStepId = 4;
                PrevBtnCommandAction(param);
                break;


            default:
                break;
            }
        }