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

Code
Comments
Other
Rev Date Author Line
6775 17 Mar 15 nicklas 1 /**
6775 17 Mar 15 nicklas 2   $Id$
6775 17 Mar 15 nicklas 3
6775 17 Mar 15 nicklas 4   Copyright (C) 2015 Nicklas Nordborg
6775 17 Mar 15 nicklas 5
6775 17 Mar 15 nicklas 6   This file is part of BASE - BioArray Software Environment.
6775 17 Mar 15 nicklas 7   Available at http://base.thep.lu.se/
6775 17 Mar 15 nicklas 8
6775 17 Mar 15 nicklas 9   BASE is free software; you can redistribute it and/or
6775 17 Mar 15 nicklas 10   modify it under the terms of the GNU General Public License
6775 17 Mar 15 nicklas 11   as published by the Free Software Foundation; either version 3
6775 17 Mar 15 nicklas 12   of the License, or (at your option) any later version.
6775 17 Mar 15 nicklas 13
6775 17 Mar 15 nicklas 14   BASE is distributed in the hope that it will be useful,
6775 17 Mar 15 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
6775 17 Mar 15 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6775 17 Mar 15 nicklas 17   GNU General Public License for more details.
6775 17 Mar 15 nicklas 18
6775 17 Mar 15 nicklas 19   You should have received a copy of the GNU General Public License
6775 17 Mar 15 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6775 17 Mar 15 nicklas 21 */
6775 17 Mar 15 nicklas 22 package net.sf.basedb.util.listable;
6775 17 Mar 15 nicklas 23
6775 17 Mar 15 nicklas 24 import java.util.ArrayList;
6775 17 Mar 15 nicklas 25 import java.util.List;
6775 17 Mar 15 nicklas 26
6775 17 Mar 15 nicklas 27 import net.sf.basedb.core.Item;
6775 17 Mar 15 nicklas 28 import net.sf.basedb.core.SyncFilter.SourceItemTransform;
6775 17 Mar 15 nicklas 29
6775 17 Mar 15 nicklas 30 /**
6775 17 Mar 15 nicklas 31   Transformer factory implementation for transforming to biosources. The current
6775 17 Mar 15 nicklas 32   implementation support transforming from:
6775 17 Mar 15 nicklas 33   
6775 17 Mar 15 nicklas 34   <ul>
6775 17 Mar 15 nicklas 35   <li>{@link SourceItemTransform#PARENT_TO_CHILD}: None
6775 17 Mar 15 nicklas 36   <li>{@link SourceItemTransform#CHILD_TO_PARENT}: SAMPLE, EXTRACT, PHYSICALBIOASSAY, DERIVEDBIOASSAY, RAWBIOASSAY
6775 17 Mar 15 nicklas 37   </ul>
6775 17 Mar 15 nicklas 38
6775 17 Mar 15 nicklas 39   @author Nicklas
6775 17 Mar 15 nicklas 40   @since 3.5
6775 17 Mar 15 nicklas 41 */
6775 17 Mar 15 nicklas 42 public class ToBioSourceSourceItemTransformerFactory 
6775 17 Mar 15 nicklas 43   extends AbstractSourceItemTransformerFactory
6775 17 Mar 15 nicklas 44 {
6775 17 Mar 15 nicklas 45
6775 17 Mar 15 nicklas 46   private static Item[] PARENT_TO_CHILD = {};
6775 17 Mar 15 nicklas 47   
6775 17 Mar 15 nicklas 48   private static Item[] CHILD_TO_PARENT =
6775 17 Mar 15 nicklas 49     { Item.SAMPLE, Item.EXTRACT, Item.PHYSICALBIOASSAY, Item.DERIVEDBIOASSAY, Item.RAWBIOASSAY };
6775 17 Mar 15 nicklas 50   
6775 17 Mar 15 nicklas 51   
6775 17 Mar 15 nicklas 52   public ToBioSourceSourceItemTransformerFactory() 
6775 17 Mar 15 nicklas 53   {
6775 17 Mar 15 nicklas 54     super(Item.BIOSOURCE, PARENT_TO_CHILD, CHILD_TO_PARENT);
6775 17 Mar 15 nicklas 55   }
6775 17 Mar 15 nicklas 56   
6775 17 Mar 15 nicklas 57   
6775 17 Mar 15 nicklas 58   @Override
6790 20 Mar 15 nicklas 59   public SourceItemTransformer create(final Item sourceItemType, final SourceItemTransform transform) 
6775 17 Mar 15 nicklas 60   {
6775 17 Mar 15 nicklas 61     List<SourceItemTransformer> chain = new ArrayList<SourceItemTransformer>();
6790 20 Mar 15 nicklas 62     Item stepBySource = null;
6775 17 Mar 15 nicklas 63     
6775 17 Mar 15 nicklas 64     if (transform == SourceItemTransform.CHILD_TO_PARENT)
6775 17 Mar 15 nicklas 65     {
6775 17 Mar 15 nicklas 66       // Transforming a list of child items to parent biosources
6791 23 Mar 15 nicklas 67       // We do step-wise loading from RAWBIOASSAY -> DERIVEDBIOASSAY -> PHYSICALBIOASSAY -> EXTRACT -> SAMPLE -> BIOSOURCE
6791 23 Mar 15 nicklas 68
6791 23 Mar 15 nicklas 69       // Use utility function to add transformation up to the extract level
8094 04 Nov 22 nicklas 70       ToExtractSourceItemTransformerFactory.childToParentChain(chain, sourceItemType, Item.BIOSOURCE, false);
6791 23 Mar 15 nicklas 71       if (chain.size() > 0) 
6775 17 Mar 15 nicklas 72       {
6791 23 Mar 15 nicklas 73         // We got some extracts, load parent samples
6775 17 Mar 15 nicklas 74         chain.add(new ExtractToSampleTransformer());
6790 20 Mar 15 nicklas 75         stepBySource = Item.SAMPLE;
6790 20 Mar 15 nicklas 76       }
6791 23 Mar 15 nicklas 77
6790 20 Mar 15 nicklas 78       if (sourceItemType == Item.SAMPLE || stepBySource == Item.SAMPLE)
6790 20 Mar 15 nicklas 79       {
6790 20 Mar 15 nicklas 80         // Load parent samples including source samples
6775 17 Mar 15 nicklas 81         chain.add(new SampleToParentSampleTransformer(true));
6790 20 Mar 15 nicklas 82         // Load all parent biosources
6775 17 Mar 15 nicklas 83         chain.add(new SampleToBioSourceTransformer());
6775 17 Mar 15 nicklas 84       }
6775 17 Mar 15 nicklas 85
6775 17 Mar 15 nicklas 86     }
6775 17 Mar 15 nicklas 87
6775 17 Mar 15 nicklas 88     return chain.size() == 0 ? null : new SourceItemTransformerChain(chain);
6775 17 Mar 15 nicklas 89   }
6775 17 Mar 15 nicklas 90
6775 17 Mar 15 nicklas 91 }