cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Savva Kolbachev (JIRA)" <j...@apache.org>
Subject [jira] [Closed] (CAY-2029) Allow out-of-order insertion into DI lists
Date Thu, 22 Oct 2015 09:35:27 GMT

     [ https://issues.apache.org/jira/browse/CAY-2029?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Savva Kolbachev closed CAY-2029.
--------------------------------
       Resolution: Done
    Fix Version/s: 4.0.M3

> Allow out-of-order insertion into DI lists
> ------------------------------------------
>
>                 Key: CAY-2029
>                 URL: https://issues.apache.org/jira/browse/CAY-2029
>             Project: Cayenne
>          Issue Type: Task
>            Reporter: Andrus Adamchik
>            Assignee: Savva Kolbachev
>             Fix For: 4.0.M3
>
>
> We need that per CAY-2028. The following API is suggested:
> {noformat}
> // binding a type. Key is implicit (as it can be calculated automatically) 
> // and can be addressed when inserting other items.
> ListBuilder.add(Class<T> type);
> // binding an instance. Key is implicit and is calculated automatically. 
> // It can not be transparently addressed in ordering
> ListBuilder.add(T object);
> // @since 4.0
> // binding an instance. Key is explicit and can be addressed when inserting 
> // other items
> ListBuilder.add(Key<T> key, T object);
> {noformat}
> All 3 styles of binding should return a subclass of ListBuilder that supports reordering
of the previously inserted item:
> {noformat}
> ListBuilder after(Class<?> type);
> ListBuilder after(Key<?> key);
> ListBuilder before(Class<?> type);
> ListBuilder before(Key<?> key);
> {noformat}
> Some implementation points:
> * If no before/after is specified, the ordering is non-deterministic.
> * The algorithm should detect cycles (key1 before key2 and key2 before key1) and throw
an exception
> * The algorithm should allow to reference another key in before/after, prior to that
key being bound to DI.
> The reason for using this elaborate mechanism, instead of letting the caller to inspect
the contents of the list directly is that the DI list contains mostly Providers, usually multiple
Providers wrapping each other. So looking at that directly makes little sense.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message