Esempio n. 1
0
        public FailureProcessingResult ProcessFailures(FailuresAccessor data)
        {
            if (isDoorFail)
            {
                isDoorFail = false;
                return(FailureProcessingResult.ProceedWithRollBack);
            }
            else
            {
                IList <FailureResolutionType>  resolutionTypeList = new List <FailureResolutionType>();
                IList <FailureMessageAccessor> failList           = new List <FailureMessageAccessor>();
                // Inside event handler, get all warnings
                failList = data.GetFailureMessages();


                foreach (FailureMessageAccessor failure in failList)
                {
                    FailureDefinitionId failId     = failure.GetFailureDefinitionId();
                    string          failureMessage = failure.GetDescriptionText();
                    FailureSeverity severity       = failure.GetSeverity();
                    resolutionTypeList = data.GetAttemptedResolutionTypes(failure);

                    foreach (ElementId id in failure.GetFailingElementIds())
                    {
                        int elementId = id.IntegerValue;
                    }
                }

                return(FailureProcessingResult.Continue);
            }
        }
        FailureProcessingResult FixFailures(FailuresAccessor failuresAccessor, IEnumerable <FailureDefinitionId> failureIds)
        {
            foreach (var failureId in failureIds)
            {
                int solvedErrors = 0;

                foreach (var error in failuresAccessor.GetFailureMessages().Where(x => x.GetFailureDefinitionId() == failureId))
                {
                    if (!failuresAccessor.IsFailureResolutionPermitted(error))
                    {
                        continue;
                    }

                    // Don't try to fix two times same issue
                    if (failuresAccessor.GetAttemptedResolutionTypes(error).Any())
                    {
                        continue;
                    }

                    AddRuntimeMessage(error, true);

                    failuresAccessor.ResolveFailure(error);
                    solvedErrors++;
                }

                if (solvedErrors > 0)
                {
                    return(FailureProcessingResult.ProceedWithCommit);
                }
            }

            return(FailureProcessingResult.Continue);
        }
        static private bool GetFailureResolutionType(FailuresAccessor failuresAccessor, FailureMessageAccessor failure, ref FailureResolutionType type)
        {
            IList <FailureResolutionType> resolutionTypeList = failuresAccessor.GetAttemptedResolutionTypes(failure);

            if (!resolutionTypeList.Contains(FailureResolutionType.Default) && failure.HasResolutionOfType(FailureResolutionType.Default))
            {
                type = FailureResolutionType.Default;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.CreateElements) && failure.HasResolutionOfType(FailureResolutionType.CreateElements))
            {
                type = FailureResolutionType.CreateElements;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.DeleteElements) && failure.HasResolutionOfType(FailureResolutionType.DeleteElements))
            {
                type = FailureResolutionType.DeleteElements;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.SkipElements) && failure.HasResolutionOfType(FailureResolutionType.SkipElements))
            {
                type = FailureResolutionType.SkipElements;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.MoveElements) && failure.HasResolutionOfType(FailureResolutionType.MoveElements))
            {
                type = FailureResolutionType.MoveElements;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.FixElements) && failure.HasResolutionOfType(FailureResolutionType.FixElements))
            {
                type = FailureResolutionType.FixElements;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.DetachElements) && failure.HasResolutionOfType(FailureResolutionType.DetachElements))
            {
                type = FailureResolutionType.DetachElements;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.QuitEditMode) && failure.HasResolutionOfType(FailureResolutionType.QuitEditMode))
            {
                type = FailureResolutionType.QuitEditMode;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.UnlockConstraints) && failure.HasResolutionOfType(FailureResolutionType.UnlockConstraints))
            {
                type = FailureResolutionType.UnlockConstraints;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.SetValue) && failure.HasResolutionOfType(FailureResolutionType.SetValue))
            {
                type = FailureResolutionType.SetValue;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.SaveDocument) && failure.HasResolutionOfType(FailureResolutionType.SaveDocument))
            {
                type = FailureResolutionType.SaveDocument;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.ShowElements) && failure.HasResolutionOfType(FailureResolutionType.ShowElements))
            {
                type = FailureResolutionType.ShowElements;
                return(true);
            }
            else if (!resolutionTypeList.Contains(FailureResolutionType.Others) && failure.HasResolutionOfType(FailureResolutionType.Others))
            {
                type = FailureResolutionType.Others;
                return(true);
            }

            return(false);
        }