package net.unit8.axebomber.manager.impl; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import net.unit8.axebomber.BookIOException; import net.unit8.axebomber.manager.BookManager; import net.unit8.axebomber.parser.Book; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class FileSystemBookManager extends BookManager { @Override public Book create(String path) { Book newbook; String ext = FilenameUtils.getExtension(path); if(StringUtils.equals("xls", ext)) { newbook = new Book(new HSSFWorkbook()); newbook.setPath(path); } else if(StringUtils.equals("xlsx", ext)){ newbook = new Book(new XSSFWorkbook()); newbook.setPath(path); } else { newbook = new Book(new HSSFWorkbook()); newbook.setPath(path + ".xls"); } newbook.setEditable(true); return newbook; } @Override public Book open(String path) { FileInputStream fis = null; try { fis = new FileInputStream(path); Workbook workbook = WorkbookFactory.create(fis); Book book = new Book(workbook); book.setPath(path); book.setEditable(true); return book; } catch(IOException e) { throw new BookIOException("", e); } catch (InvalidFormatException e) { throw new BookIOException("", e); } finally { IOUtils.closeQuietly(fis); } } @Override public void save(Book book) { try { FileOutputStream fos = new FileOutputStream(book.getPath()); try { book.getSubstance().write(fos); } finally { IOUtils.closeQuietly(fos); } } catch(IOException e) { throw new BookIOException(e); } } }