package com.idega.block.article.bean.article_view;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.logging.Level;
import org.directwebremoting.annotations.Param;
import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.directwebremoting.spring.SpringCreator;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import com.idega.block.article.bean.ArticleItemBean;
import com.idega.block.article.business.ArticleConstants;
import com.idega.block.article.component.article_view.ArticleEdit;
import com.idega.builder.business.BuilderLogic;
import com.idega.core.business.DefaultSpringBean;
import com.idega.core.component.bean.RenderedComponent;
import com.idega.dwr.business.DWRAnnotationPersistance;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.util.CoreConstants;
import com.idega.util.CoreUtil;
import com.idega.util.IWTimestamp;
import com.idega.util.ListUtil;
import com.idega.util.StringUtil;
@Service(ArticleServices.SERVICE)
@Scope(BeanDefinition.SCOPE_SINGLETON)
@RemoteProxy(creator=SpringCreator.class, creatorParams={
@Param(name="beanName", value=ArticleServices.SERVICE),
@Param(name="javascript", value=ArticleServices.DWR_SERVICE)
}, name=ArticleServices.DWR_SERVICE)
public class ArticleServices extends DefaultSpringBean implements DWRAnnotationPersistance {
public static final String SERVICE = "articleServices";
public static final String DWR_SERVICE = "ArticleServices";
public ArticleItemBean getArticleItemBean(String uri) throws IOException{
ArticleItemBean article = new ArticleItemBean();
if(StringUtil.isEmpty(uri) || (uri.equals(CoreConstants.SLASH))){
article.createItemFolder();
}else{
article.setResourcePath(uri);
article.load();
}
return article;
}
@RemoteMethod
public RenderedComponent getArticleEditForm(String url){
ArticleEdit articleEdit = new ArticleEdit();
RenderedComponent editForm = BuilderLogic.getInstance().getRenderedComponent(articleEdit, null);
return editForm;
}
@RemoteMethod
public Map<String,String> saveArticle(Map<String,String> saveValues,Map<String,Collection<String>> collectionValues){
IWContext iwc = CoreUtil.getIWContext();
IWResourceBundle iwrb = getBundle(ArticleConstants.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
Map<String,String> reply = new HashMap<String,String>();
if(saveValues == null){
reply.put("status", "failed");
reply.put("message",iwrb.getLocalizedString("saving_failed", "Saving failed"));
return reply;
}
String uri = saveValues.get("articleUri");
ArticleItemBean articleItemBean;
if(StringUtil.isEmpty(uri)){
articleItemBean = new ArticleItemBean();
}else{
try {
articleItemBean = getArticleItemBean(uri);
} catch (IOException e) {
getLogger().log(Level.WARNING, "Failed saving article", e);
reply.put("status", "failed");
reply.put("message",iwrb.getLocalizedString("saving_failed", "Saving failed"));
return reply;
}
}
if(!articleItemBean.isAllowedToEditByCurrentUser(iwc)){
reply.put("status", "failed");
String message = iwrb.getLocalizedString("saving_failed", "Saving failed")
+" : \n"+ iwrb.getLocalizedString("permission_denied", "Permission denied");
reply.put("message",message);
return reply;
}
articleItemBean.setHeadline(saveValues.get("headline"));
articleItemBean.setBody(saveValues.get("body"));
articleItemBean.setTeaser(saveValues.get("teaser"));
articleItemBean.setAuthor(iwc.getCurrentUser().getDisplayName());
articleItemBean.setName(saveValues.get("headline"));
articleItemBean.setPublishedDate(IWTimestamp.getTimestampRightNow());
articleItemBean.setLocale(iwc.getCurrentLocale());
articleItemBean.setArticleCategories(collectionValues.get("articleCategories"));
Collection<String> permissionGroups = collectionValues.get("permissionGroups");
if(!ListUtil.isEmpty(permissionGroups)){
HashSet<Integer> editors = new HashSet<Integer>(permissionGroups.size());
for(String id : permissionGroups){
editors.add(Integer.valueOf(id));
}
articleItemBean.setAllowedToEditByGroupsIds(editors);
}
articleItemBean.store();
reply.put("status", "success");
reply.put("message",iwrb.getLocalizedString("article_saved", "Article saved"));
return reply;
}
}