MediaDataController.java
package sk.iway.spirit;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import org.json.JSONException;
import sk.iway.iwcm.DB;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.RequestBean;
import sk.iway.iwcm.SetCharacterEncodingFilter;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.system.datatables.DataTablesFieldError;
import sk.iway.iwcm.system.datatables.DataTablesInterface;
import sk.iway.spirit.model.Media;
import sk.iway.spirit.model.MediaGroupBean;
/**
* MediaDataController.java
*
* Class EnumerationDataController is used for working with DataTables
*
*
*@author $Author: lzl $
*@version $Revision: 1.0 $
*/
public class MediaDataController implements DataTablesInterface {
@SuppressWarnings("unused")
private class MediumForReturn implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private int order;
private String title;
private String thumbLink;
private String group;
private String groupsArray = "";
private String link_url = "";
private String link_exist = "";
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrder() {
return order;
}
public void setOrder(int order) {
this.order = order;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getThumbLink() {
return thumbLink;
}
public void setThumbLink(String thumbLink) {
this.thumbLink = thumbLink;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String getGroupsArray() {
return groupsArray;
}
public void setGroupsArray(String groupsArray) {
this.groupsArray = groupsArray;
}
public String getLink_url() {
return link_url;
}
public void setLink_url(String link_url) {
this.link_url = link_url;
}
public String getLink_exist() {
return link_exist;
}
public void setLink_exist(String link_exist) {
this.link_exist = link_exist;
}
private MediumForReturn(Media data) throws JSONException
{
this.id = data.getMediaId();
this.order = data.getMediaSortOrder();
this.title = DB.filterHtml(data.getMediaTitleSk());
this.thumbLink = DB.filterHtml(data.getMediaThumbLink());
this.group = data.getGroupsToString();
this.link_url = DB.filterHtml(data.getMediaLink());
this.link_exist = (MediaDB.isExists(data) && Tools.isNotEmpty(data.getMediaLink()))?"true": "false";
}
}
private List<DataTablesFieldError> fieldErrors = new ArrayList<>();
@Override
public List<Object> list(HttpServletRequest request) {
return null;
}
@Override
public List<Object> save(HttpServletRequest request, Map<Integer, Map<String, String>> parsedRequest)
{
List<Object> ret = new ArrayList<>();
boolean order = false;
if(parsedRequest.size() > 1) order = true;
int userId = -1;
RequestBean rb = SetCharacterEncodingFilter.getCurrentRequestBean();
if (rb != null)
{
userId = rb.getUserId();
}
for (Map.Entry<Integer, Map<String, String>> entry : parsedRequest.entrySet())
{
int mediaIdFromMap = entry.getKey();
System.out.println(entry.getKey() + "/" + entry.getValue());
Map<String,String> parsedMap = entry.getValue();
Media data;
switch(parsedMap.get("action")) {
case "create":
int mediaId =Tools.getIntValue(parsedMap.get("id"),-1);
int mediaFkId = Tools.getIntValue(parsedMap.get("mediaFkId"), -1);
int mediaSortOrder = 0;
if(mediaFkId != -1)
{
mediaSortOrder = MediaDB.getLastOrder(mediaFkId, "documents");
}
else
{
mediaSortOrder = MediaDB.getLastOrder(userId, "documents_temp");
}
if(mediaId ==-1){ // create
data = new Media();
parsedMap.put("order", (mediaSortOrder+10)+""); // editor vracia defaultne pri create order = 0, preto to prepisujem
data.setMediaFkId(mediaFkId);
data.setMediaFkTableName("documents");
}else{ // duplicate
data = MediaDB.getMedia(Tools.getIntValue(parsedMap.get("id"),-1));
data = MediaDB.duplicateMedia(data.getMediaId());
if(data == null) break;
}
if(mediaFkId == -1)
{
//stranka este nie je ulozena
data.setMediaFkId(userId);
data.setMediaFkTableName("documents_temp");
}
data = fillDataFromRequest(data, parsedMap, false);
data.setMediaId(-1);
data.setLastUpdate(new Date(Tools.getNow()));
data.save();
try {
ret.add(new MediumForReturn(data));
} catch (JSONException e) {
sk.iway.iwcm.Logger.error(e);
}
break;
case "edit":
data = MediaDB.getMedia(Tools.getIntValue(mediaIdFromMap,-1));
if(data !=null){
data = fillDataFromRequest(data, parsedMap, order);
data.setLastUpdate(new Date(Tools.getNow()));
data.save();
try {
ret.add(new MediumForReturn(data));
} catch (JSONException e) {
sk.iway.iwcm.Logger.error(e);
}
}
break;
case "remove":
mediaId = Tools.getIntValue(parsedMap.get("id"), -1);
if(mediaId > -1){
new MediaDB().deleteByIds(mediaId);
}
break;
default:
//System.out.println("!!!!!Action not found!!!!");
break;
}
}
return ret;
}
@Override
public String getError() {
return null;
}
/**
* Getter for form input errors.
* @return List of DataTablesFieldError
*/
@Override
public List<DataTablesFieldError> getFieldErrors() {
return fieldErrors;
}
@Override
public boolean canSave(Identity user) {
//TODO: nejako lepsie kontrolovat pravo, napr. ci mozem editovat danu stranku
return !(user==null || !user.isAdmin());
}
private Media fillDataFromRequest(Media data,Map<String, String> parsedRequest, boolean checkEmpty ){
if(data != null) {
int order = Tools.getIntValue(parsedRequest.get("order"), 0);
String title = parsedRequest.get("title");
String link_url = parsedRequest.get("link_url");
String thumbLink = parsedRequest.get("thumbLink");
String groupsInput = parsedRequest.get("groups");
data.setMediaSortOrder(order);
String[] groupsIntputArray = groupsInput.split(",");
// naplnim grupy
List<MediaGroupBean> mediaGroups = new ArrayList<>();
for (String g : groupsIntputArray) {
MediaGroupBean mediaGroup = MediaDB.getGroup(Tools.getIntValue(g, -1));
if (mediaGroup != null) mediaGroups.add(mediaGroup);
}
if(checkEmpty) {
if (mediaGroups.size() > 0) data.setGroups(mediaGroups);
if (Tools.isNotEmpty(title)) data.setMediaTitleSk(title);
if (Tools.isNotEmpty(link_url)) data.setMediaLink(link_url);
if (Tools.isNotEmpty(thumbLink)) data.setMediaThumbLink(thumbLink);
}else{
data.setGroups(mediaGroups);
data.setMediaTitleSk(title);
data.setMediaLink(link_url);
data.setMediaThumbLink(thumbLink);
}
String mediaGroupsNames = mediaGroups.stream().map( n -> n.getMediaGroupName() )
.collect( Collectors.joining( ", " ) );
data.setMediaGroup(mediaGroupsNames);
}
return data;
}
}