Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Work_Item_Management_System.Commands.Base;
- using Work_Item_Management_System.Core.Factories;
- using Work_Item_Management_System.Models.WorkItems.Contracts;
- using Work_Item_Management_System.Core.Contracts;
- using System.Text;
- using System.Runtime.CompilerServices;
- public class FilterCommand : BaseCommand
- {
- public FilterCommand(IFactory factory, IDatabase datebase) : base(factory, datebase) { }
- public override string Execute(IList<string> parameters)
- {
- var filteredWorkItems = new List<IWorkItem>();
- try
- {
- switch (parameters.Count())
- {
- case 0:
- {
- Console.WriteLine("Would you like to see the HELP menu?");
- Console.WriteLine("Yes/No");
- string input = Console.ReadLine();
- if (input.ToLower() == "yes")
- {
- Console.WriteLine(HelpMenu());
- return "Try some of the commands in the help menu";
- }
- else
- {
- filteredWorkItems = this._database.WorkItems.OrderBy(x => x.Title).ToList();
- }
- }
- break;
- case 1:
- {
- if (parameters.ToArray()[0].ToLower() == "size")
- {
- filteredWorkItems = _database.WorkItems.OfType<IStory>().Cast<IWorkItem>().ToList();
- break;
- }
- else if (parameters.ToArray()[0].ToLower() == "title")
- {
- filteredWorkItems = _database.WorkItems.OrderBy(x => x.Title).ToList();
- break;
- }
- else if (parameters.ToArray()[0].ToLower() == "priority")
- {
- filteredWorkItems = this._database.WorkItems.OfType<IIssue>().OrderBy(x => x.Priority).Cast<IWorkItem>().ToList();
- break;
- }
- else if (parameters.ToArray()[0].ToLower() == "severity")
- {
- filteredWorkItems = this._database.WorkItems.OfType<IBug>().OrderBy(x => x.Severity).Cast<IWorkItem>().ToList();
- break;
- }
- else if (parameters.ToArray()[0].ToLower() == "rating")
- {
- filteredWorkItems = this._database.WorkItems.OfType<IFeedback>().OrderBy(x => x.Rating).Cast<IWorkItem>().ToList();
- break;
- }
- else if (parameters.ToArray()[0].ToLower() == "assignee")
- {
- filteredWorkItems = this._database.WorkItems.Where(x => x is IIssue && ((IIssue)x).Owner != null).ToList();
- break;
- }
- else
- {
- filteredWorkItems = this._database.WorkItems.Where(x =>
- {
- return x.Type.Name.ToLower() == parameters.ToArray()[0].ToLower();
- }
- ).OrderBy(x => x.Title).ToList();
- }
- break;
- }
- case 2:
- {
- if (parameters.ToArray()[0].ToLower() == "assignee")
- {
- if (!string.IsNullOrEmpty(parameters.ToArray()[1].ToLower()))
- {
- filteredWorkItems = this._database.WorkItems.Where(
- x => x is IIssue
- && ((IIssue)x).Owner != null
- && ((IIssue)x).Owner.Name.ToLower() == parameters.ToArray()[1].ToLower())
- .ToList();
- }
- }
- else if (parameters.ToArray()[0].ToLower() == "status")
- {
- if (!string.IsNullOrEmpty(parameters.ToArray()[1].ToLower()))
- {
- if (parameters.ToArray()[1].ToLower() == "bug")
- {
- filteredWorkItems = this._database.WorkItems.OfType<IBug>().OrderBy(x => x.Status).Cast<IWorkItem>().ToList();
- }
- if (parameters.ToArray()[1].ToLower() == "feedback")
- {
- filteredWorkItems = this._database.WorkItems.OfType<IFeedback>().OrderBy(x => x.Status).Cast<IWorkItem>().ToList();
- }
- if (parameters.ToArray()[1].ToLower() == "story")
- {
- filteredWorkItems = this._database.WorkItems.OfType<IStory>().OrderBy(x => x.Status).Cast<IWorkItem>().ToList();
- }
- }
- }
- }
- break;
- default: throw new ArgumentNullException("Not a valid input");
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("Not a proper command for filter [property]");
- Console.WriteLine(ex.Message);
- }
- return PrintList(filteredWorkItems);
- }
- public string HelpMenu()
- {
- StringBuilder builder = new StringBuilder();
- builder.AppendLine("You can use one of the following options in order to filter the database");
- builder.AppendLine("filter [title / description / size / severity / rating ] - will sort by property value");
- builder.AppendLine("filter [bug / feedback / story] - will sort the specific workitems type by title");
- builder.AppendLine("filter assignee - will give you the assigned workitems");
- builder.AppendLine("filter assignee [assignee name]- will give you the assigned workitems for a specific member");
- builder.AppendLine("filter status [bug / feedback / story]- will give you the assigned workitems");
- return builder.ToString();
- }
- public string PrintList(IList<IWorkItem> list)
- {
- if (list.Count == 0)
- {
- return "The Database is empty";
- }
- else
- {
- foreach (var workitem in list)
- {
- workitem.PrintColourfulInfo();
- }
- return "WorkItems are filtered";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement