Ejemplo n.º 1
0
        public static FinishClass GetOccurenceClass(this FinishEnum finishEnum, int occurs)
        {
            if (finishEnum == FinishEnum.AfterOccurs)
            {
                return(new FinishAfterOccurs(occurs));
            }

            throw new InvalidCastException("Incorrect call, use other extension");
        }
Ejemplo n.º 2
0
        public static FinishClass GetOccurenceClass(this FinishEnum finishEnum)
        {
            if (finishEnum == FinishEnum.NeverFinish)
            {
                return(new NeverFinish());
            }

            throw new InvalidCastException("Incorrect call, use other extension");
        }
Ejemplo n.º 3
0
        public static FinishClass GetOccurenceClass(this FinishEnum finishEnum, DateTime endDate)
        {
            if (finishEnum == FinishEnum.AfterDate)
            {
                return(new FinishAfterDate(endDate));
            }

            throw new InvalidCastException("Incorrect call, use other extension");
        }
Ejemplo n.º 4
0
        public override CalendarEvent ToEntity()
        {
            FinishClass finishClass = new NeverFinish();

            // TODO: HIGH : Yes, it's ugly :) I think I would:
            // 1) put it outside of the model - factory perhaps
            // 2) have the factory accept a mapping of enum -> class / use Di container to register mapping using reflection on app start (implementations would have some interface - we search for implementation with name matching enum)
            // 3) write good tests that cover this and implementation that don't match any enum - this way noone would add an implementation without adding an enum / remove implementation and leave enum / change names independently.
            // This looks very ugly and is against SOLID but can't think of anything better, there is way to assign logic to Enum value in Java, but can't think of anything better in C#
            switch (FinishEnum)
            {
            case FinishEnum.AfterDate:
                if (FinishDate != null)
                {
                    finishClass = FinishEnum.GetOccurenceClass(FinishDate.Value);
                }
                break;

            case FinishEnum.AfterOccurs:
                if (OccursAmount != null)
                {
                    finishClass = FinishEnum.GetOccurenceClass(OccursAmount.Value);
                }
                break;

            case FinishEnum.NeverFinish:
                finishClass = FinishEnum.GetOccurenceClass();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(new EventSeries
            {
                Title = Title,
                Description = Description,
                Start = Start,
                Duration = TimeSpan.Parse(Duration) == TimeSpan.Zero
                    ? EventDuration.FullDayDuration()
                    : EventDuration.TimeSpanDuration(TimeSpan.Parse(Duration)),
                MailAddresses = MailAddresses,
                RepeatPeriod = RepeatPeriod,
                Finish = finishClass
            });
        }