/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content; import java.util.Collection; import org.springframework.util.Assert; import com.enonic.cms.core.content.resultset.RelatedChildContent; import com.enonic.cms.core.content.resultset.RelatedContent; import com.enonic.cms.core.content.resultset.RelatedContentResultSet; import com.enonic.cms.core.content.resultset.RelatedContentResultSetImpl; import com.enonic.cms.core.portal.livetrace.RelatedContentFetchTrace; import com.enonic.cms.core.portal.livetrace.RelatedContentFetchTracer; import com.enonic.cms.store.dao.ContentDao; public class RelatedContentFetcherForContentVersion extends AbstractRelatedContentFetcher { private Collection<ContentVersionEntity> originallyRequestedContentVersions; public RelatedContentFetcherForContentVersion( ContentDao contentDao, RelatedContentFetchTrace trace ) { super( contentDao, trace ); } public RelatedContentFetcherForContentVersion( ContentDao contentDao ) { super( contentDao, null ); } public RelatedContentResultSet fetch( final Collection<ContentVersionEntity> versions ) { return doFetch( versions, false ); } public RelatedContentResultSet fetch( final Collection<ContentVersionEntity> versions, final boolean includeVisited ) { return doFetch( versions, includeVisited ); } private RelatedContentResultSet doFetch( Collection<ContentVersionEntity> versions, final boolean includeVisited ) { Assert.notNull( versions, "versions cannot be null" ); originallyRequestedContentVersions = versions; relatedContentResultSet = new RelatedContentResultSetImpl(); boolean fetchChildren = maxChildrenLevel > 0; if ( fetchChildren ) { Collection<RelatedChildContent> rootRelatedChildren = doFindRelatedChildren( versions ); RelatedContentFetchTracer.traceChildrenFetch( 1, rootRelatedChildren.size(), trace ); if ( versions.size() > 0 ) { doAddAndFetchChildren( rootRelatedChildren, maxChildrenLevel, includeVisited ); for ( RelatedChildContent rootRelatedChild : rootRelatedChildren ) { relatedContentResultSet.addRootRelatedChild( rootRelatedChild ); } } } return relatedContentResultSet; } @Override protected boolean isAddable( final RelatedContent relatedToAdd, final boolean includeVisited ) { final ContentEntity content = relatedToAdd.getContent(); final boolean contentIsAllreadyVisited = visitedChildRelatedContent.contains( relatedToAdd.getContent().getKey() ); final boolean contentVersionIsInOriginallyRequestedContentVersionSet = originallyRequestedContentVersions.contains( content.getMainVersion() ); return ( includeVisited || !contentIsAllreadyVisited ) && !contentVersionIsInOriginallyRequestedContentVersionSet; } }