1 /* 2 * #%L 3 * wcm.io 4 * %% 5 * Copyright (C) 2014 wcm.io 6 * %% 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * #L% 19 */ 20 package io.wcm.handler.url; 21 22 import java.util.Set; 23 24 import org.apache.sling.api.resource.Resource; 25 import org.jetbrains.annotations.NotNull; 26 import org.jetbrains.annotations.Nullable; 27 import org.osgi.annotation.versioning.ProviderType; 28 29 import com.day.cq.wcm.api.Page; 30 31 /** 32 * Define URL handling requests using builder pattern. 33 */ 34 @ProviderType 35 public interface UrlBuilder { 36 37 /** 38 * Set selectors 39 * @param selectors Selector string 40 * @return URL builder 41 */ 42 @NotNull 43 UrlBuilder selectors(@Nullable String selectors); 44 45 /** 46 * Set file extension 47 * @param extension file extension 48 * @return URL builder 49 */ 50 @NotNull 51 UrlBuilder extension(@Nullable String extension); 52 53 /** 54 * Set suffix 55 * @param suffix Suffix string 56 * @return URL builder 57 */ 58 @NotNull 59 UrlBuilder suffix(@Nullable String suffix); 60 61 /** 62 * Set query parameters string 63 * @param queryString Query parameters string (properly url-encoded) 64 * @return URL builder 65 */ 66 @NotNull 67 UrlBuilder queryString(@Nullable String queryString); 68 69 /** 70 * Set query parameters string 71 * @param queryString Query parameters string (properly url-encoded) 72 * @param inheritableParameterNames Names of query string parameters that should be inherited from the current request 73 * @return URL builder 74 */ 75 @NotNull 76 UrlBuilder queryString(@Nullable String queryString, @NotNull Set<String> inheritableParameterNames); 77 78 /** 79 * Set fragment identifier 80 * @param fragment Fragment identifier 81 * @return URL builder 82 */ 83 @NotNull 84 UrlBuilder fragment(@Nullable String fragment); 85 86 /** 87 * Set URL mode for externalizing the URL 88 * @param urlMode URL mode. If null, default URL mode is used. 89 * @return URL builder 90 */ 91 @NotNull 92 UrlBuilder urlMode(@Nullable UrlMode urlMode); 93 94 /** 95 * Set Vanity mode for building the URL 96 * @param vanityMode Vanity Mode. Only used when building for a page 97 * @return URL builder 98 */ 99 @NotNull 100 UrlBuilder vanityMode(@Nullable VanityMode vanityMode); 101 102 /** 103 * Disable the automatic addition of an additional selector {@link UrlHandler#SELECTOR_SUFFIX} 104 * in case a suffix is present for building the URL. Although recommended as best practice, this can 105 * be omitted if you are sure your URLs are always either include a suffix or never do, so there is no risk 106 * for file name clashes in dispatcher cache. 107 * @param disableSuffixSelector If set to true, no additional suffix selector is added 108 * @return URL builder 109 */ 110 @NotNull 111 UrlBuilder disableSuffixSelector(boolean disableSuffixSelector); 112 113 /** 114 * Build URL 115 * @return URL 116 */ 117 @Nullable 118 String build(); 119 120 /** 121 * Build externalized URL that links to a content page. 122 * This may only be used if a page was given in the {@link UrlHandler#get(Page)} call. 123 * @return URL 124 */ 125 @Nullable 126 String buildExternalLinkUrl(); 127 128 /** 129 * Build externalized URL that links to a content page. 130 * @param targetPage Target page of internal link (e.g. for checking url configuration and secure mode) 131 * @return URL 132 */ 133 @Nullable 134 String buildExternalLinkUrl(@Nullable Page targetPage); 135 136 /** 137 * Build externalized URL that links to a resource (e.g. image, CSS or JavaScript reference). 138 * @return URL 139 */ 140 @Nullable 141 String buildExternalResourceUrl(); 142 143 /** 144 * Build externalized URL that links to a resource (e.g. image, CSS or JavaScript reference). 145 * @param targetResource Target resource of resource link (e.g. for checking url configuration) 146 * @return URL 147 */ 148 @Nullable 149 String buildExternalResourceUrl(@Nullable Resource targetResource); 150 151 }