diff --git a/bundle/src/main/java/com/adobe/acs/commons/audit_log_search/impl/AuditLogSearchServlet.java b/bundle/src/main/java/com/adobe/acs/commons/audit_log_search/impl/AuditLogSearchServlet.java index 96caba97e6..63082aebd8 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/audit_log_search/impl/AuditLogSearchServlet.java +++ b/bundle/src/main/java/com/adobe/acs/commons/audit_log_search/impl/AuditLogSearchServlet.java @@ -21,7 +21,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; - import org.apache.commons.lang3.StringUtils; import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; @@ -29,8 +28,9 @@ import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ValueMap; -import org.apache.sling.api.servlets.HttpConstants; import org.apache.sling.api.servlets.SlingSafeMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,6 +39,7 @@ import javax.jcr.Session; import javax.jcr.query.Query; import javax.jcr.query.QueryManager; +import javax.servlet.Servlet; import javax.servlet.ServletException; import java.io.IOException; import java.io.InputStream; @@ -48,12 +49,14 @@ import java.util.HashSet; import java.util.Set; -@SlingServlet( - methods = {HttpConstants.METHOD_GET}, - resourceTypes = {"acs-commons/components/utilities/audit-log-search"}, - selectors = {"auditlogsearch"}, - extensions = {"json"}) + @SuppressWarnings("serial") +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/audit-log-search", + methods = "GET", + extensions = "json", + selectors = "auditlogsearch") public class AuditLogSearchServlet extends SlingSafeMethodsServlet { private static final Logger log = LoggerFactory.getLogger(AuditLogSearchServlet.class); diff --git a/bundle/src/main/java/com/adobe/acs/commons/dam/impl/MatteRenditionProcess.java b/bundle/src/main/java/com/adobe/acs/commons/dam/impl/MatteRenditionProcess.java index fffc4060e1..d926be94eb 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/dam/impl/MatteRenditionProcess.java +++ b/bundle/src/main/java/com/adobe/acs/commons/dam/impl/MatteRenditionProcess.java @@ -25,10 +25,8 @@ import com.day.cq.workflow.exec.WorkItem; import com.day.cq.workflow.exec.WorkflowProcess; import com.day.cq.workflow.metadata.MetaDataMap; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,9 +38,12 @@ /** * Workflow process which mattes an image against a solid background to the specified size. */ -@Component(metatype = false) -@Service -@Property(name = "process.label", value = "Matte Rendition") + +@Component( + service = {WorkflowProcess.class}, + property = { + "process.label=Matte Rendition" + }) @SuppressWarnings({"squid:S00115", "checkstyle:localvariablename"}) public final class MatteRenditionProcess extends AbstractRenditionModifyingProcess implements WorkflowProcess { @@ -63,11 +64,11 @@ enum HoritzonalPosition { private static final String SPECIFIER = "matte"; // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") - RequireAem requireAem; + @Reference(target = "(distribution=classic)") + private transient RequireAem requireAem; @Reference - private WorkflowHelper workflowHelper; + private transient WorkflowHelper workflowHelper; @Override public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metaDataMap) throws WorkflowException { @@ -109,28 +110,28 @@ protected Layer processLayer(Layer layer, Rendition rendition, WorkflowSession w VerticalPosition vpos = VerticalPosition.valueOf(verticalPositionArgument); switch (vpos) { - case bottom: - topAnchor = newLayer.getHeight() - layer.getHeight(); - break; - case middle: - topAnchor = (newLayer.getHeight() - layer.getHeight()) / 2; - break; - default: - topAnchor = 0; - break; + case bottom: + topAnchor = newLayer.getHeight() - layer.getHeight(); + break; + case middle: + topAnchor = (newLayer.getHeight() - layer.getHeight()) / 2; + break; + default: + topAnchor = 0; + break; } HoritzonalPosition hpos = HoritzonalPosition.valueOf(horizontalPositionArgument); switch (hpos) { - case right: - leftAnchor = newLayer.getWidth() - layer.getWidth(); - break; - case center: - leftAnchor = (newLayer.getWidth() - layer.getWidth()) / 2; - break; - default: - leftAnchor = 0; - break; + case right: + leftAnchor = newLayer.getWidth() - layer.getWidth(); + break; + case center: + leftAnchor = (newLayer.getWidth() - layer.getWidth()) / 2; + break; + default: + leftAnchor = 0; + break; } newLayer.blit(layer, leftAnchor, topAnchor, layer.getWidth(), layer.getHeight(), 0, 0); return newLayer; @@ -161,7 +162,7 @@ private Integer[] getDimension(String dimensions) { return d; } // default value(s) - return new Integer[] { DEFAULT_WIDTH, DEFAULT_HEIGHT }; + return new Integer[]{DEFAULT_WIDTH, DEFAULT_HEIGHT}; } } diff --git a/bundle/src/main/java/com/adobe/acs/commons/genericlists/impl/GenericListAdapterFactory.java b/bundle/src/main/java/com/adobe/acs/commons/genericlists/impl/GenericListAdapterFactory.java index fc91202ac5..3ca0b3f5db 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/genericlists/impl/GenericListAdapterFactory.java +++ b/bundle/src/main/java/com/adobe/acs/commons/genericlists/impl/GenericListAdapterFactory.java @@ -17,21 +17,19 @@ */ package com.adobe.acs.commons.genericlists.impl; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Properties; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.adapter.AdapterFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.adobe.acs.commons.genericlists.GenericList; import com.day.cq.wcm.api.Page; +import org.osgi.service.component.annotations.Component; -@Component -@Service -@Properties({ @Property(name = AdapterFactory.ADAPTABLE_CLASSES, value = "com.day.cq.wcm.api.Page"), - @Property(name = AdapterFactory.ADAPTER_CLASSES, value = "com.adobe.acs.commons.genericlists.GenericList") }) +@Component(service = {AdapterFactory.class}, + property = { + AdapterFactory.ADAPTABLE_CLASSES + "=com.day.cq.wcm.api.Page", + AdapterFactory.ADAPTER_CLASSES + "=com.adobe.acs.commons.genericlists.GenericList" + }) public class GenericListAdapterFactory implements AdapterFactory { @SuppressWarnings("unchecked") diff --git a/bundle/src/main/java/com/adobe/acs/commons/http/injectors/AbstractHtmlRequestInjector.java b/bundle/src/main/java/com/adobe/acs/commons/http/injectors/AbstractHtmlRequestInjector.java index c4df5cf2a2..35172a8955 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/http/injectors/AbstractHtmlRequestInjector.java +++ b/bundle/src/main/java/com/adobe/acs/commons/http/injectors/AbstractHtmlRequestInjector.java @@ -35,10 +35,10 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.ArrayUtils; -import org.apache.felix.scr.annotations.Deactivate; import org.apache.sling.api.SlingHttpServletRequest; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.http.whiteboard.HttpWhiteboardConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,7 +59,7 @@ public void init(final FilterConfig filterConfig) throws ServletException { @Override public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException { - + if (!this.accepts(servletRequest, servletResponse)) { filterChain.doFilter(servletRequest, servletResponse); return; @@ -78,11 +78,11 @@ public final void doFilter(final ServletRequest servletRequest, final ServletRes // Get contents final String originalContents = originalResponse.getBufferedServletOutput().getWriteMethod() == ResponseWriteMethod.WRITER ? originalResponse.getBufferedServletOutput().getBufferedString() : null; - if (originalContents != null + if (originalContents != null && StringUtils.contains(response.getContentType(), "html")) { final int injectionIndex = getInjectIndex(originalContents); - + if (injectionIndex != -1) { // prevent the captured response from being given out a 2nd time via the implicit close() originalResponse.setFlushBufferOnClose(false); @@ -113,7 +113,7 @@ public void destroy() { @SuppressWarnings("squid:S3923") protected boolean accepts(final ServletRequest servletRequest, - final ServletResponse servletResponse) { + final ServletResponse servletResponse) { if (!(servletRequest instanceof HttpServletRequest) || !(servletResponse instanceof HttpServletResponse)) { @@ -186,6 +186,7 @@ protected final void unregisterFilter() { } @Deactivate + @org.apache.felix.scr.annotations.Deactivate protected void deactivate(ComponentContext ctx) { this.unregisterFilter(); } diff --git a/bundle/src/main/java/com/adobe/acs/commons/http/injectors/package-info.java b/bundle/src/main/java/com/adobe/acs/commons/http/injectors/package-info.java index ffef02626e..b4d0cabe04 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/http/injectors/package-info.java +++ b/bundle/src/main/java/com/adobe/acs/commons/http/injectors/package-info.java @@ -18,5 +18,5 @@ /** * Http Injectors. */ -@org.osgi.annotation.versioning.Version("2.1.2") +@org.osgi.annotation.versioning.Version("2.1.3") package com.adobe.acs.commons.http.injectors; \ No newline at end of file diff --git a/bundle/src/main/java/com/adobe/acs/commons/httpcache/rule/impl/CacheOnlyGetRequest.java b/bundle/src/main/java/com/adobe/acs/commons/httpcache/rule/impl/CacheOnlyGetRequest.java index 8935ebf059..a639040b3f 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/httpcache/rule/impl/CacheOnlyGetRequest.java +++ b/bundle/src/main/java/com/adobe/acs/commons/httpcache/rule/impl/CacheOnlyGetRequest.java @@ -18,17 +18,16 @@ package com.adobe.acs.commons.httpcache.rule.impl; import com.adobe.acs.commons.httpcache.rule.AbstractHttpCacheHandlingRule; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; +import com.adobe.acs.commons.httpcache.rule.HttpCacheHandlingRule; import org.apache.sling.api.SlingHttpServletRequest; +import org.osgi.service.component.annotations.Component; /** * ACS AEM Commons - HTTP Cache - Rule: Cache only request http method is GET. - * + *

* Process only Http GET requests. */ -@Component -@Service +@Component(service = {HttpCacheHandlingRule.class}) public class CacheOnlyGetRequest extends AbstractHttpCacheHandlingRule { private static final String HTTP_GET_METHOD = "GET"; diff --git a/bundle/src/main/java/com/adobe/acs/commons/httpcache/store/disk/impl/DiskHttpCacheStoreImpl.java b/bundle/src/main/java/com/adobe/acs/commons/httpcache/store/disk/impl/DiskHttpCacheStoreImpl.java index a98ea700f5..eff80a3d32 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/httpcache/store/disk/impl/DiskHttpCacheStoreImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/httpcache/store/disk/impl/DiskHttpCacheStoreImpl.java @@ -24,9 +24,6 @@ import com.adobe.acs.commons.httpcache.store.HttpCacheStore; import com.adobe.acs.commons.httpcache.store.TempSink; import org.apache.commons.lang3.NotImplementedException; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Service; /** * ACS AEM Commons - HTTP Cache - Disk based cache store implementation. @@ -34,11 +31,12 @@ // TODO - Placeholder component. To be implemented. /* -@Component -@Service -@Property(name = HttpCacheStore.KEY_CACHE_STORE_TYPE, - value = HttpCacheStore.VALUE_DISK_CACHE_STORE_TYPE, - propertyPrivate = true) +@Component(service = { HttpCacheStore.class }, + property = { + HttpCacheStore.KEY_CACHE_STORE_TYPE + "=" + HttpCacheStore.VALUE_DISK_CACHE_STORE_TYPE + } +) + */ public class DiskHttpCacheStoreImpl implements HttpCacheStore { @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/GreyscaleImageTransformerImpl.java b/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/GreyscaleImageTransformerImpl.java index dc159ce8de..9fcead3e44 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/GreyscaleImageTransformerImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/GreyscaleImageTransformerImpl.java @@ -20,25 +20,20 @@ import com.adobe.acs.commons.images.ImageTransformer; import com.day.image.Layer; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Properties; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.ValueMap; +import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * ACS AEM Commons - Image Transformer - Greyscale */ -@Component -@Properties({ - @Property( - name = ImageTransformer.PROP_TYPE, - value = GreyscaleImageTransformerImpl.TYPE - ) -}) -@Service + +@Component( + service = {ImageTransformer.class}, + property = { + ImageTransformer.PROP_TYPE + "=" + GreyscaleImageTransformerImpl.TYPE + }) public class GreyscaleImageTransformerImpl implements ImageTransformer { private static final Logger log = LoggerFactory.getLogger(GreyscaleImageTransformerImpl.class); diff --git a/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/ScaleImageTransformerImpl.java b/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/ScaleImageTransformerImpl.java index 51d9b58fa9..a4247019a5 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/ScaleImageTransformerImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/images/transformers/impl/ScaleImageTransformerImpl.java @@ -21,13 +21,10 @@ import com.adobe.acs.commons.images.ImageTransformer; import com.day.image.Layer; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Properties; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.wrappers.ValueMapDecorator; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,16 +36,12 @@ * percentage (e.g. "50%"). * Rounding is one of "round" (using Math.round), "up" (using Math.ceil), or "down" (using Math.floor) * "round" being the default - * */ -@Component -@Properties({ - @Property( - name = ImageTransformer.PROP_TYPE, - value = ScaleImageTransformerImpl.TYPE - ) -}) -@Service +@Component( + service = {ImageTransformer.class}, + property = { + ImageTransformer.PROP_TYPE + "=" + ScaleImageTransformerImpl.TYPE + }) public class ScaleImageTransformerImpl implements ImageTransformer { private static final Logger log = LoggerFactory.getLogger(ScaleImageTransformerImpl.class); @@ -60,7 +53,7 @@ public class ScaleImageTransformerImpl implements ImageTransformer { private static final String ROUND_UP = "up"; private static final String ROUND_DOWN = "down"; - @Reference(target = "(" + ImageTransformer.PROP_TYPE + "=" + ResizeImageTransformerImpl.TYPE +")") + @Reference(target = "(" + ImageTransformer.PROP_TYPE + "=" + ResizeImageTransformerImpl.TYPE + ")") ImageTransformer resizeImageTransformer; @Override @@ -106,8 +99,8 @@ public final Layer transform(Layer layer, final ValueMap properties) { // Invoke the ResizeImageTransformer with the new values final ValueMap params = new ValueMapDecorator(new HashMap()); - params.put(ResizeImageTransformerImpl.KEY_WIDTH, (int)newWidth); - params.put(ResizeImageTransformerImpl.KEY_HEIGHT, (int)newHeight); + params.put(ResizeImageTransformerImpl.KEY_WIDTH, (int) newWidth); + params.put(ResizeImageTransformerImpl.KEY_HEIGHT, (int) newHeight); layer = resizeImageTransformer.transform(layer, params); } diff --git a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/DataImporterFactory.java b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/DataImporterFactory.java index a2af9f998f..365e64132e 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/DataImporterFactory.java +++ b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/DataImporterFactory.java @@ -18,14 +18,9 @@ package com.adobe.acs.commons.mcp.impl.processes; import com.adobe.acs.commons.mcp.ProcessDefinitionFactory; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; +import org.osgi.service.component.annotations.Component; -/** - * - */ -@Component -@Service(ProcessDefinitionFactory.class) +@Component(service = {ProcessDefinitionFactory.class}) public class DataImporterFactory extends ProcessDefinitionFactory { @Override public String getName() { @@ -35,5 +30,5 @@ public String getName() { @Override protected DataImporter createProcessDefinitionInstance() { return new DataImporter(); - } + } } diff --git a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/ProcessCleanupFactory.java b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/ProcessCleanupFactory.java index e3100e7d9b..d9733b4a33 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/ProcessCleanupFactory.java +++ b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/ProcessCleanupFactory.java @@ -19,11 +19,9 @@ import com.adobe.acs.commons.mcp.AdministratorsOnlyProcessDefinitionFactory; import com.adobe.acs.commons.mcp.ProcessDefinitionFactory; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; +import org.osgi.service.component.annotations.Component; -@Component -@Service(ProcessDefinitionFactory.class) +@Component(service = {ProcessDefinitionFactory.class}) public class ProcessCleanupFactory extends AdministratorsOnlyProcessDefinitionFactory { @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/TreeReplicationFactory.java b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/TreeReplicationFactory.java index da297d5f10..d6342b792b 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/TreeReplicationFactory.java +++ b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/TreeReplicationFactory.java @@ -20,20 +20,19 @@ import com.adobe.acs.commons.mcp.ProcessDefinitionFactory; import com.adobe.acs.commons.util.RequireAem; import com.day.cq.replication.Replicator; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; -@Component -@Service(ProcessDefinitionFactory.class) + +@Component(service = {ProcessDefinitionFactory.class}) public class TreeReplicationFactory extends ProcessDefinitionFactory { // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") - RequireAem requireAem; + @Reference(target = "(distribution=classic)") + transient RequireAem requireAem; @Reference - Replicator replicator; + transient Replicator replicator; @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/FileAssetIngestorFactory.java b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/FileAssetIngestorFactory.java index 2a32384afe..ae1d011b41 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/FileAssetIngestorFactory.java +++ b/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/asset/FileAssetIngestorFactory.java @@ -21,21 +21,19 @@ import com.adobe.acs.commons.mcp.ProcessDefinitionFactory; import com.adobe.acs.commons.util.RequireAem; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.commons.mime.MimeTypeService; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; -@Component -@Service(ProcessDefinitionFactory.class) +@Component(service = {ProcessDefinitionFactory.class}) public class FileAssetIngestorFactory extends AuthorizedGroupProcessDefinitionFactory { // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") - RequireAem requireAem; + @Reference(target = "(distribution=classic)") + transient RequireAem requireAem; @Reference - MimeTypeService mimetypeService; + transient MimeTypeService mimetypeService; @Override public String getName() { @@ -46,7 +44,7 @@ public String getName() { public FileAssetIngestor createProcessDefinitionInstance() { return new FileAssetIngestor(mimetypeService); } - + @Override protected final String[] getAuthorizedGroups() { return AssetIngestor.AUTHORIZED_GROUPS; diff --git a/bundle/src/main/java/com/adobe/acs/commons/notifications/impl/InboxNotificationSenderImpl.java b/bundle/src/main/java/com/adobe/acs/commons/notifications/impl/InboxNotificationSenderImpl.java index ce2e13828b..9608d7ad03 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/notifications/impl/InboxNotificationSenderImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/notifications/impl/InboxNotificationSenderImpl.java @@ -25,9 +25,8 @@ import com.adobe.granite.taskmanagement.TaskManagerException; import com.adobe.granite.taskmanagement.TaskManagerFactory; import org.apache.commons.lang3.ArrayUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,8 +37,7 @@ ACS AEM Commons - AEM Inbox Notification Sender Service for sending AEM Inbox Notification */ -@Component -@Service +@Component(service = {InboxNotificationSender.class}) public class InboxNotificationSenderImpl implements InboxNotificationSender { private static final Logger log = LoggerFactory.getLogger(InboxNotificationSenderImpl.class); diff --git a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/ACLPackagerServletImpl.java b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/ACLPackagerServletImpl.java index c03efd7adb..3177bec8c9 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/ACLPackagerServletImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/ACLPackagerServletImpl.java @@ -31,9 +31,8 @@ import javax.jcr.RepositoryException; import javax.jcr.query.Query; +import javax.servlet.Servlet; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.jackrabbit.api.security.user.Authorizable; import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.vault.fs.api.PathFilterSet; @@ -45,19 +44,24 @@ import org.apache.sling.api.resource.ValueMap; import com.adobe.acs.commons.packaging.PackageHelper; -import org.apache.sling.api.servlets.HttpConstants; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +import static org.apache.sling.api.servlets.ServletResolverConstants.*; /** * ACS AEM Commons - ACL Packager Servlet * Servlet end-point used to create ACL CRX packages based on the underlying resource's configuration. */ @SuppressWarnings("serial") -@SlingServlet( - methods = { HttpConstants.METHOD_POST }, - resourceTypes = { "acs-commons/components/utilities/packager/acl-packager" }, - selectors = { "package" }, - extensions = { "json" } -) + +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/packager/acl-packager", + methods = "POST", + extensions = "json", + selectors = "package") public class ACLPackagerServletImpl extends AbstractPackagerServlet { private static final String INCLUDE_PATTERNS = "includePatterns"; @@ -80,7 +84,7 @@ public class ACLPackagerServletImpl extends AbstractPackagerServlet { // rep:ACE covers rep:GrantACE and rep:DenyACE private static final String AEM6_QUERY_ACE = "SELECT * FROM [rep:ACE] where [rep:principalName] is not null"; - private static final String[] AEM6_QUERIES = new String[] {AEM6_QUERY_ACE}; + private static final String[] AEM6_QUERIES = new String[]{AEM6_QUERY_ACE}; private static final String ACL_PACKAGE_THUMBNAIL_RESOURCE_PATH = "/apps/acs-commons/components/utilities/packager/acl-packager/definition/package-thumbnail.png"; diff --git a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AssetPackagerServletImpl.java b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AssetPackagerServletImpl.java index b2ed086a03..35ad5239bb 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AssetPackagerServletImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AssetPackagerServletImpl.java @@ -21,29 +21,34 @@ import java.io.IOException; import javax.jcr.RepositoryException; +import javax.servlet.Servlet; import com.adobe.acs.commons.packaging.PackageHelper; import com.adobe.acs.commons.packaging.util.AssetPackageUtil; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.servlets.HttpConstants; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +import static org.apache.sling.api.servlets.ServletResolverConstants.*; /** * ACS AEM Commons - Asset Packager Servlet * Servlet end-point used to create packages of pages and the referenced assets. */ @SuppressWarnings("serial") -@SlingServlet( - methods = {HttpConstants.METHOD_POST}, - resourceTypes = {"acs-commons/components/utilities/packager/asset-packager"}, - selectors = {"package"}, - extensions = {"json"} -) + +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/packager/asset-packager", + methods = "POST", + extensions = "json", + selectors = "package") public class AssetPackagerServletImpl extends AbstractPackagerServlet { /* Default Properties */ diff --git a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AuthorizablePackagerServletImpl.java b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AuthorizablePackagerServletImpl.java index 559c59ca0c..73da7c8110 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AuthorizablePackagerServletImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/AuthorizablePackagerServletImpl.java @@ -20,13 +20,11 @@ import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import javax.jcr.RepositoryException; +import javax.servlet.Servlet; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.jackrabbit.api.security.user.Authorizable; import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.vault.fs.api.PathFilterSet; @@ -36,22 +34,26 @@ import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ValueMap; -import org.apache.sling.api.servlets.HttpConstants; -import org.apache.sling.api.wrappers.ValueMapDecorator; import com.adobe.acs.commons.packaging.PackageHelper; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +import static org.apache.sling.api.servlets.ServletResolverConstants.*; /** * ACS AEM Commons - Authorizable Packager Servlet * Servlet end-point used to create CRX packages of authorizables based on the underlying resource's configuration. */ @SuppressWarnings("serial") -@SlingServlet( - methods = { HttpConstants.METHOD_POST }, - resourceTypes = { "acs-commons/components/utilities/packager/authorizable-packager" }, - selectors = { "package" }, - extensions = { "json" } -) + +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/packager/authorizable-packager", + methods = "POST", + extensions = "json", + selectors = "package") public class AuthorizablePackagerServletImpl extends AbstractPackagerServlet { private static final String DEFAULT_PACKAGE_NAME = "authorizables"; @@ -96,7 +98,7 @@ public final void doPost(final SlingHttpServletRequest request, } private List findPaths(final ResourceResolver resourceResolver, - final String[] authorizableIds) throws RepositoryException { + final String[] authorizableIds) throws RepositoryException { final UserManager userManager = resourceResolver.adaptTo(UserManager.class); diff --git a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/InstantPackageImpl.java b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/InstantPackageImpl.java index 0bfac3e87b..69ff1a62b0 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/InstantPackageImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/InstantPackageImpl.java @@ -24,8 +24,6 @@ import com.day.cq.dam.api.DamConstants; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener; import org.apache.jackrabbit.vault.packaging.JcrPackage; import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition; @@ -38,11 +36,15 @@ import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.servlets.SlingAllMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.RepositoryException; import javax.jcr.Session; +import javax.servlet.Servlet; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -57,8 +59,12 @@ * Sites or Assets UI Console */ @SuppressWarnings("serial") -@SlingServlet(methods = { "POST" }, resourceTypes = { - "acs-commons/components/utilities/instant-package" }, selectors = { "package" }, extensions = { "json" }) +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/instant-package", + methods = "POST", + extensions = "json", + selectors = "package") public class InstantPackageImpl extends SlingAllMethodsServlet { private static final Logger log = LoggerFactory.getLogger(InstantPackageImpl.class); @@ -165,14 +171,12 @@ private List preparePackageResources(String paths, String optionType, /** * Get the list of immediate children for the current selected path in sites * console - * - * @param comma - * separated select paths from sites console - * @param resource - * resolver object + * + * @param comma separated select paths from sites console + * @param resource resolver object */ private ArrayList getImmediateChildren(ResourceResolver resourceResolver, String[] pathList, - ArrayList allPaths) { + ArrayList allPaths) { Iterator childAssetRes; Iterator childPageRes; @@ -197,7 +201,7 @@ private ArrayList getImmediateChildren(ResourceResolver resourceResolv /** * Get the list of immediate child pages - * + * * @param resourceResolver * @param path * @param childPageRes @@ -205,7 +209,7 @@ private ArrayList getImmediateChildren(ResourceResolver resourceResolv * @return */ private ArrayList getImmediatePages(ResourceResolver resourceResolver, Resource pagePath, - Iterator childPageRes, ArrayList allPaths) { + Iterator childPageRes, ArrayList allPaths) { allPaths.add(resourceResolver.getResource(pagePath.getPath() + JCR_CONTENT_APPEND)); while (childPageRes.hasNext()) { @@ -222,7 +226,7 @@ private ArrayList getImmediatePages(ResourceResolver resourceResolver, /** * Get the list of immediate assets - * + * * @param resourceResolver * @param path * @param childRes @@ -230,7 +234,7 @@ private ArrayList getImmediatePages(ResourceResolver resourceResolver, * @return */ private ArrayList getImmediateAssets(ResourceResolver resourceResolver, Iterator childRes, - ArrayList allPaths) { + ArrayList allPaths) { while (childRes.hasNext()) { Resource res = resourceResolver.getResource(childRes.next().getPath()); @@ -246,14 +250,12 @@ private ArrayList getImmediateAssets(ResourceResolver resourceResolver /** * Get only selected path in sites console - * - * @param comma - * separated select paths from sites console - * @param resource - * resolver object + * + * @param comma separated select paths from sites console + * @param resource resolver object */ private ArrayList getSelectedPath(ResourceResolver resourceResolver, String[] pathList, - ArrayList allPaths) { + ArrayList allPaths) { // only selected path by adding jcr:content at the end for (String path : pathList) { @@ -267,14 +269,12 @@ private ArrayList getSelectedPath(ResourceResolver resourceResolver, S /** * Get all children of selected path in sites console - * - * @param comma - * separated select paths from sites console - * @param resource - * resolver object + * + * @param comma separated select paths from sites console + * @param resource resolver object */ private ArrayList getAllChildren(ResourceResolver resourceResolver, String[] pathList, - ArrayList allPaths) { + ArrayList allPaths) { // all selected path with jcr:content to include all children for (String path : pathList) { Resource currentPath = resourceResolver.getResource(path); diff --git a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/PackageHelperImpl.java b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/PackageHelperImpl.java index b5bb03cb26..7adbbd1abf 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/PackageHelperImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/PackageHelperImpl.java @@ -23,9 +23,6 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.vault.fs.api.PathFilterSet; import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter; @@ -38,6 +35,8 @@ import org.apache.jackrabbit.vault.packaging.Packaging; import org.apache.jackrabbit.vault.packaging.Version; import org.apache.sling.api.resource.Resource; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,11 +51,10 @@ import java.util.Map; /** - * ACS AEM Commons - Package Helper Helper utility for creating CRX Packages and + * ACS AEM Commons - Package Helper utility for creating CRX Packages and * using the ACS AEM Commons packager. */ -@Component -@Service +@Component(service = {PackageHelper.class}) public final class PackageHelperImpl implements PackageHelper { private static final Logger log = LoggerFactory.getLogger(PackageHelperImpl.class); @@ -110,8 +108,8 @@ public void addThumbnail(final JcrPackage jcrPackage, Resource thumbnailResource @SuppressWarnings("squid:S3776") public Version getNextVersion(final JcrPackageManager jcrPackageManager, - final String groupName, final String name, - final String version) throws RepositoryException { + final String groupName, final String name, + final String version) throws RepositoryException { final Node packageRoot = jcrPackageManager.getPackageRoot(false); final Version configVersion = Version.create(version); @@ -208,8 +206,8 @@ private Version normalizeVersion(final Version version) { * {@inheritDoc} */ public void removePackage(final JcrPackageManager jcrPackageManager, - final String groupName, final String name, - final String version) throws RepositoryException { + final String groupName, final String name, + final String version) throws RepositoryException { final PackageId packageId = new PackageId(groupName, name, version); try (final JcrPackage jcrPackage = jcrPackageManager.open(packageId)) { @@ -226,9 +224,9 @@ public void removePackage(final JcrPackageManager jcrPackageManager, * {@inheritDoc} */ public JcrPackage createPackage(final Collection resources, final Session session, - final String groupName, final String name, String version, - final ConflictResolution conflictResolution, - final Map packageDefinitionProperties) + final String groupName, final String name, String version, + final ConflictResolution conflictResolution, + final Map packageDefinitionProperties) throws IOException, RepositoryException { final List pathFilterSets = new ArrayList(); @@ -246,9 +244,9 @@ public JcrPackage createPackage(final Collection resources, final Sess */ @Override public JcrPackage createPackageForPaths(final Collection paths, final Session session, - final String groupName, String name, final String version, - final ConflictResolution conflictResolution, - Map packageDefinitionProperties) + final String groupName, String name, final String version, + final ConflictResolution conflictResolution, + Map packageDefinitionProperties) throws IOException, RepositoryException { final List pathFilterSets = new ArrayList(); @@ -266,10 +264,10 @@ public JcrPackage createPackageForPaths(final Collection paths, final Se */ @SuppressWarnings("squid:S2095") // closing is responsibility of caller public JcrPackage createPackageFromPathFilterSets(final Collection pathFilterSets, - final Session session, - final String groupName, final String name, String version, - final ConflictResolution conflictResolution, - final Map packageDefinitionProperties) + final Session session, + final String groupName, final String name, String version, + final ConflictResolution conflictResolution, + final Map packageDefinitionProperties) throws IOException, RepositoryException { final JcrPackageManager jcrPackageManager = packaging.getPackageManager(session); diff --git a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/QueryPackagerServletImpl.java b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/QueryPackagerServletImpl.java index cd13edb7b5..91c5c77179 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/QueryPackagerServletImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/packaging/impl/QueryPackagerServletImpl.java @@ -20,8 +20,6 @@ import com.adobe.acs.commons.packaging.PackageHelper; import com.adobe.acs.commons.util.QueryHelper; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.jackrabbit.vault.fs.io.AccessControlHandling; import org.apache.jackrabbit.vault.packaging.JcrPackage; import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition; @@ -31,15 +29,18 @@ import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ValueMap; -import org.apache.sling.api.servlets.HttpConstants; import org.apache.sling.api.servlets.SlingAllMethodsServlet; import org.apache.sling.api.wrappers.ValueMapDecorator; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.query.Query; +import javax.servlet.Servlet; import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -50,12 +51,12 @@ * Servlet end-point used to create Query-based CRX packages based on the underlying resource's configuration. */ @SuppressWarnings("serial") -@SlingServlet( - methods = { HttpConstants.METHOD_POST }, - resourceTypes = { "acs-commons/components/utilities/packager/query-packager" }, - selectors = { "package" }, - extensions = { "json" } -) +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/packager/query-packager", + methods = "POST", + extensions = "json", + selectors = "package") public class QueryPackagerServletImpl extends SlingAllMethodsServlet { private static final Logger log = LoggerFactory.getLogger(QueryPackagerServletImpl.class); diff --git a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/AddEntryServlet.java b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/AddEntryServlet.java index aa8decc1e4..b70d208343 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/AddEntryServlet.java +++ b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/AddEntryServlet.java @@ -20,13 +20,15 @@ import java.io.IOException; import java.util.List; +import javax.servlet.Servlet; import javax.servlet.ServletException; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.SlingAllMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,16 +37,19 @@ /** * Servlet for adding a line into the redirect map text file */ -@SlingServlet(methods = { "POST" }, resourceTypes = { - "acs-commons/components/utilities/redirectmappage" }, selectors = { - "addentry" }, extensions = { "json" }, metatype = false) +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/redirectmappage", + methods = "POST", + extensions = "json", + selectors = "addentry") public class AddEntryServlet extends SlingAllMethodsServlet { private static final long serialVersionUID = -1704915461516132101L; private static final Logger log = LoggerFactory.getLogger(AddEntryServlet.class); - + // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") + @Reference(target = "(distribution=classic)") transient RequireAem requireAem; @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectEntriesServlet.java b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectEntriesServlet.java index e7128fab44..2fa8b08eb0 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectEntriesServlet.java +++ b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectEntriesServlet.java @@ -19,13 +19,15 @@ import java.io.IOException; +import javax.servlet.Servlet; import javax.servlet.ServletException; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.SlingSafeMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,13 +36,17 @@ /** * Servlet rendering the redirect map to a JSON Array */ -@SlingServlet(methods = { "GET" }, resourceTypes = { "acs-commons/components/utilities/redirectmappage" }, selectors = { - "redirectentries" }, extensions = { "json" }, metatype = false) +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/redirectmappage", + methods = "GET", + extensions = "json", + selectors = "redirectentries") public class RedirectEntriesServlet extends SlingSafeMethodsServlet { - - // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") - transient RequireAem requireAem; + + // Disable this feature on AEM as a Cloud Service + @Reference(target = "(distribution=classic)") + transient RequireAem requireAem; private static final long serialVersionUID = -2825679173210628699L; private static final Logger log = LoggerFactory.getLogger(RedirectEntriesServlet.class); @@ -50,7 +56,7 @@ protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse r throws ServletException, IOException { log.trace("doGet"); - RedirectEntriesUtils.writeEntriesToResponse(request, response,"Retrieved Redirect Maps"); + RedirectEntriesUtils.writeEntriesToResponse(request, response, "Retrieved Redirect Maps"); } - + } diff --git a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectMapServlet.java b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectMapServlet.java index ddb4255aa0..7186c45f13 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectMapServlet.java +++ b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RedirectMapServlet.java @@ -20,13 +20,15 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; +import javax.servlet.Servlet; import javax.servlet.ServletException; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.SlingSafeMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,15 +40,19 @@ * Servlet for generating an Apache RedirectMap text file from an uploaded file * and a list vanity properties in cq:Page and dam:Asset nodes. */ -@SlingServlet(methods = { "GET" }, resourceTypes = { "acs-commons/components/utilities/redirectmappage" }, selectors = { - "redirectmap" }, extensions = { "txt" }, metatype = false) +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/redirectmappage", + methods = "GET", + extensions = "txt", + selectors = "redirectmap") public class RedirectMapServlet extends SlingSafeMethodsServlet { private static final Logger log = LoggerFactory.getLogger(RedirectMapServlet.class); private static final long serialVersionUID = -3564475196678277711L; - + // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") + @Reference(target = "(distribution=classic)") transient RequireAem requireAem; @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RemoveEntryServlet.java b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RemoveEntryServlet.java index eda76454bf..1c09d9510a 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RemoveEntryServlet.java +++ b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/RemoveEntryServlet.java @@ -20,31 +20,38 @@ import java.io.IOException; import java.util.List; +import javax.servlet.Servlet; import javax.servlet.ServletException; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.SlingAllMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.adobe.acs.commons.util.RequireAem; +import static org.apache.sling.api.servlets.ServletResolverConstants.*; + /** * Servlet for removing a line from the redirect map text file */ -@SlingServlet(methods = { "POST" }, resourceTypes = { - "acs-commons/components/utilities/redirectmappage" }, selectors = { - "removeentry" }, extensions = { "json" }, metatype = false) +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/redirectmappage", + methods = "POST", + extensions = "json", + selectors = "removeentry") public class RemoveEntryServlet extends SlingAllMethodsServlet { private static final long serialVersionUID = -5963945855717054678L; private static final Logger log = LoggerFactory.getLogger(RemoveEntryServlet.class); - + // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") + @Reference(target = "(distribution=classic)") transient RequireAem requireAem; @Override @@ -62,6 +69,6 @@ protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse RedirectEntriesUtils.updateRedirectMap(request, lines); - RedirectEntriesUtils.writeEntriesToResponse(request, response, "Removed entry "+idx); + RedirectEntriesUtils.writeEntriesToResponse(request, response, "Removed entry " + idx); } } diff --git a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/UpdateEntryServlet.java b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/UpdateEntryServlet.java index bc0b124a44..b7e33979b8 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/UpdateEntryServlet.java +++ b/bundle/src/main/java/com/adobe/acs/commons/redirectmaps/impl/UpdateEntryServlet.java @@ -20,13 +20,15 @@ import java.io.IOException; import java.util.List; +import javax.servlet.Servlet; import javax.servlet.ServletException; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.SlingAllMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,16 +37,19 @@ /** * Servlet for updating a line in the redirect map text file */ -@SlingServlet(methods = { "POST" }, resourceTypes = { - "acs-commons/components/utilities/redirectmappage" }, selectors = { - "updateentry" }, extensions = { "json" }, metatype = false) +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( + resourceTypes = "acs-commons/components/utilities/redirectmappage", + methods = "POST", + extensions = "json", + selectors = "updateentry") public class UpdateEntryServlet extends SlingAllMethodsServlet { private static final long serialVersionUID = -1704915461516132101L; private static final Logger log = LoggerFactory.getLogger(UpdateEntryServlet.class); - + // Disable this feature on AEM as a Cloud Service - @Reference(target="(distribution=classic)") + @Reference(target = "(distribution=classic)") transient RequireAem requireAem; @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/impl/AgentHostsImpl.java b/bundle/src/main/java/com/adobe/acs/commons/replication/impl/AgentHostsImpl.java index 210ef829ed..2f293fd945 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/impl/AgentHostsImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/impl/AgentHostsImpl.java @@ -23,9 +23,8 @@ import com.day.cq.replication.AgentFilter; import com.day.cq.replication.AgentManager; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,13 +34,12 @@ import java.util.List; import java.util.Map; -@Component -@Service +@Component(service = {AgentHosts.class}) public class AgentHostsImpl implements AgentHosts { private static final Logger log = LoggerFactory.getLogger(AgentHostsImpl.class); private static final String DEFAULT_SCHEME = "http"; - + @Reference private AgentManager agentManager; diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionImpl.java b/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionImpl.java index 502ed8c383..46698a6b68 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionImpl.java @@ -17,47 +17,32 @@ */ package com.adobe.acs.commons.replication.impl; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Iterator; -import java.util.List; +import com.adobe.acs.commons.replication.ReplicateVersion; +import com.adobe.acs.commons.replication.ReplicationResult; +import com.adobe.acs.commons.replication.ReplicationResult.Status; +import com.day.cq.commons.jcr.JcrConstants; +import com.day.cq.replication.*; +import com.day.cq.wcm.api.NameConstants; +import org.apache.sling.api.resource.Resource; +import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.version.Version; import javax.jcr.version.VersionIterator; - -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; -import org.apache.sling.api.resource.Resource; -import org.apache.sling.api.resource.ResourceResolver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.adobe.acs.commons.replication.ReplicateVersion; -import com.adobe.acs.commons.replication.ReplicationResult; -import com.adobe.acs.commons.replication.ReplicationResult.Status; -import com.day.cq.commons.jcr.JcrConstants; -import com.day.cq.replication.AgentIdFilter; -import com.day.cq.replication.ReplicationActionType; -import com.day.cq.replication.ReplicationException; -import com.day.cq.replication.ReplicationOptions; -import com.day.cq.replication.Replicator; -import com.day.cq.wcm.api.NameConstants; +import java.util.*; /** * ACS AEM Commons - replicate specific version of a resource tree * Service used to replicate specific version of a resource tree through a * specific replication agent */ -@Component -@Service +@Component(service = {ReplicateVersion.class}) public class ReplicateVersionImpl implements ReplicateVersion { @@ -73,19 +58,19 @@ public final List replicate( Date date) { List list = new ArrayList(); - if (rootPaths != null) { - for (String rootPath : rootPaths) { - String normalizedPath = getNormalizedPath(rootPath); - List resources = getResources(resolver, normalizedPath); - - List resultsForPath = - replicateResource(resolver, resources, agents, date); - list.addAll(resultsForPath); + if (rootPaths != null) { + for (String rootPath : rootPaths) { + String normalizedPath = getNormalizedPath(rootPath); + List resources = getResources(resolver, normalizedPath); - } + List resultsForPath = + replicateResource(resolver, resources, agents, date); + list.addAll(resultsForPath); } + } + return list; } @@ -103,21 +88,21 @@ private List getResources(ResourceResolver resolver, String root) { } private void buildResourceList(ResourceResolver resolver, Resource res, - List resources) throws RepositoryException { + List resources) throws RepositoryException { Node node = res.adaptTo(Node.class); if (!node.isNodeType(JcrConstants.NT_HIERARCHYNODE)) { return; } resources.add(res); - for (Iterator iter = resolver.listChildren(res); iter.hasNext();) { + for (Iterator iter = resolver.listChildren(res); iter.hasNext(); ) { Resource resChild = iter.next(); buildResourceList(resolver, resChild, resources); } } private List replicateResource(ResourceResolver resolver, - List resources, String[] agents, Date date) { + List resources, String[] agents, Date date) { List results = new ArrayList(); ReplicationOptions opts = new ReplicationOptions(); @@ -154,7 +139,7 @@ private List replicateResource(ResourceResolver resolver, } private Version getAppropriateVersion(Resource resource, Date date, - Session session) throws RepositoryException { + Session session) throws RepositoryException { String path = resource.getPath(); List versions = findAllVersions(path, session); @@ -188,7 +173,7 @@ private List findAllVersions(String path, Session session) if (node.hasNode(NameConstants.NN_CONTENT)) { Node contentNode = node.getNode(NameConstants.NN_CONTENT); if (contentNode.isNodeType(JcrConstants.MIX_VERSIONABLE)) { - versions = getVersions(contentNode.getPath(), session); + versions = getVersions(contentNode.getPath(), session); } else if (node.isNodeType(JcrConstants.MIX_VERSIONABLE)) { versions = getVersions(path, session); } @@ -202,7 +187,7 @@ private List getVersions(String nodePath, Session session) throws Repos for (VersionIterator iter = session.getWorkspace() .getVersionManager().getVersionHistory(nodePath) - .getAllVersions(); iter.hasNext();) { + .getAllVersions(); iter.hasNext(); ) { Version v = iter.nextVersion(); versions.add(v); } diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionServlet.java b/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionServlet.java index bf20b3f893..230a6d4bb9 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionServlet.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/impl/ReplicateVersionServlet.java @@ -23,33 +23,35 @@ import com.google.gson.JsonObject; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.servlets.SlingAllMethodsServlet; +import org.apache.sling.servlets.annotations.SlingServletResourceTypes; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; -import java.util.TimeZone; /** * ACS AEM Commons - Replicate Version Servlet * Servlet end-point used to initiate replication of resource versions. */ @SuppressWarnings("serial") -@SlingServlet( +@Component(service = {Servlet.class}) +@SlingServletResourceTypes( resourceTypes = "acs-commons/components/utilities/version-replicator", - selectors = "replicateversion", - extensions = "json", methods = "POST", - generateComponent = true) + extensions = "json", + selectors = "replicateversion") + public class ReplicateVersionServlet extends SlingAllMethodsServlet { private static final Logger log = LoggerFactory diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/packages/automatic/impl/ReplicatePackageProcess.java b/bundle/src/main/java/com/adobe/acs/commons/replication/packages/automatic/impl/ReplicatePackageProcess.java index 56e0bbe8f8..c949e7b901 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/packages/automatic/impl/ReplicatePackageProcess.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/packages/automatic/impl/ReplicatePackageProcess.java @@ -19,11 +19,9 @@ import com.adobe.acs.commons.util.WorkflowHelper; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.ResourceResolverFactory; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.osgi.service.event.EventAdmin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,21 +36,22 @@ /** * Workflow process for kicking off an AutomaticPackageReplicatorJob */ -@Component -@Property(label = "Workflow Label", name = "process.label", value = "Build and Replicate Package", description = "Builds and Replicates a Package of Content, set the path of the package to replicate as the argument.") -@Service +@Component(service = {WorkflowProcess.class}, + property = { + "process.label=Build and Replicate Package" + }) public class ReplicatePackageProcess implements WorkflowProcess { private static final Logger log = LoggerFactory.getLogger(ReplicatePackageProcess.class); @Reference - private ResourceResolverFactory resourceResolverFactory; + private transient ResourceResolverFactory resourceResolverFactory; @Reference - private Replicator replicator; + private transient Replicator replicator; @Reference - private EventAdmin eventAdmin; + private transient EventAdmin eventAdmin; /* * (non-Javadoc) diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/JcrPackageReplicationStatusEventHandler.java b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/JcrPackageReplicationStatusEventHandler.java index 2219ed53f4..3a4f411b2b 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/JcrPackageReplicationStatusEventHandler.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/JcrPackageReplicationStatusEventHandler.java @@ -22,29 +22,18 @@ import com.adobe.acs.commons.replication.status.ReplicationStatusManager; import com.adobe.acs.commons.util.ClusterLeader; import com.adobe.acs.commons.util.ParameterUtil; -import com.day.cq.replication.AgentManager; import com.day.cq.replication.ReplicationAction; import com.day.cq.replication.ReplicationEvent; import com.day.cq.replication.ReplicationStatus; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.ConfigurationPolicy; import org.apache.felix.scr.annotations.Properties; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.PropertyOption; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; +import org.apache.felix.scr.annotations.*; import org.apache.jackrabbit.vault.packaging.JcrPackage; import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition; import org.apache.jackrabbit.vault.packaging.PackageException; import org.apache.jackrabbit.vault.packaging.Packaging; -import org.apache.sling.api.resource.LoginException; -import org.apache.sling.api.resource.Resource; -import org.apache.sling.api.resource.ResourceResolver; -import org.apache.sling.api.resource.ResourceResolverFactory; -import org.apache.sling.api.resource.ResourceUtil; +import org.apache.sling.api.resource.*; import org.apache.sling.commons.osgi.PropertiesUtil; import org.apache.sling.event.jobs.Job; import org.apache.sling.event.jobs.JobManager; @@ -58,14 +47,7 @@ import javax.jcr.Node; import javax.jcr.RepositoryException; import java.io.IOException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -113,18 +95,18 @@ private enum ReplicatedAt { } static final String[] DEFAULT_REPLICATION_STATUS_NODE_TYPES = { - "cq:Page/cq:PageContent (?!/conf/.*/settings/wcm/templates/[^/]*/initial).*", // make sure to not cover initial content below editable templates - "dam:AssetContent", - "rep:User", - "rep:Group", - "sling:OrderedFolder/nt:unstructured", - ReplicationStatus.NODE_TYPE, // replication status must be after cq:PageContent, because cq:PageContent is of mixin "cq:ReplicatonStatus" as well - "cq:Page/nt:unstructured /conf/.*/settings/wcm/templates/.*/policies/.*", // this is for editable template's policy mappings - "nt:unstructured /conf/.*/settings/wcm/policies/.*" // cover policies below editable templates + "cq:Page/cq:PageContent (?!/conf/.*/settings/wcm/templates/[^/]*/initial).*", // make sure to not cover initial content below editable templates + "dam:AssetContent", + "rep:User", + "rep:Group", + "sling:OrderedFolder/nt:unstructured", + ReplicationStatus.NODE_TYPE, // replication status must be after cq:PageContent, because cq:PageContent is of mixin "cq:ReplicatonStatus" as well + "cq:Page/nt:unstructured /conf/.*/settings/wcm/templates/.*/policies/.*", // this is for editable template's policy mappings + "nt:unstructured /conf/.*/settings/wcm/policies/.*" // cover policies below editable templates }; @Property(label = "Replication Status Node Type and Path Restrictions", - description = "Node types that are candidates to update Replication Status on. Each item has the format ' ()'. The is optional. The may be composed out of several node types separated by '/'. Make sure that one (composed)nodetype value appears only once in the list (because duplicate nodetypes will overwrite each other)! Also the order is important as the first nodetype hit (from the top of the list) determines the outcome." , + description = "Node types that are candidates to update Replication Status on. Each item has the format ' ()'. The is optional. The may be composed out of several node types separated by '/'. Make sure that one (composed)nodetype value appears only once in the list (because duplicate nodetypes will overwrite each other)! Also the order is important as the first nodetype hit (from the top of the list) determines the outcome.", cardinality = Integer.MAX_VALUE, value = { "cq:Page/cq:PageContent (?!/conf/.*/settings/wcm/templates/[^/]*/initial).*", // make sure to not cover initial content below editable templates @@ -137,7 +119,7 @@ private enum ReplicatedAt { "nt:unstructured /conf/.*/settings/wcm/policies/.*" // cover policies below editable templates }) public static final String PROP_REPLICATION_STATUS_NODE_TYPES = "node-types"; - + /** * key = allowed node type (hierarchy), value = optional path restriction (may be null). */ @@ -179,12 +161,12 @@ private enum ReplicatedAt { description = "The 'value' used to set the 'replicated at' property. [ Default: Package Last Modified ]", options = { @PropertyOption( - name = "PACKAGE_LAST_MODIFIED", - value = "Package Last Modified" + name = "PACKAGE_LAST_MODIFIED", + value = "Package Last Modified" ), @PropertyOption( - name = "CURRENT_TIME", - value = "Current Time" + name = "CURRENT_TIME", + value = "Current Time" ) }) public static final String PROP_REPLICATED_AT = "replicated-at"; @@ -202,13 +184,13 @@ public final void handleEvent(final Event event) { final Map jobConfig = getInfoFromEvent(event); final String[] paths = (String[]) jobConfig.get(PROPERTY_PATHS); - try (ResourceResolver resourceResolver = resourceResolverFactory.getServiceResourceResolver(AUTH_INFO)) { - + try (ResourceResolver resourceResolver = resourceResolverFactory.getServiceResourceResolver(AUTH_INFO)) { + for (String path : paths) { if (!this.containsJcrPackagePath(path)) { continue; } - + final JcrPackage jcrPackage = this.getJcrPackage(resourceResolver, path); if (jcrPackage != null) { // Close jcrPackages after they've been used to check if a Job should be invoked. @@ -220,7 +202,7 @@ public final void handleEvent(final Event event) { } } catch (LoginException e) { log.error("Could not obtain a resource resolver.", e); - } + } } @Override @@ -234,21 +216,21 @@ public final JobResult process(final Job job) { } log.debug("Processing Replication Status Update for JCR Package: {}", path); - try (ResourceResolver resourceResolver = resourceResolverFactory.getServiceResourceResolver(AUTH_INFO)){ + try (ResourceResolver resourceResolver = resourceResolverFactory.getServiceResourceResolver(AUTH_INFO)) { final JcrPackage jcrPackage = this.getJcrPackage(resourceResolver, path); if (jcrPackage == null) { log.warn("JCR Package is unavailable for Replication Status Update at: {}", path); return JobResult.OK; } - + try { setReplicationStatus(jcrPackage, agentIds, replicatedBy, resourceResolver); } finally { // Close package when we are done. jcrPackage.close(); } - + } catch (LoginException e) { log.error("Could not obtain a resource resolver for applying replication status updates", e); return JobResult.CANCEL; @@ -263,10 +245,10 @@ public final JobResult process(final Job job) { /** * Emits the given error and exception either with level WARN or ERROR depending on whether the job is retried. * This method can be removed once SLING-7756 is resolved. + * * @param job * @param errorMessage * @param e - * */ private void logJobError(Job job, String errorMessage, Exception e) { if (job.getRetryCount() < job.getNumberOfRetries()) { @@ -275,8 +257,8 @@ private void logJobError(Job job, String errorMessage, Exception e) { log.error("Job permanently failed with error '{}' in attempt '{}', no more retries", errorMessage, job.getRetryCount(), e); } } - - + + private void setReplicationStatus(JcrPackage jcrPackage, Collection agentIds, String replicatedBy, ResourceResolver resourceResolver) throws RepositoryException { final List resources = new ArrayList<>(); final String packageId; @@ -289,8 +271,8 @@ private void setReplicationStatus(JcrPackage jcrPackage, Collection agen } } catch (RepositoryException e) { throw new RepositoryException("Could not determine the ID for just replicated package (package invalid?).", e); - } - + } + try { for (final String packagePath : packageHelper.getContents(jcrPackage)) { final Resource resource = resourceResolver.getResource(packagePath); @@ -298,7 +280,7 @@ private void setReplicationStatus(JcrPackage jcrPackage, Collection agen resources.add(resource); } } - } catch (RepositoryException|PackageException|IOException e) { + } catch (RepositoryException | PackageException | IOException e) { throw new RepositoryException("Could not retrieve the Packages contents for package '" + packageId + "'", e); } try { @@ -315,15 +297,16 @@ private void setReplicationStatus(JcrPackage jcrPackage, Collection agen log.info("Could not find any resources in JCR Package [ {} ] that are candidates to have their Replication Status updated", packageId); } - } catch (RepositoryException|IOException e) { + } catch (RepositoryException | IOException e) { // enrich exception with path information (limited to 10 paths only) - String paths = resources.stream().map( r -> r.getPath() ).limit(10).collect( Collectors.joining( ", " ) ); + String paths = resources.stream().map(r -> r.getPath()).limit(10).collect(Collectors.joining(", ")); throw new RepositoryException("Exception occurred updating replication status for contents of package '" + packageId + "' covering paths: '" + paths + ", ...'", e); } } /** * Extracts relevant event information from a Granite Replication Event OR a Day CQ Replication event. + * * @param event the Osgi Event * @return a Map containing the relevant data points. */ @@ -346,7 +329,7 @@ protected final Map getInfoFromEvent(Event event) { eventConfig.put(PROPERTY_PATHS, paths); eventConfig.put(PROPERTY_REPLICATED_BY, userId); // set by AEMaaCS in com.day.cq.replication.ReplicatedAction#toEvent(...) - eventConfig.put(PROPERTY_AGENT_IDS, (List)event.getProperty("agentIds")); + eventConfig.put(PROPERTY_AGENT_IDS, (List) event.getProperty("agentIds")); } else { ReplicationEvent replicationEvent = ReplicationEvent.fromEvent(event); // Granite event (com/adobe/granite/replication) @@ -360,7 +343,7 @@ protected final Map getInfoFromEvent(Event event) { /** * Checks if the given path looks like a Jcr Package path. - * + *

* Provides a very fast, String-based, in-memory check to weed out most false positives and avoid * resolving the path to a Jcr Package and ensure it is valid. * @@ -398,7 +381,7 @@ private JcrPackage getJcrPackage(final ResourceResolver resourceResolver, final } catch (RepositoryException e) { log.warn("Error checking if the path [ {} ] is a JCR Package.", path); } - + return jcrPackage; } @@ -472,8 +455,8 @@ protected void activate(final Map config) throws LoginException log.trace("Activating the ACS AEM Commons - JCR Package Replication Status Updater (Event Handler)"); this.replicatedByOverride = PropertiesUtil.toString(config.get(PROP_REPLICATED_BY_OVERRIDE), - PropertiesUtil.toString(config.get(LEGACY_PROP_REPLICATED_BY_OVERRIDE), - DEFAULT_REPLICATED_BY_OVERRIDE)); + PropertiesUtil.toString(config.get(LEGACY_PROP_REPLICATED_BY_OVERRIDE), + DEFAULT_REPLICATED_BY_OVERRIDE)); String tmp = PropertiesUtil.toString(config.get(PROP_REPLICATED_AT), ""); try { @@ -495,7 +478,7 @@ protected void activate(final Map config) throws LoginException } else { pathRestrictionPattern = null; } - + pathRestrictionByNodeType.put(nodeTypeAndPathRestriction.getKey(), pathRestrictionPattern); } log.info("Package Replication Status - Replicated By Override User: [ {} ]", this.replicatedByOverride); diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicatedByWorkflowProcess.java b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicatedByWorkflowProcess.java index 6a2e91b84f..af9d9ecb7a 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicatedByWorkflowProcess.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicatedByWorkflowProcess.java @@ -23,18 +23,15 @@ import java.util.Map; import javax.jcr.RepositoryException; - import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.LoginException; import org.apache.sling.api.resource.ModifiableValueMap; import org.apache.sling.api.resource.PersistenceException; 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.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,31 +49,27 @@ * ACS AEM Commons - Workflow Process - Replicated By Workflow Initiator * Assigns the replicatedBy property to the Workflow Initiator */ -@Component -@Property( - label = "Workflow Label", - name = "process.label", - value = "Set Replicated By Property to Workflow Initiator", - description = "Sets the Replicated By Property on the payload to the Workflow Initiator" -) -@Service +@Component(service = {WorkflowProcess.class}, + property = { + "process.label=Set Replicated By Property to Workflow Initiator" + }) public class ReplicatedByWorkflowProcess implements WorkflowProcess { private static final Logger log = LoggerFactory.getLogger(ReplicatedByWorkflowProcess.class); private static final String AUTHENTICATION_INFO_SESSION = "user.jcr.session"; @Reference - private ResourceResolverFactory resourceResolverFactory; + private transient ResourceResolverFactory resourceResolverFactory; @Reference - private WorkflowPackageManager workflowPackageManager; - + private transient WorkflowPackageManager workflowPackageManager; + @Reference - private ReplicationStatusManager replStatusManager; + private transient ReplicationStatusManager replStatusManager; @Override public final void execute(WorkItem workItem, WorkflowSession workflowSession, - MetaDataMap args) throws WorkflowException { + MetaDataMap args) throws WorkflowException { final WorkflowData workflowData = workItem.getWorkflowData(); final String type = workflowData.getPayloadType(); diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicationStatusManagerImpl.java b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicationStatusManagerImpl.java index 4cf5e9626f..545942f78b 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicationStatusManagerImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/ReplicationStatusManagerImpl.java @@ -32,11 +32,10 @@ import javax.jcr.nodetype.NodeType; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,8 +52,7 @@ * ACS AEM Commons - Replication Status Manager * OSGi Service for changing the replication status of resources. */ -@Component -@Service +@Component(service = {ReplicationStatusManager.class}) public class ReplicationStatusManagerImpl implements ReplicationStatusManager { private static final Logger log = LoggerFactory.getLogger(ReplicationStatusManagerImpl.class); @@ -97,7 +95,7 @@ public final void setReplicationStatus(final ResourceResolver resourceResolver, final Calendar replicatedAt, final Status status, final String... paths) throws RepositoryException, PersistenceException { - setReplicationStatus(resourceResolver, Collections.emptySet(), replicatedBy, replicatedAt, status, paths); + setReplicationStatus(resourceResolver, Collections.emptySet(), replicatedBy, replicatedAt, status, paths); } @Override @@ -147,7 +145,7 @@ public final void setReplicationStatus(final ResourceResolver resourceResolver, replicatedAtClean = Calendar.getInstance(); log.warn("The provided [ replicatedAt ] parameter is null. Force setting the [ {} ] value to [ {} ]", ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED, - new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX").format(replicatedAtClean.getTime())); + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").format(replicatedAtClean.getTime())); } String replicatedByClean = replicatedBy; @@ -213,7 +211,7 @@ private void setReplicationStatus(Node node, Collection agentIds, Calend * {@inheritDoc} */ public final void clearReplicationStatus(final ResourceResolver resourceResolver, - final Resource... resources) throws RepositoryException, PersistenceException { + final Resource... resources) throws RepositoryException, PersistenceException { this.setReplicationStatus(resourceResolver, null, null, Status.CLEAR, resources); } @@ -246,7 +244,7 @@ private void removeReplicationStatusMixin(final Node node) throws RepositoryExce /** * Checks if the node has the mixin. * - * @param node the node obj + * @param node the node obj * @param mixin the mixin name * @return true if the node has the mixin * @throws RepositoryException diff --git a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/SetReplicationStatusProcess.java b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/SetReplicationStatusProcess.java index 3502ae75d1..5c4d81fbea 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/SetReplicationStatusProcess.java +++ b/bundle/src/main/java/com/adobe/acs/commons/replication/status/impl/SetReplicationStatusProcess.java @@ -26,15 +26,12 @@ import java.util.Collections; import java.util.Locale; import java.util.Map; -import java.util.Set; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,14 +44,11 @@ import com.day.cq.workflow.exec.WorkflowProcess; import com.day.cq.workflow.metadata.MetaDataMap; -@Component -@Property( - label = "Workflow Label", - name = "process.label", - value = "Set Replication Status", - description = "Sets the cq:lastReplicated, cq:lastReplicateBy and cq:lastReplicatedAction on the payload to the values provided" -) -@Service +@Component( + service = {WorkflowProcess.class}, + property = { + "process.label=Set Replication Status" + }) public class SetReplicationStatusProcess implements WorkflowProcess { private static final Logger log = LoggerFactory.getLogger(SetReplicationStatusProcess.class); @@ -63,12 +57,12 @@ public class SetReplicationStatusProcess implements WorkflowProcess { private static final String ARG_REPL_BY = "replicatedBy"; private static final String ARG_REPL_ACTION = "replicationAction"; private static final String ARG_AGENT_IDS = "agentIds"; - + @Reference - private WorkflowHelper workflowHelper; + private transient WorkflowHelper workflowHelper; @Reference - private ReplicationStatusManager replStatusMgr; + private transient ReplicationStatusManager replStatusMgr; @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/scripting/impl/QueryBuilderBindingsValuesProvider.java b/bundle/src/main/java/com/adobe/acs/commons/scripting/impl/QueryBuilderBindingsValuesProvider.java index e7118cad83..1387b32e73 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/scripting/impl/QueryBuilderBindingsValuesProvider.java +++ b/bundle/src/main/java/com/adobe/acs/commons/scripting/impl/QueryBuilderBindingsValuesProvider.java @@ -19,19 +19,17 @@ import javax.script.Bindings; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.scripting.api.BindingsValuesProvider; import com.day.cq.search.QueryBuilder; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; -@Component -@Service +@Component(service = {BindingsValuesProvider.class}) public class QueryBuilderBindingsValuesProvider implements BindingsValuesProvider { @Reference - private QueryBuilder queryBuilder; + private transient QueryBuilder queryBuilder; @Override public void addBindings(Bindings bindings) { diff --git a/bundle/src/main/java/com/adobe/acs/commons/users/impl/EnsureAce.java b/bundle/src/main/java/com/adobe/acs/commons/users/impl/EnsureAce.java index 6cd4f7accd..e49ece5a9e 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/users/impl/EnsureAce.java +++ b/bundle/src/main/java/com/adobe/acs/commons/users/impl/EnsureAce.java @@ -23,9 +23,6 @@ import com.day.cq.search.QueryBuilder; import com.day.cq.search.result.Hit; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry; import org.apache.jackrabbit.api.security.JackrabbitAccessControlList; import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager; @@ -33,6 +30,8 @@ import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,8 +50,7 @@ import java.util.Map; import java.util.Set; -@Component -@Service(EnsureAce.class) +@Component(service = {EnsureAce.class}) public class EnsureAce { private static final Logger log = LoggerFactory.getLogger(EnsureAce.class); diff --git a/bundle/src/main/java/com/adobe/acs/commons/util/ModeUtil.java b/bundle/src/main/java/com/adobe/acs/commons/util/ModeUtil.java index ce4c25a718..7e5dca4e30 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/util/ModeUtil.java +++ b/bundle/src/main/java/com/adobe/acs/commons/util/ModeUtil.java @@ -20,7 +20,6 @@ import java.util.HashSet; import java.util.Set; -import org.apache.felix.scr.annotations.Component; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.settings.SlingSettingsService; import org.osgi.service.cm.ConfigurationException; @@ -30,6 +29,7 @@ import com.day.cq.wcm.api.WCMMode; import org.osgi.annotation.versioning.ProviderType; +import org.osgi.service.component.annotations.Component; @ProviderType @@ -58,7 +58,7 @@ public static WCMMode getMode(SlingHttpServletRequest req) { /** * Is AEM runmode author. - * + * * @return true if runmode author is present */ public static boolean isAuthor() { @@ -67,7 +67,7 @@ public static boolean isAuthor() { /** * Is AEM runmode publish. - * + * * @return true if runmode publish is present */ public static boolean isPublish() { @@ -76,9 +76,8 @@ public static boolean isPublish() { /** * Helper method to check for given runmode. - * - * @param mode - * the mode to check + * + * @param mode the mode to check * @return true if the specified mode is present */ public static boolean isRunmode(String mode) { @@ -87,9 +86,8 @@ public static boolean isRunmode(String mode) { /** * Checks if the request is in mode {@link WCMMode#ANALYTICS} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in analytics mode */ public static boolean isAnalytics(SlingHttpServletRequest request) { @@ -98,9 +96,8 @@ public static boolean isAnalytics(SlingHttpServletRequest request) { /** * Checks if the request is in mode {@link WCMMode#DESIGN} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in design mode */ public static boolean isDesign(SlingHttpServletRequest request) { @@ -109,9 +106,8 @@ public static boolean isDesign(SlingHttpServletRequest request) { /** * Checks if the request is in mode {@link WCMMode#DISABLED} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in disabled mode */ public static boolean isDisabled(SlingHttpServletRequest request) { @@ -120,9 +116,8 @@ public static boolean isDisabled(SlingHttpServletRequest request) { /** * Checks if the request is in mode {@link WCMMode#EDIT} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in edit mode */ public static boolean isEdit(SlingHttpServletRequest request) { @@ -131,9 +126,8 @@ public static boolean isEdit(SlingHttpServletRequest request) { /** * Checks if the request is in mode {@link WCMMode#PREVIEW} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in preview mode */ public static boolean isPreview(SlingHttpServletRequest request) { @@ -142,9 +136,8 @@ public static boolean isPreview(SlingHttpServletRequest request) { /** * Checks if the request is in mode {@link WCMMode#READ_ONLY} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in read-only mode */ public static boolean isReadOnly(SlingHttpServletRequest request) { @@ -153,9 +146,8 @@ public static boolean isReadOnly(SlingHttpServletRequest request) { /** * Checks if the request is in {@link AuthoringUIMode#CLASSIC} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in Classic authoring mode */ public static boolean isClassic(SlingHttpServletRequest request) { @@ -164,9 +156,8 @@ public static boolean isClassic(SlingHttpServletRequest request) { /** * Checks if the request is in {@link AuthoringUIMode#TOUCH} - * - * @param request - * request to check + * + * @param request request to check * @return true if the request is in Touch authoring mode */ public static boolean isTouch(SlingHttpServletRequest request) { diff --git a/bundle/src/main/java/com/adobe/acs/commons/util/ResourceServiceManager.java b/bundle/src/main/java/com/adobe/acs/commons/util/ResourceServiceManager.java index f206361b7c..2a28c7bc7c 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/util/ResourceServiceManager.java +++ b/bundle/src/main/java/com/adobe/acs/commons/util/ResourceServiceManager.java @@ -20,6 +20,7 @@ import com.adobe.acs.commons.util.mbeans.ResourceServiceManagerMBean; import com.adobe.granite.jmx.annotation.AnnotatedStandardMBean; import com.day.cq.commons.jcr.JcrConstants; + import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; @@ -27,8 +28,6 @@ import java.util.Map; import javax.management.NotCompliantMBeanException; import org.apache.commons.lang3.ArrayUtils; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Deactivate; import org.apache.sling.api.resource.LoginException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; @@ -38,6 +37,8 @@ import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; import org.slf4j.Logger; @@ -65,6 +66,7 @@ protected ResourceServiceManager(Class mbeanInterface) throws NotCompliantMBe } @Activate + @org.apache.felix.scr.annotations.Activate public synchronized void activate(ComponentContext context) throws LoginException { log.trace("activate"); bctx = context.getBundleContext(); @@ -73,6 +75,7 @@ public synchronized void activate(ComponentContext context) throws LoginExceptio } @Deactivate + @org.apache.felix.scr.annotations.Deactivate public synchronized void deactivate(ComponentContext context) throws LoginException { log.trace("deactivate"); for (String id : registeredServices.keySet()) { @@ -120,12 +123,10 @@ public void handleEvent(Event event) { * Checks whether or not the specified ServiceReference is up to date with * the configuration resource. * - * @param config - * the configuration resource - * @param reference - * the service reference to check + * @param config the configuration resource + * @param reference the service reference to check * @return true if the ServiceReference is up to date with the resource, - * false otherwise + * false otherwise */ protected abstract boolean isServiceUpdated(Resource config, ServiceReference reference); @@ -134,7 +135,7 @@ public void handleEvent(Event event) { public synchronized void refreshCache() { log.trace("refreshCache"); - try ( ResourceResolver resolver = getResourceResolver()) { + try (ResourceResolver resolver = getResourceResolver()) { Resource aprRoot = resolver.getResource(getRootPath()); if (aprRoot == null) { @@ -194,10 +195,8 @@ private ServiceRegistration registerService(String id, Resource config) { /** * Register the service with the OSGi Container based on the configuration. * - * @param config - * the configuration resource - * @param props - * the default properties + * @param config the configuration resource + * @param props the default properties * @return the ServiceRegistration from registering the service */ @SuppressWarnings("squid:S1149") diff --git a/bundle/src/main/java/com/adobe/acs/commons/util/datadefinitions/impl/LowercaseWithDashesDefinitionBuilderImpl.java b/bundle/src/main/java/com/adobe/acs/commons/util/datadefinitions/impl/LowercaseWithDashesDefinitionBuilderImpl.java index f903ce1fe0..e37823877b 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/util/datadefinitions/impl/LowercaseWithDashesDefinitionBuilderImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/util/datadefinitions/impl/LowercaseWithDashesDefinitionBuilderImpl.java @@ -20,19 +20,15 @@ import com.adobe.acs.commons.util.datadefinitions.ResourceDefinitionBuilder; import com.adobe.acs.commons.util.datadefinitions.ResourceDefinition; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Properties; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.Service; +import org.osgi.service.component.annotations.Component; -@Component -@Properties({ - @Property( - name = ResourceDefinitionBuilder.PROP_NAME, - value = LowercaseWithDashesDefinitionBuilderImpl.NAME - ) -}) -@Service + +@Component( + service = {ResourceDefinitionBuilder.class}, + property = { + ResourceDefinitionBuilder.PROP_NAME + "=" + LowercaseWithDashesDefinitionBuilderImpl.NAME + } +) public class LowercaseWithDashesDefinitionBuilderImpl implements ResourceDefinitionBuilder { public static final String NAME = "LOWERCASE_WITH_DASHES"; diff --git a/bundle/src/main/java/com/adobe/acs/commons/util/impl/QueryHelperImpl.java b/bundle/src/main/java/com/adobe/acs/commons/util/impl/QueryHelperImpl.java index fff3c2c0a8..3dbf6e629c 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/util/impl/QueryHelperImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/util/impl/QueryHelperImpl.java @@ -25,11 +25,10 @@ import com.day.cq.search.QueryBuilder; import com.day.cq.search.result.Hit; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; @@ -44,12 +43,11 @@ import java.util.List; import java.util.Map; -@Component -@Service +@Component(service = {QueryHelper.class}) public class QueryHelperImpl implements QueryHelper { @Reference - private QueryBuilder queryBuilder; + private transient QueryBuilder queryBuilder; public static final String QUERY_BUILDER = "queryBuilder"; @@ -72,7 +70,7 @@ public List findResources(final ResourceResolver resourceResolver, if (StringUtils.isEmpty(statement)) { return Collections.emptyList(); } - + final String[] lines = statement.split("\\r?\\n"); if (QUERY_BUILDER.equalsIgnoreCase(language)) { diff --git a/bundle/src/main/java/com/adobe/acs/commons/util/package-info.java b/bundle/src/main/java/com/adobe/acs/commons/util/package-info.java index 783d115d46..2fb5a4bb09 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/util/package-info.java +++ b/bundle/src/main/java/com/adobe/acs/commons/util/package-info.java @@ -18,7 +18,8 @@ /** * Miscellaneous Utilities. */ -@Version("4.6.1") +@Version("4.6.2") package com.adobe.acs.commons.util; + import org.osgi.annotation.versioning.Version; diff --git a/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLinesImpl.java b/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLinesImpl.java index d9fbf89cd9..bb75bd83e6 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLinesImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLinesImpl.java @@ -22,15 +22,13 @@ import com.adobe.acs.commons.wcm.comparisons.lines.Line; import com.adobe.acs.commons.wcm.comparisons.PageCompareDataLines; import com.google.common.base.Function; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; import org.jetbrains.annotations.Nullable; +import org.osgi.service.component.annotations.Component; import java.io.Serializable; import java.util.List; -@Component(metatype = false) -@Service +@Component(service = {PageCompareDataLines.class}) public class PageCompareDataLinesImpl implements PageCompareDataLines { @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLoaderImpl.java b/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLoaderImpl.java index 0b40bfccd6..f22cf3a176 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLoaderImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/wcm/comparisons/impl/PageCompareDataLoaderImpl.java @@ -19,14 +19,12 @@ import com.adobe.acs.commons.wcm.comparisons.PageCompareData; import com.adobe.acs.commons.wcm.comparisons.PageCompareDataLoader; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.Resource; +import org.osgi.service.component.annotations.Component; import javax.jcr.RepositoryException; -@Component -@Service +@Component(service = {PageCompareDataLoader.class}) public class PageCompareDataLoaderImpl implements PageCompareDataLoader { @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/wcm/impl/PropertyMergePostProcessor.java b/bundle/src/main/java/com/adobe/acs/commons/wcm/impl/PropertyMergePostProcessor.java index e2a724793f..c249fa1c18 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/wcm/impl/PropertyMergePostProcessor.java +++ b/bundle/src/main/java/com/adobe/acs/commons/wcm/impl/PropertyMergePostProcessor.java @@ -19,8 +19,6 @@ import com.day.cq.tagging.TagManager; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.request.RequestParameter; import org.apache.sling.api.request.RequestParameterMap; @@ -29,6 +27,7 @@ import org.apache.sling.api.resource.Resource; import org.apache.sling.servlets.post.Modification; import org.apache.sling.servlets.post.SlingPostProcessor; +import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,14 +49,14 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; + import org.apache.jackrabbit.JcrConstants; import org.apache.sling.api.resource.ResourceResolver; /** * ACS AEM Commons - Property Merge Sling POST Processor */ -@Component -@Service +@Component(service = {SlingPostProcessor.class}) public class PropertyMergePostProcessor implements SlingPostProcessor { private static final Logger log = LoggerFactory.getLogger(PropertyMergePostProcessor.class); @@ -72,7 +71,7 @@ public class PropertyMergePostProcessor implements SlingPostProcessor { @Override public final void process(final SlingHttpServletRequest request, - final List modifications) throws Exception { + final List modifications) throws Exception { final List propertyMerges = this.getPropertyMerges(request); @@ -80,10 +79,10 @@ public final void process(final SlingHttpServletRequest request, for (final PropertyMerge propertyMerge : propertyMerges) { this.merge(resource, - propertyMerge.getDestination(), - propertyMerge.getSources(), - propertyMerge.getTypeHint(), - propertyMerge.isAllowDuplicates()) + propertyMerge.getDestination(), + propertyMerge.getSources(), + propertyMerge.getTypeHint(), + propertyMerge.isAllowDuplicates()) .ifPresent(modifiedResource -> { modifications.add(Modification.onModified(modifiedResource.getPath())); log.debug("Merged property values from {} into [ {} ]", @@ -135,12 +134,12 @@ private List getPropertyMerges(final SlingHttpServletRequest requ // Convert the Mappings into PropertyMerge objects return mapping.entrySet().stream().map( - entry -> new PropertyMerge( - entry.getKey(), - entry.getValue(), - areDuplicatesAllowed(requestParameters, entry.getKey()), - getFieldTypeHint(requestParameters, entry.getKey()) - )) + entry -> new PropertyMerge( + entry.getKey(), + entry.getValue(), + areDuplicatesAllowed(requestParameters, entry.getKey()), + getFieldTypeHint(requestParameters, entry.getKey()) + )) .collect(Collectors.toList()); } @@ -213,28 +212,27 @@ protected static String getParamValue(RequestParameterMap params, String paramNa * Merges the values found in the the source properties into the destination * property as a multi-value. The values of the source properties and * destination properties must all be the same property type. - * + *

* The unique set of properties will be stored in * - * @param resource the resource to look for the source and destination - * properties on - * @param destination the property to store the collected properties. - * @param sources the properties to collect values from for merging - * @param typeHint the data type that should be used when reading and - * storing the data + * @param resource the resource to look for the source and destination + * properties on + * @param destination the property to store the collected properties. + * @param sources the properties to collect values from for merging + * @param typeHint the data type that should be used when reading and + * storing the data * @param allowDuplicates true to allow duplicates values in the destination - * property; false to make values unique + * property; false to make values unique * @return Optional resource updated, if any */ protected final Optional merge(final Resource resource, final String destination, - final Collection sources, final Class typeHint, - final boolean allowDuplicates) throws PersistenceException { + final Collection sources, final Class typeHint, + final boolean allowDuplicates) throws PersistenceException { ResourceResolver rr = resource.getResourceResolver(); // Create an empty array of type T - @SuppressWarnings("unchecked") - final T[] emptyArray = (T[]) Array.newInstance(typeHint, 0); + @SuppressWarnings("unchecked") final T[] emptyArray = (T[]) Array.newInstance(typeHint, 0); Collection collectedValues; diff --git a/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesBindingsValuesProvider.java b/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesBindingsValuesProvider.java index ec10b60722..eddedc14f4 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesBindingsValuesProvider.java +++ b/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesBindingsValuesProvider.java @@ -18,16 +18,15 @@ package com.adobe.acs.commons.wcm.properties.shared.impl; import com.adobe.acs.commons.wcm.properties.shared.SharedComponentProperties; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.apache.felix.scr.annotations.ReferencePolicyOption; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.scripting.SlingBindings; import org.apache.sling.scripting.api.BindingsValuesProvider; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.ReferenceCardinality; +import org.osgi.service.component.annotations.ReferencePolicyOption; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,15 +47,18 @@ * to instance-level values, then shared values, and finally global * values when properties exist at multiple levels with the same name. */ -@Component -@Service + +@Component(service = {BindingsValuesProvider.class}) public class SharedComponentPropertiesBindingsValuesProvider implements BindingsValuesProvider { private static final Logger log = LoggerFactory.getLogger(SharedComponentPropertiesBindingsValuesProvider.class); /** * Bind if available, check for null when reading. */ - @Reference(policyOption = ReferencePolicyOption.GREEDY, cardinality = ReferenceCardinality.OPTIONAL_UNARY) + @Reference( + policyOption = ReferencePolicyOption.GREEDY, + cardinality = ReferenceCardinality.OPTIONAL + ) SharedComponentProperties sharedComponentProperties; @Override diff --git a/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesPageInfoProvider.java b/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesPageInfoProvider.java index 6ed6834437..ea14f2b694 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesPageInfoProvider.java +++ b/bundle/src/main/java/com/adobe/acs/commons/wcm/properties/shared/impl/SharedComponentPropertiesPageInfoProvider.java @@ -26,16 +26,15 @@ import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.jcr.api.SlingRepository; import org.apache.sling.jcr.base.util.AccessControlUtil; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Deactivate; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,24 +61,23 @@ *

* https://docs.adobe.com/docs/en/cq/5-6-1/developing/pageinfo.html#Creating a Page Information Provider */ -@org.apache.felix.scr.annotations.Component -@Service(PageInfoProvider.class) +@org.osgi.service.component.annotations.Component(service = {PageInfoProvider.class}) public class SharedComponentPropertiesPageInfoProvider implements PageInfoProvider, EventListener { private static final Logger log = LoggerFactory.getLogger(SharedComponentPropertiesPageInfoProvider.class); private static final String SERVICE_NAME = "shared-component-props"; @Reference - private PageRootProvider pageRootProvider; + private transient PageRootProvider pageRootProvider; @Reference - private SharedComponentProperties sharedComponentProperties; + private transient SharedComponentProperties sharedComponentProperties; @Reference - private ResourceResolverFactory resourceResolverFactory; + private transient ResourceResolverFactory resourceResolverFactory; @Reference - private SlingRepository repository; + private transient SlingRepository repository; @SuppressWarnings("AEM Rules:AEM-3") // used for observation private Session respositorySession; @@ -95,7 +93,7 @@ public class SharedComponentPropertiesPageInfoProvider implements PageInfoProvid * can determine whether or not to enable shared/global properties for a component on a site. */ @Override - @SuppressWarnings( "deprecation" ) + @SuppressWarnings("deprecation") public void updatePageInfo(SlingHttpServletRequest request, org.apache.sling.commons.json.JSONObject info, Resource resource) throws org.apache.sling.commons.json.JSONException { if (scheduledSharedComponentsMapUpdate > 0 && System.currentTimeMillis() > scheduledSharedComponentsMapUpdate) { @@ -136,7 +134,7 @@ public void updatePageInfo(SlingHttpServletRequest request, org.apache.sling.com /** * Listen for add/update/delete of shared dialog nodes, in order to trigger an update of the * map of components that have shared property dialogs. - * + *

* Technically a delete may not be caught if a node higher in the ancestry is deleted (thus * deleting its children) but having a stale entry in the map does not cause any problems. */ @@ -167,7 +165,7 @@ public void onEvent(EventIterator eventIterator) { /** * Schedule an update of the map of components with shared/global properties to be updated * 5 seconds from now. - * + *

* This handles race conditions where the map calculation happens before all nodes are installed, * and also prevents stampedes from multiple JCR update events such as during a package installation. */ @@ -179,13 +177,13 @@ private void scheduleSharedComponentsMapUpdate() { /** * Traverse the entire set of components in the /apps directory and create a map of all component types * that have shared/global config dialogs. - * + *

* This is used by the JS libs in the authoring interface to determine if a component should show the * options for editing shared/global configs. */ private void updateSharedComponentsMap() { Map authInfo = Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, (Object) SERVICE_NAME); - try (ResourceResolver resourceResolver = resourceResolverFactory.getServiceResourceResolver(authInfo)){ + try (ResourceResolver resourceResolver = resourceResolverFactory.getServiceResourceResolver(authInfo)) { log.debug("Calculating map of components with shared properties dialogs"); resourceResolver.refresh(); diff --git a/bundle/src/main/java/com/adobe/acs/commons/workflow/bulk/execution/impl/runners/AEMTransientWorkflowRunnerImpl.java b/bundle/src/main/java/com/adobe/acs/commons/workflow/bulk/execution/impl/runners/AEMTransientWorkflowRunnerImpl.java index 72ec6a7828..ea1376c118 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/workflow/bulk/execution/impl/runners/AEMTransientWorkflowRunnerImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/workflow/bulk/execution/impl/runners/AEMTransientWorkflowRunnerImpl.java @@ -27,9 +27,6 @@ import com.day.cq.workflow.WorkflowService; import com.day.cq.workflow.WorkflowSession; import com.day.cq.workflow.model.WorkflowModel; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.PersistenceException; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; @@ -39,6 +36,8 @@ import org.apache.sling.event.jobs.JobManager; import org.apache.sling.event.jobs.Queue; import org.apache.sling.event.jobs.Statistics; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,8 +45,7 @@ import java.util.ArrayList; import java.util.List; -@Component -@Service(value = BulkWorkflowRunner.class) +@Component(service = {BulkWorkflowRunner.class}) public class AEMTransientWorkflowRunnerImpl extends AbstractAEMWorkflowRunner implements BulkWorkflowRunner { private static final Logger log = LoggerFactory.getLogger(AEMTransientWorkflowRunnerImpl.class); @@ -96,7 +94,9 @@ public void forceTerminate(Workspace workspace, Payload payload) throws Exceptio log.info("Cannot force terminate Transient Workflow for [ {} ]", payload.getPayloadPath()); } - /** Runner's Runnable **/ + /** + * Runner's Runnable + **/ private class AEMTransientWorkflowRunnable implements Runnable { private final ResourceResolverFactory resourceResolverFactory; @@ -104,7 +104,7 @@ private class AEMTransientWorkflowRunnable implements Runnable { private final WorkflowService workflowService; private final Scheduler scheduler; private final JobManager jobManager; - private String configPath ; + private String configPath; private String jobName; public AEMTransientWorkflowRunnable(Config config, @@ -130,7 +130,7 @@ public void run() { Config config = null; Workspace workspace = null; - try (ResourceResolver serviceResourceResolver = resourceResolverFactory.getServiceResourceResolver(AUTH_INFO)){ + try (ResourceResolver serviceResourceResolver = resourceResolverFactory.getServiceResourceResolver(AUTH_INFO)) { configResource = serviceResourceResolver.getResource(configPath); if (configResource != null) { @@ -211,7 +211,7 @@ public void run() { } } catch (Exception e) { String workspacePath = workspace != null ? workspace.getPath() : "unknown"; - log.error("Error processing periodic execution for job [ {} ] for workspace [ {} ]", new String[]{ jobName, workspacePath }, e); + log.error("Error processing periodic execution for job [ {} ] for workspace [ {} ]", new String[]{jobName, workspacePath}, e); unscheduleJob(scheduler, jobName, configResource, workspace); try { stop(workspace); diff --git a/bundle/src/main/java/com/adobe/acs/commons/workflow/synthetic/impl/SyntheticWorkflowRunnerImpl.java b/bundle/src/main/java/com/adobe/acs/commons/workflow/synthetic/impl/SyntheticWorkflowRunnerImpl.java index 7afdc46ed0..f21eff561f 100644 --- a/bundle/src/main/java/com/adobe/acs/commons/workflow/synthetic/impl/SyntheticWorkflowRunnerImpl.java +++ b/bundle/src/main/java/com/adobe/acs/commons/workflow/synthetic/impl/SyntheticWorkflowRunnerImpl.java @@ -34,14 +34,6 @@ import com.day.cq.workflow.WorkflowSession; import com.day.cq.workflow.exec.WorkItem; import com.day.cq.workflow.exec.WorkflowProcess; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.apache.felix.scr.annotations.ReferencePolicy; -import org.apache.felix.scr.annotations.References; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.resource.LoginException; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; @@ -49,6 +41,7 @@ import org.apache.sling.jcr.resource.api.JcrResourceConstants; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; +import org.osgi.service.component.annotations.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,25 +62,10 @@ * ACS AEM Commons - Synthetic Workflow Runner * Facilitates the execution of synthetic workflow. */ -@Component(immediate = true) -@References({ - @Reference( - referenceInterface = WorkflowProcess.class, - policy = ReferencePolicy.DYNAMIC, - cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, - bind = "bindCqWorkflowProcesses", - unbind = "unbindCqWorkflowProcesses" - ), - @Reference( - referenceInterface = com.adobe.granite.workflow.exec.WorkflowProcess.class, - policy = ReferencePolicy.DYNAMIC, - cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, - bind = "bindGraniteWorkflowProcesses", - unbind = "unbindGraniteWorkflowProcesses" - ) -}) -// Explicitly register to the SyntheticWorkflowRunner interface (as this extends WorkflowService, which we do not want to register a service against) -@Service(value = SyntheticWorkflowRunner.class) +@Component( + service = {SyntheticWorkflowRunner.class}, + immediate = true +) public class SyntheticWorkflowRunnerImpl implements SyntheticWorkflowRunner { private static final Logger log = LoggerFactory.getLogger(SyntheticWorkflowRunnerImpl.class); @@ -102,11 +80,30 @@ public class SyntheticWorkflowRunnerImpl implements SyntheticWorkflowRunner { private Map workflowProcessesByProcessName = new ConcurrentHashMap(); + @Reference( + service = WorkflowProcess.class, + cardinality = ReferenceCardinality.MULTIPLE, + policy = ReferencePolicy.DYNAMIC, + target = "(component.name=com.day.cq.workflow.impl.process.CQWorkflowProcess)", + unbind = "unbindCqWorkflowProcesses" + ) + private volatile WorkflowProcess[] cqWorkflowProcesses; + + @Reference( + service = com.adobe.granite.workflow.exec.WorkflowProcess.class, + cardinality = ReferenceCardinality.MULTIPLE, + policy = ReferencePolicy.DYNAMIC, + target = "(component.name=com.adobe.granite.workflow.core.job.JobHandler)", + unbind = "unbindGraniteWorkflowProcesses" + ) + private volatile com.adobe.granite.workflow.exec.WorkflowProcess[] graniteWorkflowProcesses; + + @Reference - private WorkflowService aemWorkflowService; + private transient WorkflowService aemWorkflowService; @Reference - private ResourceResolverFactory resourceResolverFactory; + private transient ResourceResolverFactory resourceResolverFactory; private ServiceRegistration accessorReg; @@ -253,7 +250,8 @@ private void run(final ResourceResolver resourceResolver, terminated = true; log.info("Synthetic CQ workflow execution stopped via terminate for [ {} ]", payloadPath); break; - } catch (com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticTerminateWorkflowException ex) { + } catch ( + com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticTerminateWorkflowException ex) { // Terminate entire Workflow execution for this payload terminated = true; log.info("Synthetic Granite workflow execution stopped via terminate for [ {} ]", payloadPath); @@ -261,7 +259,8 @@ private void run(final ResourceResolver resourceResolver, } catch (SyntheticRestartWorkflowException ex) { // Handle CQ Restart Workflow; catch/throw for clarity in whats happening throw ex; - } catch (com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticRestartWorkflowException ex) { + } catch ( + com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticRestartWorkflowException ex) { // Handle Granite Restart Exceptions by transforming them into CQ Worlflow Restart Exceptions which the rest of this API leverages throw new SyntheticRestartWorkflowException(ex.getMessage()); } catch (WorkflowException ex) { @@ -281,8 +280,8 @@ private void run(final ResourceResolver resourceResolver, } catch (RepositoryException e) { String msg = String.format("Could not save at end of synthetic workflow process execution" + " [ %s ] for payload path [ %s ]", workflowStep.getId(), payloadPath); - log.error("Synthetic workflow process save failed: {}",msg, e); - throw new WorkflowException(msg,e); + log.error("Synthetic workflow process save failed: {}", msg, e); + throw new WorkflowException(msg, e); } } } else { @@ -318,7 +317,7 @@ private void runCqWorkflowProcess(Session session, // Execute the Workflow Process try { - WorkItem wrappedWorkItem = (WorkItem) Proxy.newProxyInstance(WrappedSyntheticWorkItem.class.getClassLoader(), new Class[] { WorkItem.class, WrappedSyntheticWorkItem.class }, workItem); + WorkItem wrappedWorkItem = (WorkItem) Proxy.newProxyInstance(WrappedSyntheticWorkItem.class.getClassLoader(), new Class[]{WorkItem.class, WrappedSyntheticWorkItem.class}, workItem); workItem.setWorkflow(wrappedWorkItem, workflow); workflowProcess.getCqWorkflowProcess().execute(wrappedWorkItem, workflowSession, workflowProcessMetaDataMap); workItem.setTimeEnded(new Date()); @@ -337,7 +336,7 @@ private void runGraniteWorkflowProcess(Session session, com.adobe.acs.commons.workflow.synthetic.impl.granite.SyntheticWorkflow workflow, SyntheticMetaDataMap workflowProcessMetaDataMap, SyntheticWorkflowProcess workflowProcess) throws com.adobe.granite.workflow.WorkflowException { - final com.adobe.acs.commons.workflow.synthetic.impl.granite.SyntheticWorkflowSession syntheticWorkflowSession = this.getGraniteWorkflowSession(session); + final com.adobe.acs.commons.workflow.synthetic.impl.granite.SyntheticWorkflowSession syntheticWorkflowSession = this.getGraniteWorkflowSession(session); // Each Workflow Process Step gets its own workItem whose life starts and ends w the WF Process final com.adobe.acs.commons.workflow.synthetic.impl.granite.SyntheticWorkItem workItem = @@ -348,16 +347,18 @@ private void runGraniteWorkflowProcess(Session session, workflow.getWorkflowData().getPayload()); // Execute the Workflow Process try { - com.adobe.granite.workflow.WorkflowSession workflowSession = (com.adobe.granite.workflow.WorkflowSession) Proxy.newProxyInstance(WrappedSyntheticWorkflowSession.class.getClassLoader(), new Class[] { com.adobe.granite.workflow.WorkflowSession.class, WrappedSyntheticWorkflowSession.class }, syntheticWorkflowSession); - com.adobe.granite.workflow.exec.WorkItem wrappedWorkItem = (com.adobe.granite.workflow.exec.WorkItem) Proxy.newProxyInstance(com.adobe.acs.commons.workflow.synthetic.granite.WrappedSyntheticWorkItem.class.getClassLoader(), new Class[] { com.adobe.granite.workflow.exec.WorkItem.class, com.adobe.acs.commons.workflow.synthetic.granite.WrappedSyntheticWorkItem.class }, workItem); + com.adobe.granite.workflow.WorkflowSession workflowSession = (com.adobe.granite.workflow.WorkflowSession) Proxy.newProxyInstance(WrappedSyntheticWorkflowSession.class.getClassLoader(), new Class[]{com.adobe.granite.workflow.WorkflowSession.class, WrappedSyntheticWorkflowSession.class}, syntheticWorkflowSession); + com.adobe.granite.workflow.exec.WorkItem wrappedWorkItem = (com.adobe.granite.workflow.exec.WorkItem) Proxy.newProxyInstance(com.adobe.acs.commons.workflow.synthetic.granite.WrappedSyntheticWorkItem.class.getClassLoader(), new Class[]{com.adobe.granite.workflow.exec.WorkItem.class, com.adobe.acs.commons.workflow.synthetic.granite.WrappedSyntheticWorkItem.class}, workItem); workItem.setWorkflow(wrappedWorkItem, workflow); workflowProcess.getGraniteWorkflowProcess().execute(wrappedWorkItem, workflowSession, workflowProcessMetaDataMap); workItem.setTimeEnded(new Date()); - } catch (com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticCompleteWorkflowException ex) { + } catch ( + com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticCompleteWorkflowException ex) { // Workitem force-completed via a call to workflowSession.complete(..) workItem.setTimeEnded(new Date()); log.trace(ex.getMessage()); - } catch (com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticTerminateWorkflowException ex) { + } catch ( + com.adobe.acs.commons.workflow.synthetic.impl.granite.exceptions.SyntheticTerminateWorkflowException ex) { workItem.setTimeEnded(new Date()); log.trace(ex.getMessage()); throw ex; @@ -368,8 +369,9 @@ private void runGraniteWorkflowProcess(Session session, /** * Converts the legacy Workflow Process IDs and Process Args maps into the SyntheticWorkflowStep abstraction that allows for * multiple Processes of the same type to be executed in the same WF. + * * @param workflowProcessIds the ordered list of workflow process id or labels - * @param processArgs the metadata map args, indexed by workflowProcessId + * @param processArgs the metadata map args, indexed by workflowProcessId * @return the ordered list of SyntheticWorkflowSteps that represent the parameter data */ private List convertToSyntheticWorkflowSteps(String[] workflowProcessIds, diff --git a/bundle/src/test/java/com/adobe/acs/commons/it/build/ScrMetadataIT.java b/bundle/src/test/java/com/adobe/acs/commons/it/build/ScrMetadataIT.java index f4f325a85b..e4bd4fb44b 100644 --- a/bundle/src/test/java/com/adobe/acs/commons/it/build/ScrMetadataIT.java +++ b/bundle/src/test/java/com/adobe/acs/commons/it/build/ScrMetadataIT.java @@ -74,7 +74,7 @@ * The purpose of this test is to validate that SCR and Metatype properties are not inadvertantly changed between ACS AEM Commons releases. * It does this by downloading the bundle from the latest release and comparing the SCR and Metatype XML files to the ones generated * by the current build. - * + *

* In exceptional cases, there are use cases where changes are appropriate. These can be controlled by three sets defined in this class: * *

@@ -85,11 +85,10 @@ *
COMPONENT_PROPERTIES_TO_IGNORE_FOR_TYPE_CHANGE
*
These are properties to ignore specifically for type changes, but will still produce a test failure when the property value changes. Syntax is the same as COMPONENT_PROPERTIES_TO_IGNORE
*
- * + *

* In addition, this test validates that all factory components have an OSGi Web Console name hint and all variables * referenced from the name hint exist. Currently there is no affordance for ignoring components or variables for this * aspect of the test. - * */ @SuppressWarnings("PMD.SystemPrintln") public class ScrMetadataIT { @@ -113,14 +112,13 @@ public class ScrMetadataIT { PROPERTIES_TO_IGNORE.add(Constants.SERVICE_VENDOR); COMPONENT_PROPERTIES_TO_IGNORE = new HashSet<>(); - COMPONENT_PROPERTIES_TO_IGNORE.add("com.adobe.acs.commons.redirects.filter.RedirectFilter:mapUrls"); - COMPONENT_PROPERTIES_TO_IGNORE.add("com.adobe.acs.commons.replication.dispatcher.impl.DispatcherFlusherImpl:service.ranking"); + // Example entry + //COMPONENT_PROPERTIES_TO_IGNORE.add("com.adobe.acs.commons.redirects.filter.RedirectFilter:mapUrls"); + - // Property port on component com.adobe.acs.commons.http.impl.HttpClientFactoryImpl has different types (was: {String}, is: {Integer}) - // Property password on component com.adobe.acs.commons.http.impl.HttpClientFactoryImpl has different types (was: {String}, is: {Password}) COMPONENT_PROPERTIES_TO_IGNORE_FOR_TYPE_CHANGE = new HashSet<>(); - COMPONENT_PROPERTIES_TO_IGNORE_FOR_TYPE_CHANGE.add("com.adobe.acs.commons.http.impl.HttpClientFactoryImpl:port"); - COMPONENT_PROPERTIES_TO_IGNORE_FOR_TYPE_CHANGE.add("com.adobe.acs.commons.http.impl.HttpClientFactoryImpl:password"); + // Example entry + //COMPONENT_PROPERTIES_TO_IGNORE_FOR_TYPE_CHANGE.add("com.adobe.acs.commons.http.impl.HttpClientFactoryImpl:port"); ALLOWED_SCR_NS_URIS = new HashSet<>(); ALLOWED_SCR_NS_URIS.add("http://www.osgi.org/xmlns/scr/v1.0.0"); @@ -185,27 +183,27 @@ private List compareDescriptors(Descriptor current, Descriptor latestRel current.properties.stream().filter(cp -> !PROPERTIES_TO_IGNORE.contains(cp.name)) .filter(cp -> !COMPONENT_PROPERTIES_TO_IGNORE.contains(current.name + ":" + cp.name)).forEach(cp -> { - Optional fromLatest = latestRelease.properties.stream().filter(p -> p.name.equals(cp.name)).findFirst(); - if (fromLatest.isPresent()) { - Property lp = fromLatest.get(); - if (!StringUtils.equals(cp.value, lp.value)) { - problems.add(String.format("Property %s on component %s has different values (was: {%s}, is: {%s})", cp.name, current.name, lp.value, cp.value)); - } - if (!COMPONENT_PROPERTIES_TO_IGNORE_FOR_TYPE_CHANGE.contains(current.name + ":" + cp.name) && !StringUtils.equals(cp.type, lp.type)) { - problems.add(String.format("Property %s on component %s has different types (was: {%s}, is: {%s})", cp.name, current.name, lp.type, cp.type)); - } - } else { - System.out.printf("Property %s on component %s is only in current. Assuming OK.\n", cp.name, current.name); - } - }); + Optional fromLatest = latestRelease.properties.stream().filter(p -> p.name.equals(cp.name)).findFirst(); + if (fromLatest.isPresent()) { + Property lp = fromLatest.get(); + if (!StringUtils.equals(cp.value, lp.value)) { + problems.add(String.format("Property %s on component %s has different values (was: {%s}, is: {%s})", cp.name, current.name, lp.value, cp.value)); + } + if (!COMPONENT_PROPERTIES_TO_IGNORE_FOR_TYPE_CHANGE.contains(current.name + ":" + cp.name) && !StringUtils.equals(cp.type, lp.type)) { + problems.add(String.format("Property %s on component %s has different types (was: {%s}, is: {%s})", cp.name, current.name, lp.type, cp.type)); + } + } else { + System.out.printf("Property %s on component %s is only in current. Assuming OK.\n", cp.name, current.name); + } + }); latestRelease.properties.stream().filter(lp -> !PROPERTIES_TO_IGNORE.contains(lp.name)) .filter(lp -> !COMPONENT_PROPERTIES_TO_IGNORE.contains(latestRelease.name + ":" + lp.name)).forEach(lp -> { - Optional fromCurrent = current.properties.stream().filter(p -> p.name.equals(lp.name)).findFirst(); - if (!fromCurrent.isPresent()) { - problems.add(String.format("Property %s on component %s has been removed.", lp.name, latestRelease.name)); - } - }); + Optional fromCurrent = current.properties.stream().filter(p -> p.name.equals(lp.name)).findFirst(); + if (!fromCurrent.isPresent()) { + problems.add(String.format("Property %s on component %s has been removed.", lp.name, latestRelease.name)); + } + }); return problems; } @@ -214,13 +212,13 @@ private List compareDescriptors(Descriptor current, Descriptor latestRel private DescriptorList getDescriptorsFromLatestRelease() throws Exception { // https://central.sonatype.org/search/rest-api-guide/ - HttpClientBuilder builder = HttpClientBuilder.create().setServiceUnavailableRetryStrategy( new ServiceUnavailableRetryStrategy() { - + HttpClientBuilder builder = HttpClientBuilder.create().setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() { + @Override public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) { return executionCount < 5 && TRANSIENT_ERROR_STATUS_CODES.contains(response.getStatusLine().getStatusCode()); } - + @Override public long getRetryInterval() { return 5000; // in milliseconds @@ -238,7 +236,7 @@ public long getRetryInterval() { } else { String url = String.format("https://search.maven.org/remotecontent?filepath=com/adobe/acs/acs-aem-commons-bundle/%s/acs-aem-commons-bundle-%s.jar", latestVersion, latestVersion); System.out.printf("Fetching %s\n", url); - + client.execute(new HttpGet(url), new ResponseHandler() { @Override @@ -315,7 +313,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO } return super.visitFile(file, attrs); } - + }); // metatype descriptors must come last (after component descriptions) for (Descriptor metatypeDescriptor : metatypeDescriptors) { @@ -423,6 +421,7 @@ private class DescriptorList { /** * Properties with same name overwrite existing properties in an existing descriptor with the same name + * * @param toAdd */ private void merge(Descriptor toAdd) {