/** * @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."); } }
/** * 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)); } } }
@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; }