7893 |
07 Dec 20 |
nicklas |
1 |
package net.sf.basedb.util.listable; |
7893 |
07 Dec 20 |
nicklas |
2 |
|
7893 |
07 Dec 20 |
nicklas |
3 |
import java.util.Set; |
7893 |
07 Dec 20 |
nicklas |
4 |
|
7893 |
07 Dec 20 |
nicklas |
5 |
import net.sf.basedb.core.ItemQuery; |
7893 |
07 Dec 20 |
nicklas |
6 |
import net.sf.basedb.core.query.Expressions; |
7893 |
07 Dec 20 |
nicklas |
7 |
import net.sf.basedb.core.query.Hql; |
7893 |
07 Dec 20 |
nicklas |
8 |
import net.sf.basedb.core.query.Restriction; |
7893 |
07 Dec 20 |
nicklas |
9 |
import net.sf.basedb.core.query.Restrictions; |
7893 |
07 Dec 20 |
nicklas |
10 |
|
7893 |
07 Dec 20 |
nicklas |
11 |
/** |
7893 |
07 Dec 20 |
nicklas |
Transformer implementation that is intended to provide a final |
7893 |
07 Dec 20 |
nicklas |
filtering of target items. The transformer is used by wrapping |
7893 |
07 Dec 20 |
nicklas |
an existing source item transformer implementation. The {@link #transform(TransformContext, Set)} |
7893 |
07 Dec 20 |
nicklas |
method will first call the wrapped transformer to get a list of target |
7893 |
07 Dec 20 |
nicklas |
items and then apply the given filter before returning the result. |
7893 |
07 Dec 20 |
nicklas |
17 |
|
7893 |
07 Dec 20 |
nicklas |
@author nicklas |
7893 |
07 Dec 20 |
nicklas |
@since 3.18 |
7893 |
07 Dec 20 |
nicklas |
20 |
*/ |
7893 |
07 Dec 20 |
nicklas |
21 |
public class RestrictionTransformer |
7893 |
07 Dec 20 |
nicklas |
22 |
extends AbstractSourceItemTransformer |
7893 |
07 Dec 20 |
nicklas |
23 |
{ |
7893 |
07 Dec 20 |
nicklas |
24 |
private final SourceItemTransformer transformer; |
7893 |
07 Dec 20 |
nicklas |
25 |
private final ItemQuery<?> query; |
7893 |
07 Dec 20 |
nicklas |
26 |
|
7893 |
07 Dec 20 |
nicklas |
27 |
/** |
7893 |
07 Dec 20 |
nicklas |
Create a new transformer and apply the given restriction to items before they are |
7893 |
07 Dec 20 |
nicklas |
returned. An {@link ItemQuery} for the correct target item type is automatically |
7893 |
07 Dec 20 |
nicklas |
created from the given transformer. The restriction is applied to the query |
7893 |
07 Dec 20 |
nicklas |
before it is executed. |
7893 |
07 Dec 20 |
nicklas |
32 |
*/ |
7893 |
07 Dec 20 |
nicklas |
33 |
public RestrictionTransformer(SourceItemTransformer transformer, Restriction restriction) |
7893 |
07 Dec 20 |
nicklas |
34 |
{ |
7893 |
07 Dec 20 |
nicklas |
35 |
super(transformer.getSourceItemType(), transformer.getTargetItemType()); |
7893 |
07 Dec 20 |
nicklas |
36 |
this.transformer = transformer; |
7893 |
07 Dec 20 |
nicklas |
37 |
this.query = transformer.getTargetItemType().getQuery(); |
7893 |
07 Dec 20 |
nicklas |
38 |
query.restrictPermanent(restriction); |
7893 |
07 Dec 20 |
nicklas |
39 |
query.restrictPermanent(Restrictions.in(Hql.property("id"), Expressions.parameter("ids"))); |
7893 |
07 Dec 20 |
nicklas |
40 |
} |
7893 |
07 Dec 20 |
nicklas |
41 |
|
7893 |
07 Dec 20 |
nicklas |
42 |
/** |
7893 |
07 Dec 20 |
nicklas |
Create a new transformer and use the given query to find the target items. |
7893 |
07 Dec 20 |
nicklas |
The query is expected to return the same type of items as the transformer |
7893 |
07 Dec 20 |
nicklas |
and must have defined a parameter with the name 'ids' that take a list |
7893 |
07 Dec 20 |
nicklas |
of id values. The list will be populated with the id values returned |
7893 |
07 Dec 20 |
nicklas |
by the transformer. |
7893 |
07 Dec 20 |
nicklas |
48 |
*/ |
7893 |
07 Dec 20 |
nicklas |
49 |
public RestrictionTransformer(SourceItemTransformer transformer, ItemQuery<?> query) |
7893 |
07 Dec 20 |
nicklas |
50 |
{ |
7893 |
07 Dec 20 |
nicklas |
51 |
super(transformer.getSourceItemType(), transformer.getTargetItemType()); |
7893 |
07 Dec 20 |
nicklas |
52 |
this.transformer = transformer; |
7893 |
07 Dec 20 |
nicklas |
53 |
this.query = query; |
7893 |
07 Dec 20 |
nicklas |
54 |
} |
7893 |
07 Dec 20 |
nicklas |
55 |
|
7893 |
07 Dec 20 |
nicklas |
56 |
|
7893 |
07 Dec 20 |
nicklas |
57 |
@Override |
7893 |
07 Dec 20 |
nicklas |
58 |
public Set<Integer> transform(TransformContext context, Set<Integer> source) |
7893 |
07 Dec 20 |
nicklas |
59 |
{ |
7893 |
07 Dec 20 |
nicklas |
60 |
Set<Integer> target = transformer.transform(context, source); |
7893 |
07 Dec 20 |
nicklas |
61 |
query.setIncludes(context.getInclude()); |
7893 |
07 Dec 20 |
nicklas |
62 |
return safeIdList(context.getDbControl(), query, "ids", target); |
7893 |
07 Dec 20 |
nicklas |
63 |
} |
7893 |
07 Dec 20 |
nicklas |
64 |
|
7893 |
07 Dec 20 |
nicklas |
65 |
} |