DataTablesMediaController.java

package sk.iway.iwcm.system.datatables;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONException;
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import sk.iway.iwcm.RequestBean;
import sk.iway.iwcm.SetCharacterEncodingFilter;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;
import sk.iway.spirit.MediaDB;
import sk.iway.spirit.model.Media;
import sk.iway.spirit.model.MediaGroupBean;

/**
 *  DataTablesMediaController.java
 **
 *  Title        webjet8
 *  Company      Interway a.s. (www.interway.sk)
 *  Copyright    Interway a.s (c) 2001-2018
 *  author       $Author: lzlatohlavek $
 *  created      Date: 28.05.2018
 */
@RestController
@PreAuthorize("@WebjetSecurityService.hasPermission('menuWebpages')")
@RequestMapping("/admin/rest/datatables/media/")
public class DataTablesMediaController {
    /**
     * Vráti media skupiny média
     * @return
     */
    @RequestMapping(path = "/groups_list", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Map<String, Object>> getGroups(@RequestParam(value = "mediaId") int mediaIdParam, @RequestParam(value = "docId") int docIdParam) throws JSONException {

        RequestBean rb = SetCharacterEncodingFilter.getCurrentRequestBean();

        List<Map<String, Object>> result = new ArrayList<>();

        if (rb != null && rb.isUserAdmin())
        {


            int mediaId = Tools.getIntValue(mediaIdParam, -1);
            int docId = Tools.getIntValue(docIdParam, -1);

            Media medium = MediaDB.getMedia(mediaId);
            List<MediaGroupBean> allGroups = new ArrayList<>();


            DocDetails doc = DocDB.getInstance().getDoc(docId);
            int groupId = -1;
            if (doc != null)
            {
                groupId = doc.getGroupId();
            }

            Map<String, Object> map = new HashMap<>();
            map.put("label", " ");
            map.put("value", "");
            result.add(map);


            allGroups = MediaDB.getGroups(groupId);

            if (medium != null)
            {
                medium.getGroups().forEach(group ->
                {
                    Map<String, Object> g = new HashMap<>();
                    g.put("label", group.getMediaGroupName());
                    g.put("value", group.getMediaGroupId());
                    g.put("selected", "true");

                    result.add(g);
                });

            }

            allGroups.forEach(group ->
            {
                Map<String, Object> g = new HashMap<>();
                g.put("label", group.getMediaGroupName());
                g.put("value", group.getMediaGroupId());
                result.add(g);
            });
        }
        return result;
    }

    /**
     * Vráti vsetky media skupiny
     * @return
     */
    @RequestMapping(path = "/groups_all", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public Map<String, Object> getGroups() throws JSONException {

        RequestBean rb = SetCharacterEncodingFilter.getCurrentRequestBean();

        Map<String, Object> result = new HashMap<>();
        if (rb!=null && rb.isUserAdmin())
        {
            List<Map<String, Object>> list = new ArrayList<>();
            List<MediaGroupBean> allGroups = MediaDB.getGroups();
            allGroups.forEach(group ->
            {
                Map<String, Object> map = new HashMap<>();

                map.put("name", group.getMediaGroupName());
                map.put("id", group.getMediaGroupId());
                    String groups = group.getAvailableGroups() == null ? " " : group.getAvailableGroups();
                map.put("groups", groups);

                list.add(map);
            });
            result.put("data", list);
        }
        return result;
    }

}