Пример #1
0
 public Forexpolate_Test(StrategyConfig config)
     : base(config)
 {
     QuickBuyLongFlag  = false;
     QuickBuyShortFlag = false;
     tdmObj            = new TDM_Manager(ExchangeObject);
 }
        public async Task DeleteStrategyAsync(StrategyConfig strategyConfig)
        {
            if (System.IO.File.Exists(userStrategiesFile))
            {
                List <StrategyConfig> strategies = null;

                using (var reader = System.IO.File.OpenText(userStrategiesFile))
                {
                    var rjson = await reader.ReadToEndAsync();

                    strategies = JsonConvert.DeserializeObject <List <StrategyConfig> >(rjson);
                }

                var remove = strategies.FirstOrDefault(s => s.Name.Equals(strategyConfig.Name));
                if (remove != null)
                {
                    strategies.Remove(remove);
                    var wjson = JsonConvert.SerializeObject(strategies);

                    UnicodeEncoding encoding = new UnicodeEncoding();
                    char[]          chars    = encoding.GetChars(encoding.GetBytes(wjson));
                    using (StreamWriter writer = System.IO.File.CreateText(userStrategiesFile))
                    {
                        await writer.WriteAsync(chars, 0, chars.Length);
                    }
                }
            }
        }
Пример #3
0
        // 策略添加到表中,返回添加后的行号
        private StrategyConfig AddStra(Strategy stra, string pInterval, DateTime pBegin, DateTime?pEnd, string pName = "Invalid")
        {
            if (pName == "Invalid")
            {
                if (m_lstStrategies.Count == 0)
                {
                    pName = "1";
                }
                else
                {
                    pName = (m_lstStrategies.Select(n => int.Parse(n.Name)).Max() + 1).ToString();
                }
            }

            stra.Name = pName;
            StrategyConfig strategy = new StrategyConfig();

            strategy.BeginDate    = pBegin;
            strategy.EndDate      = pEnd;
            strategy.Interval     = pInterval;
            strategy.Name         = pName;
            strategy.Params       = stra.GetParams();
            strategy.TypeFullName = stra.GetType().FullName;
            m_lstStrategies.Add(strategy);

            return(strategy);
        }
Пример #4
0
        private void btn_Simulate_Click(object sender, RoutedEventArgs e)
        {
            if (this.cmbx_Stratagies.SelectedIndex < 0)
            {
                return;
            }
            if (this.cmbx_Interval.SelectedIndex < 0)
            {
                return;
            }

            Strategy stra = (Strategy)Activator.CreateInstance((Type)this.cmbx_Stratagies.SelectedItem);

            //TODO---参数配置---
            //if (stra.GetParams().Trim('(', ')').Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Length >= 1)
            //{
            //    PropertyGrid fp = new PropertyGrid();

            //    //参数配置
            //    fp.DataContext = stra;
            //    fp.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            //    if (fp.ShowDialog() != true) return;
            //}


            StrategyConfig strategy = AddStra(stra, this.cmbx_Interval.Text, this.dp_BeginTime.DisplayDate, this.dp_EndTime.DisplayDate);

            //数据加载
            LoadDataBar(strategy);
        }
