Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Page resolving: add flag to resolve empty regions in Content API #10214

Merged
merged 1 commit into from
Jul 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -26,9 +26,19 @@ public class ContentNodeTranslator
private final ContentDataSerializer contentDataSerializer;

public ContentNodeTranslator( final NodeService nodeService )
{
this(nodeService, new ContentDataSerializer());
}

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

public ContentDataSerializer getContentDataSerializer()
{
return contentDataSerializer;
}

public Contents fromNodes( final Nodes nodes, final boolean resolveHasChildren )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,9 @@
{
private final ContentService contentService;

private final ContentDataSerializer contentDataSerializer;

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

public ContentIds resolve( final ContentId contentId )
Expand All @@ -40,7 +37,7 @@
final PropertySet contentPageData = new PropertyTree().getRoot();
if ( content.getPage() != null )
{
contentDataSerializer.toPageData( content.getPage(), contentPageData );
new ContentDataSerializer().toPageData( content.getPage(), contentPageData );

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

View check run for this annotation

Codecov / codecov/patch

modules/core/core-content/src/main/java/com/enonic/xp/core/impl/content/ContentOutboundDependenciesIdsResolver.java#L40

Added line #L40 was not covered by tests
}

final Stream<Property> extraDataDependencies = content.hasExtraData() ? content.getAllExtraData().
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,8 @@
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.ContentDataSerializer;
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 +174,19 @@

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 = new ContentNodeTranslator( nodeService, getContentDataSerializer() );
}

@Override
Expand Down Expand Up @@ -1247,6 +1242,19 @@
}
}

private ContentDataSerializer getContentDataSerializer()
{
return config.resolveEmptyRegions() ? createFullContentDataSerializer() : new ContentDataSerializer();
}

private FullContentDataSerializer createFullContentDataSerializer()
{
return FullContentDataSerializer.create()
.layoutDescriptorService( layoutDescriptorService )
.pageDescriptorService( pageDescriptorService )
.build();

Check warning on line 1255 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#L1252-L1255

Added lines #L1252 - L1255 were not covered by tests
}

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() )
rymsha marked this conversation as resolved.
Show resolved Hide resolved
.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
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
import com.enonic.xp.form.FormDefaultValuesProcessor;
import com.enonic.xp.media.MediaInfo;
import com.enonic.xp.media.MediaInfoService;
import com.enonic.xp.page.PageDescriptorService;
import com.enonic.xp.region.LayoutDescriptorService;
import com.enonic.xp.region.PartDescriptorService;
import com.enonic.xp.schema.content.ContentTypeFromMimeTypeResolver;
import com.enonic.xp.schema.content.ContentTypeName;

Expand All @@ -28,21 +25,12 @@ final class CreateMediaCommand

private final FormDefaultValuesProcessor formDefaultValuesProcessor;

private final PageDescriptorService pageDescriptorService;

private final PartDescriptorService partDescriptorService;

private final LayoutDescriptorService layoutDescriptorService;

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

Content execute()
Expand Down Expand Up @@ -103,6 +91,7 @@ private Content doExecute()

final CreateContentCommand createCommand = CreateContentCommand.create( this ).
mediaInfo( mediaInfo ).
translator( this.translator ).
params( createContentParams ).
siteService( this.siteService ).
xDataService( this.xDataService ).
Expand Down Expand Up @@ -140,12 +129,6 @@ public static class Builder

private FormDefaultValuesProcessor formDefaultValuesProcessor;

private PageDescriptorService pageDescriptorService;

private PartDescriptorService partDescriptorService;

private LayoutDescriptorService layoutDescriptorService;

public Builder params( final CreateMediaParams params )
{
this.params = params;
Expand All @@ -164,24 +147,6 @@ public Builder formDefaultValuesProcessor( final FormDefaultValuesProcessor form
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
Loading