TranslationKeyEntity.java

package sk.iway.iwcm.components.translation_keys.jpa;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
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.NotBlank;
import javax.validation.constraints.Size;

import org.apache.struts.util.ResponseUtils;

import lombok.Getter;
import lombok.Setter;
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.system.datatable.annotations.DataTableColumnNested;

@Entity
@Table(name = "_properties_")
//auditujeme manualne, kvoli importu a poctu zaznamov @EntityListeners(AuditEntityListener.class)
//@EntityListenersType(Adminlog.TYPE_PROP_UPDATE)
@Setter
@Getter
public class TranslationKeyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "S_webjet_properties")
    @DataTableColumn(inputType = {DataTableColumnType.ID}, className = "not-export", filter = false)
    private Long id;

    @Column(name = "prop_key")
    @NotBlank
    @DataTableColumn(inputType = {DataTableColumnType.OPEN_EDITOR})
    private String key;

    //Field is not showed but used to get translation key value from DB
    @Column(name = "prop_value")
    private String value;

    //Field is not showed but used to get translation key language
    @Column(name = "lng")
    @Size(min = 2, max = 3)
    private String lng;

    @Column(name = "update_date")
    @Temporal(TemporalType.TIMESTAMP)
    @DataTableColumn(renderFormat = "dt-format-date-time", editor = {
            @DataTableColumnEditor(
                    type = "datetime",
                    attr = {
                            @DataTableColumnEditorAttr(key = "disabled", value = "disabled")
                    }
            )
    })
    private Date updateDate;

    @Transient
    @DataTableColumnNested
    private TranslationKeyEditorFields editorFields = null;

    /*
     * CUSTOM-FIELDS representing translation key value in specific language.
     * fieldA is ALWAYS representing default language and NEVER null or empty
     * originalValue's represent's original value of transation key load from file (can be same)
    */

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
    )
    private String fieldA = ""; //aby sme pri exporte nemali Nevyplnene ale prazdnu hodnotu v jazykoch kde kluc nie je zadany

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueA;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
    )
    private String fieldB = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueB;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldC = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueC;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldD = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueD;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldE = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueE;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldF = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueF;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldG = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueG;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldH = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueH;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldI = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueI;

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "wrap show-html",
        filter = true
        )
    private String fieldJ = "";

    @Transient
    @DataTableColumn(
        inputType = DataTableColumnType.TEXTAREA,
        className = "hideOnCreate not-export",
        filter = true,
        visible = false,
        editor = {
            @DataTableColumnEditor(
                attr = { @DataTableColumnEditorAttr(key = "disabled", value = "disabled") }
            )
        }
    )
    private String originalValueJ;

    public String getKey() {
        if (key==null) return null;
        //ochrana pred XSS ak kluc nie je citany z DB nie je chraneny
        if (key.contains("<") || key.contains(">")) return ResponseUtils.filter(key).trim();
        return key.trim();
    }

    public String getOriginalValue(char a) {
        switch (a) {
            case 'A':
                return originalValueA;
            case 'B':
                return originalValueB;
            case 'C':
                return originalValueC;
            case 'D':
                return originalValueD;
            case 'E':
                return originalValueE;
            case 'F':
                return originalValueF;
            case 'G':
                return originalValueG;
            case 'H':
                return originalValueH;
            case 'I':
                return originalValueI;
            case 'J':
                return originalValueJ;
            default: return null;
        }
    }
}