MediaEditorFields.java

package sk.iway.spirit.model;

import java.util.ArrayList;
import java.util.List;

import javax.validation.constraints.NotBlank;

import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.components.media.MediaGroupRepository;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.iwcm.editor.service.WebpagesService;
import sk.iway.iwcm.system.datatable.BaseEditorFields;
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;

@Getter
@Setter
public class MediaEditorFields extends BaseEditorFields {

    //used for remapping groups
    @DataTableColumn(inputType = DataTableColumnType.CHECKBOX, renderFormat = "dt-format-select", title = "editor.media.group", sortAfter = "mediaTitleSk", tab = "basic",
    editor = {
        @DataTableColumnEditor(
            attr = {
                @DataTableColumnEditorAttr(key = "unselectedValue", value = "-1")
            }
        )
    })
    private Integer[] groups;

    @NotBlank
    private DocDetails docDetails;

    public MediaEditorFields() {
        //default konstruktor
    }

    //initialize MediaEditorFields.groups
    public void fromMedia(Media media) {
        //get groups from actual media
        List<MediaGroupBean> tmp = media.getGroups();
        if (tmp != null) {
            groups = new Integer[tmp.size()];

            //loop getted Media.groups and push their id's to MediaEditorFields.groups
            for(int i = 0; i < tmp.size(); i++) {
                groups[i] = tmp.get(i).getMediaGroupId();
            }
        }

        if(media.getMediaFkTableName().equals("documents") && media.getMediaFkId() != null && media.getMediaFkId().intValue() > 0) {
            docDetails = WebpagesService.getBasicDoc(media.getMediaFkId().intValue());
        }
    }

    //set Media.grousp using MediaEditorFields.groups
    public void toMedia(Media media, MediaGroupRepository repo) {

        Integer groupLength = media.getEditorFields().getGroups().length;
        List<MediaGroupBean> newGroups = new ArrayList<MediaGroupBean>();

        //loop MediaEditorFields.groups(array of id's)
        //use this id's to get MediaGroupBean and push them into prepared List newGroups
        if(groupLength > 0) {
            Integer[] tmp = media.getEditorFields().getGroups();

            if(tmp[0] != -1) {
                for(int i = 0; i < tmp.length; i++) {
                    newGroups.add(repo.getById(Long.valueOf(tmp[i])));
                }
            }
        }
        //set Media.group using List newGroups
        media.setGroups(newGroups);
    }
}