SitePageBean.java 5 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.beans;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.facade.LanEventFacade;
import fi.codecrew.moya.facade.SitePageFacade;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.PageContent;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.SitePage;

/**
 * Session Bean implementation class SitePageBean
 */
@Stateless
@LocalBean
@DeclareRoles({
		ContentPermission.S_MANAGE_PAGES,
		ContentPermission.S_MANAGE_NEWS,
		ContentPermission.S_MANAGE_ACTIONLOG,

})
public class SitePageBean implements SitePageBeanLocal {

	/**
	 * Default constructor.
	 */
	public SitePageBean() {
		// TODO Auto-generated constructor stub
	}

	@EJB
	private SitePageFacade sitepagefacade;

	@EJB
	private EventBeanLocal eventbean;

	@EJB
	private PermissionBeanLocal permbean;
	@EJB
	private UserBean userbean;

	private Logger logger = LoggerFactory.getLogger(SitePageBean.class);

	@EJB
	private LanEventFacade eventFacade;

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
	public void create(SitePage sitepage) {
		sitepage.setEvent(eventbean.getCurrentEvent());
		sitepagefacade.create(sitepage);
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
	public SitePage save(SitePage sitepage) {
		return sitepagefacade.merge(sitepage);
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
	public PageContent createContent(SitePage sitepage) {
		sitepage = sitepagefacade.find(sitepage.getId());
		PageContent ret = new PageContent(sitepage);
		if (sitepage.getContents() == null)
		{
			sitepage.setContents(new ArrayList<PageContent>());
		}
		sitepage.getContents().add(ret);
		return ret;

	}

	@Override
	public List<SitePage> getPagerootsForUser() {
		return sitepagefacade.findForUser(permbean.getCurrentUser(), null);
	}

	@Override
	public List<SitePage> getPagesForUser(SitePage site)
	{
		return sitepagefacade.findForUser(permbean.getCurrentUser(), site);
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
	public List<SitePage> findAll() {
		return sitepagefacade.findAll();
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
	public SitePage find(Integer id) {
		return sitepagefacade.find(id);
	}

	@Override
	@PermitAll
	public List<PageContent> findContentsForUser(Integer id, Locale locale) {
		return getContentsForPage(sitepagefacade.find(id), locale);
	}

	private List<PageContent> getContentsForPage(SitePage page, Locale locale)
	{
		Set<Role> roles = userbean.localFindUsersRoles(permbean.getCurrentUser());

		List<PageContent> ret = null;
		if (page != null && page.getAllowedRoles() != null) {
			for (Role r : page.getAllowedRoles()) {
				if (roles.contains(r)) {
					ret = sitepagefacade.findContents(page, new Date(), locale);
					break;
				}
			}
		}
		return ret;
	}

	@Override
	public List<PageContent> findContentsForUser(String name, Locale locale) {
		SitePage page = sitepagefacade.find(name);
		return getContentsForPage(page, locale);
	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
	public SitePage findSitename(String managedPage) {
		return sitepagefacade.find(managedPage);

	}

	@Override
	@RolesAllowed(ContentPermission.S_MANAGE_PAGES)
	public void copySites(LanEvent copyParty, LanEvent event) {
		event = eventFacade.reload(event);
		List<SitePage> sites = sitepagefacade.findAll(copyParty);

		for (SitePage s : sites) {
			SitePage oldsite = findSitename(s.getName());
			if (oldsite != null) {
				continue;
			}
			SitePage nsite = new SitePage();
			nsite.setName(s.getName());
			nsite.setContents(new ArrayList<>());
			nsite.setEvent(event);
			for (PageContent cont : s.getContents()) {
				PageContent ncont = new PageContent();
				ncont.setContent(cont.getContent());
				ncont.setExpire(cont.getExpire());
				ncont.setLocale(cont.getLocale());
				ncont.setPublish(cont.getPublish());
				ncont.setSort(cont.getSort());
				ncont.setSitepage(nsite);
				nsite.getContents().add(ncont);
			}
			sitepagefacade.create(nsite);
		}
	}
}