ACS AEM commons in JAVA | Community
Skip to main content
Level 4
January 12, 2024
Solved

ACS AEM commons in JAVA

  • January 12, 2024
  • 3 replies
  • 2158 views

Hello,

I have requirement on archiving the assets, where i need to send a mail to the folder owners before one month of actual expiry date. So we are planning to take the folder owners mail id from the ACS AEM commons generic list.

I am looking for the help how we can access the generic list directly on backend without adding the ACS AEM commons on the component dialog as a datasource. If anyone knows the way to fetch the list value in the backend, kindly let me know here. Thanks much in advance.

 

 

Regards,

Bhavani Bharanidharan

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Madhur-Madan

Hi @bhavanibharani,

import com.adobe.acs.commons.genericlists.GenericList; import com.adobe.acs.commons.genericlists.GenericListManager; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ValueMap; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import java.util.List; @Component( immediate = true, service = { MyService.class }, property = { Constants.SERVICE_DESCRIPTION + "=My Service", "sling.servlet.methods=GET", "sling.servlet.paths=/bin/my-service" } ) public class MyService { @Reference private GenericListManager genericListManager; public void myMethod(SlingHttpServletRequest request) { ResourceResolver resolver = request.getResourceResolver(); // Specify the path to your Generic List String listPath = "/etc/acs-commons/lists/my-generic-list"; GenericList genericList = genericListManager.getGenericList(resolver, listPath); if (genericList != null) { List<ValueMap> entries = genericList.getEntries(); // Now, you can iterate through the entries and retrieve the required information for (ValueMap entry : entries) { String value = entry.get("value", String.class); // Process the value as needed } } } }

This example assumes that you have the ACS AEM Commons Generic List located at "/etc/acs-commons/lists/my-generic-list". Adjust the listPath accordingly based on your configuration. 

Also, Generic Lists are not accessible to everyone by default on AEM as a Cloud Service Publish service. To make generic lists available on AEM Publish, set the appropriate jcr:read ACLs on either the /etc/acs-commons/list node, on specific list pages under /etc/acs-commons/lists. You can find the reference here

https://adobe-consulting-services.github.io/acs-aem-commons/features/generic-lists/index.html

Note: Make sure that the appropriate version of ACS AEM Commons is installed and the necessary dependencies are available in your project.

Thanks

3 replies

Madhur-Madan
Community Advisor
Madhur-MadanCommunity AdvisorAccepted solution
Community Advisor
January 12, 2024

Hi @bhavanibharani,

import com.adobe.acs.commons.genericlists.GenericList; import com.adobe.acs.commons.genericlists.GenericListManager; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ValueMap; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import java.util.List; @Component( immediate = true, service = { MyService.class }, property = { Constants.SERVICE_DESCRIPTION + "=My Service", "sling.servlet.methods=GET", "sling.servlet.paths=/bin/my-service" } ) public class MyService { @Reference private GenericListManager genericListManager; public void myMethod(SlingHttpServletRequest request) { ResourceResolver resolver = request.getResourceResolver(); // Specify the path to your Generic List String listPath = "/etc/acs-commons/lists/my-generic-list"; GenericList genericList = genericListManager.getGenericList(resolver, listPath); if (genericList != null) { List<ValueMap> entries = genericList.getEntries(); // Now, you can iterate through the entries and retrieve the required information for (ValueMap entry : entries) { String value = entry.get("value", String.class); // Process the value as needed } } } }

This example assumes that you have the ACS AEM Commons Generic List located at "/etc/acs-commons/lists/my-generic-list". Adjust the listPath accordingly based on your configuration. 

Also, Generic Lists are not accessible to everyone by default on AEM as a Cloud Service Publish service. To make generic lists available on AEM Publish, set the appropriate jcr:read ACLs on either the /etc/acs-commons/list node, on specific list pages under /etc/acs-commons/lists. You can find the reference here

https://adobe-consulting-services.github.io/acs-aem-commons/features/generic-lists/index.html

Note: Make sure that the appropriate version of ACS AEM Commons is installed and the necessary dependencies are available in your project.

Thanks

arunpatidar
Community Advisor
Community Advisor
January 12, 2024
Arun Patidar
Raja_Reddy
Community Advisor
Community Advisor
January 12, 2024

Hi @bhavanibharani 
Sling API to query the repository. Below is a sample Java code

import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.osgi.service.component.annotations.Reference; import com.adobe.granite.security.user.UserManager; import com.adobe.granite.security.user.User; import java.util.Iterator; import java.util.List; import java.util.Map; public class ACSCommonsUtil { @Reference private ResourceResolverFactory resolverFactory; // Method to get the email addresses of folder owners from ACS Commons Generic List public List<String> getFolderOwnersEmails(String folderPath) { List<String> emails = new ArrayList<>(); try (ResourceResolver resolver = resolverFactory.getServiceResourceResolver(null)) { // Path to ACS Commons Generic List String genericListPath = "/etc/acs-commons/lists/your-generic-list-name"; // Construct the path to the Generic List entry for the given folderPath String genericListEntryPath = genericListPath + "/" + folderPath.replace("/", "_"); // Get the Resource for the Generic List entry Resource genericListEntryResource = resolver.getResource(genericListEntryPath); if (genericListEntryResource != null) { // Assuming the property storing email addresses is named "emails" emails = genericListEntryResource.getValueMap().get("emails", new ArrayList<String>().getClass()); } } catch (Exception e) { // Handle exceptions } return emails; } // Method to get the folder owner's email from the user manager public String getFolderOwnerEmail(String folderPath) { try (ResourceResolver resolver = resolverFactory.getServiceResourceResolver(null)) { UserManager userManager = resolver.adaptTo(UserManager.class); // Assuming the folder owner's user ID is stored in the folder's "owner" property String ownerId = resolver.getResource(folderPath).getValueMap().get("owner", String.class); if (ownerId != null) { User user = (User) userManager.getAuthorizable(ownerId); return user.getProperty("profile/email", String.class); } } catch (Exception e) { // Handle exceptions } return null; } }

 This example assumes that you have ACS AEM Commons installed, and there is a Generic List containing email addresses for each folder. It also assumes that the user ID of the folder owner is stored in the "owner" property of the folder.