@Override public @NotNull Media build() { MediaRequest request = new MediaRequest(this.resource, this.mediaRef, this.mediaArgs, this.refProperty, this.cropProperty, this.rotationProperty); return mediaHandler.processRequest(request); }
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; }
/** * Checks whether a media request can be handled by this media source * @param mediaRequest Media request * @return true if this media source can handle the given media request */ @SuppressWarnings("null") public boolean accepts(@NotNull MediaRequest mediaRequest) { // if an explicit media request is set check this first if (StringUtils.isNotEmpty(mediaRequest.getMediaRef())) { return accepts(mediaRequest.getMediaRef()); } // otherwise check resource which contains media request properties ValueMap props = mediaRequest.getResourceProperties(); // check for matching media source ID in link resource String mediaSourceId = props.get(MediaNameConstants.PN_MEDIA_SOURCE, String.class); if (StringUtils.isNotEmpty(mediaSourceId)) { return StringUtils.equals(mediaSourceId, getId()); } // if not link type is set at all check if link ref attribute contains a valid link else { String refProperty = StringUtils.defaultString(mediaRequest.getRefProperty(), getPrimaryMediaRefProperty()); String mediaRef = props.get(refProperty, String.class); return accepts(mediaRef); } }
/** * Get media request path to media library * @param mediaRequest Media request * @param mediaHandlerConfig Media handler config (can be null, but should not be null) * @return Path or null if not present */ protected final @Nullable String getMediaRef(@NotNull MediaRequest mediaRequest, @Nullable MediaHandlerConfig mediaHandlerConfig) { if (StringUtils.isNotEmpty(mediaRequest.getMediaRef())) { return mediaRequest.getMediaRef(); } else if (mediaRequest.getResource() != null) { String refProperty = getMediaRefProperty(mediaRequest, mediaHandlerConfig); return mediaRequest.getResource().getValueMap().get(refProperty, String.class); } else { return null; } }
/** * Implements check whether to apply drag&drop support as described in {@link DragDropSupport}. * @param mediaRequest Media request * @param wcmComponentContext WCM component context * @return true if drag&droup can be applied. */ public static boolean canApplyDragDropSupport(@NotNull MediaRequest mediaRequest, @Nullable ComponentContext wcmComponentContext) { switch (mediaRequest.getMediaArgs().getDragDropSupport()) { case ALWAYS: return true; case NEVER: return false; case AUTO: String resourcePath = null; if (mediaRequest.getResource() != null) { resourcePath = mediaRequest.getResource().getPath(); } String componentResourcePath = null; if (wcmComponentContext != null && wcmComponentContext.getResource() != null) { componentResourcePath = wcmComponentContext.getResource().getPath(); } return resourcePath != null && StringUtils.equals(resourcePath, componentResourcePath); default: throw new IllegalArgumentException("Unsupported drag&drop support mode: " + mediaRequest.getMediaArgs().getDragDropSupport()); } }
/** * @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; }
/** * Get resource with media inline data (nt:file node). * @param mediaRequest Media reference * @return Resource or null if not present */ private Resource getMediaInlineResource(MediaRequest mediaRequest) { Resource resource = mediaRequest.getResource(); if (resource == null) { return null; } // check if resource itself is a nt:file node if (JcrBinary.isNtFileOrResource(resource)) { return resource; } // check if child node exists which is a nt:file node String refProperty = StringUtils.defaultString(mediaRequest.getRefProperty(), mediaHandlerConfig.getMediaInlineNodeName()); Resource mediaInlineResource = resource.getChild(refProperty); if (JcrBinary.isNtFileOrResource(mediaInlineResource)) { return mediaInlineResource; } // not found return null; }
/** * Get (optional) crop dimensions from resource * @param mediaRequest Media request * @param mediaHandlerConfig Media handler config (can be null, but should not be null) * @return Crop dimension or null if not set or invalid */ @SuppressWarnings("null") protected final @Nullable CropDimension getMediaCropDimension(@NotNull MediaRequest mediaRequest, @Nullable MediaHandlerConfig mediaHandlerConfig) { if (mediaRequest.getResource() != null) { String cropProperty = getMediaCropProperty(mediaRequest, mediaHandlerConfig); String cropString = mediaRequest.getResource().getValueMap().get(cropProperty, String.class); if (StringUtils.isNotEmpty(cropString)) { try { return CropDimension.fromCropString(cropString); } catch (IllegalArgumentException ex) { // ignore } } } return null; }
/** * Get property name containing the rotation parameter * @param mediaRequest Media request * @param mediaHandlerConfig Media handler config * @return Property name */ protected final @NotNull String getMediaRotationProperty(@NotNull MediaRequest mediaRequest, @NotNull MediaHandlerConfig mediaHandlerConfig) { String rotationProperty = mediaRequest.getRotationProperty(); if (StringUtils.isEmpty(rotationProperty)) { rotationProperty = mediaHandlerConfig.getMediaRotationProperty(); } return rotationProperty; }
/** * Get property name containing the media request path * @param mediaRequest Media request * @param mediaHandlerConfig Media handler config (can be null, but should not be null) * @return Property name */ protected final @NotNull String getMediaRefProperty(@NotNull MediaRequest mediaRequest, @Nullable MediaHandlerConfig mediaHandlerConfig) { String refProperty = mediaRequest.getRefProperty(); if (StringUtils.isEmpty(refProperty)) { if (mediaHandlerConfig != null) { refProperty = mediaHandlerConfig.getMediaRefProperty(); } else { refProperty = MediaNameConstants.PN_MEDIA_REF; } } return refProperty; }
/** * Get property name containing the cropping parameters * @param mediaRequest Media request * @param mediaHandlerConfig Media handler config (can be null, but should not be null) * @return Property name */ protected final @NotNull String getMediaCropProperty(@NotNull MediaRequest mediaRequest, @Nullable MediaHandlerConfig mediaHandlerConfig) { String cropProperty = mediaRequest.getCropProperty(); if (StringUtils.isEmpty(cropProperty)) { if (mediaHandlerConfig != null) { cropProperty = mediaHandlerConfig.getMediaCropProperty(); } else { cropProperty = MediaNameConstants.PN_MEDIA_CROP; } } return cropProperty; }
@Override @SuppressWarnings("null") public boolean accepts(@NotNull MediaRequest mediaRequest) { // if no media source id is defined fallback to auto-detection of inline media object in resource String mediaSourceId = mediaRequest.getResourceProperties().get(MediaNameConstants.PN_MEDIA_SOURCE, String.class); if (StringUtils.isEmpty(mediaSourceId)) { // accept for inline media if "mediaInline" child node is present return getMediaInlineResource(mediaRequest) != null; } else { return super.accepts(mediaRequest); } }
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));
/** * 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()); } } }
/** * 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 } } }
/** * Get (optional) rotation from resource * @param mediaRequest Media request * @param mediaHandlerConfig Media handler config * @return Rotation value or null if not set or invalid */ @SuppressWarnings("null") protected final @Nullable Integer getMediaRotation(@NotNull MediaRequest mediaRequest, @NotNull MediaHandlerConfig mediaHandlerConfig) { if (mediaRequest.getResource() != null) { String rotationProperty = getMediaRotationProperty(mediaRequest, mediaHandlerConfig); String stringValue = mediaRequest.getResource().getValueMap().get(rotationProperty, String.class); if (StringUtils.isNotEmpty(stringValue)) { int rotationValue = NumberUtils.toInt(stringValue); if (TransformedRenditionHandler.isValidRotation(rotationValue)) { return rotationValue; } } } return null; }
@Override public @NotNull Media resolveMedia(@NotNull Media media) { MediaArgs mediaArgs = media.getMediaRequest().getMediaArgs(); Resource referencedResource = media.getMediaRequest().getResource(); Resource ntFileResource = null; Resource ntResourceResource = null;
@Override public final boolean accepts(@NotNull Media media) { return media.getMediaRequest().getMediaArgs().isMediaFormatsMandatory() && media.getRendition() != null && media.getRenditions().size() > 1 && media.isValid(); }
/** * @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(); }