/* * 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 getAllBooks(){ Path file = Paths.get(fileName); Set books = new HashSet(); 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; } }