Пример #5
0
        //加载测试指定行的策略的
        private void LoadDataBar(StrategyConfig config)
        {
            //var inst = row.Cells["Instrument"].Value.ToString();
            //var instOrder = row.Cells["InstrumentOrder"].Value.ToString();
            //var interval = row.Cells["Interval"].Value.ToString();
            //var stra = _dicStrategies[row.Cells["StraName"].Value.ToString()];
            //var begin = ((DateTime)row.Cells["BeginDate"].Value).ToString("yyyyMMdd");
            //var end = row.Cells["EndDate"].Value == null ? DateTime.Today.AddDays(7).ToString("yyyyMMdd") : ((DateTime)row.Cells["EndDate"].Value).AddDays(1).ToString("yyyyMMdd");

            //this.DataGridViewStrategies.Rows[rid].Cells["Loaded"].Value = "加载中...";
        }
        public ActionResult UpdateConfiguration(StrategyConfig config)
        {
            try
            {
                _configManager.Write(config);
                return(Ok());
            }
            catch (Exception exp)
            {
                _log.Error(exp, $"Error while writing strategy configuration.");
            }

            return(StatusCode(500));
        }
 internal WindowsFormsCodeGeneratorStrategy(StrategyConfig config)
 {
     Writer                       = config.Writer;
     CanonicalTableName           = config.CanonicalTableName;
     Columns                      = config.Columns;
     DataAccessTech               = config.DataAccessTech;
     ValidationsEnabled           = config.ValidationsEnabled;
     ValidationColumns            = config.ValidationColumns;
     DetailValidationColumns      = config.DetailValidationColumns;
     ConnectionString             = config.ConnectionString;
     ConnectionStringWithPassword = config.ConnectionStringWithPassword;
     TableName                    = config.TableName;
     DetailTableName              = config.DetailTableName;
     CanonicalDetailTableName     = GetCanonicalIdentifier(DetailTableName);
     ConstraintName               = config.ConstraintName;
 }
        public async Task <StrategyConfig> GetStrategyAsync(string strategyName)
        {
            StrategyConfig strategy = null;

            if (System.IO.File.Exists(userStrategiesFile))
            {
                using var reader = System.IO.File.OpenText(userStrategiesFile);
                var json = await reader.ReadToEndAsync().ConfigureAwait(false);

                var strategies = JsonConvert.DeserializeObject <List <StrategyConfig> >(json);
                strategy = strategies.FirstOrDefault(s => s.Name.Equals(strategyName, StringComparison.Ordinal));
                return(strategy);
            }

            return(GetDemoStrategyConfig());
        }
