/** * 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; }
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 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; }
/** * 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 } } }