All of the pages on my site have their own sling types set up, and the sling:resourceSuperType inheritance is:
myapp/components/pages/page-type --> sling:resourceSuperType --> myapp/components/page --> core/wcm/components/page/v3/page
Now, I am trying to create a model for myapp/components/page called BasePageModel. I am using queryBuilder to retrieve a list of resources, and I want to adapt each one to an instance of BasePageModel to simplify the logic around reading properties.
What model can I inherit from in Java to get some base functionality for core/wcm/components/page/v3/page?
For instance, I don't want to rewrite the logic around Vanity URLs or retrieving the page's featured image. How can I simply inherit more base functionality from the core components and extend it with my own custom properties in Java?
I've found this page interface: aem-core-wcm-components/Page.java at main · adobe/aem-core-wcm-components (github.com) ... this is basically the functionality I want to inherit on my BasePageModel (not override).
Here's the corresponding model in Core components for page v3 (ultimately what I am inheriting from in sling): aem-core-wcm-components/PageImpl.java at main · adobe/aem-core-wcm-components (github.com) ... but this is marked internal. It's also only adaptable from a SlingHttpServletRequest, where as I need to adapt to this model from a Resource returned by a com.day.cq.search.Query.getResult() call.
How can I re-use the functionality of PageImpl from core components?
I tried injecting like this:
@Model(adaptables = { SlingHttpServletRequest.class, Resource.class },
adapters = BasePage.class, // a simple interface
resourceType = BasePageImpl.RESOURCE_TYPE,
defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class BasePageImpl implements BasePage {
final public static String RESOURCE_TYPE = "myapp/components/page";
@Self
private com.adobe.cq.wcm.core.components.models.Page page; // null at this point
}