Пример #9
0
 protected Strategy(StrategyConfig config)
 {
     this.Name                    = config.Name;
     this.SubName                 = config.SubName;
     this.ShortCode               = config.ShortCode;
     this.ActiveStatus            = config.ActiveStatus;
     this.MinPositionLevelPercent = config.MinPositionLevelPercent;
     this.MaxPositionCount        = config.MaxPositionCount;
     this.OrderType               = config.OrderType;
     this.AccountConfigList       = config.Accounts;
     this.UserConfigList          = config.Users;
     this.MyStrategyJson          = JsonConvert.SerializeObject(config);
     this.ExitLoop                = 0;
     UniqueId  = Guid.NewGuid().ToString();
     dbManager = new DBManager();
 }
        internal VBWindowsFormsCodeGeneratorStrategy(StrategyConfig config)
            : base(config)
        {
            ActionMappings = new Dictionary <string, WriterDelegate>();

            ActionMappings["'<WizardGeneratedCode>Namespace_UserCode</WizardGeneratedCode>"]                 = WriteUsingUserCode;
            ActionMappings["'<WizardGeneratedCode>Form_Load</WizardGeneratedCode>"]                          = WriteFormLoadCode;
            ActionMappings["'<WizardGeneratedCode>Validation Events</WizardGeneratedCode>"]                  = WriteValidationCode;
            ActionMappings["'<WizardGeneratedCode>Private Variables Frontend</WizardGeneratedCode>"]         = WriteVariablesUserCode;
            ActionMappings["'<WizardGeneratedCode>Save Event</WizardGeneratedCode>"]                         = WriteSaveEventCode;
            ActionMappings["'<WizardGeneratedCode>Add Event</WizardGeneratedCode>"]                          = WriteAddEventCode;
            ActionMappings["'<WizardGeneratedCode>Designer Control Declaration</WizardGeneratedCode>"]       = WriteDesignerControlDeclCode;
            ActionMappings["'<WizardGeneratedCode>Designer Control Initialization</WizardGeneratedCode>"]    = WriteDesignerControlInitCode;
            ActionMappings["'<WizardGeneratedCode>Designer BeforeSuspendLayout</WizardGeneratedCode>"]       = WriteDesignerBeforeSuspendCode;
            ActionMappings["'<WizardGeneratedCode>Designer AfterSuspendLayout</WizardGeneratedCode>"]        = WriteDesignerAfterSuspendCode;
            ActionMappings["'<WizardGeneratedCode>Designer BeforeResumeSuspendLayout</WizardGeneratedCode>"] = WriteBeforeResumeSuspendCode;
        }
        private static StrategyConfig GetDemoStrategyConfig()
        {
            var strategyConfig = new StrategyConfig
            {
                Name                       = "Binance Moving Average - ETHBTC",
                TargetType                 = "DevelopmentInProgress.Strategy.MovingAverage.MovingAverageStrategy",
                TargetAssembly             = Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.Strategy.MovingAverage.dll"),
                DisplayViewType            = "DevelopmentInProgress.Strategy.MovingAverage.Wpf.View.MovingAverageView",
                DisplayViewModelType       = "DevelopmentInProgress.Strategy.MovingAverage.Wpf.ViewModel.MovingAverageViewModel",
                DisplayAssembly            = Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.Strategy.MovingAverage.Wpf.dll"),
                Parameters                 = "{\r\n  \"TradeRange\": 10000,\r\n  \"BuyIndicator\": 0.00015,\r\n  \"SellIndicator\": 0.00015,\r\n  \"MovingAvarageRange\": 10000,\r\n  \"Suspend\": true,\r\n  \"StrategyName\": \"Binance Moving Average - ETHBTC\",\r\n  \"Value\": null\r\n}",
                TradesChartDisplayCount    = 1000,
                TradesDisplayCount         = 13,
                OrderBookChartDisplayCount = 20,
                OrderBookDisplayCount      = 9
            };

            strategyConfig.StrategySubscriptions.AddRange(new List <StrategySubscription>
            {
                new StrategySubscription
                {
                    AccountName         = "Binance - Investment",
                    Symbol              = "ETHBTC",
                    Limit               = 0,
                    Exchange            = Exchange.Binance,
                    Subscribes          = Subscribes.Trades | Subscribes.OrderBook | Subscribes.Candlesticks,
                    CandlestickInterval = CandlestickInterval.Minute
                }
            });

            strategyConfig.Dependencies.AddRange(new List <string>
            {
                Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.Strategy.Common.dll"),
                Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.TradeView.Core.dll"),
                Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.Strategy.MovingAverage.dll"),
            });

            strategyConfig.DisplayDependencies.AddRange(new List <string>
            {
                Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.TradeView.Core.dll"),
                Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.Strategy.MovingAverage.dll"),
                Path.Combine(Environment.CurrentDirectory, "DevelopmentInProgress.Strategy.MovingAverage.Wpf.dll")
            });

            return(strategyConfig);
        }
        public async Task SaveStrategyAsync(StrategyConfig strategyConfig)
        {
            if (strategyConfig == null)
            {
                return;
            }

            List <StrategyConfig> strategies;

            if (System.IO.File.Exists(userStrategiesFile))
            {
                using (var reader = System.IO.File.OpenText(userStrategiesFile))
                {
                    var rjson = await reader.ReadToEndAsync();

                    strategies = JsonConvert.DeserializeObject <List <StrategyConfig> >(rjson);
                }
            }
            else
            {
                strategies = new List <StrategyConfig>();
            }

            var dupe = strategies.FirstOrDefault(s => s.Name.Equals(strategyConfig.Name));

            if (dupe != null)
            {
                strategies.Remove(dupe);
            }

            strategies.Add(strategyConfig);

            var wjson = JsonConvert.SerializeObject(strategies, Formatting.Indented);

            UnicodeEncoding encoding = new UnicodeEncoding();

            char[] chars = encoding.GetChars(encoding.GetBytes(wjson));
            using (StreamWriter writer = System.IO.File.CreateText(userStrategiesFile))
            {
                await writer.WriteAsync(chars, 0, chars.Length);
            }
        }
Пример #13
0
 internal CSharpDataGridStrategy(StrategyConfig config)
     : base(config)
 {
 }
Пример #14
0
 public Forexpolate(StrategyConfig config)
     : base(config)
 {
     QuickBuyLongFlag  = false;
     QuickBuyShortFlag = false;
 }
 internal CSharpTypedDatasetIndividualControlsStrategy(StrategyConfig config)
     : base(config)
 {
 }
Пример #16
0
 internal CSharpEntityFrameworkIndividualControlsStrategy(StrategyConfig config)
     : base(config)
 {
 }
