ForumGroupEntity.java
package sk.iway.iwcm.components.forum.jpa;
import java.io.Serializable;
import java.util.Date;
import java.util.StringTokenizer;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.Min;
import javax.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.system.adminlog.EntityListenersType;
import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditor;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditorAttr;
import sk.iway.iwcm.users.UserDetails;
/**
* ForumGroupEntity aka ForumEntity. We let the old historic name ForumGroupEntity, so after remade to Spring
* it is clear what this entity is for (or what is replacing).
*/
@Entity
@Table(name = "forum")
@Getter
@Setter
@EntityListeners(sk.iway.iwcm.system.adminlog.AuditEntityListener.class)
@EntityListenersType(sk.iway.iwcm.Adminlog.TYPE_FORUM_SAVE)
public class ForumGroupEntity implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "S_forum")
@DataTableColumn(inputType = DataTableColumnType.ID, title="ID", tab="advanced", hidden = true)
private Long id;
//Is active or not
@Transient
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.forum.status",
tab="advanced",
hidden = true,
editor = @DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-headline", value = "[[#{components.forum.admin.basicInfo}]]"),
@DataTableColumnEditorAttr(key = "disabled", value = "disabled")
}
)
)
private String forumStatus;
//Is message board or no
@Transient
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.forum.admin.forumType",
tab="advanced",
hidden = true,
editor = @DataTableColumnEditor(
attr = @DataTableColumnEditorAttr(key = "disabled", value = "disabled")
)
)
private String forumType;
@Column(name = "advertisement_type")
@DataTableColumn(
inputType = DataTableColumnType.CHECKBOX,
title="components.forum.admin.advertisementType",
tab="advanced",
hidden = true
)
private Boolean advertisementType;
@Column(name = "message_confirmation")
@DataTableColumn(
inputType = DataTableColumnType.CHECKBOX,
title="components.forum.confirmation",
tab="advanced",
hidden = true
)
private Boolean messageConfirmation;
@Column(name = "approve_email")
@Size(max = 255)
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.forum.approve_email",
tab="advanced",
hidden = true
)
private String approveEmail;
@Column(name = "notif_email")
@Size(max = 255)
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title="components.forum.send_notif",
tab="advanced",
hidden = true
)
private String notifEmail;
//Permissions
@Transient
@DataTableColumn(
inputType = DataTableColumnType.CHECKBOX,
title = "components.forum.user_groups_for_addmessage",
tab = "advanced",
hidden = true,
editor = {
@DataTableColumnEditor(attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-hr", value = "before"),
@DataTableColumnEditorAttr(key = "data-dt-field-headline", value = "user.permissions"),
@DataTableColumnEditorAttr(key = "unselectedValue", value = "")
})
}
)
private Integer[] addMessagePerms;
@Transient
@DataTableColumn(
inputType = DataTableColumnType.CHECKBOX,
title = "components.forum.adminGroups",
tab = "advanced",
hidden = true,
editor = {
@DataTableColumnEditor(attr = @DataTableColumnEditorAttr(key = "unselectedValue", value = "") )
}
)
private Integer[] adminPerms;
@Column(name = "active")
@DataTableColumn(
inputType = DataTableColumnType.BOOLEAN,
title="components.forum.active",
tab="advanced",
hidden = true,
editor = @DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-hr", value = "before"),
@DataTableColumnEditorAttr(key = "data-dt-field-headline", value = "[[#{components.forum.admin.availability}]]")
}
)
)
private Boolean active;
@Column(name = "date_from")
@Temporal(TemporalType.TIMESTAMP)
@DataTableColumn(
inputType = DataTableColumnType.DATETIME,
title="components.forum.date_from",
tab="advanced",
hidden = true
)
private Date dateFrom;
@Column(name = "date_to")
@Temporal(TemporalType.TIMESTAMP)
@DataTableColumn(
inputType = DataTableColumnType.DATETIME,
title="components.forum.date_to",
tab="advanced",
hidden = true
)
private Date dateTo;
@Column(name = "hours_after_last_message")
@DataTableColumn(
inputType = DataTableColumnType.NUMBER,
title="components.forum.hours_after",
tab="advanced",
hidden = true
)
@Min(value = 0)
private Integer hoursAfterLastMessage;
//Dont show them, just need their values during saving
@Column(name = "doc_id")
@DataTableColumn(
inputType = DataTableColumnType.HIDDEN
)
private Integer docId;
@Column(name = "message_board")
@DataTableColumn(
inputType = DataTableColumnType.HIDDEN
)
private Boolean messageBoard;
@Column(name = "admin_groups")
@Size(max = 32)
private String adminGroups;
@Column(name = "addmessage_groups")
@Size(max = 128)
private String addmessageGroups;
@Column(name = "notify_page_author")
private Boolean notifyPageAuthor;
@Column(name = "domain_id")
private Integer domainId;
/**
* Otestuje ci moze pouzivatel pridat prispevok do fora
* @param user
* @return
*/
public boolean canPostMessage(UserDetails user) {
if (Tools.isEmpty(getAddmessageGroups())) return true;
if (user == null) return(false);
String ids = getAddmessageGroups();
if(Tools.isNotEmpty(ids))
{
StringTokenizer st = new StringTokenizer(ids,",+");
while(st.hasMoreTokens())
{
int userGroupId = Tools.getIntValue(st.nextToken(), -1);
if (userGroupId < 1) continue;
if(user.isInUserGroup(userGroupId)) return true;
}
}
return false;
}
/**
* Vrati true, ak zadany pouzivatel patri medzi administratorov fora
* @param user
* @return
*/
public boolean isAdmin(UserDetails user) {
if (user == null) return(false);
if (user.isAdmin()) return true;
String ids = getAdminGroups();
if(Tools.isNotEmpty(ids)) {
StringTokenizer st = new StringTokenizer(ids,",+");
while(st.hasMoreTokens()) {
int userGroupId = Tools.getIntValue(st.nextToken(), -1);
if (userGroupId < 1) continue;
if(user.isInUserGroup(userGroupId)) return true;
}
}
return false;
}
public boolean isActive() {
if(getActive() == null) return false;
return getActive();
}
public boolean isMessageConfirmation() {
if(getMessageConfirmation() == null) return false;
return getMessageConfirmation();
}
public boolean isMessageBoard() {
if(getMessageBoard() == null) return false;
return getMessageBoard();
}
public boolean isAdvertisementType() {
if(getAdvertisementType() == null) return false;
return getAdvertisementType();
}
}