private void doExecuteRemoveContentsFromSectionCommand( final RemoveContentsFromSectionCommand command) { Preconditions.checkNotNull(command.getSection(), "section cannot be null"); Preconditions.checkNotNull(command.getRemover(), "remover cannot be null"); Preconditions.checkNotNull(command.getContentsToRemove(), "content to remove cannot be null"); final UserEntity remover = userDao.findByKey(command.getRemover()); final MenuItemEntity section = doResolveSection(command.getSection()); final MenuItemAccessResolver menuItemAccessResolver = new MenuItemAccessResolver(groupDao); for (ContentKey contentKey : command.getContentsToRemove()) { final SectionContentEntity sectionContentToRemove = section.getSectionContent(contentKey); Preconditions.checkNotNull( sectionContentToRemove, "content in section (" + section.getKey() + ") not found: " + contentKey); final boolean contentIsApprovedInSection = sectionContentToRemove.isApproved(); if (contentIsApprovedInSection) { menuItemAccessResolver.checkAccessToUnapproveContentInSection( remover, section, "Cannot remove approved content from section."); } else { menuItemAccessResolver.checkAccessToRemoveUnapprovedContentFromSection( remover, section, "Cannot remove unapproved content from section."); } final ContentEntity content = contentDao.findByKey(contentKey); content.removeSectionContent(command.getSection()); sectionContentDao.getHibernateTemplate().flush(); sectionContentDao .getHibernateTemplate() .getSessionFactory() .evictCollection(MenuItemEntity.class.getName() + ".sectionContents", section.getKey()); removeContentHomeIfThisSectionIs(content, section); indexTransactionService.registerUpdate(content.getKey(), true); } }
private void removeContentHomeIfThisSectionIs( final ContentEntity content, final MenuItemEntity section) { final ContentHomeEntity contentHome = content.getContentHome(section.getSite().getKey()); if (contentHome != null && contentHome.getMenuItem() == null) { content.removeContentHome(section.getSite().getKey()); contentHomeDao.delete(contentHome); } else if (contentHome != null && section.getKey() == contentHome.getMenuItem().getKey()) { content.removeContentHome(section.getSite().getKey()); contentHomeDao.delete(contentHome); } contentHomeDao .getHibernateTemplate() .getSessionFactory() .evictCollection(ContentEntity.class.getName() + ".contentHomes", content.getKey()); }
private void doExecuteAddContentToSectionCommand(final AddContentToSectionCommand command) { Preconditions.checkNotNull(command, "a command is required"); Preconditions.checkNotNull( command.getContributor(), "the command's contributor argument is required"); Preconditions.checkNotNull(command.getContent(), "the command's content argument is required"); Preconditions.checkNotNull(command.getSection(), "the command's section argument is required"); if (!command.isApproveInSection()) { Preconditions.checkArgument( !command.isAddOnTop(), "no point in adding content to top when not approving"); } final ContentEntity content = contentDao.findByKey(command.getContent()); Preconditions.checkNotNull(content, "content does not exist: " + command.getContent()); Preconditions.checkArgument( !content.isDeleted(), "content is deleted: " + command.getContent()); final MenuItemEntity section = doResolveSection(command.getSection()); if (!section.isOrderedSection()) { Preconditions.checkArgument( command.getOrderContentsInSectionCommand() == null, "section is not ordered, did not expect to get order specified in command"); } final UserEntity contributor = doResolveUser(command.getContributor(), "contributor"); final MenuItemAccessResolver menuItemAccessResolver = new MenuItemAccessResolver(groupDao); menuItemAccessResolver.checkAccessToAddContentToSection( contributor, section, "Cannot add content in section."); if (command.isApproveInSection()) { menuItemAccessResolver.checkAccessToApproveContentInSection( contributor, section, "Cannot approve content in section."); } if (section.isSection() && section.hasSectionContentTypeFilter()) { if (!section.supportsSectionContentType(content.getCategory().getContentType())) { throw new ContentTypeNotSupportedException(content.getCategory().getContentType(), section); } } else if (section.getType() == MenuItemType.PAGE && section.getPage().getTemplate().getContentTypes().size() > 0) { if (!section .getPage() .getTemplate() .supportsContentType(content.getCategory().getContentType())) { throw new ContentTypeNotSupportedException(content.getCategory().getContentType(), section); } } final SectionContentEntity sectionContent = new SectionContentEntity(); sectionContent.setOrder(0); sectionContent.setContent(content); sectionContent.setMenuItem(section); sectionContent.setApproved(command.isApproveInSection()); sectionContent.setTimestamp(timeService.getNowAsDateTime().toDate()); if (command.isAddOnTop() && section.isOrderedSection()) { sectionContent.setOrder(resolveOrderValueForInsertOnTopOfApprovedContentInSection(section)); } content.addSectionContent(sectionContent); sectionContentDao.getHibernateTemplate().flush(); sectionContentDao .getHibernateTemplate() .getSessionFactory() .evictCollection(MenuItemEntity.class.getName() + ".sectionContents", section.getKey()); if (!content.hasHome(section.getSite().getKey())) { doSetContentHome(content, section, null); } if (section.isOrderedSection()) { if (command.getOrderContentsInSectionCommand() != null) { // ensure section will have it's newly added content sectionContentDao.getHibernateTemplate().refresh(section); List<ContentKey> wantedOrder = command.getOrderContentsInSectionCommand().getWantedOrder(); ContentsInSectionOrderer orderer = new ContentsInSectionOrderer(wantedOrder, section, ORDER_SPACE); orderer.order(); } } indexTransactionService.registerUpdate(command.getContent(), true); }