package cms.model.dao; import cms.model.model.NewsEntity; import cms.model.meta.NewsEntityMeta; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.Transaction; import java.util.ConcurrentModificationException; import java.util.Date; import java.util.List; import org.slim3.datastore.Datastore; import org.slim3.datastore.EntityNotFoundRuntimeException; public class NewsDAO implements DAO { private NewsEntityMeta meta = NewsEntityMeta.get(); public List<NewsEntity> getAll() { List<NewsEntity> newsEntities = Datastore.query(meta) .sort(meta.created.desc).asList(); return newsEntities; } public List<NewsEntity> getAllVisible() { List<NewsEntity> newsEntities = Datastore.query(meta) .filter(meta.visible.equal(Boolean.TRUE)) .filter(meta.created.lessThanOrEqual(new Date())) .sort(meta.created.desc) .asList(); return newsEntities; } public List<NewsEntity> getHomepage() { List<NewsEntity> newsEntities = Datastore.query(meta) .filter(meta.visible.equal(Boolean.TRUE)) .filter(meta.created.lessThanOrEqual(new Date())) .sort(meta.created.desc) .limit(10) .asList(); return newsEntities; } public NewsEntity get(Key key) { NewsEntity newsEntity = null; try { newsEntity = Datastore.get(NewsEntity.class, key); } catch (EntityNotFoundRuntimeException e) { return null; } return newsEntity; } public NewsEntity insert(NewsEntity newsEntity) { Transaction tx = Datastore.beginTransaction(); Datastore.put(newsEntity); tx.commit(); return newsEntity; } public NewsEntity edit(NewsEntity newsEntity) throws ConcurrentModificationException { Transaction tx = Datastore.beginTransaction(); try { Datastore.get(tx, NewsEntity.class, newsEntity.getKey(), newsEntity.getVersion()); Datastore.put(tx, newsEntity); tx.commit(); } catch (ConcurrentModificationException e) { if (tx.isActive()) { tx.rollback(); } throw e; } return newsEntity; } public void delete(Key key, Long version) throws ConcurrentModificationException { Transaction tx = Datastore.beginTransaction(); try { NewsEntity newsEntity = Datastore.get(tx, meta, key, version); Datastore.delete(tx, newsEntity.getKey()); tx.commit(); } catch (ConcurrentModificationException e) { if (tx.isActive()) { tx.rollback(); } throw e; } } }