/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.content.document.service;
import static com.ewcms.common.lang.EmptyUtil.isNotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ewcms.content.document.dao.ArticleDAO;
import com.ewcms.content.document.dao.RelationDAO;
import com.ewcms.content.document.model.Article;
import com.ewcms.content.document.model.Relation;
/**
*
* @author 吴智俊
*/
@Service
public class RelationService implements RelationServiceable {
@Autowired
private ArticleDAO articleDAO;
@Autowired
private RelationDAO relationDAO;
@Override
public void deleteRelation(Long articleId, Long[] relationArticleIds) {
if (articleId != null && relationArticleIds != null && relationArticleIds.length > 0){
HashSet<Long> hasSets = new HashSet<Long>(Arrays.asList(relationArticleIds));
Article article = articleDAO.get(articleId);
List<Relation> relations_old = article.getRelations();
List<Relation> relations_sort = relationDAO.findRelationByArticle(articleId);
for (Long relationArticleId : hasSets){
for (Relation relation : relations_old){
if (relationArticleId.longValue() == relation.getArticle().getId().longValue()){
relations_sort.remove(relation);
}
}
}
Integer sort = 1;
List<Relation> relations_new = new ArrayList<Relation>();
for (Relation relation : relations_sort){
relation.setSort(sort);
relations_new.add(relation);
sort++;
}
article.setRelations(relations_new);
articleDAO.merge(article);
}
}
@Override
public void downRelation(Long articleId, Long[] relationArticleIds) {
if (articleId != null && relationArticleIds != null && relationArticleIds.length == 1){
Article article = articleDAO.get(articleId);
List<Relation> relations_old = relationDAO.findRelationByArticle(articleId);
for (Relation relation : relations_old){
Long relation_article_id = relation.getArticle().getId();
if (relation_article_id.longValue() == relationArticleIds[0].longValue()){
Integer sort = relation.getSort();
if (sort.longValue() < relations_old.size()){
sort = sort + 1;
Relation relation_prev = relationDAO.findRelationByArticleAndSort(articleId, sort);
relation_prev.setSort(sort - 1);
relation.setSort(sort);
relations_old.add(relation);
relations_old.add(relation_prev);
break;
}
}
}
article.setRelations(relations_old);
articleDAO.merge(article);
}
}
@Override
public void saveRelation(Long articleId, Long[] relationArticleIds) {
if (articleId != null && relationArticleIds != null && relationArticleIds.length > 0){
HashSet<Long> hasSets = new HashSet<Long>(Arrays.asList(relationArticleIds));
Article article = articleDAO.get(articleId);
List<Relation> relations = article.getRelations();
if (relations.isEmpty()){
relations = new ArrayList<Relation>();
}
Integer relation_count = relations.size();
Relation relation = null;
for (Long relationArticleId : hasSets){
relation = relationDAO.findRelationByArticleAndRelation(articleId, relationArticleId);
if (isNotNull(relation)) continue;
relation_count++;
relation = new Relation();
Article relation_article = articleDAO.get(relationArticleId);
relation.setSort(relation_count);
relation.setArticle(relation_article);
relations.add(relation);
}
article.setRelations(relations);
articleDAO.merge(article);
}
}
@Override
public void upRelation(Long articleId, Long[] relationArticleIds) {
if (articleId != null && relationArticleIds != null && relationArticleIds.length == 1){
Article article = articleDAO.get(articleId);
List<Relation> relations_old = relationDAO.findRelationByArticle(articleId);
for (Relation relation : relations_old){
Long relation_article_id = relation.getArticle().getId();
if (relation_article_id.longValue() == relationArticleIds[0].longValue()){
Integer sort = relation.getSort();
if (sort.longValue() > 1){
sort = sort - 1;
Relation relation_prev = relationDAO.findRelationByArticleAndSort(articleId, sort);
relation_prev.setSort(sort + 1);
relation.setSort(sort);
relations_old.add(relation);
relations_old.add(relation_prev);
break;
}
}
}
article.setRelations(relations_old);
articleDAO.merge(article);
}
}
@Override
public List<Relation> findRelationByArticle(Long articleId) {
return relationDAO.findRelationByArticle(articleId);
}
}