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

Code
Comments
Other
Rev Date Author Line
6790 20 Mar 15 nicklas 1 /**
6790 20 Mar 15 nicklas 2   $Id$
6790 20 Mar 15 nicklas 3
6790 20 Mar 15 nicklas 4   Copyright (C) 2015 Nicklas Nordborg
6790 20 Mar 15 nicklas 5
6790 20 Mar 15 nicklas 6   This file is part of BASE - BioArray Software Environment.
6790 20 Mar 15 nicklas 7   Available at http://base.thep.lu.se/
6790 20 Mar 15 nicklas 8
6790 20 Mar 15 nicklas 9   BASE is free software; you can redistribute it and/or
6790 20 Mar 15 nicklas 10   modify it under the terms of the GNU General Public License
6790 20 Mar 15 nicklas 11   as published by the Free Software Foundation; either version 3
6790 20 Mar 15 nicklas 12   of the License, or (at your option) any later version.
6790 20 Mar 15 nicklas 13
6790 20 Mar 15 nicklas 14   BASE is distributed in the hope that it will be useful,
6790 20 Mar 15 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
6790 20 Mar 15 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6790 20 Mar 15 nicklas 17   GNU General Public License for more details.
6790 20 Mar 15 nicklas 18
6790 20 Mar 15 nicklas 19   You should have received a copy of the GNU General Public License
6790 20 Mar 15 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6790 20 Mar 15 nicklas 21 */
6790 20 Mar 15 nicklas 22 package net.sf.basedb.util.listable;
6790 20 Mar 15 nicklas 23
6801 25 Mar 15 nicklas 24 import java.util.HashSet;
6790 20 Mar 15 nicklas 25 import java.util.Set;
6790 20 Mar 15 nicklas 26
6790 20 Mar 15 nicklas 27 import net.sf.basedb.core.DbControl;
6790 20 Mar 15 nicklas 28 import net.sf.basedb.core.DerivedBioAssay;
6790 20 Mar 15 nicklas 29 import net.sf.basedb.core.Item;
6790 20 Mar 15 nicklas 30 import net.sf.basedb.core.ItemQuery;
6790 20 Mar 15 nicklas 31 import net.sf.basedb.core.query.Expressions;
6790 20 Mar 15 nicklas 32 import net.sf.basedb.core.query.Hql;
6790 20 Mar 15 nicklas 33 import net.sf.basedb.core.query.Restrictions;
6790 20 Mar 15 nicklas 34
6790 20 Mar 15 nicklas 35 /**
6790 20 Mar 15 nicklas 36   Source item transformer implementation that transform physical bioassay items 
6801 25 Mar 15 nicklas 37   to derived bioassays. This implementation transform to all derived bioassays 
6801 25 Mar 15 nicklas 38   that are descendants of the physical bioassays and may optionally limit the
6801 25 Mar 15 nicklas 39   derived bioassays that are related to parent collected extracts.
6790 20 Mar 15 nicklas 40   
6790 20 Mar 15 nicklas 41   @author Nicklas
6790 20 Mar 15 nicklas 42   @since 3.5
6790 20 Mar 15 nicklas 43 */
6792 23 Mar 15 nicklas 44 public class PhysicalBioAssayToDerivedBioAssayTransformer 
6790 20 Mar 15 nicklas 45   extends AbstractSourceItemTransformer
6790 20 Mar 15 nicklas 46 {
6790 20 Mar 15 nicklas 47
6792 23 Mar 15 nicklas 48   private CollectExtracts collectedExtracts;
6792 23 Mar 15 nicklas 49   
6790 20 Mar 15 nicklas 50   /**
6790 20 Mar 15 nicklas 51     Create a new physical bioassay to derived bioassay transformer.
6790 20 Mar 15 nicklas 52   */
6792 23 Mar 15 nicklas 53   public PhysicalBioAssayToDerivedBioAssayTransformer() 
6790 20 Mar 15 nicklas 54   {
6790 20 Mar 15 nicklas 55     super(Item.PHYSICALBIOASSAY, Item.DERIVEDBIOASSAY);
6790 20 Mar 15 nicklas 56   }
6790 20 Mar 15 nicklas 57   
6792 23 Mar 15 nicklas 58   /**
6801 25 Mar 15 nicklas 59     Create a new physical bioassay to derived bioassay transformer using
6801 25 Mar 15 nicklas 60     the collected extracts to limit the returned items.
6792 23 Mar 15 nicklas 61   */
6792 23 Mar 15 nicklas 62   public PhysicalBioAssayToDerivedBioAssayTransformer(CollectExtracts collectedExtracts) 
6792 23 Mar 15 nicklas 63   {
6792 23 Mar 15 nicklas 64     this();
6792 23 Mar 15 nicklas 65     this.collectedExtracts = collectedExtracts;
6792 23 Mar 15 nicklas 66   }
6792 23 Mar 15 nicklas 67   
6790 20 Mar 15 nicklas 68   @Override
6790 20 Mar 15 nicklas 69   public Set<Integer> transform(TransformContext context, Set<Integer> source) 
6790 20 Mar 15 nicklas 70   {
6790 20 Mar 15 nicklas 71     DbControl dc = context.getDbControl();
6790 20 Mar 15 nicklas 72     
6790 20 Mar 15 nicklas 73     ItemQuery<DerivedBioAssay> query = DerivedBioAssay.getQuery();
6848 13 Apr 15 nicklas 74     query.setIncludes(context.getInclude());
6790 20 Mar 15 nicklas 75     query.join(Hql.innerJoin("physicalBioAssays", "pba"));
6790 20 Mar 15 nicklas 76     query.restrict(
6790 20 Mar 15 nicklas 77       Restrictions.in(
6790 20 Mar 15 nicklas 78         Hql.alias("pba"), 
6790 20 Mar 15 nicklas 79         Expressions.parameter("bioAssays")
6790 20 Mar 15 nicklas 80       )
6790 20 Mar 15 nicklas 81     );
8094 04 Nov 22 nicklas 82     context.collect(getSourceItemType(), source);
8094 04 Nov 22 nicklas 83     Set<Integer> all = context.avoid(getTargetItemType(), safeIdList(dc, query, "bioAssays", source));
6790 20 Mar 15 nicklas 84     
6792 23 Mar 15 nicklas 85     if (collectedExtracts != null)
6792 23 Mar 15 nicklas 86     {
6801 25 Mar 15 nicklas 87       // Keep only derived bioassays that have a 'null' extract or
6801 25 Mar 15 nicklas 88       // an extract that is included among the collected or their parents
6801 25 Mar 15 nicklas 89       Set<Integer> collectedAndParents; 
6801 25 Mar 15 nicklas 90       if (collectedExtracts.getCollectedParents().size() > 0)
6801 25 Mar 15 nicklas 91       {
6801 25 Mar 15 nicklas 92         // merge
6801 25 Mar 15 nicklas 93         collectedAndParents = new HashSet<Integer>(collectedExtracts.getCollected());
6801 25 Mar 15 nicklas 94         collectedAndParents.addAll(collectedExtracts.getCollectedParents());
6801 25 Mar 15 nicklas 95       }
6801 25 Mar 15 nicklas 96       else
6801 25 Mar 15 nicklas 97       {
6801 25 Mar 15 nicklas 98         // only use the collected
6801 25 Mar 15 nicklas 99         collectedAndParents = collectedExtracts.getCollected();
6801 25 Mar 15 nicklas 100       }
6801 25 Mar 15 nicklas 101       
6796 24 Mar 15 nicklas 102       query = DerivedBioAssay.getQuery();
6848 13 Apr 15 nicklas 103       query.setIncludes(context.getInclude());
6792 23 Mar 15 nicklas 104       query.join(Hql.leftJoin("extract", "xtr"));
6792 23 Mar 15 nicklas 105       query.restrict(Restrictions.or(
6792 23 Mar 15 nicklas 106         Restrictions.eq(Hql.alias("xtr"), null),
6792 23 Mar 15 nicklas 107         Restrictions.in(Hql.alias("xtr"), Expressions.parameter("extracts"))
6792 23 Mar 15 nicklas 108       ));
6801 25 Mar 15 nicklas 109       all.retainAll(safeIdList(dc, query, "extracts", collectedAndParents));
6792 23 Mar 15 nicklas 110     }
6792 23 Mar 15 nicklas 111     
6796 24 Mar 15 nicklas 112     return all;
6790 20 Mar 15 nicklas 113   }
6790 20 Mar 15 nicklas 114
6790 20 Mar 15 nicklas 115 }