/**
* Copyright (C) Gadglet .
*
* This file is part of Gadglet
*
* Gadglet is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Gadglet is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Gadglet. If not, see <http://www.gnu.org/licenses/>.
*/
package com.gadglet.gadgets.discussions.server;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Logger;
import com.gadglet.core.BizletRequestHandler;
import com.gadglet.core.GadgletRequestWrapper;
import com.gadglet.core.GadgletResponse;
import com.gadglet.core.GadgletResponse.ContentRecord;
import com.gadglet.core.RequestException;
import com.gadglet.data.DomainUser;
import com.gadglet.data.DomainUserUtils;
import com.gadglet.data.SharedItemReff;
import com.gadglet.data.utils.ContentItemHelper;
import com.gadglet.data.utils.HasMoreItems;
import com.gadglet.gadgets.discussions.shared.Params;
import com.gadglet.params.FieldErrorTypes;
import com.gadglet.params.GadgetViewState;
import com.gadglet.params.ProfileFields;
import com.gadglet.params.ReqErrorTypes;
import com.gadglet.params.SharingType;
public class RequestHandler extends BizletRequestHandler {
Logger log = Logger.getLogger(this.getClass().getName());
private final ContentItemHelper helper = new ContentItemHelper();
/**
* Delete Personal note
* */
@Override
public void doDelete(GadgletRequestWrapper request, GadgletResponse response)
throws RequestException {
helper.delete(request, DiscussionsList.class);
}
/**
* Share Personal note with a friend
* */
@Override
public void doShare(GadgletRequestWrapper request, GadgletResponse res)
throws RequestException {
helper.shareItem(request, DiscussionsList.class);
}
/**
* Return a list of Domain user friends and their sharing definition for a given personal
* note item
* */
@Override
public void doSharedList(GadgletRequestWrapper request, GadgletResponse res)
throws RequestException {
DiscussionsList item = (DiscussionsList) helper
.getSingleItemByKey(request, DiscussionsList.class);
if (!item.isOwnedByMe(request))
throw new RequestException(ReqErrorTypes.UNAUTHORIZED_OPERATION);
item.getDomainFriendsSharing(request, res);
}
@Override
public void doAdd(GadgletRequestWrapper request, GadgletResponse response)
throws RequestException {
String discussionText = request.getParameter(Params.DISCUSSION_TEXT.getParamName());
if (discussionText == null || discussionText.isEmpty()) {
response.addFieldError(Params.DISCUSSION_TEXT.getParamName(),
FieldErrorTypes.FIELD_IS_EMPTY);
throw new RequestException(ReqErrorTypes.MISSING_ARGUMENT);
}
DiscussionsList item = new DiscussionsList(discussionText, request);
helper.saveNew(item);
}
@Override
public void doUpdate(GadgletRequestWrapper request, GadgletResponse response)
throws RequestException {
// check imput
String discussionText = request.getParameter(Params.DISCUSSION_TEXT.getParamName());
if (discussionText == null || discussionText.isEmpty()) {
response.addFieldError(Params.DISCUSSION_TEXT.getParamName(),
FieldErrorTypes.FIELD_IS_EMPTY);
throw new RequestException(ReqErrorTypes.MISSING_ARGUMENT);
}
DiscussionsList item = (DiscussionsList) helper
.getSingleItemByKey(request, DiscussionsList.class);
item.setDiscussion(discussionText);
helper.updated(null, item, request);
}
/**
* Return a list of bookmarks
* */
@Override
public void doView(GadgletRequestWrapper request, GadgletResponse response)
throws RequestException {
HasMoreItems hasMore = new HasMoreItems();
int returnedItems;
HashMap<String, Object> params = null;
List<DiscussionsList> items = (List<DiscussionsList>) helper
.getSharedItems(request, DiscussionsList.class,
request.getFilterBy(),
request.getFilterByDeclaration(), params,
request.getOrderBy(), request.getStartFrom(),
request.getItemNum(), hasMore);
returnedItems = items.size();
if (hasMore.isTrue()) {
response.setHasMore(true);
returnedItems = returnedItems - 1;
} else
response.setHasMore(false);
response.setAddPermit(true);
response.setTotalItemsNum(returnedItems);
int count = 0;
for (DiscussionsList item : items) {
// exit in the last item
if (count++ == returnedItems)
break;
String title = null;
if (!request.getGadgetViewState().equals(GadgetViewState.CANVAS)
&& item.getDiscussion().length() > 40)
title = item.getDiscussion().substring(0, 40) + "...";
else
title = item.getDiscussion();
ContentRecord record = response.newItem();
record.addItemKeyField(item.getContentItemKey());
record.addItemField(Params.DISCUSSION_TEXT.getParamName(), title);
List<SharedItemReff> shares = item.getSharedItemReff();
boolean isOwner = false;
boolean isEditor = false;
if (shares != null) {
for (SharedItemReff share : shares) {
if (share.getSharedWithId().equals(
request.getCurrentUserId())
&& share.getSharingType().equals(SharingType.OWNER)) {
isOwner = true;
isEditor = true;
}
if (share.getSharedWithId().equals(
request.getCurrentUserId())
&& share.getSharingType().equals(SharingType.EDIT))
isEditor = true;
}
record.setGadgetPermissions(isEditor, isOwner, isOwner);
if (!isOwner) {
// send info about the owner need to change !!!!
DomainUser owner = DomainUserUtils.getDomainUserByUniqueId(
item.getOwnerId(), request.getCurrentDomainUser()
.getAccount());
record.addItemField(
ProfileFields.PROFILE_NICKNAME.getParamName(),
owner.getNickName());
record.addItemField(
ProfileFields.PROFILE_TITLE.getParamName(),
owner.getTitle());
if (owner.getPhotoUrl() != null
&& owner.getPhotoUrl().length() > 0)
record.addItemField(ProfileFields.PROFILE_THUMBNAILURL
.getParamName(), owner.getPhotoUrl());
}
}
}
}
}