Пример #17
0
 internal VBMasterDetailStrategy(StrategyConfig config)
     : base(config)
 {
 }
        /// <summary>
        /// Runs custom wizard logic when the wizard has completed all tasks.
        /// </summary>
        public void RunFinished()
        {
            Array     activeProjects = (Array)dte.ActiveSolutionProjects;
            Project   project        = (Project)activeProjects.GetValue(0);
            VSProject vsProj         = null;

            if (wizardFinished)
            {
#if NET_40_OR_GREATER
                string             frmName = string.Empty;
                SortedSet <string> tables  = new SortedSet <string>();
                Dictionary <string, WindowsFormsCodeGeneratorStrategy> strategies = new Dictionary <string, WindowsFormsCodeGeneratorStrategy>();
                vsProj = project.Object as VSProject;
                ItemTemplateUtilities.CopyResourcesToProject(project, _itemTemplateTempPath);
                try
                {
                    // Ensure all model exists, even if user didn't went through validation pages, so metadata for table used in FKs is already loaded.
                    GenerateModelsForItemTemplates();
                    string detailTableName          = _detailEntity;
                    string _canonicalTableName      = ItemTemplateUtilities.GetCanonicalIdentifier(_selectedEntity);
                    string canonicalDetailTableName = ItemTemplateUtilities.GetCanonicalIdentifier(detailTableName);
                    // Gather all the tables
                    tables.Add(_selectedEntity);
                    if (!string.IsNullOrEmpty(detailTableName))
                    {
                        tables.Add(detailTableName);
                    }

                    foreach (KeyValuePair <string, MySql.Data.VisualStudio.Wizards.ForeignKeyColumnInfo> kvp2 in ForeignKeys)
                    {
                        tables.Add(kvp2.Value.ReferencedTableName);
                    }

                    foreach (KeyValuePair <string, MySql.Data.VisualStudio.Wizards.ForeignKeyColumnInfo> kvp2 in DetailForeignKeys)
                    {
                        tables.Add(kvp2.Value.ReferencedTableName);
                    }

                    AddColumnMappings(_canonicalTableName, _colValidations);
                    if (!string.IsNullOrEmpty(detailTableName))
                    {
                        AddColumnMappings(canonicalDetailTableName, _colValidationsDetail);
                    }

                    InitializeColumnMappings(ForeignKeys);
                    InitializeColumnMappings(DetailForeignKeys);
                    // Generate the model using the proper technology
                    ItemTemplateUtilities.GenerateEntityFrameworkModel(project, vsProj, _connection, _selectedModel, tables.ToList(), _projectPath,
                                                                       _currentEntityFrameworkVersion, _language, ColumnMappings, ref TablesIncludedInModel);

                    // Generate screens for the selected table.
                    _hasDataGridDateColumn = false;
                    Dictionary <string, Column> Columns       = _columns;
                    Dictionary <string, Column> DetailColumns = _detailColumns;
                    _canonicalTableName      = ItemTemplateUtilities.GetCanonicalIdentifier(_selectedEntity);
                    detailTableName          = _detailEntity;
                    canonicalDetailTableName = ItemTemplateUtilities.GetCanonicalIdentifier(detailTableName);
                    if (!TablesIncludedInModel.ContainsKey(_selectedEntity))
                    {
                        SendToGeneralOutputWindow(string.Format("Skipping generation of screen for table '{0}' because it does not have primary key.", _selectedEntity));
                        return;
                    }

                    if ((_GuiType == GuiType.MasterDetail) && !TablesIncludedInModel.ContainsKey(_detailEntity))
                    {
                        // If Detail table does not have PK, then you cannot edit details, "degrade" layout from Master Detail to Individual Controls.
                        _GuiType = GuiType.IndividualControls;
                        SendToGeneralOutputWindow(string.Format("Degrading layout for table '{0}' from master detail to single controls (because detail table '{1}' does not have primary key).",
                                                                _selectedEntity, _detailEntity));
                    }

                    // Create the strategy
                    StrategyConfig config = new StrategyConfig(sw, _canonicalTableName, Columns, DetailColumns, _dataAccessTechnology, _GuiType, _language,
                                                               _colValidations != null, _colValidations, DetailValidationColumns, ItemTemplateUtilities.ConnectionStringWithIncludedPassword(_connection),
                                                               _connectionString, _selectedEntity, _detailEntity, _constraintName, ForeignKeys, DetailForeignKeys);
                    WindowsFormsCodeGeneratorStrategy Strategy = WindowsFormsCodeGeneratorStrategy.GetInstance(config);
                    strategies.Add(_selectedEntity, Strategy);
                    if (!_hasDataGridDateColumn)
                    {
                        ItemTemplateUtilities.EnsureCodeForDateTimeGridColumn(vsProj, Columns, DetailColumns, _language, _projectPath, _projectNamespace);
                    }

                    // Add new form to project.
                    frmName = string.Format("frm{0}", _canonicalTableName);
                    string frmDesignerName = string.Format("frm{0}.designer", _canonicalTableName);
                    ItemTemplateUtilities.AddNewForm(project, frmName, _projectPath, _projectNamespace, _language);

                    // Now generated the bindings & custom code
                    List <string> formNames  = new List <string>();
                    List <string> tableNames = new List <string>();
                    if (!TablesIncludedInModel.ContainsKey(_selectedEntity))
                    {
                        return;
                    }

                    _canonicalTableName = ItemTemplateUtilities.GetCanonicalIdentifier(_selectedEntity);
                    if (TablesIncludedInModel.ContainsKey(_selectedEntity))
                    {
                        frmName = string.Format("frm{0}", _canonicalTableName);
                        formNames.Add(frmName);
                        tableNames.Add(_selectedEntity);
                        frmDesignerName = string.Format("frm{0}.designer", _canonicalTableName);
                        WindowsFormsCodeGeneratorStrategy strategy = strategies[_selectedEntity];
                        AddBindings(vsProj, strategy, frmName, frmDesignerName);
                    }

                    // This line is a hack to avoid "Project Unavailable" exceptions.
                    project = (Project)((Array)(dte.ActiveSolutionProjects)).GetValue(0);
                    vsProj  = project.Object as VSProject;
                    ItemTemplateUtilities.RemoveTemplateForm(vsProj, _projectPath, _language);
                    ItemTemplateUtilities.FixNamespaces(_language, _projectPath, _projectNamespace, _dataAccessTechnology);
                    // Update the model name with the Conn string name
                    ItemTemplateUtilities.UpdateModelName(project, frmName, _projectPath, _projectNamespace, _connectionName, _language);
                    if (_dataAccessTechnology == DataAccessTechnology.EntityFramework5)
                    {
                        string formFile = Path.Combine(_projectPath, _language == LanguageGenerator.CSharp ? string.Format("{0}.cs", frmName) : string.Format("{0}.vb", frmName));
                        if (File.Exists(formFile))
                        {
                            string contents = "";
                            contents = File.ReadAllText(formFile);
                            string strToReplace   = string.Format("ObjectResult<{0}> _entities = ctx.{0}.Execute(MergeOption.AppendOnly);", _selectedEntity);
                            string strReplaceWith = string.Format("var _entities = ctx.{0}.ToList<{0}>();", _selectedEntity);
                            contents = contents.Replace(strToReplace, strReplaceWith);
                            File.WriteAllText(formFile, contents);
                        }
                    }

                    SendToGeneralOutputWindow("Building Solution...");
                    project.DTE.Solution.SolutionBuild.Build(true);
                    Settings.Default.WinFormsWizardConnection = _connectionName;
                    Settings.Default.Save();
                    SendToGeneralOutputWindow("Finished item generation.");
                }
                catch (WizardException e)
                {
                    SendToGeneralOutputWindow(string.Format("An error ocurred: {0}\n\n{1}", e.Message, e.StackTrace));
                }
#else
                throw new NotImplementedException();
#endif
            }
            else
            {
                vsProj = project.Object as VSProject;
                ItemTemplateUtilities.RemoveTemplateForm(vsProj, _projectPath, _language);
            }
        }
 internal VBTypedDatasetDataGridStrategy(StrategyConfig config)
     : base(config)
 {
 }
