-
Notifications
You must be signed in to change notification settings - Fork 1
/
CommandLineArgs.java
76 lines (67 loc) · 3.05 KB
/
CommandLineArgs.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package edu.virginia.cs.threelayer.presentation;
import edu.virginia.cs.threelayer.*;
import edu.virginia.cs.threelayer.business.BestSellersService;
public class CommandLineArgs {
public static void main(String [] args) {
if (args.length < 1) {
throw new IllegalArgumentException(getBadArgumentsMessage());
}
ListName listName = getListNameFromArgs(args);
BestSellersService bestSellersService = new BestSellersService();
BestSellersList bestSellersList = bestSellersService.getCurrentBestSellerList(listName);
System.out.println("Best Sellers List:");
for (int rank = 1; rank <= bestSellersList.getMaxRank(); rank++) {
Book book = bestSellersList.getBookByRank(rank);
System.out.printf("\t%2d. %s - by %s%n", rank, book.getTitle(), book.getAuthorName());
}
Book longestRunning = bestSellersService.getLongestCurrentBestSeller(listName);
System.out.println("\nLongest Running Book:");
System.out.printf("\t%s - by %s\n\tIt has been on the BestSellers List for %d weeks",
longestRunning.getTitle(), longestRunning.getAuthorName(), longestRunning.getWeeksOnList());
}
private static ListName getListNameFromArgs(String[] args) {
String flagsToken = args[0];
if (flagsToken.length() != 3 || !flagsToken.startsWith("-")) {
throw new IllegalArgumentException(getBadArgumentsMessage());
}
if (flagsToken.contains("f")) {
return getFictionListName(flagsToken);
} else if (flagsToken.contains("n")) {
return getNonFictionListName(flagsToken);
} else {
throw new IllegalArgumentException(getBadArgumentsMessage());
}
}
private static ListName getFictionListName(String flagsToken) {
if (flagsToken.contains("e")) {
return ListName.EBOOK_FICTION;
} else if (flagsToken.contains("h")) {
return ListName.HARDCOVER_FICTION;
} else if (flagsToken.contains("c")) {
return ListName.COMBINED_FICTION;
} else throw new IllegalArgumentException(getBadArgumentsMessage());
}
private static ListName getNonFictionListName(String flagsToken) {
if (flagsToken.contains("e")) {
return ListName.EBOOK_NONFICTION;
} else if (flagsToken.contains("h")) {
return ListName.HARDCOVER_NONFICTION;
} else if (flagsToken.contains("c")) {
return ListName.COMBINED_NONFICTION;
} else throw new IllegalArgumentException(getBadArgumentsMessage());
}
private static String getBadArgumentsMessage() {
return """
Bad Arguments :
- Exactly two flags are required (-nc):
Fiction/NonFiction:
[-f] - Fiction
[-n] - Non-Fiction
Format:
[-e] - E-Book
[-h] - Hardback
[-c] - Combined
Example: -fe - Fiction E-Book
""";
}
}