@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; }
@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(); }
/** * Build JSON metadata for one rendition as image source. * @param media Media * @param mediaFormat Media format * @return JSON metadata */ protected JSONObject toReponsiveImageSource(Media media, MediaFormat mediaFormat) { String url = buildDummyImageUrl(mediaFormat); try { JSONObject source = new JSONObject(); source.put(MediaNameConstants.PROP_BREAKPOINT, mediaFormat.getProperties().get(MediaNameConstants.PROP_BREAKPOINT)); source.put(ResponsiveImageMediaMarkupBuilder.PROP_SRC, url); return source; } catch (JSONException ex) { throw new RuntimeException("Error building JSON source.", ex); } }
/** * 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; }