Пример #20
0
 public Stockpolate(StrategyConfig config)
     : base(config)
 {
 }
Пример #21
0
        public override void ProjectFinishedGenerating(Project project)
        {
#if NET_40_OR_GREATER
            var vsProj     = project.Object as VSProject;
            var tables     = new SortedSet <string>();
            var strategies = new Dictionary <string, WindowsFormsCodeGeneratorStrategy>();
            if (vsProj == null)
            {
                return;
            }

            vsProj.References.Add("MySql.Data");
            project.DTE.SuppressUI = true;
            vsProj.Project.Save();

            bool found = false;
            foreach (Reference reference in vsProj.References)
            {
                if (reference.Name.IndexOf("MySql.Data", StringComparison.CurrentCultureIgnoreCase) >= 0 && !String.IsNullOrEmpty(reference.Path))
                {
                    found = true;
                    break;
                }
            }

            if (!found)
            {
                var infoResult = InfoDialog.ShowDialog(
                    InfoDialogProperties.GetOkCancelDialogProperties(
                        InfoDialog.InfoType.Warning,
                        Resources.MySqlDataProviderPackage_ConnectorNetNotFoundError,
                        @"To use it you must download and install the MySQL Connector/Net package from http://dev.mysql.com/downloads/connector/net/",
                        Resources.MySqlDataProviderPackage_ClickOkOrCancel));
                if (infoResult.DialogResult == DialogResult.OK)
                {
                    ProcessStartInfo browserInfo = new ProcessStartInfo("http://dev.mysql.com/downloads/connector/net/");
                    Process.Start(browserInfo);
                }
            }

            try
            {
                foreach (DbTables t in WizardForm.SelectedTables)
                {
                    AdvancedWizardForm crud = WizardForm.CrudConfiguration[t.Name];
                    // Ensure all model exists, even if user didn't went through validation pages.
                    // So metadata for table used in FKs is already loaded.
                    crud.GenerateModels();
                    string detailTableName          = crud.DetailTableName;
                    string canonicalTableName       = GetCanonicalIdentifier(crud.TableName);
                    string canonicalDetailTableName = GetCanonicalIdentifier(detailTableName);
                    // Gather all the tables
                    tables.Add(crud.TableName);
                    if (!string.IsNullOrEmpty(detailTableName))
                    {
                        tables.Add(detailTableName);
                    }
                    foreach (KeyValuePair <string, ForeignKeyColumnInfo> kvp2 in crud.ForeignKeys)
                    {
                        tables.Add(kvp2.Value.ReferencedTableName);
                    }
                    foreach (KeyValuePair <string, ForeignKeyColumnInfo> kvp2 in crud.DetailForeignKeys)
                    {
                        tables.Add(kvp2.Value.ReferencedTableName);
                    }

                    AddColumnMappings(canonicalTableName, crud.ValidationColumns);
                    if (!string.IsNullOrEmpty(detailTableName))
                    {
                        AddColumnMappings(canonicalDetailTableName, crud.ValidationColumnsDetail);
                    }

                    InitializeColumnMappings(crud.ForeignKeys);
                    InitializeColumnMappings(crud.DetailForeignKeys);
                }

                // Generate the model using the proper technology
                if (WizardForm.DataAccessTechnology == DataAccessTechnology.EntityFramework5 ||
                    WizardForm.DataAccessTechnology == DataAccessTechnology.EntityFramework6)
                {
                    if (WizardForm.DataAccessTechnology == DataAccessTechnology.EntityFramework5)
                    {
                        CurrentEntityFrameworkVersion = ENTITY_FRAMEWORK_VERSION_5;
                    }
                    else
                    {
                        CurrentEntityFrameworkVersion = ENTITY_FRAMEWORK_VERSION_6;
                    }

                    AddNugetPackage(vsProj, ENTITY_FRAMEWORK_PCK_NAME, CurrentEntityFrameworkVersion, true);
                    GenerateEntityFrameworkModel(project, vsProj, WizardForm.Connection, "Model1", tables.ToList(), ProjectPath);
                }
                else if (WizardForm.DataAccessTechnology == DataAccessTechnology.TypedDataSet)
                {
                    PopulateColumnMappingsForTypedDataSet();
                    GenerateTypedDataSetModel(vsProj, WizardForm.Connection, tables.ToList());
                }

                try
                {
                    _hasDataGridDateColumn = false;
                    // Start a loop here, to generate screens for all the selected tables.
                    for (int i = 0; i < WizardForm.SelectedTables.Count; i++)
                    {
                        AdvancedWizardForm          crud          = WizardForm.CrudConfiguration[WizardForm.SelectedTables[i].Name];
                        Dictionary <string, Column> columns       = crud.Columns;
                        Dictionary <string, Column> detailColumns = crud.DetailColumns;
                        string canonicalTableName = GetCanonicalIdentifier(crud.TableName);
                        string detailTableName    = crud.DetailTableName;
                        //string canonicalDetailTableName = GetCanonicalIdentifier(detailTableName);

                        if (!TablesIncludedInModel.ContainsKey(crud.TableName))
                        {
                            SendToGeneralOutputWindow(string.Format("Skipping generation of screen for table '{0}' because it does not have primary key.", crud.TableName));
                            continue;
                        }

                        if ((crud.GuiType == GuiType.MasterDetail) && !TablesIncludedInModel.ContainsKey(crud.DetailTableName))
                        {
                            // If Detail table does not have PK, then you cannot edit details, "degrade" layout from Master Detail to Individual Controls.
                            crud.GuiType = GuiType.IndividualControls;
                            SendToGeneralOutputWindow(string.Format(
                                                          "Degrading layout for table '{0}' from master detail to single controls (because detail table '{1}' does not have primary key).",
                                                          crud.TableName, crud.DetailTableName));
                        }

                        // Create the strategy
                        StrategyConfig config = new StrategyConfig(_sw, canonicalTableName, columns, detailColumns,
                                                                   WizardForm.DataAccessTechnology, crud.GuiType, Language,
                                                                   crud.ValidationsEnabled, crud.ValidationColumns, crud.ValidationColumnsDetail,
                                                                   WizardForm.ConnectionStringWithIncludedPassword, WizardForm.ConnectionString, crud.TableName,
                                                                   detailTableName, crud.ConstraintName, crud.ForeignKeys, crud.DetailForeignKeys);
                        WindowsFormsCodeGeneratorStrategy strategy = WindowsFormsCodeGeneratorStrategy.GetInstance(config);
                        strategies.Add(WizardForm.SelectedTables[i].Name, strategy);

                        if (!_hasDataGridDateColumn)
                        {
                            EnsureCodeForDateTimeGridColumn(vsProj, columns, detailColumns);
                        }

                        string frmName = string.Format("frm{0}", canonicalTableName);
                        //string frmDesignerName = string.Format("frm{0}.designer", canonicalTableName);
                        // Add new form to project.
                        AddNewForm(project, frmName, strategy);
                    }
                }
                catch (WizardException e)
                {
                    SendToGeneralOutputWindow(string.Format("An error ocurred: {0}\n\n{1}", e.Message, e.StackTrace));
                }

                // Now generated the bindings & custom code
                List <string> formNames  = new List <string>();
                List <string> tableNames = new List <string>();
                for (int i = 0; i < WizardForm.SelectedTables.Count; i++)
                {
                    AdvancedWizardForm crud = WizardForm.CrudConfiguration[WizardForm.SelectedTables[i].Name];
                    string             canonicalTableName = GetCanonicalIdentifier(crud.TableName);
                    if (!TablesIncludedInModel.ContainsKey(crud.TableName))
                    {
                        continue;
                    }

                    string frmName = string.Format("frm{0}", canonicalTableName);
                    formNames.Add(frmName);
                    tableNames.Add(crud.TableName);
                    string frmDesignerName = string.Format("frm{0}.designer", canonicalTableName);
                    WindowsFormsCodeGeneratorStrategy strategy = strategies[WizardForm.SelectedTables[i].Name];
                    AddBindings(vsProj, strategy, frmName, frmDesignerName);
                }
                // Add menu entries for each form
                AddMenuEntries(vsProj, formNames, tableNames);

                if (WizardForm.DataAccessTechnology == DataAccessTechnology.EntityFramework6)
                {
                    // Change target version to 4.5 (only version currently supported for EF6).
                    project.Properties.Item("TargetFrameworkMoniker").Value = ".NETFramework,Version=v4.5";
                    // This line is a hack to avoid "Project Unavailable" exceptions.
                    project = (Project)((Array)(Dte.ActiveSolutionProjects)).GetValue(0);
                    vsProj  = project.Object as VSProject;
                }

                RemoveTemplateForm(vsProj);

                FixNamespaces();

                SendToGeneralOutputWindow("Building Solution...");
                project.DTE.Solution.SolutionBuild.Build(true);

                Settings.Default.WinFormsWizardConnection = WizardForm.ConnectionName;
                Settings.Default.Save();

                SendToGeneralOutputWindow("Finished project generation.");

                if (project.DTE.Solution.SolutionBuild.LastBuildInfo > 0)
                {
                    InfoDialog.ShowDialog(InfoDialogProperties.GetErrorDialogProperties(Resources.ErrorTitle, Resources.WindowsFormsWizard_SolutionBuildFailed));
                }

                WizardForm.Dispose();
            }
            catch (WizardException e)
            {
                SendToGeneralOutputWindow(string.Format("An error ocurred: {0}\n\n{1}", e.Message, e.StackTrace));
            }
#else
            throw new NotImplementedException();
#endif
        }
