Skip to content

Commit

Permalink
Rollback Page object resolving: inject empty regions to the page obje…
Browse files Browse the repository at this point in the history
…ct when returning content #10209

-Introduced xp.content config variable resolveEmptyRegions (set to 'false' by default) that
allows to switch between previous content page resolving behavior that forces injection of all descriptor's regions into page/layout and new one where content's page object is returned as it is
-Updated core-content classes to read config variable and build page object according to it
-Updated portal-impl classes to read descriptor and inject empty regions into page if it is not being made by content api, and not to read and inject regions if it is done by content api
  • Loading branch information
ashklianko committed Jul 18, 2023
1 parent d739f41 commit 232e8f9
Show file tree
Hide file tree
Showing 46 changed files with 1,216 additions and 603 deletions.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
import com.enonic.xp.context.Context;
import com.enonic.xp.context.ContextAccessor;
import com.enonic.xp.core.internal.FileNames;
import com.enonic.xp.page.PageDescriptorService;
import com.enonic.xp.region.LayoutDescriptorService;
import com.enonic.xp.region.PartDescriptorService;
import com.enonic.xp.schema.xdata.XDataService;
import com.enonic.xp.security.User;
import com.enonic.xp.site.SiteService;
Expand All @@ -35,6 +38,12 @@ class AbstractCreatingOrUpdatingContentCommand

final List<ContentValidator> contentValidators;

protected final PageDescriptorService pageDescriptorService;

protected final PartDescriptorService partDescriptorService;

protected final LayoutDescriptorService layoutDescriptorService;

final boolean allowUnsafeAttachmentNames;

AbstractCreatingOrUpdatingContentCommand( final Builder<?> builder )
Expand All @@ -45,6 +54,9 @@ class AbstractCreatingOrUpdatingContentCommand
this.contentProcessors = List.copyOf( builder.contentProcessors );
this.contentValidators = List.copyOf( builder.contentValidators );
this.allowUnsafeAttachmentNames = builder.allowUnsafeAttachmentNames;
this.pageDescriptorService = builder.pageDescriptorService;
this.partDescriptorService = builder.partDescriptorService;
this.layoutDescriptorService = builder.layoutDescriptorService;
}

public static class Builder<B extends Builder<B>>
Expand All @@ -60,6 +72,12 @@ public static class Builder<B extends Builder<B>>

private boolean allowUnsafeAttachmentNames;

private PageDescriptorService pageDescriptorService;

private PartDescriptorService partDescriptorService;

private LayoutDescriptorService layoutDescriptorService;

Builder()
{
}
Expand All @@ -71,6 +89,9 @@ public static class Builder<B extends Builder<B>>
this.siteService = source.siteService;
this.contentProcessors = source.contentProcessors;
this.contentValidators = source.contentValidators;
this.pageDescriptorService = source.pageDescriptorService;
this.partDescriptorService = source.partDescriptorService;
this.layoutDescriptorService = source.layoutDescriptorService;
}

@SuppressWarnings("unchecked")
Expand Down Expand Up @@ -108,6 +129,24 @@ B allowUnsafeAttachmentNames( final boolean allowUnsafeAttachmentNames )
return (B) this;
}

B pageDescriptorService( final PageDescriptorService pageDescriptorService )
{
this.pageDescriptorService = pageDescriptorService;
return (B) this;
}

B partDescriptorService( final PartDescriptorService partDescriptorService )
{
this.partDescriptorService = partDescriptorService;
return (B) this;
}

B layoutDescriptorService( final LayoutDescriptorService layoutDescriptorService )
{
this.layoutDescriptorService = layoutDescriptorService;
return (B) this;
}

@Override
void validate()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@

boolean attachments_allowUnsafeNames() default false;

boolean resolveEmptyRegions() default false;

