package ilarkesto.persistence;
import ilarkesto.auth.AUser;
import ilarkesto.base.Utl;
import ilarkesto.base.time.DateAndTime;
import ilarkesto.id.Identifiable;
import ilarkesto.base.Iconized;
import java.util.Map;
import java.util.UUID;
public abstract class AEntity extends ADatob implements Identifiable, Iconized {
private static final long serialVersionUID = 1L;
private static DaoService daoService;
private String id;
private DateAndTime lastModified;
private String lastEditorId;
public abstract ADao getDao();
// --- dependencies ---
public static DaoService getDaoService() {
return daoService;
}
public final static void setDaoService(DaoService daoService) {
AEntity.daoService = daoService;
}
// --- ---
@Override
protected final ADao getManager() {
return getDao();
}
@Override
public String getIcon() {
return getDao().getIcon();
}
public final String getId() {
if (id == null) id = UUID.randomUUID().toString();
return id;
}
final void setId(String id) {
this.id = id;
}
public final DateAndTime getLastModified() {
return lastModified;
}
final void setLastModified(DateAndTime value) {
this.lastModified = value;
}
public final AUser getLastEditor() {
if (this.lastEditorId == null) return null;
return (AUser) userDao.getById(this.lastEditorId);
}
public final void setLastEditor(AUser lastEditor) {
if (isLastEditor(lastEditor)) return;
this.lastEditorId = lastEditor == null ? null : lastEditor.getId();
fireModified("lastEditor=" + lastEditor);
}
public final boolean isLastEditor(AUser user) {
if (this.lastEditorId == null && user == null) return true;
return user != null && user.getId().equals(this.lastEditorId);
}
public final boolean isLastEditorSet() {
return lastEditorId != null;
}
@Override
public void ensureIntegrity() {
super.ensureIntegrity();
if (lastModified == null) fireModified("lastModified!=null");
}
@Override
protected void storeProperties(Map properties) {
properties.put("@type", getDao().getEntityName());
properties.put("id", getId());
}
@Override
public final boolean equals(Object o) {
if (o == null) return false;
if (!(o instanceof AEntity)) return false;
return Utl.equals(getId(), ((AEntity) o).getId());
}
@Override
public final int hashCode() {
if (id == null) return 0;
return id.hashCode();
}
}