You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Justin Edelson (JIRA)" <ji...@apache.org> on 2017/04/11 19:28:41 UTC

[jira] [Created] (SLING-6778) [Sling Models] Support Delegate Pattern for Models adapted from interfaces

Justin Edelson created SLING-6778:
-------------------------------------

             Summary: [Sling Models] Support Delegate Pattern for Models adapted from interfaces
                 Key: SLING-6778
                 URL: https://issues.apache.org/jira/browse/SLING-6778
             Project: Sling
          Issue Type: New Feature
          Components: Extensions
            Reporter: Justin Edelson


Consider this interface:

{code}
public interface Something {
	
	String getText();

        String getOther();

}
{code}

With this model implementation:

{code}
@Model(adaptable = Resource.class, adapter = Something.class, resourceType = "myco/something")
public class SomethingImpl implements Something {
	
	@Inject
	private String text;

        @Inject
        private String other;

	public String getText() {
		return text;
	}
        public String getOther() {
                return other;
         }

}
{code}

And let's say that there is a resource with the type myco/somethingelse and that myco/something is the super type of myco/somethingelse.

In order to create a model class associated with myco/somethingelse and have that model class access the original class using the Delegate pattern, it is quite difficult to do so since you need to manually create a wrapping resource and then adapt that. I think we can facilitate this pattern through SLING-5739 and a new @Via provider.

The syntax would be something along the lines of

{code}
                @Self @Via(type = SuperResourceType.class)
                private Something delegate;
{code}

Assuming you wanted the super type

We could also support manually setting the resource type, i.e.

{code}
                @Self @Via(value = “some/other/resourceType”, type = ForcedResourceType.class)
                private Something delegate;
{code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)