/** * @param resource Binary resource * @param media Media metadata * @param fileName File name */ InlineAsset(Resource resource, Media media, String fileName, Adaptable adaptable) { this.resource = resource; this.media = media; this.defaultMediaArgs = media.getMediaRequest().getMediaArgs(); this.fileName = fileName; this.adaptable = adaptable; }
/** * Set additional attributes on the media element from the MediaArgs properties. * @param mediaElement Media element * @param media Media */ protected void setAdditionalAttributes(HtmlElement<?> mediaElement, Media media) { MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); for (Entry<String, Object> entry : mediaArgs.getProperties().entrySet()) { if (StringUtils.equals(entry.getKey(), MediaNameConstants.PROP_CSS_CLASS)) { mediaElement.addCssClass(entry.getValue().toString()); } else { mediaElement.setAttribute(entry.getKey(), entry.getValue().toString()); } } }
@Override public final boolean accepts(@NotNull Media media) { return media.getMediaRequest().getMediaArgs().isMediaFormatsMandatory() && media.getRendition() != null && media.getRenditions().size() > 1 && media.isValid(); }
/** * Apply Markup for Drag&Drop mode and Diff decoration in WCM edit/preview mode. * @param mediaElement Media element * @param media Media */ protected void applyWcmMarkup(HtmlElement<?> mediaElement, Media media) { // further processing in edit or preview mode Resource resource = media.getMediaRequest().getResource(); if (mediaElement != null && resource != null && wcmMode != null) { switch (wcmMode) { case EDIT: // enable drag&drop from content finder media.getMediaSource().enableMediaDrop(mediaElement, media.getMediaRequest()); break; case PREVIEW: // enable drag&drop from content finder media.getMediaSource().enableMediaDrop(mediaElement, media.getMediaRequest()); // add diff decoration if (request != null) { String refProperty = StringUtils.defaultString(media.getMediaRequest().getRefProperty(), mediaHandlerConfig.getMediaRefProperty()); MediaMarkupBuilderUtil.addDiffDecoration(mediaElement, resource, refProperty, request, mediaHandlerConfig); } break; default: // do nothing } } }
@SuppressWarnings({ "null", "unused" }) @Override public final HtmlElement<?> build(@NotNull Media media) { HtmlElement<?> mediaElement = getImageElement(media); // set responsive image sources JSONArray sources = getResponsiveImageSources(media); setResponsiveImageSource(mediaElement, sources, media); // set additional attributes setAdditionalAttributes(mediaElement, media); // enable drag&drop for media source - if none is specified use first one defined in config MediaSource mediaSource = media.getMediaSource(); if (mediaSource == null && !mediaHandlerConfig.getSources().isEmpty()) { Class<? extends MediaSource> mediaSourceClass = mediaHandlerConfig.getSources().iterator().next(); mediaSource = AdaptTo.notNull(adaptable, mediaSourceClass); } if (mediaSource != null) { mediaSource.enableMediaDrop(mediaElement, media.getMediaRequest()); } return mediaElement; }
/** * @param damAsset DAM asset * @param media Media metadata */ public DamAsset(com.day.cq.dam.api.Asset damAsset, Media media, Adaptable adaptable) { this.damAsset = damAsset; this.cropDimension = media.getCropDimension(); this.rotation = media.getRotation(); this.defaultMediaArgs = media.getMediaRequest().getMediaArgs(); this.properties = new ValueMapDecorator(damAsset.getMetadata()); this.adaptable = adaptable; }
@Override public boolean accepts(@NotNull Media media) { // accept if not rendition was found and in edit mode // and at least one media format is given, and dummy image is not suppressed MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); MediaFormat[] mediaFormats = mediaArgs.getMediaFormats(); return (!media.isValid() || media.getRendition() == null) && getWcmMode() != null && getWcmMode() != WCMMode.DISABLED && (mediaFormats != null && mediaFormats.length > 0) && mediaArgs.isDummyImage(); }
/** * Collect responsive JSON metadata for all renditions as image sources. * @param media Media * @return JSON metadata */ protected JSONArray getResponsiveImageSources(Media media) { MediaFormat[] mediaFormats = media.getMediaRequest().getMediaArgs().getMediaFormats(); JSONArray sources = new JSONArray(); for (MediaFormat mediaFormat : mediaFormats) { sources.put(toReponsiveImageSource(media, mediaFormat)); } return sources; }
@Override public final boolean accepts(@NotNull Media media) { // accept if not rendition was found and in edit mode // and multiple media formats are mandatory, and dummy image is not suppressed MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); MediaFormat[] mediaFormats = mediaArgs.getMediaFormats(); return (!media.isValid() || media.getRendition() == null) && getWcmMode() != null && getWcmMode() != WCMMode.DISABLED && (mediaFormats != null && mediaFormats.length > 1) && mediaArgs.isDummyImage() && mediaArgs.isMediaFormatsMandatory(); }
@SuppressWarnings({ "null", "unused" }) @Override public HtmlElement<?> build(@NotNull Media media) { // Create dummy image element to be displayed in Edit mode as placeholder. Dimension dimension = MediaMarkupBuilderUtil.getMediaformatDimension(media); MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); // create dummy image String dummyImageUrl = StringUtils.defaultString(mediaArgs.getDummyImageUrl(), DUMMY_IMAGE); dummyImageUrl = urlHandler.get(dummyImageUrl) .urlMode(media.getMediaRequest().getMediaArgs().getUrlMode()) .buildExternalResourceUrl(); Image image = new Image(dummyImageUrl, dimension.getWidth(), dimension.getHeight()) .addCssClass(MediaNameConstants.CSS_DUMMYIMAGE); // set additional attributes setAdditionalAttributes(image, media); // enable drag&drop for media source - if none is specified use first one defined in config MediaSource mediaSource = media.getMediaSource(); if (mediaSource == null && !mediaHandlerConfig.getSources().isEmpty()) { Class<? extends MediaSource> mediaSourceClass = mediaHandlerConfig.getSources().iterator().next(); mediaSource = AdaptTo.notNull(adaptable, mediaSourceClass); } if (mediaSource != null) { mediaSource.enableMediaDrop(image, media.getMediaRequest()); } return image; }
@Override @SuppressWarnings("null") public @NotNull Media resolveMedia(@NotNull Media media) { String mediaRef = getMediaRef(media.getMediaRequest(), mediaHandlerConfig); MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); && media.getMediaRequest().getResource() != null) { ValueMap props = media.getMediaRequest().getResource().getValueMap(); mediaArgs.altText(props.get(mediaHandlerConfig.getMediaAltTextProperty(), String.class)); media.setCropDimension(getMediaCropDimension(media.getMediaRequest(), mediaHandlerConfig)); media.setRotation(getMediaRotation(media.getMediaRequest(), mediaHandlerConfig));
@Override public @NotNull Media resolveMedia(@NotNull Media media) { MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); Resource referencedResource = media.getMediaRequest().getResource(); Resource ntFileResource = null; Resource ntResourceResource = null; Resource mediaInlineResource = getMediaInlineResource(media.getMediaRequest()); if (mediaInlineResource != null) { if (JcrBinary.isNtFile(mediaInlineResource)) { media.setCropDimension(getMediaCropDimension(media.getMediaRequest(), mediaHandlerConfig)); media.setRotation(getMediaRotation(media.getMediaRequest(), mediaHandlerConfig));
/** * Get dimension from first media format defined in media args. Fall back to dummy min. dimension if none specified. * @param media Media metadata * @return Dimension */ public static @NotNull Dimension getMediaformatDimension(@NotNull Media media) { // Create dummy image element to be displayed in Edit mode as placeholder. MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); MediaFormat[] mediaFormats = mediaArgs.getMediaFormats(); // detect width/height - either from media args, or from first media format long width = mediaArgs.getFixedWidth(); long height = mediaArgs.getFixedHeight(); if ((width == 0 || height == 0) && mediaFormats != null && mediaFormats.length > 0) { MediaFormat firstMediaFormat = mediaArgs.getMediaFormats()[0]; Dimension dimension = firstMediaFormat.getMinDimension(); if (dimension != null) { width = dimension.getWidth(); height = dimension.getHeight(); } } // fallback to min width/height if (width == 0) { width = MediaMarkupBuilder.DUMMY_MIN_DIMENSION; } if (height == 0) { height = MediaMarkupBuilder.DUMMY_MIN_DIMENSION; } return new Dimension(width, height); }