src/core/net/sf/basedb/util/listable/RestrictionTransformer.java

Code
Comments
Other
Rev Date Author Line
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 12   Transformer implementation that is intended to provide a final
7893 07 Dec 20 nicklas 13   filtering of target items. The transformer is used by wrapping 
7893 07 Dec 20 nicklas 14   an existing source item transformer implementation. The {@link #transform(TransformContext, Set)}
7893 07 Dec 20 nicklas 15   method will first call the wrapped transformer to get a list of target
7893 07 Dec 20 nicklas 16   items and then apply the given filter before returning the result.
7893 07 Dec 20 nicklas 17   
7893 07 Dec 20 nicklas 18   @author nicklas
7893 07 Dec 20 nicklas 19   @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 28     Create a new transformer and apply the given restriction to items before they are
7893 07 Dec 20 nicklas 29     returned. An {@link ItemQuery} for the correct target item type is automatically
7893 07 Dec 20 nicklas 30     created from the given transformer. The restriction is applied to the query
7893 07 Dec 20 nicklas 31     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 43     Create a new transformer and use the given query to find the target items.
7893 07 Dec 20 nicklas 44     The query is expected to return the same type of items as the transformer
7893 07 Dec 20 nicklas 45     and must have defined a parameter with the name 'ids' that take a list
7893 07 Dec 20 nicklas 46     of id values. The list will be populated with the id values returned
7893 07 Dec 20 nicklas 47     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 }