diff --git a/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/AttachmentUrlHandler.java b/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/AttachmentUrlHandler.java index 41d0a677b90..a4d1417ebf7 100644 --- a/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/AttachmentUrlHandler.java +++ b/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/AttachmentUrlHandler.java @@ -38,7 +38,7 @@ public final class AttachmentUrlHandler private String branch; - private String contentKey; + private String baseUriKey; private boolean offline; @@ -94,9 +94,9 @@ public void setBranch( final String branch ) this.branch = branch; } - public void setContentKey( final String contentKey ) + public void setBaseUriKey( final String baseUriKey ) { - this.contentKey = contentKey; + this.baseUriKey = baseUriKey; } public void setOffline( final Boolean offline ) @@ -145,7 +145,7 @@ public String createUrl() .download( this.download ) .projectName( this.projectName ) .branch( this.branch ) - .contentKey( this.contentKey ); + .baseUriKey( this.baseUriKey ); if ( this.queryParams != null ) { diff --git a/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/ImageUrlHandler.java b/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/ImageUrlHandler.java index 09cad237fc5..07b125a8408 100644 --- a/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/ImageUrlHandler.java +++ b/modules/lib/lib-portal/src/main/java/com/enonic/xp/lib/portal/url/ImageUrlHandler.java @@ -44,7 +44,7 @@ public final class ImageUrlHandler private String branch; - private String contentKey; + private String baseUriKey; private boolean offline; @@ -108,9 +108,9 @@ public void setBranch( final String branch ) this.branch = branch; } - public void setContentKey( final String contentKey ) + public void setBaseUriKey( final String baseUriKey ) { - this.contentKey = contentKey; + this.baseUriKey = baseUriKey; } public void setOffline( final Boolean offline ) @@ -156,7 +156,7 @@ public String createUrl() .scale( this.scale ) .projectName( this.projectName ) .branch( this.branch ) - .contentKey( this.contentKey ); + .baseUriKey( this.baseUriKey ); if ( this.queryParams != null ) { diff --git a/modules/lib/lib-portal/src/main/resources/lib/xp/portal.ts b/modules/lib/lib-portal/src/main/resources/lib/xp/portal.ts index bb75245b642..5a97fc08c76 100644 --- a/modules/lib/lib-portal/src/main/resources/lib/xp/portal.ts +++ b/modules/lib/lib-portal/src/main/resources/lib/xp/portal.ts @@ -91,7 +91,7 @@ export type ImageUrlParams = IdXorPath & { | 'full'; project?: string; branch?: string; - contentKey?: string; + baseUriKey?: string; offline?: boolean | undefined; }; @@ -120,7 +120,7 @@ interface ImageUrlHandler { setOffline(value: boolean): void; - setContentKey(value?: string | null): void; + setBaseUriKey(value?: string | null): void; createUrl(): string; } @@ -141,7 +141,7 @@ interface ImageUrlHandler { * @param {string} [params.type=server] URL type. Either `server` (server-relative URL) or `absolute`. * @param {string} [params.projectName] Name of the project. * @param {string} [params.branch] Name of the branch. - * @param {string} [params.contentKey] Key of the content. + * @param {string} [params.baseUriKey] Key of the content. * @param {boolean} [params.offline=false] Set to true if the URL should be generated without context of the current request. * @param {object} [params.params] Custom parameters to append to the url. * @@ -161,7 +161,7 @@ export function imageUrl(params: ImageUrlParams): string { bean.setScale(params.scale); bean.setProjectName(params.project); bean.setBranch(params.branch); - bean.setContentKey(params.contentKey); + bean.setBaseUriKey(params.baseUriKey); bean.setOffline(params.offline || false); return bean.createUrl(); @@ -208,7 +208,7 @@ export interface AttachmentUrlParams { params?: object; project?: string; branch?: string; - contentKey?: string; + baseUriKey?: string; offline?: boolean; } @@ -229,7 +229,7 @@ interface AttachmentUrlHandler { setBranch(value?: string | null): void; - setContentKey(value?: string | null): void; + setBaseUriKey(value?: string | null): void; setOffline(value: boolean): void; @@ -252,7 +252,7 @@ interface AttachmentUrlHandler { * @param {string} [params.type=server] URL type. Either `server` (server-relative URL) or `absolute`. * @param {string} [params.projectName] Name of the project. * @param {string} [params.branch] Name of the branch. - * @param {string} [params.contentKey] Key of the content. + * @param {string} [params.baseUriKey] Key of the content. * @param {boolean} [params.offline=false] Set to true if the URL should be generated without context of the current request. * @param {object} [params.params] Custom parameters to append to the url. * @@ -268,7 +268,7 @@ export function attachmentUrl(params: AttachmentUrlParams): string { bean.setLabel(params.label); bean.setProjectName(params.project); bean.setBranch(params.branch); - bean.setContentKey(params.contentKey); + bean.setBaseUriKey(params.baseUriKey); bean.setOffline(params.offline || false); bean.setDownload(params.download || false); bean.setQueryParams(__.toScriptValue(params.params)); diff --git a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlGeneratorParams.java b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlGeneratorParams.java index 54dc7d62470..a6d0a3a2efa 100644 --- a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlGeneratorParams.java +++ b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlGeneratorParams.java @@ -1,5 +1,7 @@ package com.enonic.xp.portal.url; +import java.util.Collection; +import java.util.Map; import java.util.Objects; import com.google.common.collect.HashMultimap; @@ -146,9 +148,9 @@ public Builder setLabel( final String label ) return this; } - public Builder addQueryParams( final Multimap queryParams ) + public Builder addQueryParams( final Map> queryParams ) { - this.queryParams.putAll( queryParams ); + queryParams.forEach( this.queryParams::putAll ); return this; } diff --git a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlParams.java b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlParams.java index 0a1ba88e960..7fa58fd0347 100644 --- a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlParams.java +++ b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/AttachmentUrlParams.java @@ -26,7 +26,7 @@ public final class AttachmentUrlParams private String branch; - private String contentKey; + private String baseUriKey; public String getId() { @@ -63,9 +63,9 @@ public String getBranch() return branch; } - public String getContentKey() + public String getBaseUriKey() { - return contentKey; + return baseUriKey; } public AttachmentUrlParams id( final String value ) @@ -115,9 +115,9 @@ public AttachmentUrlParams branch( final String branch ) return this; } - public AttachmentUrlParams contentKey( final String contentKey ) + public AttachmentUrlParams baseUriKey( final String baseUriKey ) { - this.contentKey = contentKey; + this.baseUriKey = baseUriKey; return this; } diff --git a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlGeneratorParams.java b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlGeneratorParams.java index 3ba856147b6..d5935a4b43b 100644 --- a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlGeneratorParams.java +++ b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlGeneratorParams.java @@ -1,5 +1,7 @@ package com.enonic.xp.portal.url; +import java.util.Collection; +import java.util.Map; import java.util.Objects; import com.google.common.collect.HashMultimap; @@ -178,9 +180,9 @@ public Builder setScale( final String scale ) return this; } - public Builder addQueryParams( final Multimap queryParams ) + public Builder addQueryParams( final Map> queryParams ) { - this.queryParams.putAll( queryParams ); + queryParams.forEach( this.queryParams::putAll ); return this; } diff --git a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlParams.java b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlParams.java index b7243db2fe2..03c865b5f61 100644 --- a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlParams.java +++ b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/ImageUrlParams.java @@ -31,7 +31,7 @@ public final class ImageUrlParams private String branch; - private String contentKey; + private String baseUriKey; public String getId() { @@ -78,9 +78,9 @@ public String getBranch() return branch; } - public String getContentKey() + public String getBaseUriKey() { - return contentKey; + return baseUriKey; } public ImageUrlParams id( final String value ) @@ -142,9 +142,9 @@ public ImageUrlParams branch( final String branch ) return this; } - public ImageUrlParams contentKey( final String contentKey ) + public ImageUrlParams baseUriKey( final String baseUriKey ) { - this.contentKey = contentKey; + this.baseUriKey = baseUriKey; return this; } diff --git a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/PathStrategy.java b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/PathStrategy.java deleted file mode 100644 index c017406f5d2..00000000000 --- a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/PathStrategy.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.enonic.xp.portal.url; - -import com.enonic.xp.annotation.PublicApi; - -@PublicApi -public interface PathStrategy -{ - String generatePath(); -} diff --git a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/UrlStrategyFacade.java b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/UrlStrategyFacade.java index 9643752555d..c908fa37bce 100644 --- a/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/UrlStrategyFacade.java +++ b/modules/portal/portal-api/src/main/java/com/enonic/xp/portal/url/UrlStrategyFacade.java @@ -1,30 +1,10 @@ package com.enonic.xp.portal.url; import com.enonic.xp.annotation.PublicApi; -import com.enonic.xp.branch.Branch; -import com.enonic.xp.content.Content; -import com.enonic.xp.portal.PortalRequest; -import com.enonic.xp.project.ProjectName; @PublicApi public interface UrlStrategyFacade { - BaseUrlStrategy offlineBaseUrlStrategy( ProjectName projectName, Branch branch, Content content, String urlType ); - - BaseUrlStrategy requestBaseUrlStrategy( PortalRequest portalRequest, String urlType ); - - ProjectName offlineProjectName( String projectName ); - - ProjectName requestProjectName( String projectName, PortalRequest portalRequest ); - - ProjectName offlinePrefixAndBaseUrlProjectName( String projectName ); - - Branch offlineBranch( String branch ); - - Branch requestBranch( String branch, PortalRequest portalRequest ); - - Branch offlinePrefixAndBaseUrlBranch( String branch ); - ImageUrlGeneratorParams offlineImageUrlParams( ImageUrlParams params ); ImageUrlGeneratorParams requestImageUrlParams( ImageUrlParams params ); diff --git a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/AttachmentMediaPathStrategy.java b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/AttachmentMediaPathStrategy.java index 7fca8d0eddf..b31a31aba74 100644 --- a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/AttachmentMediaPathStrategy.java +++ b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/AttachmentMediaPathStrategy.java @@ -10,7 +10,6 @@ import com.enonic.xp.branch.Branch; import com.enonic.xp.content.ContentConstants; import com.enonic.xp.content.Media; -import com.enonic.xp.portal.url.PathStrategy; import com.enonic.xp.project.ProjectName; import static com.enonic.xp.portal.impl.url.UrlBuilderHelper.appendParams; diff --git a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/ImageMediaPathStrategy.java b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/ImageMediaPathStrategy.java index 11c3f4e7b1a..813329eb7b6 100644 --- a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/ImageMediaPathStrategy.java +++ b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/ImageMediaPathStrategy.java @@ -1,9 +1,11 @@ package com.enonic.xp.portal.impl.url; +import java.nio.charset.StandardCharsets; import java.util.Objects; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.Multimap; +import com.google.common.hash.Hashing; import com.google.common.io.Files; import com.enonic.xp.attachment.Attachment; @@ -11,7 +13,6 @@ import com.enonic.xp.content.Content; import com.enonic.xp.content.ContentConstants; import com.enonic.xp.content.Media; -import com.enonic.xp.portal.url.PathStrategy; import com.enonic.xp.project.ProjectName; import static com.enonic.xp.portal.impl.url.UrlBuilderHelper.appendParams; @@ -80,7 +81,20 @@ private Multimap resolveQueryParams() private String resolveHash( final Media media ) { final Attachment attachment = media.getMediaAttachment(); - return attachment.getSha512() != null ? attachment.getSha512().substring( 0, 32 ) : null; + + if ( attachment.getSha512() == null ) + { + return null; + } + + return Hashing.sha1() + .newHasher() + .putString( attachment.getSha512().substring( 0, 32 ), StandardCharsets.UTF_8 ) + .putString( String.valueOf( media.getFocalPoint() ), StandardCharsets.UTF_8 ) + .putString( String.valueOf( media.getCropping() ), StandardCharsets.UTF_8 ) + .putString( String.valueOf( media.getOrientation() ), StandardCharsets.UTF_8 ) + .hash() + .toString(); } private String resolveName( final Content media, final String format ) diff --git a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/OfflineBaseUrlStrategy.java b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/OfflineBaseUrlStrategy.java index 9db812d945f..23e5a126ff1 100644 --- a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/OfflineBaseUrlStrategy.java +++ b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/OfflineBaseUrlStrategy.java @@ -106,8 +106,11 @@ private String resolveBaseUrl( final SiteConfigs siteConfigs ) private String normalizeBaseUrl( final String baseUrl ) { final String path = UrlTypeConstants.SERVER_RELATIVE.equals( urlType ) ? URI.create( baseUrl ).getPath() : baseUrl; - - return path + "/_"; + if ( path.endsWith( "/" ) ) + { + return path.substring( 0, path.length() - 1 ) + "/_/"; + } + return path + "/_/"; } static class Builder diff --git a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/PathStrategy.java b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/PathStrategy.java new file mode 100644 index 00000000000..0669559c35a --- /dev/null +++ b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/PathStrategy.java @@ -0,0 +1,6 @@ +package com.enonic.xp.portal.impl.url; + +public interface PathStrategy +{ + String generatePath(); +} diff --git a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlGenerator.java b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlGenerator.java index 14af2e01e58..5a6920015d7 100644 --- a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlGenerator.java +++ b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlGenerator.java @@ -1,6 +1,7 @@ package com.enonic.xp.portal.impl.url; import java.math.BigInteger; +import java.util.Objects; import java.util.UUID; import org.slf4j.Logger; @@ -9,7 +10,6 @@ import com.enonic.xp.exception.NotFoundException; import com.enonic.xp.portal.impl.exception.OutOfScopeException; import com.enonic.xp.portal.url.BaseUrlStrategy; -import com.enonic.xp.portal.url.PathStrategy; import static com.enonic.xp.portal.impl.url.UrlBuilderHelper.urlEncode; import static com.google.common.base.Strings.isNullOrEmpty; @@ -20,15 +20,16 @@ final class UrlGenerator public static String generateUrl( final BaseUrlStrategy baseUrlStrategy, final PathStrategy pathStrategy ) { + String baseUrl = null; try { - final String baseUrl = removeTrailingSlash( baseUrlStrategy.generateBaseUrl() ); + baseUrl = removeTrailingSlash( baseUrlStrategy.generateBaseUrl() ); final String path = normalizePath( pathStrategy.generatePath() ); return baseUrl + path; } catch ( Exception e ) { - return buildErrorUrl( baseUrlStrategy, e ); + return buildErrorUrl( baseUrl, e ); } } @@ -52,13 +53,11 @@ private static String normalizePath( final String path ) return !path.startsWith( "/" ) ? "/" + path : path; } - private static String buildErrorUrl( final BaseUrlStrategy baseUrlStrategy, final Exception e ) + private static String buildErrorUrl( final String baseUrl, final Exception e ) { final String logRef = LOG.isWarnEnabled() ? newLogRef() : ""; LOG.warn( "Portal url build failed. Logref: {}", logRef, e ); - final String baseUrl = removeTrailingSlash( baseUrlStrategy.generateBaseUrl() ); - if ( e instanceof NotFoundException ) { return buildErrorUrl( baseUrl, 404, String.join( " ", "Not Found.", logRef ) ); @@ -80,6 +79,6 @@ private static String newLogRef() private static String buildErrorUrl( final String baseUrl, final int code, final String message ) { - return baseUrl + "/error/" + code + "?message=" + urlEncode( message ); + return Objects.requireNonNullElse( baseUrl, "/_" ) + "/error/" + code + "?message=" + urlEncode( message ); } } diff --git a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlStrategyFacadeImpl.java b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlStrategyFacadeImpl.java index 73206df4e0b..5bfe663663c 100644 --- a/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlStrategyFacadeImpl.java +++ b/modules/portal/portal-impl/src/main/java/com/enonic/xp/portal/impl/url/UrlStrategyFacadeImpl.java @@ -43,74 +43,6 @@ public UrlStrategyFacadeImpl( @Reference final ContentService contentService, @R this.projectService = projectService; } - @Override - public BaseUrlStrategy offlineBaseUrlStrategy( final ProjectName projectName, final Branch branch, final Content content, - final String urlType ) - { - return OfflineBaseUrlStrategy.create() - .contentService( contentService ) - .projectService( projectService ) - .projectName( projectName ) - .branch( branch ) - .content( content ) - .urlType( urlType ) - .build(); - } - - @Override - public BaseUrlStrategy requestBaseUrlStrategy( final PortalRequest portalRequest, final String urlType ) - { - return RequestBaseUrlStrategy.create().contentService( contentService ).portalRequest( portalRequest ).urlType( urlType ).build(); - } - - @Override - public ProjectName offlineProjectName( final String projectName ) - { - return projectName != null - ? ProjectName.from( projectName ) - : ProjectName.from( Objects.requireNonNull( ContextAccessor.current().getRepositoryId() ) ); - } - - @Override - public ProjectName requestProjectName( final String projectName, final PortalRequest portalRequest ) - { - return projectName != null - ? ProjectName.from( projectName ) - : ProjectName.from( Objects.requireNonNull( portalRequest.getRepositoryId(), "Project must be provided" ) ); - } - - @Override - public ProjectName offlinePrefixAndBaseUrlProjectName( final String projectName ) - { - return ContextAccessor.current().getRepositoryId() != null - ? ProjectName.from( ContextAccessor.current().getRepositoryId() ) - : ProjectName.from( Objects.requireNonNull( projectName ) ); - } - - @Override - public Branch offlineBranch( final String branch ) - { - return branch != null - ? Branch.from( branch ) - : Objects.requireNonNullElse( ContextAccessor.current().getBranch(), ContentConstants.BRANCH_MASTER ); - } - - @Override - public Branch requestBranch( final String branch, final PortalRequest portalRequest ) - { - return branch != null - ? Branch.from( branch ) - : Objects.requireNonNullElse( portalRequest.getBranch(), ContentConstants.BRANCH_MASTER ); - } - - @Override - public Branch offlinePrefixAndBaseUrlBranch( final String branch ) - { - return ContextAccessor.current().getBranch() != null - ? ContextAccessor.current().getBranch() - : Objects.requireNonNullElse( Branch.from( branch ), ContentConstants.BRANCH_MASTER ); - } - @Override public ImageUrlGeneratorParams offlineImageUrlParams( final ImageUrlParams params ) { @@ -121,9 +53,9 @@ public ImageUrlGeneratorParams offlineImageUrlParams( final ImageUrlParams param final Media media = resolveMedia( mediaPathProjectName, mediaPathBranch, params.getId(), params.getPath() ); - final String contentKey = params.getContentKey(); + final String baseUriKey = params.getBaseUriKey(); - final Site site = contentKey != null ? offlineNearestSite( prefixAndBaseUrlProjectName, prefixAndBaseUrlBranch, contentKey ) : null; + final Site site = baseUriKey != null ? offlineNearestSite( prefixAndBaseUrlProjectName, prefixAndBaseUrlBranch, baseUriKey ) : null; final BaseUrlStrategy baseUrlStrategy = offlineBaseUrlStrategy( prefixAndBaseUrlProjectName, prefixAndBaseUrlBranch, site != null ? site : media, params.getType() ); @@ -138,7 +70,7 @@ public ImageUrlGeneratorParams offlineImageUrlParams( final ImageUrlParams param .setFilter( params.getFilter() ) .setQuality( params.getQuality() ) .setBackground( params.getBackground() ) - .addQueryParams( params.getParams() ) + .addQueryParams( params.getParams().asMap() ) .build(); } @@ -162,7 +94,7 @@ public ImageUrlGeneratorParams requestImageUrlParams( final ImageUrlParams param .setFilter( params.getFilter() ) .setQuality( params.getQuality() ) .setBackground( params.getBackground() ) - .addQueryParams( params.getParams() ) + .addQueryParams( params.getParams().asMap() ) .build(); } @@ -174,11 +106,11 @@ public AttachmentUrlGeneratorParams offlineAttachmentUrlParams( final Attachment final ProjectName prefixAndBaseUrlProjectName = offlinePrefixAndBaseUrlProjectName( params.getProjectName() ); final Branch prefixAndBaseUrlBranch = offlinePrefixAndBaseUrlBranch( params.getBranch() ); - final String contentKey = params.getContentKey(); + final String baseUriKey = params.getBaseUriKey(); final Media media = resolveMedia( mediaPathProjectName, mediaPathBranch, params.getId(), params.getPath() ); - final Site site = contentKey != null ? offlineNearestSite( prefixAndBaseUrlProjectName, prefixAndBaseUrlBranch, contentKey ) : null; + final Site site = baseUriKey != null ? offlineNearestSite( prefixAndBaseUrlProjectName, prefixAndBaseUrlBranch, baseUriKey ) : null; final BaseUrlStrategy baseUrlStrategy = offlineBaseUrlStrategy( prefixAndBaseUrlProjectName, prefixAndBaseUrlBranch, site != null ? site : media, params.getType() ); @@ -191,7 +123,7 @@ public AttachmentUrlGeneratorParams offlineAttachmentUrlParams( final Attachment .setDownload( params.isDownload() ) .setName( params.getName() ) .setLabel( params.getLabel() ) - .addQueryParams( params.getParams() ) + .addQueryParams( params.getParams().asMap() ) .build(); } @@ -216,7 +148,7 @@ public AttachmentUrlGeneratorParams requestAttachmentUrlParams( final Attachment .setDownload( params.isDownload() ) .setName( params.getName() ) .setLabel( params.getLabel() ) - .addQueryParams( params.getParams() ) + .addQueryParams( params.getParams().asMap() ) .build(); } @@ -240,6 +172,66 @@ private Site offlineNearestSite( final ProjectName projectName, final Branch bra : contentService.getNearestSite( ContentId.from( contentKey ) ) ); } + private BaseUrlStrategy offlineBaseUrlStrategy( final ProjectName projectName, final Branch branch, final Content content, + final String urlType ) + { + return OfflineBaseUrlStrategy.create() + .contentService( contentService ) + .projectService( projectService ) + .projectName( projectName ) + .branch( branch ) + .content( content ) + .urlType( urlType ) + .build(); + } + + private BaseUrlStrategy requestBaseUrlStrategy( final PortalRequest portalRequest, final String urlType ) + { + return RequestBaseUrlStrategy.create().contentService( contentService ).portalRequest( portalRequest ).urlType( urlType ).build(); + } + + private ProjectName offlineProjectName( final String projectName ) + { + return projectName != null + ? ProjectName.from( projectName ) + : ProjectName.from( Objects.requireNonNull( ContextAccessor.current().getRepositoryId(), "Project must be provided" ) ); + } + + private ProjectName requestProjectName( final String projectName, final PortalRequest portalRequest ) + { + return projectName != null + ? ProjectName.from( projectName ) + : ProjectName.from( Objects.requireNonNull( portalRequest.getRepositoryId(), "Project must be provided" ) ); + } + + private ProjectName offlinePrefixAndBaseUrlProjectName( final String projectName ) + { + return ContextAccessor.current().getRepositoryId() != null + ? ProjectName.from( ContextAccessor.current().getRepositoryId() ) + : ProjectName.from( Objects.requireNonNull( projectName, "Project must be provided" ) ); + } + + private Branch offlineBranch( final String branch ) + { + return branch != null + ? Branch.from( branch ) + : Objects.requireNonNullElse( ContextAccessor.current().getBranch(), ContentConstants.BRANCH_MASTER ); + } + + private Branch requestBranch( final String branch, final PortalRequest portalRequest ) + { + return branch != null + ? Branch.from( branch ) + : Objects.requireNonNullElse( portalRequest.getBranch(), ContentConstants.BRANCH_MASTER ); + } + + private Branch offlinePrefixAndBaseUrlBranch( final String branch ) + { + return ContextAccessor.current().getBranch() != null + ? ContextAccessor.current().getBranch() + : Objects.requireNonNullElse( Branch.from( branch ), ContentConstants.BRANCH_MASTER ); + } + private Content getContent( final String contentKey ) { if ( contentKey.startsWith( "/" ) ) diff --git a/modules/portal/portal-impl/src/test/java/com/enonic/xp/portal/impl/url/PortalUrlServiceImpl_imageUrlTest.java b/modules/portal/portal-impl/src/test/java/com/enonic/xp/portal/impl/url/PortalUrlServiceImpl_imageUrlTest.java index 815c0f847cd..5d8a1a88965 100644 --- a/modules/portal/portal-impl/src/test/java/com/enonic/xp/portal/impl/url/PortalUrlServiceImpl_imageUrlTest.java +++ b/modules/portal/portal-impl/src/test/java/com/enonic/xp/portal/impl/url/PortalUrlServiceImpl_imageUrlTest.java @@ -1,7 +1,5 @@ package com.enonic.xp.portal.impl.url; -import java.net.URI; - import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -215,7 +213,7 @@ public void createImageUrlForMasterBranch() final ImageUrlParams params = new ImageUrlParams().format( "png" ) .projectName( "myproject2" ) .branch( "master" ) - .contentKey( "siteId" ) + .baseUriKey( "siteId" ) .id( "123456" ) .scale( "max(300)" ); @@ -281,7 +279,7 @@ public void createImageUrlWhenLegacyModeDisabledWithSite() final ImageUrlParams params = new ImageUrlParams().format( "png" ) .projectName( "myproject" ) .branch( "draft" ) - .contentKey( "siteId" ) + .baseUriKey( "siteId" ) .id( "123456" ) .scale( "max(300)" ); @@ -422,13 +420,5 @@ private Content createContentNotFound() .build() ); return content; } - - @Test - void test() - { - String path = URI.create( "https://enonic.com/my-site" ).getPath(); - - System.out.println( path ); - } }