Created
May 25, 2016 18:17
Revisions
-
dhoss created this gist
May 25, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,71 @@ package com.lumos.service; import com.lumos.ConfigReader; import com.lumos.util.Data; import com.lumos.util.Page; import org.jooq.DSLContext; import org.jooq.Record; import org.jooq.RecordMapper; import com.lumos.db.tables.pojos.Images; import org.jooq.Table; import java.util.List; import static com.lumos.db.Tables.IMAGES; /** * Created by devin on 3/30/16. */ public abstract class BaseService <R extends Record, T extends Table<R>, P>{ protected final int pageSize; protected final ConfigReader config; protected Data data; protected final String uploadPath; protected final String imageViewPath; private DSLContext sql; public BaseService(DSLContext s) { this.data = new Data(); this.config = new ConfigReader(); this.pageSize = Integer.parseInt(this.config.get("pageSize")); this.uploadPath = this.config.get("imageStorePath"); this.imageViewPath = this.config.get("imageViewPath"); this.sql = s; } protected int getPage(String pageParam) { int page = 1; if (pageParam != null) { page = Integer.parseInt(pageParam); } return page; } public List<P> list(int pageNumber) { Page pager = new Page(count()); return sql.select() .from(table()) .orderBy(table().field("UPDATED_ON").desc(), table().field("CREATED_ON").desc()) .limit(pageSize) .offset(pager.offsetFromPage(pageNumber)) .fetch() .map(mapper()); } public Integer count() { return (Integer)sql.selectCount() .from(table()) .fetchOne().getValue(0); } // to be implemented by the inheriting class protected abstract T table(); protected abstract RecordMapper<Record, P> mapper(); } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,166 @@ package com.lumos.service; import com.lumos.ConfigReader; import com.lumos.db.tables.daos.GalleriesDao; import com.lumos.db.tables.daos.ImagesDao; import com.lumos.db.tables.pojos.Galleries; import com.lumos.db.tables.pojos.Images; import static com.lumos.db.Tables.IMAGES; import static com.lumos.db.Tables.GALLERIES; import org.joda.time.*; import com.lumos.jooq.JodaDateTimeConverter; import javax.sql.DataSource; import java.io.IOException; import java.sql.Timestamp; import java.util.*; import org.jooq.*; import com.lumos.util.Data; import com.lumos.util.DatabaseConnection; import com.lumos.db.tables.records.GalleriesRecord; import com.lumos.util.Page; public class GalleryService extends BaseService<GalleriesRecord, com.lumos.db.tables.Galleries, com.lumos.db.tables.pojos.Galleries> { // inject these private GalleriesDao dao; private ImagesDao imageDao; private DSLContext sql; private Page pager; private DatabaseConnection dbc; public GalleryService(DSLContext s) { super(s); sql = s; dao = new GalleriesDao(sql.configuration()); imageDao = new ImagesDao(sql.configuration()); } /* public List<Galleries> list(int pageNumber) { pager = new Page(count()); return sql.select() .from(GALLERIES) .orderBy(GALLERIES.UPDATED_ON.desc(), GALLERIES.CREATED_ON.desc()) .limit(pageSize) .offset(pager.offsetFromPage(pageNumber)) .fetch(galleryMapper); }*/ /* public Integer count() { return (Integer)sql.selectCount() .from(GALLERIES) .fetchOne().getValue(0); }*/ public Galleries find(String slug) { return dao.fetchOneBySlug(slug); } public List<Images> imagesFor(String slug, int pageNumber) { int count = countImagesFor(slug); pager = new Page(count); return sql.select() .from(GALLERIES) .join(IMAGES) .on(IMAGES.GALLERY.equal(GALLERIES.ID)) .where(GALLERIES.SLUG.equal(slug)) .orderBy(IMAGES.UPDATED_ON.desc(), IMAGES.CREATED_ON.desc()) .limit(pageSize) .offset(pager.offsetFromPage(pageNumber)) .fetch(imageMapper); } public int countImagesFor(String slug) { return (Integer)sql.selectCount() .from(IMAGES) .where(IMAGES.GALLERY.equal( sql.select(GALLERIES.ID).from(GALLERIES).where(GALLERIES.SLUG.equal(slug) ) )) .fetchOne().getValue(0); } public void add(Galleries gallery) { GalleriesRecord g = buildGalleryRecord(gallery); // set the cover photo to the default cover photo g.setCoverPhoto(config.get("defaultCoverPhoto")); g.store(); } // either everything (insert, update) needs to be void, or it needs to return something // check Images public void update(Galleries gallery) { GalleriesRecord g = buildGalleryRecord(gallery); g.store(); } public void delete(Galleries gallery) { GalleriesRecord g = buildGalleryRecord(gallery); g.delete(); } public GalleriesRecord buildGalleryRecord(Galleries gallery) { // try to fetch the record GalleriesRecord g = sql.fetchOne(GALLERIES, GALLERIES.ID.equal(gallery.getId())); if (g == null) { g = sql.newRecord(GALLERIES); } g.setName(gallery.getName()); g.setDescription(gallery.getDescription()); g.setCoverPhoto(gallery.getCoverPhoto()); g.setSlug(gallery.getSlug()); g.setCreatedOn(gallery.getCreatedOn()); g.setUpdatedOn(gallery.getUpdatedOn()); return g; } /*@Override RecordMapper<Record, Galleries> mapper = r -> { return new Galleries( r.getValue(GALLERIES.ID), r.getValue(GALLERIES.NAME), r.getValue(GALLERIES.DESCRIPTION), r.getValue(GALLERIES.COVER_PHOTO) == null ? config.get("defaultCoverPhoto") : r.getValue(GALLERIES.COVER_PHOTO), r.getValue(GALLERIES.SLUG), r.getValue(GALLERIES.CREATED_ON), r.getValue(GALLERIES.UPDATED_ON) ); };*/ @Override protected com.lumos.db.tables.Galleries table() { return GALLERIES; } @Override protected RecordMapper<GalleriesRecord, Galleries> mapper() { return new RecordMapper<GalleriesRecord, Galleries>() { @Override public Galleries map(GalleriesRecord r) { return new Galleries( r.getValue(GALLERIES.ID), r.getValue(GALLERIES.NAME), r.getValue(GALLERIES.DESCRIPTION), r.getValue(GALLERIES.COVER_PHOTO) == null ? config.get("defaultCoverPhoto") : r.getValue(GALLERIES.COVER_PHOTO), r.getValue(GALLERIES.SLUG), r.getValue(GALLERIES.CREATED_ON), r.getValue(GALLERIES.UPDATED_ON) ); } }; } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,121 @@ package com.lumos.service; import com.lumos.ConfigReader; import com.lumos.db.tables.daos.GalleriesDao; import com.lumos.db.tables.daos.ImagesDao; import com.lumos.db.tables.pojos.Galleries; import com.lumos.db.tables.pojos.Images; import static com.lumos.db.Tables.IMAGES; import static com.lumos.db.Tables.GALLERIES; import com.lumos.util.Page; import org.joda.time.*; import com.lumos.jooq.JodaDateTimeConverter; import javax.sql.DataSource; import java.io.IOException; import java.sql.Timestamp; import java.util.*; import org.jooq.RecordMapper; import com.lumos.util.Data; import com.lumos.util.DatabaseConnection; import org.jooq.DSLContext; import org.jooq.Record; import com.lumos.db.tables.records.ImagesRecord; /** * Created by devin on 4/8/16. */ public class ImageService extends BaseService<ImagesRecord, com.lumos.db.tables.Images, com.lumos.db.tables.pojos.Images> { // inject these private ImagesDao dao; private DSLContext sql; private DatabaseConnection dbc; private Page pager; public ImageService(DSLContext sql) throws IOException { super(sql); this.sql = sql; this.dao = new ImagesDao(sql.configuration()); } /*// I want to figure out a way to put these in the base class public List<Images> list(int pageNumber) { pager = new Page(count()); return this.sql.select() .from(IMAGES) .orderBy(IMAGES.CREATED_ON.desc()) .limit(pageSize) .offset(pager.offsetFromPage(pageNumber)) .fetch(imageMapper); }*/ public Integer count() { return (Integer)sql.selectCount() .from(IMAGES) .fetchOne().getValue(0); } public void add(Images image) { ImagesRecord i = buildImageRecord(image); i.store(); } public Images update(Images image) { ImagesRecord i = buildImageRecord(image); i.store(); return image; } public Images find(String digest) { return this.dao.fetchOneByDigest(digest); } public ImagesRecord buildImageRecord(Images image) { // try to fetch the record ImagesRecord i = this.sql.fetchOne(IMAGES, IMAGES.ID.equal(image.getId())); if (i == null) { i = this.sql.newRecord(IMAGES); } i.setName(image.getName()); i.setDescription(image.getDescription()); i.setDigest(image.getDigest()); i.setPath(image.getPath()); i.setGallery(image.getGallery()); i.setHeight(image.getHeight()); i.setWidth(image.getWidth()); i.setCreatedOn(image.getCreatedOn()); i.setUpdatedOn(image.getUpdatedOn()); return i; } @Override protected com.lumos.db.tables.Images table() { return IMAGES; } @Override protected RecordMapper<ImagesRecord, Images> mapper() { return new RecordMapper<ImagesRecord, Images>() { @Override public Images map(ImagesRecord r) { return new Images( r.getValue(IMAGES.ID), r.getValue(IMAGES.NAME), r.getValue(IMAGES.DESCRIPTION), r.getValue(IMAGES.DIGEST), r.getValue(IMAGES.PATH), r.getValue(IMAGES.GALLERY), r.getValue(IMAGES.HEIGHT), r.getValue(IMAGES.WIDTH), r.getValue(IMAGES.CREATED_ON), r.getValue(IMAGES.UPDATED_ON) ); } }; } }