@@ -0,0 +1,1638 @@
+package com.bkromhout.minerva.test;%0A%0Aimport com.bkromhout.minerva.data.SuperBook;%0Aimport nl.siegmann.epublib.domain.Author;%0Aimport nl.siegmann.epublib.domain.Book;%0Aimport nl.siegmann.epublib.domain.Date;%0Aimport nl.siegmann.epublib.domain.Metadata;%0A%0Aimport java.util.Collections;%0A%0A/**%0A * Utility class which creates SuperBooks for testing.%0A */%0Apublic class TestBookFactory %7B%0A    private long count;%0A%0A    public TestBookFactory() %7B%0A        this.count = 0L;%0A    %7D%0A%0A    /**%0A     * Create a new %7B@link SuperBook%7D.%0A     * @return A %7B@link SuperBook%7D guaranteed to be different than the one returned by the last call to this method for%0A     * the current instance of %7B@link TestBookFactory%7D.%0A     */%0A    public final SuperBook produceSuperBook() %7B%0A        count += 1L;%0A        String title = %22Test Book %22 + count;%0A        Book book = new Book();%0A        Metadata metadata = book.getMetadata();%0A        metadata.addTitle(title);%0A        metadata.addAuthor(new Author(%22Author %22 + count));%0A        metadata.addDescription(%22Description %22 + count);%0A        metadata.setSubjects(Collections.singletonList(%22Subject %22 + count));%0A        metadata.addType(%22Type %22 + count);%0A        metadata.setFormat(%22application/epub+zip%22);%0A        metadata.setLanguage(%22en%22);%0A        metadata.addPublisher(%22Publisher %22 + count);%0A        metadata.addDate(new Date(%22Create Date %22 + count, Date.Event.CREATION));%0A        metadata.addDate(new Date(%22Publish Date %22 + count, Date.Event.PUBLICATION));%0A        metadata.addDate(new Date(%22Modified Date %22 + count, Date.Event.MODIFICATION));%0A        return new SuperBook(book, %22path/to/book_%22 + count, title.getBytes());%0A    %7D%0A%7D%0A

Add TestBookFactory class