/** * 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 (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; }
/** * 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; } }
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; }
/** * 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()); } }
/** * 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; }
&& media.getMediaRequest().getResource() != null) { ValueMap props = media.getMediaRequest().getResource().getValueMap(); mediaArgs.altText(props.get(mediaHandlerConfig.getMediaAltTextProperty(), String.class));
/** * 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 } } }
Resource referencedResource = media.getMediaRequest().getResource(); Resource ntFileResource = null; Resource ntResourceResource = null;