Package play.utils.crud

Source Code of play.utils.crud.CRUDController

package play.utils.crud;

import play.Logger;
import play.Logger.ALogger;
import play.data.Form;
import play.mvc.Call;
import play.twirl.api.Content;
import play.mvc.Result;
import play.utils.dao.BasicModel;
import play.utils.dao.DAO;
import play.utils.dao.EntityNotFoundException;

import com.avaje.ebean.Page;

public abstract class CRUDController<K, M extends BasicModel<K>> extends TemplateController implements
    CRUD<K, M> {

  private static ALogger log = Logger.of(CRUDController.class);
 
  private final DAO<K, M> dao;

  private final Form<M> form;

  private final Class<K> keyClass;

  private final Class<M> modelClass;

  private String orderBy;

  private int pageSize;

  public CRUDController(ClassLoader classLoader, DAO<K, M> dao, Form<M> form, Class<K> keyClass, Class<M> modelClass, int pagesize,
      String orderBy) {
    super(classLoader);
    this.dao = dao;
    this.form = form;
    this.keyClass = keyClass;
    this.modelClass = modelClass;
    this.pageSize = pagesize;
    this.orderBy = orderBy;
  }

  public CRUDController(DAO<K, M> dao, Form<M> form, Class<K> keyClass, Class<M> modelClass, int pagesize,
      String orderBy) {
    super();
    this.dao = dao;
    this.form = form;
    this.keyClass = keyClass;
    this.modelClass = modelClass;
    this.pageSize = pagesize;
    this.orderBy = orderBy;
  }

  public DAO<K, M> getDao() {
    return dao;
  }

  public Class<K> getKeyClass() {
    return keyClass;
  }

  public Class<M> getModelClass() {
    return modelClass;
  }

  public Form<M> getForm() {
    return form;
  }

  public Result list(int page) {
    Page<M> p = dao.page(page, pageSize(), orderBy());
    return ok(renderList(p));
  }

  protected String orderBy() {
    return orderBy;
  }

  protected int pageSize() {
    return pageSize;
  }

  protected abstract String templateForList();

  protected abstract String templateForForm();

  protected abstract String templateForShow();

  protected abstract Call toIndex();
 
  protected Content renderList(Page<M> p) {
    return render(templateForList(), with(Page.class, p));
  }

  protected Content renderForm(K key, Form<M> form) {
    return render(templateForForm(), with(keyClass, key).and(Form.class, form));
  }

  protected Content renderShow(M model) {
    return render(templateForShow(), with(modelClass, model));
  }

  public Result newForm() {
    if (log.isDebugEnabled())
      log.debug("newForm() <-");

    return ok(renderForm(null, form));
  }

  public Result create() {
    if (log.isDebugEnabled())
      log.debug("create() <-");

    Form<M> filledForm = form.bindFromRequest();
    if (filledForm.hasErrors()) {
      if (log.isDebugEnabled())
        log.debug("validation errors occured: " + filledForm.errors());

      return badRequest(renderForm(null, filledForm));
    } else {
      M model = filledForm.get();
      dao.create(model);
      if (log.isDebugEnabled())
        log.debug("entity created");

      Call index = toIndex();
      if (log.isDebugEnabled())
        log.debug("index : " + index);
      return redirect(index);
    }
  }

  public Result editForm(K key) {
    if (log.isDebugEnabled())
      log.debug("editForm() <-" + key);

    M model = dao.get(key);
    if (log.isDebugEnabled())
      log.debug("model : " + model);

    Form<M> frm = form.fill(model);
    return ok(renderForm(key, frm));
  }

  public Result update(K key) {
    if (log.isDebugEnabled())
      log.debug("update() <-" + key);

    M original = dao.get(key);
    Form<M> filledForm = form.fill(original).bindFromRequest();
    if (filledForm.hasErrors()) {
      if (log.isDebugEnabled())
        log.debug("validation errors occured: " + filledForm.errors());

      return badRequest(renderForm(key, filledForm));
    } else {
      M model = filledForm.get();
      model.setKey(key);
      if (log.isDebugEnabled())
        log.debug("model : " + model);
      dao.update(model);
      if (log.isDebugEnabled())
        log.debug("entity updated");

      Call index = toIndex();
      if (log.isDebugEnabled())
        log.debug("index : " + index);
      return redirect(index);
    }
  }

  public Result show(K key) {
    if (log.isDebugEnabled())
      log.debug("show() <-" + key);

    M model = dao.get(key);
    if (log.isDebugEnabled())
      log.debug("model : " + model);

    return ok(renderShow(model));
  }

  public Result delete(K key) {
    if (log.isDebugEnabled())
      log.debug("delete() <-" + key);

    try {
      dao.remove(key);
      if (log.isDebugEnabled())
        log.debug("entity deleted");
    } catch (EntityNotFoundException e) {
      if (log.isDebugEnabled())
        log.debug("entity not found for key:" + key);
      flash("error", "entity not found for key:" + key);
    }

    Call index = toIndex();
    if (log.isDebugEnabled())
      log.debug("index : " + index);
    return redirect(index);
  }

  public Result read(K key) {
    return show(key);
  }

  public Result list() {
    return list(0);
  }

}
TOP

Related Classes of play.utils.crud.CRUDController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.