Class DamUtil

java.lang.Object
com.day.cq.dam.commons.util.DamUtil

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

  • Constructor Details

    • DamUtil

      public DamUtil()
  • Method Details

    • 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:
    • 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:
    • 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
    • buildEntryDepthMapPreview

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

      @Deprecated public static String getValidFolderName(String name)
      Deprecated.
      This method is no longer valid since its' inconsistent with assets ui and AEM Desktop, use getValidFolderPath instead

      This method determines whether the folder name contains special characters and replaces them with underscore ("_")

    • getSanitizedFolderName

      public static String getSanitizedFolderName(String name)
      This method determines whether the folder name contains special characters(\%#{}/^;+:*?.|@\t[] ") and replaces them with dash ("-"), and convert to lower case
    • getSanitizedFolderName

      public static String getSanitizedFolderName(String name, boolean useLowerCase)
      This method determines whether the folder name contains special characters(\%#{}/^;+:*?.|@\t[] ") and replaces them with dash ("-"). Lower case conversion is based on useLowerCase parameter.
    • 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.
    • validateFolderNode

      public static Node validateFolderNode(String path, Session serviceSession) throws RepositoryException
      Throws:
      RepositoryException
    • createEmptyArchiveNode

      @Deprecated public static Node createEmptyArchiveNode(Resource configResource, String name, Session serviceSession) throws RepositoryException
      Deprecated.
      Throws:
      RepositoryException
    • 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)
    • getReferencedCollections

      public static List<ResourceCollection> getReferencedCollections(Resource resource)
    • getSubAssets

      public static Collection<Asset> getSubAssets(Resource resource)
    • getRefererAssets

      public static Collection<Asset> getRefererAssets(ResourceResolver resolver, String path)
    • 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
    • getAssetFromID

      public static Asset getAssetFromID(ResourceResolver resolver, String id) throws RepositoryException
      Obtain Asset provided the jcr:uuid
      Returns:
      the Asset, or null if asset with specified ID wasn't found
      Throws:
      RepositoryException
    • findRelativePathOfAssetNode

      public static String findRelativePathOfAssetNode(Node assetNode, String assetsRoot) throws RepositoryException
      Obtain Asset's path relative to specified Asset's root
      Returns:
      Asset's Relative Path (see DamConstants.DAM_ASSET_RELATIVE_PATH
      Throws:
      RepositoryException
    • 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.
    • isAudio

      public static boolean isAudio(Asset asset)
    • isVtt

      public static boolean isVtt(Asset asset)
    • isVideoSubAsset

      public static boolean isVideoSubAsset(Asset asset)