String auditlog_filter() default "!system.content.update,*";
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,27 @@ public class ContentNodeTranslator
{
private static final Logger LOG = LoggerFactory.getLogger( ContentNodeTranslator.class );

private final NodeService nodeService;
protected final NodeService nodeService;

private final ContentDataSerializer contentDataSerializer;
protected final ContentDataSerializer contentDataSerializer;

public ContentNodeTranslator( final NodeService nodeService )
{
this.nodeService = nodeService;
this.contentDataSerializer = new ContentDataSerializer();
}

protected ContentNodeTranslator( final NodeService nodeService, final ContentDataSerializer contentDataSerializer )
{
this.nodeService = nodeService;
this.contentDataSerializer = contentDataSerializer;
}

Check warning on line 38 in modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentNodeTranslator.java

View check run for this annotation

Codecov / codecov/patch

modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentNodeTranslator.java#L35-L38

Added lines #L35 - L38 were not covered by tests

public ContentDataSerializer getContentDataSerializer()
{
return contentDataSerializer;
}

public Contents fromNodes( final Nodes nodes, final boolean resolveHasChildren )
{
if ( resolveHasChildren )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ class ContentOutboundDependenciesIdsResolver

private final ContentDataSerializer contentDataSerializer;

ContentOutboundDependenciesIdsResolver( final ContentService contentService )
ContentOutboundDependenciesIdsResolver( final ContentService contentService, final ContentDataSerializer contentDataSerializer )
{
this.contentService = contentService;
this.contentDataSerializer = new ContentDataSerializer();
this.contentDataSerializer = contentDataSerializer;
}

public ContentIds resolve( final ContentId contentId )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
Expand Down Expand Up @@ -100,6 +99,7 @@
import com.enonic.xp.content.processor.ContentProcessor;
import com.enonic.xp.context.ContextAccessor;
import com.enonic.xp.context.ContextBuilder;
import com.enonic.xp.core.impl.content.serializer.FullContentDataSerializer;
import com.enonic.xp.data.PropertyTree;
import com.enonic.xp.event.EventPublisher;
import com.enonic.xp.form.FormDefaultValuesProcessor;
Expand Down Expand Up @@ -173,25 +173,19 @@ public class ContentServiceImpl

private ContentAuditLogSupport contentAuditLogSupport;

private volatile ContentConfig config;
private final ContentConfig config;

@Activate
public ContentServiceImpl( @Reference final NodeService nodeService, @Reference final PageDescriptorService pageDescriptorService,
@Reference final PartDescriptorService partDescriptorService,
@Reference final LayoutDescriptorService layoutDescriptorService )
@Reference final LayoutDescriptorService layoutDescriptorService, ContentConfig config )
{
this.config = config;
this.nodeService = nodeService;
this.pageDescriptorService = pageDescriptorService;
this.partDescriptorService = partDescriptorService;
this.layoutDescriptorService = layoutDescriptorService;
this.translator = new ContentNodeTranslator( nodeService );
}

@Activate
@Modified
public void initialize( final ContentConfig config )
{
this.config = config;
this.translator = this.getTranslator();
}

@Override
Expand Down Expand Up @@ -1069,7 +1063,7 @@ public ContentDependencies getDependencies( final ContentId id )
@Override
public ContentIds getOutboundDependencies( final ContentId id )
{
return new ContentOutboundDependenciesIdsResolver( this ).resolve( id );
return new ContentOutboundDependenciesIdsResolver( this, this.translator.getContentDataSerializer() ).resolve( id );
}

@Override
Expand Down Expand Up @@ -1247,6 +1241,22 @@ public InputStream getBinaryInputStream( final ContentId contentId, final Binary
}
}

private ContentNodeTranslator getTranslator()
{
if ( config.resolveEmptyRegions() )
{
final FullContentDataSerializer fullContentDataSerializer = FullContentDataSerializer.create()
.layoutDescriptorService( layoutDescriptorService )
.pageDescriptorService( pageDescriptorService )
.partDescriptorService( partDescriptorService )
.build();

Check warning on line 1252 in modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentServiceImpl.java

View check run for this annotation

Codecov / codecov/patch

modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentServiceImpl.java#L1248-L1252

Added lines #L1248 - L1252 were not covered by tests

return new FullContentNodeTranslator( nodeService, fullContentDataSerializer );

Check warning on line 1254 in modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentServiceImpl.java

View check run for this annotation

Codecov / codecov/patch

modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentServiceImpl.java#L1254

Added line #L1254 was not covered by tests
}

return new ContentNodeTranslator( nodeService );
}

private static void verifyContextBranch( final Branch branch )
{
final Branch contextBranch = ContextAccessor.current().getBranch();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@
import com.enonic.xp.node.NodeAccessException;
import com.enonic.xp.node.NodeAlreadyExistAtPathException;
import com.enonic.xp.node.RefreshMode;
import com.enonic.xp.page.PageDescriptorService;
import com.enonic.xp.region.LayoutDescriptorService;
import com.enonic.xp.region.PartDescriptorService;
import com.enonic.xp.schema.content.ContentType;
import com.enonic.xp.schema.content.GetContentTypeParams;
import com.enonic.xp.security.PrincipalKey;
Expand All @@ -56,21 +53,12 @@ final class CreateContentCommand

private final FormDefaultValuesProcessor formDefaultValuesProcessor;

private final PageDescriptorService pageDescriptorService;

private final PartDescriptorService partDescriptorService;

private final LayoutDescriptorService layoutDescriptorService;

private CreateContentCommand( final Builder builder )
{
super( builder );
this.params = builder.params;
this.mediaInfo = builder.mediaInfo;
this.formDefaultValuesProcessor = builder.formDefaultValuesProcessor;
this.pageDescriptorService = builder.pageDescriptorService;
this.partDescriptorService = builder.partDescriptorService;
this.layoutDescriptorService = builder.layoutDescriptorService;
}

static Builder create()
Expand Down Expand Up @@ -108,6 +96,7 @@ private Content doExecute()
.xDataService( this.xDataService )
.partDescriptorService( this.partDescriptorService )
.layoutDescriptorService( this.layoutDescriptorService )
.contentDataSerializer( this.translator.getContentDataSerializer() )
.siteService( this.siteService )
.build()
.produce().refresh( params.isRefresh() ? RefreshMode.ALL : RefreshMode.STORAGE ).build();
Expand Down Expand Up @@ -322,12 +311,6 @@ static class Builder

private FormDefaultValuesProcessor formDefaultValuesProcessor;

private PageDescriptorService pageDescriptorService;

private PartDescriptorService partDescriptorService;

private LayoutDescriptorService layoutDescriptorService;

private Builder()
{
}
Expand Down Expand Up @@ -355,24 +338,6 @@ Builder formDefaultValuesProcessor( final FormDefaultValuesProcessor formDefault
return this;
}

Builder pageDescriptorService( final PageDescriptorService value )
{
this.pageDescriptorService = value;
return this;
}

Builder partDescriptorService( final PartDescriptorService value )
{
this.partDescriptorService = value;
return this;
}

Builder layoutDescriptorService( final LayoutDescriptorService value )
{
this.layoutDescriptorService = value;
return this;
}

@Override
void validate()
{
Expand Down
Loading

0 comments on commit 232e8f9

Please sign in to comment.