/* * 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 com.enonic.cms.core.content.ContentEntity; import com.enonic.cms.core.content.ContentKey; import com.enonic.cms.core.search.result.FacetsResultSet; /** * Sep 16, 2010 */ public class ContentResultSetWithOverridingContent implements ContentResultSet { private ContentResultSet source; private ContentEntity overridingContent; private Collection<ContentEntity> cachedContents; private FacetsResultSet facetsResultSet; public ContentResultSetWithOverridingContent( ContentResultSet source, ContentEntity overridingContent ) { this.source = source; this.overridingContent = overridingContent; } public ContentKey getKey( int index ) { return source.getKey( index ); } public List<ContentKey> getKeys() { return source.getKeys(); } public boolean containsContent( ContentKey contentKey ) { return source.containsContent( contentKey ); } public int getLength() { return source.getLength(); } public int getFromIndex() { return source.getFromIndex(); } public int getTotalCount() { return source.getTotalCount(); } public boolean hasErrors() { return source.hasErrors(); } public List<String> getErrors() { return source.getErrors(); } public ContentEntity getContent( int index ) { ContentEntity content = source.getContent( index ); if ( content == null ) { return null; } if ( isContentToBeOverridden( content ) ) { return overridingContent; } return content; } public Collection<ContentEntity> getContents() { Collection<ContentEntity> contents = source.getContents(); if ( cachedContents == null ) { cachedContents = ensureOverridenContentIsOverride( contents ); } return cachedContents; } public ContentResultSet createRandomizedResult( int count ) { ContentResultSet randomizedResult = source.createRandomizedResult( count ); return new ContentResultSetWithOverridingContent( randomizedResult, overridingContent ); } private boolean isContentToBeOverridden( ContentEntity content ) { return content.getKey().equals( overridingContent.getKey() ); } private Collection<ContentEntity> ensureOverridenContentIsOverride( Collection<ContentEntity> collection ) { List<ContentEntity> contentsWithOverridenContent = new ArrayList<ContentEntity>(); for ( ContentEntity content : collection ) { if ( isContentToBeOverridden( content ) ) { contentsWithOverridenContent.add( overridingContent ); } else { contentsWithOverridenContent.add( content ); } } return contentsWithOverridenContent; } @Override public FacetsResultSet getFacetsResultSet() { return facetsResultSet; } @Override public void setFacetsResultSet( final FacetsResultSet facetsResultSet ) { this.facetsResultSet = facetsResultSet; } }