package com.usemodj.forum.service;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import com.usemodj.forum.domain.Meta;
import com.usemodj.forum.domain.Post;
import com.usemodj.forum.mappers.MetaMapper;
import com.usemodj.forum.mappers.PostMapper;
import com.usemodj.struts.Paginate;
public class PostService {
private static Logger logger = Logger.getLogger( PostService.class);
PostMapper postMapper = null;
MetaMapper metaMapper = null;
public List<Post> getPosts(SqlSession sqlSession, String view, Paginate p) throws Exception {
postMapper = sqlSession.getMapper( PostMapper.class);
List<Post> posts = postMapper.selectPosts( p.getObjectId(), view, new RowBounds( (int) p.getOffset(), p.getPerPage()));
if( null != posts && posts.size()>0) appendPostMeta( sqlSession, posts, "bb_post");
p.setResults(posts);
return posts;
}
private void appendPostMeta(SqlSession sqlSession, List<Post> posts, String objectType) throws Exception {
Map<Long, Post> postMap = new LinkedHashMap<Long, Post>();
for( Post p : posts) {
postMap.put(p.getPostId(), p);
}
Set keys = postMap.keySet();
if( keys.size()> 0){
metaMapper = sqlSession.getMapper( MetaMapper.class);
List<Meta> metas = metaMapper.selectMetaLongArr( (Long[])keys.toArray( new Long[0]), objectType);
//List<Meta> metas = metaMapper.selectMetaIN( ArrayUtils.toPrimitive( (Long[])keys.toArray( new Long[0])), objectType);
for( Meta meta: metas){
long postId = meta.getObjectId();
Post p = postMap.get( postId);
p.setMetaValue(meta.getMetaKey(), meta.getMetaValue());
}
}
}
public int getTopicVoices(SqlSession sqlSession, long topicId) throws Exception {
postMapper = sqlSession.getMapper( PostMapper.class);
int voices = postMapper.selectTopicVoices( topicId);
return voices;
}
}