/** * @param resource Resource containing reference to media asset * @param mediaRef Reference to media item * @param mediaArgs Additional arguments affection media resolving * @param refProperty Name of the property from which the media request is read * @param cropProperty Name of the property which contains the cropping parameters * @param rotationProperty Name of the property which contains the rotation parameter */ public MediaRequest(Resource resource, String mediaRef, MediaArgs mediaArgs, String refProperty, String cropProperty, String rotationProperty) { this.resource = resource; this.mediaRef = mediaRef; this.mediaArgs = mediaArgs != null ? mediaArgs : new MediaArgs(); this.refProperty = refProperty; this.cropProperty = cropProperty; this.rotationProperty = rotationProperty; // validate parameters if (this.resource != null && this.mediaRef != null) { throw new IllegalArgumentException("Set resource or media ref, not both."); } }
@Override public @NotNull MediaBuilder contentDispositionAttachment(boolean value) { this.mediaArgs.contentDispositionAttachment(value); return this; }
@Override public @NotNull MediaBuilder urlMode(UrlMode value) { this.mediaArgs.urlMode(value); return this; }
@SuppressWarnings("null") @Override public @NotNull Link resolveLink(@NotNull Link link) { LinkRequest linkRequest = link.getLinkRequest(); ValueMap props = linkRequest.getResourceProperties(); // get properties String mediaRef = props.get(LinkNameConstants.PN_LINK_MEDIA_REF, String.class); boolean isDownload = props.get(LinkNameConstants.PN_LINK_MEDIA_DOWNLOAD, false); MediaArgs mediaArgs = new MediaArgs() // only allow linking to "download" media formats .download(true) .contentDispositionAttachment(isDownload) .urlMode(linkRequest.getLinkArgs().getUrlMode()); // resolve media library reference Media media = mediaHandler.get(mediaRef, mediaArgs).build(); if (media != null) { // set resovled media references information in link metadata link.setUrl(media.getUrl()); link.setTargetAsset(media.getAsset()); link.setTargetRendition(media.getRendition()); } // mark link as invalid if a reference was set that could not be resolved if (link.getUrl() == null && StringUtils.isNotEmpty(mediaRef)) { link.setLinkReferenceInvalid(true); } return link; }
/** * Iterates over all defined media format and tries to find a matching rendition for each of them * in combination with the other media args. * @param media Media * @param asset Asset * @param mediaArgs Media args * @return true if for *all* media formats a rendition could be found. */ private boolean resolveAllMandatoryRenditions(Media media, Asset asset, MediaArgs mediaArgs) { boolean allResolved = true; List<Rendition> resolvedRenditions = new ArrayList<>(); for (MediaFormat mediaFormat : mediaArgs.getMediaFormats()) { MediaArgs renditionMediaArgs = mediaArgs.clone(); renditionMediaArgs.mediaFormat(mediaFormat); renditionMediaArgs.mediaFormatsMandatory(false); Rendition rendition = asset.getRendition(renditionMediaArgs); if (rendition != null) { resolvedRenditions.add(rendition); } else { allResolved = false; } } media.setRenditions(resolvedRenditions); if (!resolvedRenditions.isEmpty()) { media.setUrl(resolvedRenditions.get(0).getUrl()); } return allResolved; }
if (StringUtils.isEmpty(mediaArgs.getAltText()) && media.getMediaRequest().getResource() != null) { ValueMap props = media.getMediaRequest().getResource().getValueMap(); mediaArgs.altText(props.get(mediaHandlerConfig.getMediaAltTextProperty(), String.class));
@Override public @NotNull MediaBuilder args(MediaArgs value) { if (value == null) { throw new IllegalArgumentException("MediaArgs is null."); } // clone media args to make sure the original object is not modified this.mediaArgs = value.clone(); return this; }
@Override public @NotNull MediaBuilder dragDropSupport(DragDropSupport value) { this.mediaArgs.dragDropSupport(value); return this; }
@Override public @NotNull MediaBuilder dummyImage(boolean value) { this.mediaArgs.dummyImage(value); return this; }
@Override public @NotNull MediaBuilder altText(String value) { this.mediaArgs.altText(value); return this; }
@Override public @NotNull MediaBuilder dummyImageUrl(String value) { this.mediaArgs.dummyImageUrl(value); return this; }
if (StringUtils.isEmpty(mediaArgs.getAltText()) && referencedResource != null) { mediaArgs.altText(props.get(mediaHandlerConfig.getMediaAltTextProperty(), String.class));
MediaBuilderImpl(MediaRequest mediaRequest, MediaHandlerImpl mediaHandler) { if (mediaRequest == null) { throw new IllegalArgumentException("Media request is null."); } this.resource = mediaRequest.getResource(); this.mediaRef = mediaRequest.getMediaRef(); // clone media args to make sure the original object is not modified this.mediaArgs = mediaRequest.getMediaArgs().clone(); this.refProperty = mediaRequest.getRefProperty(); this.cropProperty = mediaRequest.getCropProperty(); this.mediaHandler = mediaHandler; }
/** * Custom clone-method for {@link MediaArgs} * @return the cloned {@link MediaArgs} */ // CHECKSTYLE:OFF @Override public MediaArgs clone() { //NOPMD // CHECKSTYLE:ON MediaArgs clone = new MediaArgs(); clone.mediaFormats = ArrayUtils.clone(this.mediaFormats); clone.mediaFormatNames = ArrayUtils.clone(this.mediaFormatNames); clone.mediaFormatsMandatory = this.mediaFormatsMandatory; clone.fileExtensions = ArrayUtils.clone(this.fileExtensions); clone.urlMode = this.urlMode; clone.fixedWidth = this.fixedWidth; clone.fixedHeight = this.fixedHeight; clone.download = this.download; clone.contentDispositionAttachment = this.contentDispositionAttachment; clone.altText = this.altText; clone.dummyImage = this.dummyImage; clone.dummyImageUrl = this.dummyImageUrl; clone.includeAssetThumbnails = this.includeAssetThumbnails; clone.dragDropSupport = this.dragDropSupport; if (this.properties != null) { clone.properties = new ValueMapDecorator(new HashMap<String, Object>(this.properties)); } return clone; }
@PostConstruct private void activate() { media = mediaHandler.get(resource, new MediaArgs(mediaFormat)).build(); if (media.isValid() && media.getElement() != null) { HtmlElement element = media.getElement(); if (StringUtils.isNotEmpty(cssClass)) { element.addCssClass(cssClass); } ValueMap props = resource.getValueMap(); int imageWidth = props.get("imageWidth", 0); if (imageWidth > 0) { element.setAttribute("width", Integer.toString(imageWidth)); } int imageHeight = props.get("imageWidth", 0); if (imageHeight > 0) { element.setAttribute("height", Integer.toString(imageHeight)); } } }