src/core/net/sf/basedb/util/overview/loader/ArrayBatchLoader.java

Code
Comments
Other
Rev Date Author Line
4740 05 Feb 09 nicklas 1 /**
4740 05 Feb 09 nicklas 2   $Id$
4740 05 Feb 09 nicklas 3
4740 05 Feb 09 nicklas 4   Copyright (C) 2008 Nicklas Nordborg
4740 05 Feb 09 nicklas 5
4740 05 Feb 09 nicklas 6   This file is part of BASE - BioArray Software Environment.
4740 05 Feb 09 nicklas 7   Available at http://base.thep.lu.se/
4740 05 Feb 09 nicklas 8
4740 05 Feb 09 nicklas 9   BASE is free software; you can redistribute it and/or
4740 05 Feb 09 nicklas 10   modify it under the terms of the GNU General Public License
4740 05 Feb 09 nicklas 11   as published by the Free Software Foundation; either version 3
4740 05 Feb 09 nicklas 12   of the License, or (at your option) any later version.
4740 05 Feb 09 nicklas 13
4740 05 Feb 09 nicklas 14   BASE is distributed in the hope that it will be useful,
4740 05 Feb 09 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
4740 05 Feb 09 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4740 05 Feb 09 nicklas 17   GNU General Public License for more details.
4740 05 Feb 09 nicklas 18
4740 05 Feb 09 nicklas 19   You should have received a copy of the GNU General Public License
4740 05 Feb 09 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
4740 05 Feb 09 nicklas 21 */
4740 05 Feb 09 nicklas 22 package net.sf.basedb.util.overview.loader;
4740 05 Feb 09 nicklas 23
4740 05 Feb 09 nicklas 24 import net.sf.basedb.core.ArrayBatch;
4740 05 Feb 09 nicklas 25 import net.sf.basedb.core.ArrayDesign;
4740 05 Feb 09 nicklas 26 import net.sf.basedb.core.ArraySlide;
4740 05 Feb 09 nicklas 27 import net.sf.basedb.core.DbControl;
4740 05 Feb 09 nicklas 28 import net.sf.basedb.core.Item;
4740 05 Feb 09 nicklas 29 import net.sf.basedb.core.ItemQuery;
4740 05 Feb 09 nicklas 30 import net.sf.basedb.core.ItemResultIterator;
4740 05 Feb 09 nicklas 31 import net.sf.basedb.core.PermissionDeniedException;
4740 05 Feb 09 nicklas 32 import net.sf.basedb.util.overview.OverviewContext;
4740 05 Feb 09 nicklas 33 import net.sf.basedb.util.overview.node.ChildNodeDirection;
4740 05 Feb 09 nicklas 34 import net.sf.basedb.util.overview.node.NameableNameGenerator;
4740 05 Feb 09 nicklas 35 import net.sf.basedb.util.overview.Node;
4740 05 Feb 09 nicklas 36 import net.sf.basedb.util.overview.node.NodeFactory;
4740 05 Feb 09 nicklas 37
4740 05 Feb 09 nicklas 38 /**
4740 05 Feb 09 nicklas 39   Node loader implementation for array batches. The forward-loading
4740 05 Feb 09 nicklas 40   direction goes from {@link ArrayDesign}:s -&gt; {@link ArrayBatch}:s -&gt; 
4740 05 Feb 09 nicklas 41   {@link ArraySlide}:s. The reverse-loading direction is the opposite 
4740 05 Feb 09 nicklas 42   direction.
4740 05 Feb 09 nicklas 43
4740 05 Feb 09 nicklas 44   @author Nicklas
4740 05 Feb 09 nicklas 45   @version 2.10
4740 05 Feb 09 nicklas 46   @base.modified $Date$
4740 05 Feb 09 nicklas 47 */
4740 05 Feb 09 nicklas 48 public class ArrayBatchLoader
4740 05 Feb 09 nicklas 49   extends BasicItemNodeLoader<ArrayBatch>
4740 05 Feb 09 nicklas 50 {
4740 05 Feb 09 nicklas 51
4740 05 Feb 09 nicklas 52   public ArrayBatchLoader()
4740 05 Feb 09 nicklas 53   {
4740 05 Feb 09 nicklas 54     super(Item.ARRAYBATCH, ALLOW_ROOT_NODE, 
4740 05 Feb 09 nicklas 55       new NameableNameGenerator<ArrayBatch>("batch", "Array batch"));
4740 05 Feb 09 nicklas 56   }
4740 05 Feb 09 nicklas 57   
4740 05 Feb 09 nicklas 58   /*
4740 05 Feb 09 nicklas 59     From the NodeLoader interface
4740 05 Feb 09 nicklas 60     ------------------------------
4740 05 Feb 09 nicklas 61   */
4740 05 Feb 09 nicklas 62   /**
4740 05 Feb 09 nicklas 63     Create forward-loading array batch nodes from a given array design node.
4740 05 Feb 09 nicklas 64     The returned node is a folder-type node containing item nodes for 
4740 05 Feb 09 nicklas 65     each batch that has been created from the array design.
4740 05 Feb 09 nicklas 66     @return The folder node for the array batches
4740 05 Feb 09 nicklas 67   */
4740 05 Feb 09 nicklas 68   @Override
4740 05 Feb 09 nicklas 69   public Node createForwardNode(DbControl dc, OverviewContext context, Node designNode)
4740 05 Feb 09 nicklas 70   {
4740 05 Feb 09 nicklas 71     NodeFactory<ArrayBatch> nf = getNodeFactory(dc, context);
4740 05 Feb 09 nicklas 72     Node folderNode = null;
4740 05 Feb 09 nicklas 73     ArrayDesign design = (ArrayDesign)designNode.getItem(dc);
4740 05 Feb 09 nicklas 74     ItemQuery<ArrayBatch> query = context.initQuery(design.getArrayBatches(), "name");
4740 05 Feb 09 nicklas 75     ItemResultIterator<ArrayBatch> it = query.iterate(dc);
4740 05 Feb 09 nicklas 76     while (it.hasNext())
4740 05 Feb 09 nicklas 77     {
4740 05 Feb 09 nicklas 78       ArrayBatch batch = it.next();
4740 05 Feb 09 nicklas 79       if (folderNode == null)
4740 05 Feb 09 nicklas 80       {
4740 05 Feb 09 nicklas 81         folderNode = new Node("batches", "Batches", designNode, ChildNodeDirection.FORWARD);
4740 05 Feb 09 nicklas 82       }
4740 05 Feb 09 nicklas 83       createItemNode(nf, batch, batch, false, folderNode, ChildNodeDirection.FORWARD);
4740 05 Feb 09 nicklas 84     }
4740 05 Feb 09 nicklas 85     postValidateFolder(nf, folderNode, designNode, false);
4740 05 Feb 09 nicklas 86     return folderNode;
4740 05 Feb 09 nicklas 87   }
4740 05 Feb 09 nicklas 88   
4740 05 Feb 09 nicklas 89   /**
4740 05 Feb 09 nicklas 90     Create a reverse-loading array batch node from an array slide node.
4740 05 Feb 09 nicklas 91     @return An array batch node, or null if the slide doesn't belong to a batch
4740 05 Feb 09 nicklas 92   */
4740 05 Feb 09 nicklas 93   @Override
4740 05 Feb 09 nicklas 94   public Node createReverseNode(DbControl dc, OverviewContext context, Node slideNode)
4740 05 Feb 09 nicklas 95   {
4740 05 Feb 09 nicklas 96     NodeFactory<ArrayBatch> nf = getNodeFactory(dc, context);
4740 05 Feb 09 nicklas 97     ArrayBatch batch = null;
4740 05 Feb 09 nicklas 98     boolean denied = false;
4740 05 Feb 09 nicklas 99     try
4740 05 Feb 09 nicklas 100     {
4740 05 Feb 09 nicklas 101       batch = ((ArraySlide)slideNode.getItem(dc)).getArrayBatch();
4740 05 Feb 09 nicklas 102     }
4740 05 Feb 09 nicklas 103     catch (PermissionDeniedException ex)
4740 05 Feb 09 nicklas 104     {
4740 05 Feb 09 nicklas 105       denied = true;
4740 05 Feb 09 nicklas 106     }
4740 05 Feb 09 nicklas 107     Node batchNode = createItemNode(nf, batch, batch, denied, 
4740 05 Feb 09 nicklas 108         slideNode, ChildNodeDirection.REVERSE);
4740 05 Feb 09 nicklas 109     return batchNode;
4740 05 Feb 09 nicklas 110   }
4740 05 Feb 09 nicklas 111   // --------------------------------
4740 05 Feb 09 nicklas 112   /*
4740 05 Feb 09 nicklas 113     From the AbstractNodeLoader class
4740 05 Feb 09 nicklas 114     ----------------------------------
4740 05 Feb 09 nicklas 115   */
4740 05 Feb 09 nicklas 116   /**
4740 05 Feb 09 nicklas 117     Loads property nodes of an array batch. 
4740 05 Feb 09 nicklas 118     <ul>
4740 05 Feb 09 nicklas 119     <li>Annotations: {@link AnnotationLoader#createPropertyNode(DbControl, OverviewContext, Node)}
4740 05 Feb 09 nicklas 120     <li>Protocol: {@link ProtocolLoader#createPropertyNode(DbControl, OverviewContext, Node)}
4740 05 Feb 09 nicklas 121     <li>Print robot: {@link HardwareLoader#createPropertyNode(DbControl, OverviewContext, Node)}
4740 05 Feb 09 nicklas 122     </ul>
4740 05 Feb 09 nicklas 123   */
4740 05 Feb 09 nicklas 124   @Override
4740 05 Feb 09 nicklas 125   protected void loadPropertyChildNodes(DbControl dc, OverviewContext context, Node batchNode)
4740 05 Feb 09 nicklas 126   {
4740 05 Feb 09 nicklas 127     getNodeLoader(context, Item.ANNOTATION).createPropertyNode(dc, context, batchNode);
4740 05 Feb 09 nicklas 128     getNodeLoader(context, Item.PROTOCOL).createPropertyNode(dc, context, batchNode);
4740 05 Feb 09 nicklas 129     getNodeLoader(context, Item.HARDWARE).createPropertyNode(dc, context, batchNode);
5500 18 Nov 10 nicklas 130     getNodeLoader(context, Item.ANYTOANY).createPropertyNode(dc, context, batchNode);
4740 05 Feb 09 nicklas 131   }
4740 05 Feb 09 nicklas 132
4740 05 Feb 09 nicklas 133   /**
4740 05 Feb 09 nicklas 134     Loads the array slide nodes that is related to the given batch node.
4740 05 Feb 09 nicklas 135     @see ArraySlideLoader#createForwardNode(DbControl, OverviewContext, Node)
4740 05 Feb 09 nicklas 136   */
4740 05 Feb 09 nicklas 137   @Override
4740 05 Feb 09 nicklas 138   protected void loadForwardChildNodes(DbControl dc, OverviewContext context, Node batchNode)
4740 05 Feb 09 nicklas 139   {
4740 05 Feb 09 nicklas 140     getNodeLoader(context, Item.ARRAYSLIDE).createForwardNode(dc, context, batchNode);
4740 05 Feb 09 nicklas 141   }
4740 05 Feb 09 nicklas 142   
4740 05 Feb 09 nicklas 143   /**
4740 05 Feb 09 nicklas 144     Loads the array design node that is the parent of this array batch. 
4740 05 Feb 09 nicklas 145     @see ArrayDesignLoader#createReverseNode(DbControl, OverviewContext, Node)
4740 05 Feb 09 nicklas 146   */
4740 05 Feb 09 nicklas 147   @Override
4740 05 Feb 09 nicklas 148   protected void loadReverseChildNodes(DbControl dc, OverviewContext context, Node batchNode)
4740 05 Feb 09 nicklas 149   {
4740 05 Feb 09 nicklas 150     getNodeLoader(context, Item.ARRAYDESIGN).createReverseNode(dc, context, batchNode);
4740 05 Feb 09 nicklas 151   }
4740 05 Feb 09 nicklas 152   // ---------------------------------------
4740 05 Feb 09 nicklas 153   
4740 05 Feb 09 nicklas 154 }