/*
* Copyright (C) 2003-2011 eXo Platform SAS.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.exoplatform.social.core.storage.cache.model.data;
import org.exoplatform.social.core.activity.model.ActivityStream;
import org.exoplatform.social.core.activity.model.ExoSocialActivity;
import org.exoplatform.social.core.activity.model.ExoSocialActivityImpl;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Immutable activity data.
*
* @author <a href="mailto:alain.defrance@exoplatform.com">Alain Defrance</a>
* @version $Revision$
*/
public class ActivityData implements CacheData<ExoSocialActivity> {
private final String id;
private final String title;
private final String body;
private final String[] likes;
private final boolean isComment;
private final Long postedTime;
private final String[] replyIds;
private final String userId;
private final String appId;
private final String titleId;
private final String bodyId;
private final String type;
private final Map templateParams;
private final String externalId;
private final String url;
private final String streamId;
private final String streamOwner;
private final String streamFaviconUrl;
private final String streamSourceUrl;
private final String streamTitle;
private final String streamUrl;
private final ActivityStream.Type streamType;
public ActivityData(final ExoSocialActivity activity) {
this.id = activity.getId();
this.title = activity.getTitle();
this.body = activity.getBody();
this.likes = activity.getLikeIdentityIds();
this.isComment = activity.isComment();
this.postedTime = activity.getPostedTime();
this.replyIds = activity.getReplyToId();
this.userId = activity.getUserId();
this.appId = activity.getAppId();
this.titleId = activity.getTitleId();
this.bodyId = activity.getBodyId();
this.type = activity.getType();
this.externalId = activity.getExternalId();
this.url = activity.getUrl();
this.streamId = activity.getStreamId();
this.streamOwner = activity.getStreamOwner();
this.streamFaviconUrl = activity.getStreamFaviconUrl();
this.streamSourceUrl = activity.getStreamSourceUrl();
this.streamTitle = activity.getStreamTitle();
this.streamUrl = activity.getStreamUrl();
this.streamType = activity.getActivityStream().getType();
if (activity.getTemplateParams() != null) {
this.templateParams = Collections.unmodifiableMap(activity.getTemplateParams());
}
else {
this.templateParams = Collections.emptyMap();
}
}
public ExoSocialActivity build() {
ExoSocialActivity activity = new ExoSocialActivityImpl();
activity.setId(id);
activity.setTitle(title);
activity.setBody(body);
if (likes != null) { activity.setLikeIdentityIds(likes); }
activity.setReplyToId(replyIds);
activity.isComment(isComment);
activity.setPostedTime(postedTime);
activity.setUserId(userId);
activity.setAppId(appId);
activity.setTitleId(titleId);
activity.setBodyId(bodyId);
activity.setType(type);
activity.setTemplateParams(new HashMap<String, String>(templateParams));
activity.setExternalId(externalId);
activity.setUrl(url);
ActivityStream activityStream = activity.getActivityStream();
activityStream.setId(streamId);
activityStream.setPrettyId(streamOwner);
activityStream.setFaviconUrl(streamFaviconUrl);
activityStream.setPermaLink(streamSourceUrl);
activityStream.setTitle(streamTitle);
activityStream.setType(streamType);
activity.setActivityStream(activityStream);
return activity;
}
}