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

Code
Comments
Other
Rev Date Author Line
6777 17 Mar 15 nicklas 1 /**
6777 17 Mar 15 nicklas 2   $Id$
6777 17 Mar 15 nicklas 3
6777 17 Mar 15 nicklas 4   Copyright (C) 2015 Nicklas Nordborg
6777 17 Mar 15 nicklas 5
6777 17 Mar 15 nicklas 6   This file is part of BASE - BioArray Software Environment.
6777 17 Mar 15 nicklas 7   Available at http://base.thep.lu.se/
6777 17 Mar 15 nicklas 8
6777 17 Mar 15 nicklas 9   BASE is free software; you can redistribute it and/or
6777 17 Mar 15 nicklas 10   modify it under the terms of the GNU General Public License
6777 17 Mar 15 nicklas 11   as published by the Free Software Foundation; either version 3
6777 17 Mar 15 nicklas 12   of the License, or (at your option) any later version.
6777 17 Mar 15 nicklas 13
6777 17 Mar 15 nicklas 14   BASE is distributed in the hope that it will be useful,
6777 17 Mar 15 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
6777 17 Mar 15 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6777 17 Mar 15 nicklas 17   GNU General Public License for more details.
6777 17 Mar 15 nicklas 18
6777 17 Mar 15 nicklas 19   You should have received a copy of the GNU General Public License
6777 17 Mar 15 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6777 17 Mar 15 nicklas 21 */
6777 17 Mar 15 nicklas 22 package net.sf.basedb.util.listable;
6777 17 Mar 15 nicklas 23
6777 17 Mar 15 nicklas 24 import java.util.ArrayList;
6777 17 Mar 15 nicklas 25 import java.util.List;
6777 17 Mar 15 nicklas 26
6777 17 Mar 15 nicklas 27 import net.sf.basedb.core.Item;
6777 17 Mar 15 nicklas 28 import net.sf.basedb.core.SyncFilter.SourceItemTransform;
6777 17 Mar 15 nicklas 29
6777 17 Mar 15 nicklas 30 /**
6777 17 Mar 15 nicklas 31   Transformer factory implementation for transforming to derived bioassays.
6777 17 Mar 15 nicklas 32   The current implementation support transforming from:
6777 17 Mar 15 nicklas 33   
6777 17 Mar 15 nicklas 34   <ul>
6777 17 Mar 15 nicklas 35   <li>{@link SourceItemTransform#PARENT_TO_CHILD}: BIOSOURCE, SAMPLE, EXTRACT, PHYSICALBIOASSAY, DERIVEDBIOASSAY
6777 17 Mar 15 nicklas 36   <li>{@link SourceItemTransform#CHILD_TO_PARENT}: DERIVEDBIOASSAY, RAWBIOASSAY
6777 17 Mar 15 nicklas 37   </ul>
6777 17 Mar 15 nicklas 38
6777 17 Mar 15 nicklas 39   @author Nicklas
6777 17 Mar 15 nicklas 40   @since 3.5
6777 17 Mar 15 nicklas 41 */
6777 17 Mar 15 nicklas 42 public class ToDerivedBioAssaySourceItemTransformerFactory 
6777 17 Mar 15 nicklas 43   extends AbstractSourceItemTransformerFactory
6777 17 Mar 15 nicklas 44 {
6777 17 Mar 15 nicklas 45
6777 17 Mar 15 nicklas 46   private static Item[] PARENT_TO_CHILD = 
6777 17 Mar 15 nicklas 47     { Item.BIOSOURCE, Item.SAMPLE, Item.EXTRACT, Item.PHYSICALBIOASSAY, Item.DERIVEDBIOASSAY };
6777 17 Mar 15 nicklas 48   
6777 17 Mar 15 nicklas 49   private static Item[] CHILD_TO_PARENT =
6777 17 Mar 15 nicklas 50     { Item.DERIVEDBIOASSAY, Item.RAWBIOASSAY };
6777 17 Mar 15 nicklas 51   
6777 17 Mar 15 nicklas 52   
6777 17 Mar 15 nicklas 53   public ToDerivedBioAssaySourceItemTransformerFactory() 
6777 17 Mar 15 nicklas 54   {
6777 17 Mar 15 nicklas 55     super(Item.DERIVEDBIOASSAY, PARENT_TO_CHILD, CHILD_TO_PARENT);
6777 17 Mar 15 nicklas 56   }
6777 17 Mar 15 nicklas 57     
6777 17 Mar 15 nicklas 58   @Override
6790 20 Mar 15 nicklas 59   public SourceItemTransformer create(final Item sourceItemType, final SourceItemTransform transform) 
6777 17 Mar 15 nicklas 60   {
6777 17 Mar 15 nicklas 61     List<SourceItemTransformer> chain = new ArrayList<SourceItemTransformer>();
6790 20 Mar 15 nicklas 62     Item stepBySource = null;
6792 23 Mar 15 nicklas 63     CollectExtracts collectedExtracts = null;
6777 17 Mar 15 nicklas 64     
6790 20 Mar 15 nicklas 65     if (transform == SourceItemTransform.PARENT_TO_CHILD)
6790 20 Mar 15 nicklas 66     {
6790 20 Mar 15 nicklas 67       // Transforming a list of parent items to child derived bioassays
6790 20 Mar 15 nicklas 68       // We do step-wise loading from BIOSOURCE -> SAMPLE -> EXTRACT -> PHYSICALBIOASSAY -> DERIVEDBIOASSAY
6790 20 Mar 15 nicklas 69       if (sourceItemType == Item.BIOSOURCE)
6790 20 Mar 15 nicklas 70       {
6790 20 Mar 15 nicklas 71         // Load child samples of the biosources
6790 20 Mar 15 nicklas 72         chain.add(new BioSourceToSampleTransformer());
6790 20 Mar 15 nicklas 73         stepBySource = Item.SAMPLE;
6790 20 Mar 15 nicklas 74       }
6790 20 Mar 15 nicklas 75       if (sourceItemType == Item.SAMPLE || stepBySource == Item.SAMPLE)
6790 20 Mar 15 nicklas 76       {
7772 17 Feb 20 nicklas 77         // Expand source selection to parents if the children push annotations upwards
7772 17 Feb 20 nicklas 78         if (sourceItemType == Item.SAMPLE) chain.add(new PushToParentsTransformer(sourceItemType));
6790 20 Mar 15 nicklas 79         // Load child samples including the original samples
6790 20 Mar 15 nicklas 80         chain.add(new SampleToChildSampleTransformer(true));
6790 20 Mar 15 nicklas 81         // Transform to child extracts
6790 20 Mar 15 nicklas 82         chain.add(new SampleToExtractTransformer());
6790 20 Mar 15 nicklas 83         stepBySource = Item.EXTRACT;
6790 20 Mar 15 nicklas 84       }
6790 20 Mar 15 nicklas 85       if (sourceItemType == Item.EXTRACT || stepBySource == Item.EXTRACT)
6790 20 Mar 15 nicklas 86       {
6801 25 Mar 15 nicklas 87         // Save collected extracts
6801 25 Mar 15 nicklas 88         collectedExtracts = new CollectExtracts();
6801 25 Mar 15 nicklas 89         if (sourceItemType == Item.EXTRACT)
6801 25 Mar 15 nicklas 90         {
6801 25 Mar 15 nicklas 91           // Collect parent extracts since those are also valid when joining child derived bioassays
6801 25 Mar 15 nicklas 92           chain.add(collectedExtracts.collectParentsOfSource(false));
7772 17 Feb 20 nicklas 93           // Expand source selection to parents if the children push annotations upwards
7772 17 Feb 20 nicklas 94           chain.add(new PushToParentsTransformer(sourceItemType));
6801 25 Mar 15 nicklas 95         }
6801 25 Mar 15 nicklas 96
6790 20 Mar 15 nicklas 97         // Load child extract and include the source extracts
6790 20 Mar 15 nicklas 98         chain.add(new ExtractToChildExtractTransformer(true));
6801 25 Mar 15 nicklas 99         
6801 25 Mar 15 nicklas 100         // Collect extracts that we pass while going down
6801 25 Mar 15 nicklas 101         chain.add(collectedExtracts.collectFromExtracts());
6801 25 Mar 15 nicklas 102         
6790 20 Mar 15 nicklas 103         // Load all related physical bioassays
6790 20 Mar 15 nicklas 104         chain.add(new ExtractToPhysicalBioAssayTransformer());
6792 23 Mar 15 nicklas 105         stepBySource = Item.PHYSICALBIOASSAY;
6790 20 Mar 15 nicklas 106       }
6790 20 Mar 15 nicklas 107       if (sourceItemType == Item.PHYSICALBIOASSAY || stepBySource == Item.PHYSICALBIOASSAY)
6790 20 Mar 15 nicklas 108       {
6790 20 Mar 15 nicklas 109         // Load child derived bioassays
6792 23 Mar 15 nicklas 110         // We stop here because the transformer always load all children, grandchildren, etc.
6792 23 Mar 15 nicklas 111         chain.add(new PhysicalBioAssayToDerivedBioAssayTransformer(collectedExtracts));
6801 25 Mar 15 nicklas 112         if (collectedExtracts != null)
6801 25 Mar 15 nicklas 113         {
6801 25 Mar 15 nicklas 114           // Merge derived bioassays that has direct links to collected extracts
6801 25 Mar 15 nicklas 115           chain.add(new CollectedExtractsToDerivedBioAssayTransformer(collectedExtracts));
6801 25 Mar 15 nicklas 116         }
6790 20 Mar 15 nicklas 117       }
6792 23 Mar 15 nicklas 118       if (sourceItemType == Item.DERIVEDBIOASSAY)
6792 23 Mar 15 nicklas 119       {
6792 23 Mar 15 nicklas 120         // Load child derived bioassays
6792 23 Mar 15 nicklas 121         chain.add(new DerivedBioAssayToChildDerivedBioAssayTransformer(false));
6792 23 Mar 15 nicklas 122       }
6790 20 Mar 15 nicklas 123       
6790 20 Mar 15 nicklas 124     }
6790 20 Mar 15 nicklas 125     else if (transform == SourceItemTransform.CHILD_TO_PARENT)
6790 20 Mar 15 nicklas 126     {
6791 23 Mar 15 nicklas 127       if (sourceItemType == Item.RAWBIOASSAY)
6791 23 Mar 15 nicklas 128       {
6791 23 Mar 15 nicklas 129         // Load parent raw bioassays
6791 23 Mar 15 nicklas 130         chain.add(new RawBioAssayToDerivedBioAssayTransformer());
6791 23 Mar 15 nicklas 131         stepBySource = Item.DERIVEDBIOASSAY;
6791 23 Mar 15 nicklas 132       }
7219 02 Nov 16 nicklas 133       if (sourceItemType == Item.DERIVEDBIOASSAY || stepBySource == Item.DERIVEDBIOASSAY)
6791 23 Mar 15 nicklas 134       {
6791 23 Mar 15 nicklas 135         // Load parent derived bioassays
6791 23 Mar 15 nicklas 136         chain.add(new DerivedBioAssayToParentDerivedBioAssayTransformer(sourceItemType != Item.DERIVEDBIOASSAY));
6791 23 Mar 15 nicklas 137       }
6790 20 Mar 15 nicklas 138     }
6777 17 Mar 15 nicklas 139     
6777 17 Mar 15 nicklas 140     return chain.size() == 0 ? null : new SourceItemTransformerChain(chain);
6777 17 Mar 15 nicklas 141   }
6777 17 Mar 15 nicklas 142
6777 17 Mar 15 nicklas 143 }