Media.java

package sk.iway.spirit.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;

import com.fasterxml.jackson.annotation.JsonIgnore;

import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.database.ActiveRecordRepository;
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.DataTableColumnNested;

/**
 * JPA bean pre zaznam z tabulky media
 *  Media.java
 *
 *@Title        webjet7
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2011
 *@author       $Author: jeeff jeeff $
 *@version      $Revision: 1.3 $
 *@created      Date: 21.7.2011 9:27:20
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
@Entity
@Table(name="media")
@EntityListeners(sk.iway.iwcm.system.adminlog.AuditEntityListener.class)
@EntityListenersType(sk.iway.iwcm.Adminlog.TYPE_MEDIA)
public class Media extends ActiveRecordRepository implements Serializable
{
	private static final long serialVersionUID = -1L;

	@Id
	@GeneratedValue(generator="WJGen_media")
	@TableGenerator(name="WJGen_media",pkColumnValue="media")
	@Column(name="media_id")
	@DataTableColumn(inputType = DataTableColumnType.ID, title = "editor.cell.id")
	private Long id;

	@NotBlank
	@Column(name="media_title_sk")
	@DataTableColumn(inputType = DataTableColumnType.OPEN_EDITOR, title = "editor.media.title", sortAfter = "mediaLink", tab = "basic",
	editor = {
        @DataTableColumnEditor(type = "text") })
	String mediaTitleSk;

	@Column(name="media_sort_order")
	@DataTableColumn(inputType = DataTableColumnType.NUMBER, title = "editor.media.sortOrder", sortAfter = "mediaThumbLink", tab = "basic",
	editor = {
        @DataTableColumnEditor(type = "text") })
	Integer mediaSortOrder;

	@Column(name="media_thumb_link")
	@DataTableColumn(inputType = DataTableColumnType.ELFINDER, title = "editor.perex.image", className = "image", renderFormat = "dt-format-image", sortAfter = "editorFields.groups", tab = "basic")
	String mediaThumbLink;

	@JsonIgnore
	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "media_group_to_media",
			joinColumns = { @JoinColumn(name = "media_id", referencedColumnName = "media_id") },
			inverseJoinColumns = { @JoinColumn(name = "media_group_id", referencedColumnName = "media_group_id"),  })
	private List<MediaGroupBean> groups;

	@Column(name="media_link")
	@DataTableColumn(inputType = DataTableColumnType.ELFINDER, title = "editor.media.link", renderFormat = "dt-format-link", tab = "basic")
	String mediaLink;

	@Column(name="media_fk_table_name")
	String mediaFkTableName;

	@JsonIgnore
	@Column(name="media_group")
	String mediaGroup;

	@Column(name="media_fk_id")
	Integer mediaFkId;

	@JsonIgnore
	@Lob
	@Column(name="media_info_cz")
	String mediaInfoCz;

	@JsonIgnore
	@Lob
	@Column(name="media_info_de")
	String mediaInfoDe;

	@JsonIgnore
	@Lob
	@Column(name="media_info_en")
	String mediaInfoEn;

	@JsonIgnore
	@Lob
	@Column(name="media_info_sk")
	String mediaInfoSk;

	@JsonIgnore
	@Column(name="media_title_cz")
	String mediaTitleCz;

	@JsonIgnore
	@Column(name="media_title_de")
	String mediaTitleDe;

	@JsonIgnore
	@Column(name="media_title_en")
	String mediaTitleEn;

	@Column(name="last_update")
	@Temporal(TemporalType.TIMESTAMP)
	Date lastUpdate;

	@Column(name = "field_a")
	@DataTableColumn(
        inputType = DataTableColumnType.TEXT,
		title = "components.media.field_a",
		visible = false,
		tab = "fields"
    )
	private String fieldA;

	@Column(name = "field_b")
	@DataTableColumn(
        inputType = DataTableColumnType.TEXT,
		title = "components.media.field_b",
		visible = false,
		tab = "fields"
    )
	private String fieldB;

	@Column(name = "field_c")
	@DataTableColumn(
        inputType = DataTableColumnType.TEXT,
		title = "components.media.field_c",
		visible = false,
		tab = "fields"
    )
	private String fieldC;

	@Column(name = "field_d")
	@DataTableColumn(
        inputType = DataTableColumnType.TEXT,
		title = "components.media.field_d",
		visible = false,
		tab = "fields"
    )
	private String fieldD;

	@Column(name = "field_e")
	@DataTableColumn(
        inputType = DataTableColumnType.TEXT,
		title = "components.media.field_e",
		visible = false,
		tab = "fields"
    )
	private String fieldE;

	@Column(name = "field_f")
	@DataTableColumn(
        inputType = DataTableColumnType.TEXT,
		title = "components.media.field_f",
		visible = false,
		tab = "fields"
    )
	private String fieldF;

	@Transient
	@DataTableColumnNested
	private MediaEditorFields editorFields = null;

	@Column(name = "domain_id")
	@DataTableColumn(inputType = DataTableColumnType.HIDDEN)
	private Integer domainId;

	public List<MediaGroupBean> getGroups() {
		return groups;
	}

	public void setGroups(List<MediaGroupBean> groups) {
		this.groups = groups;
	}

	public int getMediaId()
	{
		if (id == null) return 0;
		return id.intValue();
	}

	public void setMediaId(int mediaId)
	{
		this.id = Long.valueOf(mediaId);
	}

	@Override
	public void setId(Long id)
	{
		this.id = id;
	}

	@Override
	public Long getId()
	{
		return id;
	}

	public Integer getMediaFkId()
	{
		return mediaFkId;
	}

	public void setMediaFkId(Integer mediaFkId)
	{
		this.mediaFkId = mediaFkId;
	}

	public String getMediaFkTableName()
	{
		return mediaFkTableName;
	}

	public void setMediaFkTableName(String mediaFkTableName)
	{
		this.mediaFkTableName = mediaFkTableName;
	}

	public String getMediaGroup()
	{
		return mediaGroup;
	}

	public void setMediaGroup(String mediaGroup)
	{
		this.mediaGroup = mediaGroup;
	}

	public String getMediaInfoCz()
	{
		return mediaInfoCz;
	}

	public void setMediaInfoCz(String mediaInfoCz)
	{
		this.mediaInfoCz = mediaInfoCz;
	}

	public String getMediaInfoDe()
	{
		return mediaInfoDe;
	}

	public void setMediaInfoDe(String mediaInfoDe)
	{
		this.mediaInfoDe = mediaInfoDe;
	}

	public String getMediaInfoEn()
	{
		return mediaInfoEn;
	}

	public void setMediaInfoEn(String mediaInfoEn)
	{
		this.mediaInfoEn = mediaInfoEn;
	}

	public String getMediaInfoSk()
	{
		return mediaInfoSk;
	}

	public void setMediaInfoSk(String mediaInfoSk)
	{
		this.mediaInfoSk = mediaInfoSk;
	}

	public String getMediaLink()
	{
		return mediaLink;
	}

	public void setMediaLink(String mediaLink)
	{
		this.mediaLink = mediaLink;
	}

	public Integer getMediaSortOrder()
	{
		//if (mediaSortOrder==null) return Integer.valueOf(0);
		return mediaSortOrder;
	}

	public void setMediaSortOrder(Integer mediaSortOrder)
	{
		this.mediaSortOrder = mediaSortOrder;
	}

	public String getMediaThumbLink()
	{
		return mediaThumbLink;
	}

	public void setMediaThumbLink(String mediaThumbLink)
	{
		this.mediaThumbLink = mediaThumbLink;
	}

	public String getMediaTitleCz()
	{
		return mediaTitleCz;
	}

	public void setMediaTitleCz(String mediaTitleCz)
	{
		this.mediaTitleCz = mediaTitleCz;
	}

	public String getMediaTitleDe()
	{
		return mediaTitleDe;
	}

	public void setMediaTitleDe(String mediaTitleDe)
	{
		this.mediaTitleDe = mediaTitleDe;
	}

	public String getMediaTitleEn()
	{
		return mediaTitleEn;
	}

	public void setMediaTitleEn(String mediaTitleEn)
	{
		this.mediaTitleEn = mediaTitleEn;
	}

	public String getMediaTitleSk()
	{
		return mediaTitleSk;
	}

	public void setMediaTitleSk(String mediaTitleSk)
	{
		this.mediaTitleSk = mediaTitleSk;
	}

	public Date getLastUpdate()
	{
		if (lastUpdate == null) return null;
		return new Date(lastUpdate.getTime());
	}

	@JsonIgnore
	public String getGroupsToString(){
		String groupsString = "";
		if (groups==null || groups.size()<1) return groupsString;
		for(int groupIt=0; groupIt<groups.size();groupIt++ ){
			MediaGroupBean group = groups.get(groupIt);
			groupsString+=group.getMediaGroupName();
			if(groupIt != groups.size()-1){
				groupsString+=", ";
			}
		}
		return groupsString;
	}
	public void addGroup(MediaGroupBean group){
	    if (groups == null) {
	        groups = new ArrayList<>();
        }
		for(MediaGroupBean g:groups){
			if(g.getMediaGroupId() == group.getMediaGroupId()) return;
		}
		groups.add(group);
	}

	public void setLastUpdate(Date lastUpdate)
	{
	    if (lastUpdate==null) this.lastUpdate = null;
		else this.lastUpdate = new Date(lastUpdate.getTime());
	}

	public MediaEditorFields getEditorFields() {
		if(editorFields == null) {
			//make MediaEditorFields instance and call fromMedia to initialize MediaEditorFields.groups
			editorFields = new MediaEditorFields();
			editorFields.fromMedia(this);
		}
		return editorFields;
	}

	public void setEditorFields(MediaEditorFields editorFields) {
		this.editorFields = editorFields;
	}

	//Set entity domain id
	@PrePersist
	public void prePersist() {
		if(domainId == null) domainId = CloudToolsForCore.getDomainId();
	}

	public Integer getDomainId() {
		return domainId;
	}

	public void setDomainId(Integer domainId) {
		this.domainId = domainId;
	}

	public String getFieldA() {
		return fieldA;
	}

	public void setFieldA(String fieldA) {
		this.fieldA = fieldA;
	}

	public String getFieldB() {
		return fieldB;
	}

	public void setFieldB(String fieldB) {
		this.fieldB = fieldB;
	}

	public String getFieldC() {
		return fieldC;
	}

	public void setFieldC(String fieldC) {
		this.fieldC = fieldC;
	}

	public String getFieldD() {
		return fieldD;
	}

	public void setFieldD(String fieldD) {
		this.fieldD = fieldD;
	}

	public String getFieldE() {
		return fieldE;
	}

	public void setFieldE(String fieldE) {
		this.fieldE = fieldE;
	}

	public String getFieldF() {
		return fieldF;
	}

	public void setFieldF(String fieldF) {
		this.fieldF = fieldF;
	}

	
}