Пример #22
0
 internal VBDataGridStrategy(StrategyConfig config)
     : base(config)
 {
 }
Пример #23
0
 protected override void OnSetConfig(StrategyConfig config)
 {
     _arg.Path = config["path"].StringValue;
 }
        /// <summary>
        /// Factory method to get a concrete implementation.
        /// </summary>
        /// <param name="tech"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static WindowsFormsCodeGeneratorStrategy GetInstance(StrategyConfig config)
        {
            WindowsFormsCodeGeneratorStrategy strategy = null;
            GuiType type = config.Type;

            switch (type)
            {
            case GuiType.IndividualControls:
                if (config.Language == LanguageGenerator.CSharp)
                {
                    if (config.DataAccessTech == DataAccessTechnology.TypedDataSet)
                    {
                        strategy = new CSharpTypedDatasetIndividualControlsStrategy(config);
                    }
                    else
                    {
                        // Entity Framework
                        strategy = new CSharpEntityFrameworkIndividualControlsStrategy(config);
                    }
                }
                else
                {
                    if (config.DataAccessTech == DataAccessTechnology.TypedDataSet)
                    {
                        strategy = new VBTypedDatasetIndividualControlsStrategy(config);
                    }
                    else
                    {
                        strategy = new VBEntityFrameworkIndividualControlsStrategy(config);
                    }
                }
                break;

            case GuiType.Grid:
                if (config.Language == LanguageGenerator.CSharp)
                {
                    if (config.DataAccessTech == DataAccessTechnology.TypedDataSet)
                    {
                        strategy = new CSharpTypedDatasetDataGridStrategy(config);
                    }
                    else
                    {
                        strategy = new CSharpEntityFrameworkDataGridStrategy(config);
                    }
                }
                else
                {
                    if (config.DataAccessTech == DataAccessTechnology.TypedDataSet)
                    {
                        strategy = new VBTypedDatasetDataGridStrategy(config);
                    }
                    else
                    {
                        strategy = new VBEntityFrameworkDataGridStrategy(config);
                    }
                }
                break;

            case GuiType.MasterDetail:
                if (config.Language == LanguageGenerator.CSharp)
                {
                    if (config.DataAccessTech == DataAccessTechnology.TypedDataSet)
                    {
                        strategy = new CSharpTypedDatasetMasterDetailStrategy(config);
                    }
                    else
                    {
                        strategy = new CSharpEntityFrameworkMasterDetailStrategy(config);
                    }
                }
                else
                {
                    if (config.DataAccessTech == DataAccessTechnology.TypedDataSet)
                    {
                        strategy = new VBTypedDatasetMasterDetailStrategy(config);
                    }
                    else
                    {
                        strategy = new VBEntityFrameworkMasterDetailStrategy(config);
                    }
                }
                break;
            }
            return(strategy);
        }
Пример #25
0
 internal VBTypedDatasetMasterDetailStrategy(StrategyConfig config)
     : base(config)
 {
 }
 internal CSharpIndividualControlsStrategy(StrategyConfig config)
     : base(config)
 {
 }
Пример #27
0
 internal CSharpMasterDetailStrategy(StrategyConfig config)
     : base(config)
 {
 }
Пример #28
0
 internal CSharpEntityFrameworkDataGridStrategy(StrategyConfig config)
     : base(config)
 {
 }
 internal VBEntityFrameworkMasterDetailStrategy(StrategyConfig config)
     : base(config)
 {
 }