io.wcm.dam.assetservice.impl.AssetRequestParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of io.wcm.dam.asset-service
Show all versions of io.wcm.dam.asset-service
A RESTful service for resolving URLs to DAM assets and renditions.
/*
* #%L
* wcm.io
* %%
* Copyright (C) 2015 wcm.io
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package io.wcm.dam.assetservice.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import io.wcm.sling.commons.request.RequestParam;
/**
* Parses asset requests from request URL.
*/
final class AssetRequestParser {
static final String RP_MEDIAFORMAT = "mediaFormat";
static final String RP_WIDTH = "width";
static final String RP_HEIGHT = "height";
private AssetRequestParser() {
// static methods only
}
/**
* Reads asset requests from URL. If requests using the new suffix-based approach are provided those are returned.
* Otherwise requests defined via URL parameters are parsed and returned.
* If no parameters are given at all one single un-parameterized request for the dam asset is generated.
* @param assetPath Asset path
* @param request Request
* @return List of asset requests
*/
public static List getAssetRequests(String assetPath, SlingHttpServletRequest request) {
List requests = getAssetRequestsFromSuffix(assetPath, request);
if (requests.isEmpty()) {
requests = getAssetRequestsFromUrlParams(assetPath, request);
}
if (requests.isEmpty()) {
requests.add(new AssetRequest(assetPath, null, 0, 0));
}
return requests;
}
private static List getAssetRequestsFromSuffix(String assetPath, SlingHttpServletRequest request) {
List requests = new ArrayList<>();
String suffixWithoutExtension = StringUtils.substringBefore(request.getRequestPathInfo().getSuffix(), ".");
String[] suffixParts = StringUtils.split(suffixWithoutExtension, "/");
if (suffixParts != null) {
for (String suffixPart : suffixParts) {
Map params = parseSuffixPart(suffixPart);
String mediaFormat = params.get(RP_MEDIAFORMAT);
long width = NumberUtils.toLong(params.get(RP_WIDTH));
long height = NumberUtils.toLong(params.get(RP_HEIGHT));
if (StringUtils.isNotEmpty(mediaFormat) || width > 0 || height > 0) {
requests.add(new AssetRequest(assetPath, mediaFormat, width, height));
}
}
}
return requests;
}
private static Map parseSuffixPart(String suffixPart) {
Map params = new HashMap<>();
String[] paramPairParts = StringUtils.split(suffixPart, ",");
if (paramPairParts != null) {
for (String paramPairPart : paramPairParts) {
String[] paramParts = StringUtils.split(paramPairPart, "=");
if (paramParts != null && paramParts.length == 2) {
params.put(paramParts[0], paramParts[1]);
}
}
}
return params;
}
@SuppressWarnings("null")
private static List getAssetRequestsFromUrlParams(String assetPath, SlingHttpServletRequest request) {
String[] mediaFormats = ObjectUtils.defaultIfNull(RequestParam.getMultiple(request, RP_MEDIAFORMAT), new String[0]);
String[] widthStrings = ObjectUtils.defaultIfNull(RequestParam.getMultiple(request, RP_WIDTH), new String[0]);
String[] heightStrings = ObjectUtils.defaultIfNull(RequestParam.getMultiple(request, RP_HEIGHT), new String[0]);
int maxParamIndex = NumberUtils.max(mediaFormats.length, widthStrings.length, heightStrings.length);
List requests = new ArrayList<>();
for (int i = 0; i < maxParamIndex; i++) {
String mediaFormat = mediaFormats.length > i ? mediaFormats[i] : null;
long width = widthStrings.length > i ? NumberUtils.toLong(widthStrings[i]) : 0;
long height = heightStrings.length > i ? NumberUtils.toLong(heightStrings[i]) : 0;
requests.add(new AssetRequest(assetPath, mediaFormat, width, height));
}
return requests;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy