/*
* Copyright (c) 2015 Ushahidi Inc
*
* 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 in the file LICENSE-AGPL. If not, see
* https://www.gnu.org/licenses/agpl-3.0.html
*/
package com.ushahidi.platform.mobile.app.presentation.model.mapper;
import com.ushahidi.platform.mobile.app.domain.entity.Post;
import com.ushahidi.platform.mobile.app.presentation.model.PostModel;
import android.support.annotation.NonNull;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
/**
* Maps {@link Post} onto {@link PostModel}
*
* @author Ushahidi Team <team@ushahidi.com>
*/
public class PostModelDataMapper {
private TagModelDataMapper mTagModelDataMapper;
private PostValueModelDataMapper mPostValueModelDataMapper;
private PostFormModelDataMapper mPostFormModelDataMapper;
private PostCompletedStagesDataModelDataMapper mPostCompletedStagesDataModelDataMapper;
private AllowedPrivilegesModelDataMapper mAllowedPrivilegesModelDataMapper;
private PostUserModelDataMapper mPostUserModelDataMapper;
private PostPublishedToModelDataMapper mPostPublishedToModelDataMapper;
/**
* Default constructor
*
* @param tagModelDataMapper The tag model data mapper to use for initialization
* @param postValueModelDataMapper The post value model data mapper to use for initialization
* @param postFormModelDataMapper The form model data mapper
*/
@Inject
public PostModelDataMapper(TagModelDataMapper tagModelDataMapper,
PostValueModelDataMapper postValueModelDataMapper,
PostFormModelDataMapper postFormModelDataMapper,
PostCompletedStagesDataModelDataMapper postCompletedStagesDataModelDataMapper,
AllowedPrivilegesModelDataMapper allowedPrivilegesModelDataMapper,
PostUserModelDataMapper postUserModelDataMapper,
PostPublishedToModelDataMapper postPublishedToModelDataMapper) {
mTagModelDataMapper = tagModelDataMapper;
mPostValueModelDataMapper = postValueModelDataMapper;
mPostFormModelDataMapper = postFormModelDataMapper;
mPostCompletedStagesDataModelDataMapper = postCompletedStagesDataModelDataMapper;
mAllowedPrivilegesModelDataMapper = allowedPrivilegesModelDataMapper;
mPostUserModelDataMapper = postUserModelDataMapper;
mPostPublishedToModelDataMapper = postPublishedToModelDataMapper;
}
/**
* Maps {@link Post} to {@link Post}
*
* @param post The {@link Post} to be
* mapped
* @return The {@link Post} entity
*/
public PostModel map(@NonNull Post post) {
PostModel postModel = new PostModel();
postModel._id = post._id;
postModel.setStatus(PostModel.Status.valueOf(post.getStatus().name()));
postModel.setTitle(post.getTitle());
postModel.setCreated(post.getCreated());
postModel.setUpdated(post.getUpdated());
postModel.setType(PostModel.Type.valueOf(post.getType().name()));
postModel.setSlug(post.getSlug());
postModel.setTags(mTagModelDataMapper.map(post.getTags()));
postModel.setAuthorEmail(post.getAuthorEmail());
postModel.setAuthorRealname(post.getAuthorRealname());
postModel.setContent(post.getContent());
postModel.setDeploymentId(post.getDeploymentId());
postModel.setParent(post.getParent());
postModel.setValues(mPostValueModelDataMapper.map(post.getValues()));
postModel.setCompletedStages(post.getCompletedStages());
postModel.setFormModel(mPostFormModelDataMapper.map(post.getPostForm()));
postModel.setPostUserModel(mPostUserModelDataMapper.map(post.getPostUser()));
return postModel;
}
/**
* Maps {@link PostModel} onto {@link Post}
*
* @param postModel The post model to be mapped
* @return The Post
*/
public Post map(@NonNull PostModel postModel) {
Post post = new Post();
post._id = postModel._id;
post.setStatus(Post.Status.valueOf(postModel.getStatus().name()));
post.setTitle(postModel.getTitle());
post.setCreated(postModel.getCreated());
post.setUpdated(postModel.getUpdated());
post.setType(Post.Type.valueOf(postModel.getType().name()));
post.setSlug(postModel.getSlug());
post.setTags(mTagModelDataMapper.unmap(postModel.getTags()));
post.setAuthorEmail(postModel.getAuthorEmail());
post.setAuthorRealname(postModel.getAuthorRealname());
post.setContent(postModel.getContent());
post.setDeploymentId(postModel.getDeploymentId());
post.setValues(mPostValueModelDataMapper.map(postModel.getValues()));
post.setCompletedStages(postModel.getCompletedStages());
post.setPostForm(mPostFormModelDataMapper.map(postModel.getPostFormModel()));
return post;
}
/**
* Maps a list {@link Post} into a list of {@link Post}.
*
* @param postList List to be mapped.
* @return {@link Post}
*/
public List<PostModel> map(List<Post> postList) {
List<PostModel> postModelList = new ArrayList<>();
PostModel postModel;
for (Post post : postList) {
postModel = map(post);
if (postModel != null) {
postModelList.add(postModel);
}
}
return postModelList;
}
}