package ameba.db.model;
import io.ebean.Transaction;
import org.apache.commons.lang3.StringUtils;
/**
* <p>Abstract Persister class.</p>
*
* @author icode
*
*/
public abstract class Persister<M extends Model> {
private M model;
private String serverName;
/**
* <p>Constructor for Persister.</p>
*
* @param serverName a {@link java.lang.String} object.
* @param model a M object.
*/
public Persister(String serverName, M model) {
if (StringUtils.isBlank(serverName)) {
throw new IllegalArgumentException("server name is blank");
}
if (model == null) {
throw new IllegalArgumentException("model is null");
}
this.model = model;
this.serverName = serverName;
}
/**
* <p>Getter for the field <code>model</code>.</p>
*
* @return a M object.
*/
public M getModel() {
return model;
}
/**
* <p>Getter for the field <code>serverName</code>.</p>
*
* @return a {@link java.lang.String} object.
*/
public String getServerName() {
return serverName;
}
/**
* Changes the model server.
*
* @param server server name
* @return a {@link ameba.db.model.Persister} object.
* @param <E> a E object.
*/
public abstract <E extends M> Persister<E> on(String server);
/**
* Saves (inserts) this entity.
*/
public abstract void save();
/**
* Updates this entity.
*/
public abstract void update();
/**
* <p>update.</p>
*
* @param t a {@link io.ebean.Transaction} object.
*/
public abstract void update(Transaction t);
/**
* <p>update.</p>
*
* @param deleteMissingChildren a boolean.
*/
public abstract void update(boolean deleteMissingChildren);
/**
* <p>update.</p>
*
* @param t a {@link io.ebean.Transaction} object.
* @param deleteMissingChildren a boolean.
*/
public abstract void update(Transaction t, boolean deleteMissingChildren);
/**
* <p>update.</p>
*
* @param server a {@link java.lang.String} object.
*/
public void update(String server) {
on(server).update();
}
/**
* <p>update.</p>
*
* @param server a {@link java.lang.String} object.
* @param t a {@link io.ebean.Transaction} object.
* @param deleteMissingChildren a boolean.
*/
public void update(String server, Transaction t, boolean deleteMissingChildren) {
on(server).update(t, deleteMissingChildren);
}
/**
* <p>insert.</p>
*
* @param server a {@link java.lang.String} object.
* @since 0.1.6e
*/
public void insert(String server) {
on(server).insert();
}
/**
* <p>insert.</p>
*
* @param t a {@link io.ebean.Transaction} object.
*/
public abstract void insert(Transaction t);
/**
* <p>insert.</p>
*
* @param server a {@link java.lang.String} object.
* @param t a {@link io.ebean.Transaction} object.
*/
public void insert(String server, Transaction t) {
on(server).insert(t);
}
/**
* Insert this entity.
*/
public abstract void insert();
/**
* <p>delete.</p>
*
* @param server a {@link java.lang.String} object.
*/
public void delete(String server) {
on(server).delete();
}
/**
* Deletes this entity.
*/
public abstract void delete();
/**
* <p>delete.</p>
*
* @param t a {@link io.ebean.Transaction} object.
*/
public abstract void delete(Transaction t);
/**
* <p>delete.</p>
*
* @param server a {@link java.lang.String} object.
* @param t a {@link io.ebean.Transaction} object.
*/
public void delete(String server, Transaction t) {
on(server).delete(t);
}
/**
* Refreshes this entity from the database.
*/
public abstract void refresh();
/**
* Marks the entity bean as dirty.
* <p>
* This is used so that when a bean that is otherwise unmodified is updated the version
* property is updated.
* </p>
* <p>
* An unmodified bean that is saved or updated is normally skipped and this marks the bean as
* dirty so that it is not skipped.
* </p>
* <pre class="code">
* Customer customer = Customer.find.byId(id);
* // mark the bean as dirty so that a save() or update() will
* // increment the version property
* customer.markAsDirty();
* customer.save();
* </pre>
*
* @return a {@link ameba.db.model.Persister} object.
*/
public abstract Persister<M> markAsDirty();
}