/*
* Copyright [duowan.com]
* Web Site: http://www.duowan.com
* Since 2005 - 2013
*/
package com.fpcms.service.impl;
import static com.github.rapid.common.util.holder.BeanValidatorHolder.validateWithException;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import com.github.rapid.common.util.page.Page;
import com.fpcms.common.blog_post.Blog;
import com.fpcms.common.blog_post.impl.MetaWeblogBlogPoster;
import com.fpcms.common.util.URLUtil;
import com.fpcms.dao.BlogExternalDao;
import com.fpcms.model.BlogExternal;
import com.fpcms.query.BlogExternalQuery;
import com.fpcms.service.BlogExternalService;
/**
* [BlogExternal] 的业务操作实现类
*
* @author badqiu email:badqiu(a)gmail.com
* @version 1.0
* @since 1.0
*/
@Service("blogExternalService")
@Transactional
public class BlogExternalServiceImpl implements BlogExternalService {
protected static final Logger log = LoggerFactory.getLogger(BlogExternalServiceImpl.class);
//
// 请删除无用的方法,代码生成器只是为你生成一个架子
//
private BlogExternalDao blogExternalDao;
/**增加setXXXX()方法,spring就可以通过autowire自动设置对象属性,请注意大小写*/
public void setBlogExternalDao(BlogExternalDao dao) {
this.blogExternalDao = dao;
}
/**
* 创建BlogExternal
**/
public BlogExternal create(BlogExternal blogExternal) {
Assert.notNull(blogExternal,"'blogExternal' must be not null");
initDefaultValuesForCreate(blogExternal);
new BlogExternalChecker().checkCreateBlogExternal(blogExternal);
blogExternalDao.insert(blogExternal);
return blogExternal;
}
/**
* 更新BlogExternal
**/
public BlogExternal update(BlogExternal blogExternal) {
Assert.notNull(blogExternal,"'blogExternal' must be not null");
new BlogExternalChecker().checkUpdateBlogExternal(blogExternal);
blogExternalDao.update(blogExternal);
return blogExternal;
}
/**
* 删除BlogExternal
**/
public void removeById(String blogUrl, String username) {
blogExternalDao.deleteById(blogUrl,username);
}
/**
* 根据ID得到BlogExternal
**/
public BlogExternal getById(String blogUrl, String username) {
return blogExternalDao.getById(blogUrl,username);
}
/**
* 分页查询: BlogExternal
**/
@Transactional(readOnly=true)
public Page<BlogExternal> findPage(BlogExternalQuery query) {
Assert.notNull(query,"'query' must be not null");
return blogExternalDao.findPage(query);
}
/**
* 为创建时初始化相关默认值
**/
public void initDefaultValuesForCreate(BlogExternal blogExternal) {
}
/**
* BlogExternal的属性检查类,根据自己需要编写自定义检查
**/
public static class BlogExternalChecker {
/**可以在此检查只有更新才需要的特殊检查 */
public void checkUpdateBlogExternal(BlogExternal blogExternal) {
checkBlogExternal(blogExternal);
}
/**可以在此检查只有创建才需要的特殊检查 */
public void checkCreateBlogExternal(BlogExternal blogExternal) {
checkBlogExternal(blogExternal);
}
/** 检查到有错误请直接抛异常,不要使用 return errorCode的方式 */
public void checkBlogExternal(BlogExternal blogExternal) {
// Bean Validator检查,属性检查失败将抛异常
validateWithException(blogExternal);
URLUtil.assertURL(blogExternal.getBlogUrl(),"blogUrl is error");
URLUtil.assertURL(blogExternal.getBlogRpcUrl(),"blogRpcUrl is error");
//复杂的属性的检查一般需要分开写几个方法,如 checkProperty1(v),checkProperty2(v)
}
}
private MetaWeblogBlogPoster newMetaWeblogBlogPoster(BlogExternal be) {
Assert.notNull(be,"BlogExternal must be not null");
MetaWeblogBlogPoster bp = new MetaWeblogBlogPoster();
bp.setUsername(be.getUsername());
bp.setPassword(be.getPassword());
bp.setBlogUrl(be.getBlogUrl());
if(StringUtils.isNotBlank(be.getCategories())) {
bp.setCategories(be.getCategories().split(","));
}
return bp;
}
@Override
public List<BlogExternal> findAll() {
return blogExternalDao.findAll();
}
@Override
public void postNewBlog(BlogExternal be, Blog blog) {
MetaWeblogBlogPoster blogPoster = newMetaWeblogBlogPoster(be);
blogPoster.postBlog(blog);
be.setBlogPostCount(be.getBlogPostCount() + 1);
update(be);
}
}