Class DamUtil


  • public class DamUtil
    extends Object
    This class provides various utility methods pertaining to DAM.
    Since:
    CQ 5.4.0
    • Constructor Detail

      • DamUtil

        public DamUtil()
    • Method Detail

      • assetToBinaryPath

        public static String assetToBinaryPath​(String path)
        Translates the path of an asset to its congruent DAM binary path, by replacing the /content/dam path prefix with /var/dam. If the given path does not start with DAM's asset mountpoint, null is returned.
           DamUtil.assetToBinaryPath("/content/dam/myfolder/test.jpg")    = "/var/dam/myfolder/test.jpg"
           DamUtil.assetToBinaryPath(null)                                = null
         
        Parameters:
        path - The path to translate.
        Returns:
        The binary equivalent path or null if the given path is not a DAM asset path.
        See Also:
        DamConstants.MOUNTPOINT_BINARIES, DamConstants.MOUNTPOINT_ASSETS
      • binaryToAssetPath

        public static String binaryToAssetPath​(String path)
        Translates the path of a DAM binary to its congruent asset path, by replacing the /var/dam path prefix with /content/dam. If the given path does not start with DAM's binary mountpoint, null is returned.
           DamUtil.binaryToAssetPath("/var/dam/myfolder/test.jpg")        = "/content/dam/myfolder/test.jpg"
           DamUtil.binaryToAssetPath(null)                                = null
         
        Parameters:
        path - The path to translate.
        Returns:
        The metadata equivalent path or null if the given path is not a DAM binary path.
        See Also:
        DamConstants.MOUNTPOINT_BINARIES, DamConstants.MOUNTPOINT_ASSETS
      • isThumbnail

        public static boolean isThumbnail​(Node file)
        This method determines whether the given Node represents a thumbnail of an asset.
        Parameters:
        file - The node to check.
        Returns:
        true if the node represent's an asset's thumbnail, false otherwise.
      • buildEntryDepthMap

        public static Map<String,​Pair<String,​Integer>> buildEntryDepthMap​(SlingScriptHelper sling)
        This method creates a Map containing list of asset paths pending in agent queues
        Parameters:
        sling -
        Returns:
        Map will contains asset path, queue position in agent queue and action type
      • getValidFolderName

        public static String getValidFolderName​(String name)
        This method determines whether the folder name contains special characters and replaces them with underscore ("_")
      • getValidFileName

        public static String getValidFileName​(String name)
        This method determines whether the file name contains special characters and replaces them with underscore ("_")
      • isZipTypeAsset

        public static boolean isZipTypeAsset​(Asset asset)
        This method determines whether the provided asset is actually a zip asset or not
        Parameters:
        asset - the asset to check
        Returns:
        returns true if asset is a zip file or else false
      • getThumbnailName

        public static String getThumbnailName​(int width,
                                              int height)
        Returns the name of a thumbnail in the DAM thumbnail name format, respecting the given dimensions of the thumbnail. E.g. providing a width of 100 and a height of 100 would return the thumbnail name cq5dam.thumbnail.100.100.png. As a thumbnail represents a rendition of an Asset, the name can be used for easy retrieval of the thumbnail:
           ...
           final String thumbnailName = DamUtil.getThumbnailName(100, 100);
           final Resource thumbnail = asset.getRendition(thumbnailName);
           ...
         
        Parameters:
        width - The width of the thumbnail.
        height - The height of the thumbnail.
        Returns:
        The rendition name of the thumbnail.
      • getThumbnailName

        public static String getThumbnailName​(ThumbnailConfig config)
        Returns the expected rendition/thumbnail name based on the given thumbnail configuration.
        Parameters:
        config - The ThumbnailConfig
        Returns:
        The Rendition name.
      • getThumbnailName

        public static String getThumbnailName​(int width,
                                              int height,
                                              String[] selectors)
        Behaves like getThumbnailName(int, int). Additionally and optionally a string array of selectors to be added to the thumbnail name can be specified. E.g. providing width = 100, height = 100 and selectors = {"a", "b", "c"} would return the thumbnail name cq5dam.thumbnail.100.100.a.b.c.png. Example:
           ...
           final String[] selectors = {"a", "b", "c"};
           final String thumbnailName = DamUtil.getThumbnailName(100, 100, selectors);
           final Resource thumbnail = asset.getRendition(thumbnailName);
           ...
         
        Parameters:
        width - The width of the thumbnail.
        height - The height of the thumbnail.
        selectors - An array of selectors to be added. May be null (ignored).
        Returns:
        The rendition name of the thumbnail.
      • isRendition

        public static boolean isRendition​(Resource resource)
        Checks whether the given Resource represents a Rendition of an Asset. The requirements are that given resource is stored within the renditions folder of an asset and that it's node type is nt:file.
        Parameters:
        resource - The resource to check.
        Returns:
        true if the resource is a rendition.
      • isMetadataRes

        public static boolean isMetadataRes​(Resource resource)
        Returns true if Asset can be adapted from dam:asset/jcr:content/metadata resource else returns false.
      • getAssetFromMetaRes

        public static Asset getAssetFromMetaRes​(Resource resource)
        Returns Asset for the dam:asset/jcr:content/metadata resource else returns null.
      • isAsset

        public static boolean isAsset​(Resource resource)
        Checks whether the given Resource represents a Asset. The requirements are that the given resource is of node type dam:Asset.
        Parameters:
        resource - The resource to check.
        Returns:
        true if the resource is an asset.
      • isFrozenNode

        public static boolean isFrozenNode​(Resource resource)
        Checks whether the give Resource represents a frozen node. The requirements are that the given resource is of node type nt:frozenNode.
        Parameters:
        resource - The resource to check
        Returns:
        true if the resource is an asset.
      • isSubAsset

        public static boolean isSubAsset​(Resource resource)
        Indicates whether the given resource is an Asset's sub-asset.
        Parameters:
        resource - The Resource to check.
        Returns:
        true if this asset is a sub-asset.
      • resolveToAsset

        public static Asset resolveToAsset​(Resource resource)
        Checks whether the given resource is an asset, and if not, travels upwards the resource hierarchy until a resource is an asset.
        Parameters:
        resource - The resource to check.
        Returns:
        The Asset or null if no asset was found.
      • setModified

        public static void setModified​(Asset asset,
                                       String user,
                                       Calendar date)
        This method updates the "last modified" information of the given Asset.
        Parameters:
        asset - The asset to update.
        user - The username of who updated the asset.
        date - The date/time the updated happened.
      • findExpiringAssets

        public static List<String> findExpiringAssets​(Session session,
                                                      Calendar lowerBound,
                                                      Calendar upperBound)
                                               throws RepositoryException
        Find all dam assets which are getting expired between lowerBound and upperBound.
        Parameters:
        session -
        lowerBound - the lower bound of date where asset expiration is computed. If null it is not considered as query criterion
        upperBound - the upper bound of date where asset expiration is computed. If null it is not considered as query criterion
        Throws:
        RepositoryException
      • isExpiredAsset

        public static boolean isExpiredAsset​(Asset asset)
        Returns whether the asset has expired.
        Parameters:
        asset -
        Returns:
        true, if the asset has expired
      • isExpiredAsset

        public static boolean isExpiredAsset​(Resource resource)
        Returns whether the resource has expired.
        Parameters:
        resource -
        Returns:
        true, if the resource has expired
      • isExpiredSubAsset

        public static boolean isExpiredSubAsset​(Resource resource)
        Returns whether the resource has any subasset which has expired.
        Parameters:
        resource -
        Returns:
        true, if any of the subasset of the asset has expired
      • getValue

        public static String getValue​(Node n,
                                      String name,
                                      String defaultValue)
                               throws RepositoryException
        Returns the single property value from the given node n with name. If there is no single-valued property for the given name, then the defaultValue is returned.
        Parameters:
        n - a node.
        name - a property name.
        defaultValue - the default value.
        Returns:
        the value for the given property name or the default value.
        Throws:
        RepositoryException - if value cannot be retrieved
      • isImage

        public static boolean isImage​(Asset asset)
        To check weather asset falls under Image category.
        Parameters:
        asset -
        Returns:
        True if asset is of type Image.
      • isImage

        public static boolean isImage​(String mimeType)
        To check whether given mime type is an image mime type.
        Parameters:
        mimeType -
        Returns:
        True if mimeType is an Image mime type.
      • isThreeD

        public static boolean isThreeD​(Asset asset)
        To check weather asset falls under ThreeD category (Dimensional 3D asset).
        Parameters:
        asset -
        Returns:
        True if asset is of type ThreeD.
      • isVideo

        public static boolean isVideo​(Asset asset)
        To check weather asset falls under Video category.
        Parameters:
        asset -
        Returns:
        True if asset is of type video.
      • isSmartCollection

        public static boolean isSmartCollection​(Resource resource)
        Checks if given resource represent a smart collection
        Parameters:
        resource - an instance of Resource
        Returns:
        true if resource represents a smart collection false if resource does not represents a smart collection
      • isCollection

        public static boolean isCollection​(Resource resource)
        Checks if given resource represents a collection.
        Parameters:
        resource - an instance of Resource
        Returns:
        true if resource represents any collection type
      • isPublic

        public static boolean isPublic​(Resource resource)
                                throws RepositoryException
        Checks if a given resource is readable by the tenant specific group. If not defined checks for the dam-users group.
        Parameters:
        resource - DAM resource like collection, snippet
        Returns:
        True if readable by tenant default group
        Throws:
        RepositoryException - Error reading permissions
      • getApplicableProfile

        public static Node getApplicableProfile​(Asset asset,
                                                String profileType,
                                                Session session)
        Get a specific Processing profile which may be applied to an asset
        Parameters:
        asset - The asset we get from payload of DamUpdateAsset Workflow
        profileType - The type of profile to get (metadata/video/image)
        session - To retrieve nodes from JCR
        Returns:
        {Node} the Processing Profile, null if not found
      • getApplicableProfile

        public static Node getApplicableProfile​(Resource resource,
                                                String profileType,
                                                Session session)
        Get a specific Processing profile which may be applied to an asset
        Parameters:
        resource - The resource we get from payload of DamUpdateAsset Workflow
        profileType - The type of profile to get (metadata/video/image)
        session - To retrieve nodes from JCR
        Returns:
        {Node} the Processing Profile, null if not found
      • getAppliedProcessingProfilePath

        @Deprecated
        public static String getAppliedProcessingProfilePath​(Asset asset)
        Deprecated.
        Processing Profile overview has been removed. Now individual PPs are applied to folders. return null use @getApplicableProfile
      • getAssets

        public static Iterator<Asset> getAssets​(Resource res)
        Returns an iterator to all the assets contained in or represented by the resource. If resource is a folder, then all its folders are navigated recursively and assets are listed If a resource is ResourceCollection, then all its member resources are consulted and navigated recursively if any of the member represent folder or ResourceCollection. If the resource represents an asset itself, an iterator of single item i.e. Collections.singletonList(res.adaptTo(Asset.class)).iterator();
        Parameters:
        res - a sling Resource
        Returns:
        an Iterator of Asset
      • checkforAIFile

        public static boolean checkforAIFile​(Asset asset)
      • getBestFitRendition

        public static Rendition getBestFitRendition​(int width,
                                                    List<Rendition> renditions)
        It iterates all renditions available and find the closest (preferably higher side) rendition and return the same.
        Parameters:
        width -
        renditions -
        Returns:
        rendition
      • getBestFitFPORendition

        public static Rendition getBestFitFPORendition​(Asset asset,
                                                       String[] renditionPreferenceList)
        Parameters:
        asset - The asset whose best fit fpo rendition is sought
        renditionPreferenceList - The list of renditions in order of preference
        Returns:
        The best fit rendition if found per the specified preference list else null
      • getImageDimension

        public static Dimension getImageDimension​(InputStream is,
                                                  String filename)
        getImageDimension : To get actual width and height of the rendition or image for proper UI rendering of thumbnails , earlier new Layer () API was being used which was inefficient.
      • getImageDimension

        public static Dimension getImageDimension​(Rendition rendition)
        getImageDimension : NUI To get actual width and height of the rendition or image for proper UI rendering of thumbnails , earlier new Layer () API was being used which was inefficient.
      • expiryStatus

        public static boolean expiryStatus​(Asset asset)
      • getReferencedSubAssets

        public static List<Asset> getReferencedSubAssets​(Resource resource)
      • getExpiryTime

        public static Calendar getExpiryTime​(Asset asset)
      • getParentAsset

        public static Asset getParentAsset​(Resource resource)
      • isValid

        public static boolean isValid​(Asset asset)
                               throws RepositoryException
        Checks if the asset is valid. It is valid if it has content and if the on-/off time range spans the current time.
        Returns:
        true if the page is valid; false otherwise.
        Throws:
        RepositoryException
      • getTenantAssetsRoot

        public static String getTenantAssetsRoot​(ResourceResolver resolver)
        Obtain Tenant Asset's root for specified ResourceResolver
        Returns:
        the tenant root-path
      • getTenantAssetsRoot

        public static String getTenantAssetsRoot​(ResourceResolver resolver,
                                                 String assetPath)
        Obtain Tenant Asset's root for specified asset path and ResourceResolver This returns the tenant for the session associated with the resource resolver, not the tenant associated with the asset if provided assetPath can't be resolved to an Asset
        Returns:
        the tenant root-path
      • getTenantAssetsRoot

        public static String getTenantAssetsRoot​(Resource resource)
        Obtain Tenant Asset's root for specified Sling resource
        Returns:
        the tenant root-path
      • getUserCollectionsPath

        public static String getUserCollectionsPath​(ResourceResolver resolver)
        Obtain collection path for specified tenant and user.
        Parameters:
        resolver - Adaptable for tenant and user
        Returns:
        path for user collections
      • getInheritedProperty

        public static <T> T getInheritedProperty​(String property,
                                                 Resource resource,
                                                 T defaultValue)
        This method searches for the property in the provided contentPath resource. Moves up the repository path until finds the property on the node. Tries to convert the found value to type of default value. If can't, returns the defaultValue
        Parameters:
        property - the property user is looking for.
        resource - the resource representing the path where the property has to be searched
        defaultValue -
        Returns:
        the value configured on the node hierarchy converted to type of default value. defaultValue if property not found on the path hierarchy
      • isInRunningWorkflow

        @Deprecated
        public static boolean isInRunningWorkflow​(Resource resource)
        Deprecated.
        This method has been deprecated in favor of com.day.cq.dam.api.processingstate.provider.AssetProcessingStateProvider.isProcessing()
        This function determines if an asset has its DamConstants.DAM_ASSET_STATE property is set to DamConstants.DAM_ASSET_STATE_PROCESSING. Presently this returns true only if in DAM update asset workflow.
        Parameters:
        resource - the resource to check
        Returns:
        true if DamConstants.DAM_ASSET_STATE property is set to DamConstants.DAM_ASSET_STATE_PROCESSING or DamConstants.DAM_ASSET_STATE_CUSTOM_WF_PROCESSING false otherwise
      • getAssetCache

        public static AssetCache getAssetCache()
        Get an instance of AssetCache for access to cached rendition contents and aggregated InputStream and temporary File cleanups.
        Returns:
        a suitable asset cache
      • isLivefyreFragment

        public static boolean isLivefyreFragment​(Resource resource)
        This function determines if an asset is livefyre asset.
        Parameters:
        resource - the resource to check
        Returns:
        true if LIVEFYRE_ID property is avaliable, false otherwise
      • getInheritedContentProperty

        public static <T> T getInheritedContentProperty​(String property,
                                                        Resource resource,
                                                        T defaultValue)
        This method searches for the content property in the provided contentPath resource. Moves up the repository path until finds the property on the node. Tries to convert the found value to type of default value. If can't, returns the defaultValue
        Parameters:
        property - the property user is looking for.
        resource - the resource representing the path where the property has to be searched
        defaultValue -
        Returns:
        the value configured on the node hierarchy converted to type of default value. defaultValue if property not found on the path hierarchy
      • skipBOM

        public static void skipBOM​(InputStream stream,
                                   String encodingFormat)
                            throws IOException
        this skips the number of bytes that represents the BOM from the inputstream, so that BOM does not appear as invalid characters in the output rendition. Otherwise Layer will try to render BOM also as a character and eventually ends up in showing a invalid character as the first character in the rendition.
        Throws:
        IOException
      • getTitle

        public static String getTitle​(@Nonnull
                                      Resource resource)
        This method returns the title for a given resource based on type. If resource is of type asset, it returns jcr:content/metadata/dc:title. and jcr:title for other types.