Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Diagnostics;
- namespace BashSoft
- {
- using SimpleJudge;
- public static class CommandInterpreter
- {
- public static void IntepredCommand(string input)
- {
- string[] data = input.Split(' ');
- string command = data[0];
- switch (command)
- {
- case "open":
- TryOpenFile(input, data);
- break;
- case "mkdir":
- TryCreateDirectory(input, data);
- break;
- case "ls":
- TryTraverseFolders(input, data);
- break;
- case "cmp":
- TryComparеFiles(input, data);
- break;
- case "cdRel":
- TryChangePathRelatively(input, data);
- break;
- case "cdAbs":
- TryChangePathAbsolute(input, data);
- break;
- case "readDb":
- TryReadDatabaseFromFile(input, data);
- break;
- case "help":
- TryGetHelp(); break;
- case "show":
- TryShowWantedData(input, data);
- break;
- case "filter":
- TryFilterAndTake(input, data);
- break;
- case "order":
- TryOrderAndTake(input, data);
- break;
- // TODO: case "dec0rder": break;
- // TODO: case "download":TryDownloadRequestedFile(input, data); break;
- // TODO: case "downloadAsynch" TryDownloadRequestedFileAsync(input, data); break;
- default:
- DisplayInvalidCommandMessage(input);
- break;
- }
- }
- private static void DisplayInvalidCommandMessage(string input)
- {
- OutputWriter.DisplayException(string.Format(ExceptionMessages.InvalidCommand, input));
- }
- // order courseName ascending/descending take 3/26/52/all
- private static void TryOrderAndTake(string input, string[] data)
- {
- if (data.Length == 5)
- {
- string courseName = data[1];
- string comparison = data[2].ToLower();
- string takeCommand = data[3].ToLower();
- string takeQuantity = data[4].ToLower();
- TryParseParametersForOrderAndTake(takeCommand, takeQuantity, courseName, comparison);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- private static void TryParseParametersForOrderAndTake(string takeCommand, string takeQuantity, string courseName, string comparison)
- {
- if (takeCommand == "take")
- {
- if (takeQuantity == "all")
- {
- StudentsRepository.OrderAndTake(courseName, comparison);
- }
- else
- {
- int studentsToTake;
- bool hasParsed = int.TryParse(takeQuantity, out studentsToTake);
- if (hasParsed)
- {
- StudentsRepository.OrderAndTake(courseName, comparison, studentsToTake);
- }
- else
- {
- OutputWriter.DisplayException(ExceptionMessages.InvalidTakeQuantityParameter);
- }
- }
- }
- else
- {
- OutputWriter.DisplayException(ExceptionMessages.InvalidTakeQuantityParameter);
- }
- }
- private static void TryFilterAndTake(string input, string[] data)
- {
- if (data.Length == 5)
- {
- string courseName = data[1];
- string filter = data[2].ToLower();
- string takeCommand = data[3].ToLower();
- string takeQuantity = data[4].ToLower();
- TryParseParametersForFilterAndTake(takeCommand, takeQuantity, courseName, filter);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- private static void TryParseParametersForFilterAndTake(string takeCommand, string takeQuantity, string courseName, string filter)
- {
- if (takeCommand == "take")
- {
- if (takeQuantity == "all")
- {
- StudentsRepository.FilterAndTake(courseName, filter);
- }
- else
- {
- int studentsToTake;
- bool hasParsed = int.TryParse(takeQuantity, out studentsToTake);
- if (hasParsed)
- {
- StudentsRepository.FilterAndTake(courseName, filter, studentsToTake);
- }
- else
- {
- OutputWriter.DisplayException(ExceptionMessages.InvalidTakeQuantityParameter);
- }
- }
- }
- else
- {
- OutputWriter.DisplayException(ExceptionMessages.InvalidTakeQuantityParameter);
- }
- }
- private static void TryShowWantedData(string input, string[] data)
- {
- if (data.Length == 2)
- {
- string courseName = data[1];
- StudentsRepository.GetAllStudentsFromCourse(courseName);
- }
- else if (data.Length == 3)
- {
- string courseName = data[1];
- string userName = data[2];
- StudentsRepository.GetStudentScoresFromCourse(courseName, userName);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- // help
- private static void TryGetHelp()
- {
- OutputWriter.WriteMessageOnNewLine($"{new string('_', 100)}");
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "make directory - mkdir: path "));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "traverse directory - ls: depth "));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "comparing files - cmp: path1 path2"));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "change directory - cdRel: relative path"));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "change directory - cdAbs: absolute path"));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "read students data base - readDb: path"));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "filter {courseName} excelent/average/poor take 2/5/all students - filterExcelent (the output is written on the console)"));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "order students - order {courseName} ascending/descending take 20/10/all (the output is written on the console)"));
- //OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "download file - download: path of file (saved in current directory)"));
- //OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "download file asinchronously - downloadAsynch: path of file (save in the current directory)"));
- OutputWriter.WriteMessageOnNewLine(string.Format("|{0, -98}|", "get help – help"));
- OutputWriter.WriteMessageOnNewLine($"{new string('_', 100)}");
- OutputWriter.WriteEmptyLine();
- }
- private static void TryReadDatabaseFromFile(string input, string[] data)
- {
- if (data.Length == 2)
- {
- string fileName = data[1];
- StudentsRepository.InitializeData(fileName);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- private static void TryChangePathAbsolute(string input, string[] data)
- {
- if (data.Length == 2)
- {
- string absPath = data[1];
- IOManager.ChangeCurrentDirectoryAbsolute(absPath);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- // cdRel relativePath
- private static void TryChangePathRelatively(string input, string[] data)
- {
- if (data.Length == 2)
- {
- string relPath = data[1];
- IOManager.ChangeCurrentDirectoryRelative(relPath);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- // cmp absolutePath1 absolutePath2
- private static void TryComparеFiles(string input, string[] data)
- {
- if (data.Length == 3)
- {
- string firstPath = data[1];
- string secondPath = data[2];
- Tester.CompareContent(firstPath, secondPath);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- private static void TryTraverseFolders(string input, string[] data)
- {
- if (data.Length == 1)
- {
- IOManager.TraverseDirectory(0);
- }
- else if (data.Length == 2)
- {
- int depth;
- bool hasParsed = int.TryParse(data[1], out depth);
- if (hasParsed)
- {
- IOManager.TraverseDirectory(depth);
- }
- else
- {
- OutputWriter.DisplayException(ExceptionMessages.UnableToParseNumber);
- }
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- private static void TryCreateDirectory(string input, string[] data)
- {
- if (data.Length == 2)
- {
- string folderName = data[1];
- IOManager.CreateDirectoryInCurrentFolder(folderName);
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- private static void TryOpenFile(string input, string[] data)
- {
- if (data.Length == 2)
- {
- var fileName = data[1];
- fileName = SessionData.currentPath + "\\" + fileName;
- var process = new Process();
- process.StartInfo = new ProcessStartInfo()
- {
- UseShellExecute = true,
- FileName = fileName,
- };
- process.Start();
- }
- else
- {
- DisplayInvalidCommandMessage(input);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement