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

Code
Comments
Other
Rev Date Author Line
6770 13 Mar 15 nicklas 1 /**
6770 13 Mar 15 nicklas 2   $Id$
6770 13 Mar 15 nicklas 3
6770 13 Mar 15 nicklas 4   Copyright (C) 2015 Nicklas Nordborg
6770 13 Mar 15 nicklas 5
6770 13 Mar 15 nicklas 6   This file is part of BASE - BioArray Software Environment.
6770 13 Mar 15 nicklas 7   Available at http://base.thep.lu.se/
6770 13 Mar 15 nicklas 8
6770 13 Mar 15 nicklas 9   BASE is free software; you can redistribute it and/or
6770 13 Mar 15 nicklas 10   modify it under the terms of the GNU General Public License
6770 13 Mar 15 nicklas 11   as published by the Free Software Foundation; either version 3
6770 13 Mar 15 nicklas 12   of the License, or (at your option) any later version.
6770 13 Mar 15 nicklas 13
6770 13 Mar 15 nicklas 14   BASE is distributed in the hope that it will be useful,
6770 13 Mar 15 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
6770 13 Mar 15 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6770 13 Mar 15 nicklas 17   GNU General Public License for more details.
6770 13 Mar 15 nicklas 18
6770 13 Mar 15 nicklas 19   You should have received a copy of the GNU General Public License
6770 13 Mar 15 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6770 13 Mar 15 nicklas 21 */
6770 13 Mar 15 nicklas 22 package net.sf.basedb.util.listable;
6770 13 Mar 15 nicklas 23
6770 13 Mar 15 nicklas 24 import java.util.Arrays;
6770 13 Mar 15 nicklas 25 import java.util.Collections;
6770 13 Mar 15 nicklas 26 import java.util.List;
6770 13 Mar 15 nicklas 27
6770 13 Mar 15 nicklas 28 import net.sf.basedb.core.Item;
8094 04 Nov 22 nicklas 29 import net.sf.basedb.core.ItemSubtype;
6770 13 Mar 15 nicklas 30 import net.sf.basedb.core.Listable;
6770 13 Mar 15 nicklas 31 import net.sf.basedb.core.SyncFilter.SourceItemTransform;
6770 13 Mar 15 nicklas 32
6770 13 Mar 15 nicklas 33 /**
6770 13 Mar 15 nicklas 34   Utility class for working with {@link Listable} items.
6770 13 Mar 15 nicklas 35   @author nicklas
6770 13 Mar 15 nicklas 36   @since 3.5
6770 13 Mar 15 nicklas 37 */
6770 13 Mar 15 nicklas 38 public class ListableUtil 
6770 13 Mar 15 nicklas 39 {
6770 13 Mar 15 nicklas 40
6770 13 Mar 15 nicklas 41
6770 13 Mar 15 nicklas 42   /**
6770 13 Mar 15 nicklas 43     Get all item types that can have the specified relation to the 
6770 13 Mar 15 nicklas 44     with the given item type. Depending on the transform parameter
6770 13 Mar 15 nicklas 45     this return either the parent or child items or the item itself.
6770 13 Mar 15 nicklas 46   */
6770 13 Mar 15 nicklas 47   public static List<Item> getListableItems(Item item, SourceItemTransform transform)
6770 13 Mar 15 nicklas 48   {
6777 17 Mar 15 nicklas 49     List<Item> items = null;
6777 17 Mar 15 nicklas 50     if (transform != SourceItemTransform.NONE)
6770 13 Mar 15 nicklas 51     {
6777 17 Mar 15 nicklas 52       SourceItemTransformerFactory factory = getTransformerFactory(item);
6777 17 Mar 15 nicklas 53       if (factory != null) items = factory.getSupportedSourceItems(transform);
6770 13 Mar 15 nicklas 54     }
6770 13 Mar 15 nicklas 55     else if (Listable.class.isAssignableFrom(item.getItemClass()))
6770 13 Mar 15 nicklas 56     {
6770 13 Mar 15 nicklas 57       items = Arrays.asList(item);
6770 13 Mar 15 nicklas 58     }
6777 17 Mar 15 nicklas 59     if (items == null) items = Collections.emptyList();
6770 13 Mar 15 nicklas 60     return items;
6770 13 Mar 15 nicklas 61   }
6770 13 Mar 15 nicklas 62   
6774 17 Mar 15 nicklas 63   /**
6774 17 Mar 15 nicklas 64     Create a source item transformer factory that can transform items to the given
6774 17 Mar 15 nicklas 65     target item type. If no transformer factory exists, null is returned.
6774 17 Mar 15 nicklas 66   */
6774 17 Mar 15 nicklas 67   public static SourceItemTransformerFactory getTransformerFactory(Item targetItemType)
6774 17 Mar 15 nicklas 68   {
8094 04 Nov 22 nicklas 69     return getTransformerFactory(targetItemType, false);
8094 04 Nov 22 nicklas 70   }
8094 04 Nov 22 nicklas 71   
8094 04 Nov 22 nicklas 72   /**
8094 04 Nov 22 nicklas 73     Create a source item transformer factory that can transform items to the given
8094 04 Nov 22 nicklas 74     target item type. If no transformer factory exists, null is returned.
8094 04 Nov 22 nicklas 75     The 'includeChildrenThatPushToParent' parameter can be used for transforms
8094 04 Nov 22 nicklas 76     that go from child to parent items, when the target is a SAMPLE or EXTRACT.
8094 04 Nov 22 nicklas 77     When this flag is set, transformer will also include child items that have
8094 04 Nov 22 nicklas 78     a subtype that have the {@link ItemSubtype#getPushAnnotations()} flag enabled
8094 04 Nov 22 nicklas 79     in the final result.
8094 04 Nov 22 nicklas 80     
8094 04 Nov 22 nicklas 81     @since 3.19.5
8094 04 Nov 22 nicklas 82   */
8094 04 Nov 22 nicklas 83   public static SourceItemTransformerFactory getTransformerFactory(Item targetItemType, boolean includeChildrenThatPushToParent)
8094 04 Nov 22 nicklas 84   {
6774 17 Mar 15 nicklas 85     SourceItemTransformerFactory factory = null;
6775 17 Mar 15 nicklas 86     if (targetItemType == Item.BIOSOURCE)
6774 17 Mar 15 nicklas 87     {
6775 17 Mar 15 nicklas 88       factory = new ToBioSourceSourceItemTransformerFactory();
6775 17 Mar 15 nicklas 89     }
6775 17 Mar 15 nicklas 90     else if (targetItemType == Item.SAMPLE)
6775 17 Mar 15 nicklas 91     {
8094 04 Nov 22 nicklas 92       factory = new ToSampleSourceItemTransformerFactory(includeChildrenThatPushToParent);
6774 17 Mar 15 nicklas 93     }
6787 19 Mar 15 nicklas 94     else if (targetItemType == Item.EXTRACT)
6787 19 Mar 15 nicklas 95     {
8094 04 Nov 22 nicklas 96       factory = new ToExtractSourceItemTransformerFactory(includeChildrenThatPushToParent);
6787 19 Mar 15 nicklas 97     }
6787 19 Mar 15 nicklas 98     else if (targetItemType == Item.PHYSICALBIOASSAY)
6787 19 Mar 15 nicklas 99     {
6787 19 Mar 15 nicklas 100       factory = new ToPhysicalBioAssaySourceItemTransformerFactory();
6787 19 Mar 15 nicklas 101     }
6787 19 Mar 15 nicklas 102     else if (targetItemType == Item.DERIVEDBIOASSAY)
6787 19 Mar 15 nicklas 103     {
6787 19 Mar 15 nicklas 104       factory = new ToDerivedBioAssaySourceItemTransformerFactory();
6787 19 Mar 15 nicklas 105     }
6787 19 Mar 15 nicklas 106     else if (targetItemType == Item.RAWBIOASSAY)
6787 19 Mar 15 nicklas 107     {
6787 19 Mar 15 nicklas 108       factory = new ToRawBioAssaySourceItemTransformerFactory();
6787 19 Mar 15 nicklas 109     }
6774 17 Mar 15 nicklas 110     return factory;
6774 17 Mar 15 nicklas 111   }
6770 13 Mar 15 nicklas 112 }