コード例 #1
0
        /// <summary>
        /// Gets the type name as is displayed in dialogs.
        /// </summary>
        /// <param name="typeName">A MySQL type name.</param>
        /// <param name="isValid">Flag indicating whether the supplied type name is a valid one.</param>
        /// <returns>The type name as is displayed in dialogs.</returns>
        public static string GetDisplayTypeName(string typeName, out bool isValid)
        {
            if (string.IsNullOrEmpty(typeName))
            {
                isValid = true;
                return(string.Empty);
            }

            var mySqlDisplayType = DataTypesList.FirstOrDefault(mType => mType.IsBaseType && mType.Name.Equals(typeName, StringComparison.InvariantCultureIgnoreCase));

            isValid = mySqlDisplayType != null;
            return(isValid
        ? mySqlDisplayType.Name
        : CultureInfo.CurrentCulture.TextInfo.ToTitleCase(typeName));
        }
コード例 #2
0
        /// <summary>
        /// Loads the data.
        /// </summary>
        /// <exception cref="InvalidOperationException">Data Types List cannot be null. Fatal error</exception>
        private void LoadData()
        {
            // Get target lookup
            TargetLookup = Service.GetDatasetTargets();

            string saveSelectedDataSetTypeName = null;

            if (SelectedDataType != null)
            {
                saveSelectedDataSetTypeName = SelectedDataType.DataTypeName;
            }

            DataTypesList = GetInstalledDatasets();

            var toReconcile = DataTypesList.Where(item => item.RecordsList.Any(d => !d.Entry.IsFinished)).SelectMany(s => s.RecordsList).ToList();

            foreach (var item in toReconcile.Where(item => !item.Entry.IsFinished).Select(item => item.Entry).ToList())
            {
                DeleteItem(item);
            }

            // try to return to the same dataset the user clicked previously, or select item 0
            if (saveSelectedDataSetTypeName != null)
            {
                var ds = DataTypesList.FirstOrDefault(a => a.DataTypeName == saveSelectedDataSetTypeName);
                if (ds != null)
                {
                    SelectedDataType = ds;
                    return;
                }
            }

            if (DataTypesList == null)
            {
                throw new InvalidOperationException("Data Types List cannot be null. Fatal error");
            }
            SelectedDataType = DataTypesList[0];
        }
コード例 #3
0
        /// <summary>
        /// Polls the entity status.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="reset">if set to <c>true</c> [reset].</param>
        /// <param name="terminate">if set to <c>true</c> [terminate].</param>
        private void PollEntityStatus(Dataset item, bool reset, bool terminate = false)
        {
            EntityPoller <Dataset> poller = null;

            if (reset)
            {
                poller = new EntityPoller <Dataset>(o => o.Id == item.Id)
                {
                    ActiveCycle          = 200,   //milliseconds
                    IdleCycle            = 30000, //30 seconds
                    RetryAttempts        = 5,
                    RetryInitialInterval = 20000  //20 seconds
                };

                poller.EntityReceived += entity =>
                {
                    var datasetType = DataTypesList.OfType <DataTypeModel>().FirstOrDefault(
                        e => e.DataTypeName.ToLower() == item.ContentType.Name.ToLower());

                    if (datasetType != null && datasetType.RecordsList.Any(dr => dr.Entry.Id == entity.Id))
                    {
                        var dsItem = datasetType.RecordsList.FirstOrDefault(dr => dr.Entry.Id == entity.Id);

                        if (dsItem != null)
                        {
                            dsItem.Entry = entity;
                        }
                    }
                };
                poller.Error += exception => Events.GetEvent <ErrorNotificationEvent>().Publish(exception);
                poller.Start();
            }

            if (terminate && poller != null)
            {
                poller.Stop();
            }
        }
コード例 #4
0
 /// <summary>
 /// Gets a corresponding <see cref="MySqlDisplayDataType"/> from the given <see cref="MySqlDataType"/>.
 /// </summary>
 /// <param name="fromMySqlDataType">A <see cref="MySqlDataType"/> instance.</param>
 /// <returns>A corresponding <see cref="MySqlDisplayDataType"/>.</returns>
 public static MySqlDisplayDataType GetDisplayType(MySqlDataType fromMySqlDataType)
 {
     return(fromMySqlDataType == null ? null : DataTypesList.FirstOrDefault(dispType => dispType.Name.Equals(fromMySqlDataType.TypeName, StringComparison.InvariantCultureIgnoreCase)));
 }
