/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content.resultset; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import com.enonic.cms.core.content.ContentEntity; import com.enonic.cms.core.content.ContentKey; import com.enonic.cms.core.content.ContentVersionEntity; import com.enonic.cms.core.content.ContentVersionKey; /** * Nov 8, 2010 */ public class RelatedContentResultSetWithOverridingContent implements RelatedContentResultSet { private RelatedContentResultSet source; private ContentEntity overridingContent; public RelatedContentResultSetWithOverridingContent( RelatedContentResultSet source, ContentEntity overridingContent ) { this.source = source; this.overridingContent = overridingContent; } public int size() { return source.size(); } public boolean isEmpty() { return source.isEmpty(); } public Collection<RelatedContent> getDistinctCollectionOfRelatedContent() { final Collection<RelatedContent> sourceCollection = source.getDistinctCollectionOfRelatedContent(); List<RelatedContent> overridingCollection = new ArrayList<RelatedContent>( sourceCollection.size() ); for ( RelatedContent rc : sourceCollection ) { if ( rc.getContent().equals( overridingContent ) ) { overridingCollection.add( doCreateOverridingRelatedContent( rc ) ); } else { overridingCollection.add( rc ); } } return overridingCollection; } public Set<ContentEntity> getDinstinctSetOfContent() { return source.getDinstinctSetOfContent(); } public Collection<ContentKey> getContentKeys() { return source.getContentKeys(); } public Iterable<RelatedParentContent> getRootRelatedParents( ContentEntity content ) { return source.getRootRelatedParents( content ); } public Iterable<RelatedChildContent> getRootRelatedChildren( ContentVersionEntity contentVersion ) { return source.getRootRelatedChildren( contentVersion ); } public RelatedContent getRelatedContent( ContentKey contentKey ) { return source.getRelatedContent( contentKey ); } public void overwriteRootRelatedChild( RelatedChildContent overwritingRCC ) { source.overwriteRootRelatedChild( overwritingRCC ); } public void overwrite( RelatedContentResultSet overwritingSet ) { source.overwrite( overwritingSet ); } public void retainRelatedRootChildren( ContentVersionKey parent, Collection<ContentKey> children ) { source.retainRelatedRootChildren( parent, children ); } private RelatedContent doCreateOverridingRelatedContent( RelatedContent relatedContent ) { if ( relatedContent instanceof RelatedChildContent ) { RelatedChildContent rcc = (RelatedChildContent) relatedContent; return new RelatedChildContent( rcc.getParentVersionKey(), overridingContent ); } else { RelatedParentContent rpc = (RelatedParentContent) relatedContent; return new RelatedParentContent( rpc.getChildContentKey(), overridingContent, overridingContent.getMainVersion().getKey() ); } } }