|
|
- /*
- * SD2x Homework #8
- * This class represents the Data Tier in the three-tier architecture.
- * Implement the appropriate methods for this tier below.
- */
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.nio.charset.Charset;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- import java.nio.file.Files;
-
- import java.util.Set;
- import java.util.HashSet;
-
- public class DataTier {
-
- private String fileName; // the name of the file to read
-
- public DataTier(String inputSource) {
- fileName = inputSource;
- }
-
- private boolean isSanitized(String str){
- if(str == null) return false;
- if(str.isEmpty()) return false;
- char start = str.charAt(0);
- char end = str.charAt(str.length() - 1);
- return end != '"' && end != '#' && start != '"';
- }
-
- private String sanitize(String str){
- if(str.isEmpty()) return "";
- String sanitized = str;
- char start = str.charAt(0);
- char end = str.charAt(str.length() - 1);
- if(start == '"') sanitized = str.substring(1,str.length());
- if(end == '#' || end == '"') sanitized = str.substring(0,str.length() - 1);
- if(!isSanitized(sanitized)) sanitized = sanitize(sanitized);
- return sanitized;
-
- }
-
- private Book parseBook(String line){
- String[] items = line.split("\t");
- return new Book(sanitize(items[0]), sanitize(items[1]), Integer.valueOf(items[2]));
- }
-
- public Set<Book> getAllBooks(){
- Path file = Paths.get(fileName);
- Set<Book> books = new HashSet<Book>();
- Charset charset = Charset.forName("US-ASCII");
- try (BufferedReader reader = Files.newBufferedReader(file, charset)) {
- String line = null;
- while ((line = reader.readLine()) != null) {
- if(line.isEmpty()) continue;
- books.add(parseBook(line));
- }
- } catch (IOException x) {
- System.err.format("IOException: %s%n", x);
- }
- return books;
- }
-
- }
|