コード例 #5
0
        /// <summary>
        /// Deletes the item.
        /// </summary>
        /// <param name="entry">The entry.</param>
        /// <param name="showDeletePrompt">if set to <c>true</c> [show delete prompt].</param>
        private void DeleteItem(Dataset entry, bool showDeletePrompt = true)
        {
            try
            {
                if (TargetLookup == null || !TargetLookup.Any())
                {
                    return;
                }

                if (TargetLookup[entry.ContentType.Name] == null)
                {
                    return;
                }

                if (!TargetLookup[entry.ContentType.Name].IsCustom && string.IsNullOrEmpty(TargetLookup[entry.ContentType.Name].ClrType))
                {
                    return;
                }

                if (showDeletePrompt)
                {
                    var attachedWebsites = Service.GetWebsitesForDataset(entry.Id);
                    if (attachedWebsites.Any())
                    {
                        string websiteNames   = string.Join(",", attachedWebsites);
                        var    warningMessage = string.Format("Unable to delete dataset \"{0}\" because it is associated with the following websites:", entry.Name);
                        warningMessage += string.Format("{0}{0}Associated Websites: {1}", Environment.NewLine, websiteNames);

                        MessageBox.Show(warningMessage, "Dataset Deletion Warning", MessageBoxButton.OK);
                        return;
                    }

                    //  Show blanket warning against dataset deletion.  But only show warning if this Dataset is Finished.
                    if (entry.IsFinished)
                    {
                        var warningMessage = string.Format("Dataset \"{0}\" will be deleted.  Are you sure you want to delete this data set?", entry.Name);
                        var result         = MessageBox.Show(warningMessage, "Dataset Deletion Warning", MessageBoxButton.YesNo);

                        if (result == MessageBoxResult.No ||
                            result == MessageBoxResult.Cancel ||
                            result == MessageBoxResult.None)
                        {
                            return;
                        }
                    }
                }

                if (DataTypesList == null)
                {
                    return;
                }

                foreach (var dataTypeModel in DataTypesList.Where(dataTypeModel => dataTypeModel.RecordsList.Any(ds => ds.Entry.Id == entry.Id)).ToList())
                {
                    dataTypeModel.RecordsList.ToList().RemoveAll(ds => ds.Entry.Id != entry.Id);
                }

                if (SelectedDataType != null)
                {
                    var item = SelectedDataType.RecordsList.FirstOrDefault(model => model.Entry.Id == entry.Id);
                    if (item != null)
                    {
                        SelectedDataType.RecordsList.Remove(item);
                    }
                }

                using (var session = SessionProvider.SessionFactory.OpenSession())
                {
                    using (var trans = session.BeginTransaction())
                    {
                        session.Evict(entry);

                        var target = TargetLookup[entry.ContentType.Name];

                        #region Delete queries
                        string targetDeleteQuery;

                        var tableName = target.IsCustom ? entry.ContentType.DbSchemaName : entry.ContentType.ClrType != null?Type.GetType(entry.ContentType.ClrType).EntityTableName() : string.Empty;

                        if (string.IsNullOrEmpty(tableName))
                        {
                            return;
                        }

                        //Disable Dataset Constraint
                        //var disableConstraint = string.Format("ALTER TABLE  {0} NOCHECK CONSTRAINT FK_TARGETS_{1}_DATASETS", tableName, tableName.Replace("Targets_", ""));
                        var disableConstraint = string.Format("ALTER TABLE  {0} NOCHECK CONSTRAINT ALL;", tableName /*, tableName.Replace("Targets_", "")*/);
                        session.CreateSQLQuery(disableConstraint)
                        .SetTimeout(25000)
                        .ExecuteUpdate();


                        // Delete Transactional record
                        var transactionDelete = string.Format("delete from DatasetTransactionRecord ct where ct.Dataset.Id = {0}", entry.Id);
                        session.CreateQuery(transactionDelete)
                        .SetTimeout(25000)
                        .ExecuteUpdate();

                        //Delete websites with no website_id but have reference to this dataset being deleted
                        var orphanWesbite = string.Format("delete from Websites_WebsiteDatasets where Website_Id IS NULL and Dataset_Id = {0}", entry.Id);
                        session.CreateSQLQuery(orphanWesbite)
                        .SetTimeout(25000)
                        .ExecuteUpdate();

                        // finally delete content item record.
                        var importDelete = string.Format("delete from Dataset c where c.Id = {0}", entry.Id);
                        session.CreateQuery(importDelete)
                        .SetTimeout(25000)
                        .ExecuteUpdate();

                        #endregion

                        if (TargetDeletionVisitors != null)
                        {
                            TargetDeletionVisitors = TargetDeletionVisitors.OrderBy(v => v.Order).ToList();

                            var options = new VisitorOptions()
                            {
                                DataProvider = this.SessionProvider,
                                Logger       = this.Logger
                            };
                            var factory = new TaskFactory(new MonahrqTaskScheduler(2));
                            var token   = new CancellationTokenSource();

                            Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
                                                                     new Action(() => ListExtensions.ForEach(TargetDeletionVisitors, visitor => factory.StartNew(() => entry.Accept(visitor, options), token.Token))));
                        }

                        trans.Commit();
                    }
                }
            }
            catch (Exception ex)
            {
                Events.GetEvent <ErrorNotificationEvent>().Publish(ex);
            }
        }