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

Code
Comments
Other
Rev Date Author Line
5500 18 Nov 10 nicklas 1 /**
5500 18 Nov 10 nicklas 2   $Id$
5500 18 Nov 10 nicklas 3
5500 18 Nov 10 nicklas 4   Copyright (C) 2010 Nicklas Nordborg
5500 18 Nov 10 nicklas 5
5500 18 Nov 10 nicklas 6   This file is part of BASE - BioArray Software Environment.
5500 18 Nov 10 nicklas 7   Available at http://base.thep.lu.se/
5500 18 Nov 10 nicklas 8
5500 18 Nov 10 nicklas 9   BASE is free software; you can redistribute it and/or
5500 18 Nov 10 nicklas 10   modify it under the terms of the GNU General Public License
5500 18 Nov 10 nicklas 11   as published by the Free Software Foundation; either version 3
5500 18 Nov 10 nicklas 12   of the License, or (at your option) any later version.
5500 18 Nov 10 nicklas 13
5500 18 Nov 10 nicklas 14   BASE is distributed in the hope that it will be useful,
5500 18 Nov 10 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5500 18 Nov 10 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5500 18 Nov 10 nicklas 17   GNU General Public License for more details.
5500 18 Nov 10 nicklas 18
5500 18 Nov 10 nicklas 19   You should have received a copy of the GNU General Public License
5500 18 Nov 10 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5500 18 Nov 10 nicklas 21 */
5500 18 Nov 10 nicklas 22 package net.sf.basedb.util.overview.loader;
5500 18 Nov 10 nicklas 23
5500 18 Nov 10 nicklas 24
7859 20 Oct 20 nicklas 25 import net.sf.basedb.core.Annotatable;
5500 18 Nov 10 nicklas 26 import net.sf.basedb.core.AnyToAny;
5500 18 Nov 10 nicklas 27 import net.sf.basedb.core.BasicItem;
5500 18 Nov 10 nicklas 28 import net.sf.basedb.core.DbControl;
5500 18 Nov 10 nicklas 29 import net.sf.basedb.core.Item;
5500 18 Nov 10 nicklas 30 import net.sf.basedb.core.ItemQuery;
5500 18 Nov 10 nicklas 31 import net.sf.basedb.core.ItemResultIterator;
6959 01 Oct 15 nicklas 32 import net.sf.basedb.core.RootRawBioAssay;
5500 18 Nov 10 nicklas 33 import net.sf.basedb.util.overview.OverviewContext;
5500 18 Nov 10 nicklas 34 import net.sf.basedb.util.overview.node.AnyToAnyNameGenerator;
5500 18 Nov 10 nicklas 35 import net.sf.basedb.util.overview.node.ChildNodeDirection;
5500 18 Nov 10 nicklas 36 import net.sf.basedb.util.overview.Node;
5500 18 Nov 10 nicklas 37 import net.sf.basedb.util.overview.node.NodeFactory;
5500 18 Nov 10 nicklas 38
5500 18 Nov 10 nicklas 39 /**
5500 18 Nov 10 nicklas 40   Node loader implementation for any-to-any links. The links are
5500 18 Nov 10 nicklas 41   loaded as an end-point folder node with one child entry
5500 18 Nov 10 nicklas 42   for each link. It can never be root node or a forward/reverse-loading 
5500 18 Nov 10 nicklas 43   node.
5500 18 Nov 10 nicklas 44
5500 18 Nov 10 nicklas 45   @author Nicklas
5500 18 Nov 10 nicklas 46   @since 2.17
5500 18 Nov 10 nicklas 47   @base.modified $Date$
5500 18 Nov 10 nicklas 48 */
5500 18 Nov 10 nicklas 49 public class AnyToAnyLoader
5500 18 Nov 10 nicklas 50   extends BasicItemNodeLoader<AnyToAny>
5500 18 Nov 10 nicklas 51 {
5500 18 Nov 10 nicklas 52
5500 18 Nov 10 nicklas 53   public AnyToAnyLoader()
5500 18 Nov 10 nicklas 54   {
5500 18 Nov 10 nicklas 55     super(Item.ANYTOANY, DENY_ROOT_NODE, new AnyToAnyNameGenerator());
5500 18 Nov 10 nicklas 56   }
5500 18 Nov 10 nicklas 57
5500 18 Nov 10 nicklas 58   /*
5500 18 Nov 10 nicklas 59     From the NodeLoader interface
5500 18 Nov 10 nicklas 60     ------------------------------
5500 18 Nov 10 nicklas 61   */
5500 18 Nov 10 nicklas 62   @Override
5500 18 Nov 10 nicklas 63   public Node createPropertyNode(DbControl dc, OverviewContext context, Node parentNode)
5500 18 Nov 10 nicklas 64   {
5500 18 Nov 10 nicklas 65     
5500 18 Nov 10 nicklas 66     NodeFactory<AnyToAny> nf = getNodeFactory(dc, context);
5500 18 Nov 10 nicklas 67     Node folderNode = null;
5500 18 Nov 10 nicklas 68     
5500 18 Nov 10 nicklas 69     // Load all any-to-any links for the give item
6870 16 Apr 15 nicklas 70     BasicItem parent = parentNode.getItem(dc);
6959 01 Oct 15 nicklas 71     if (parent instanceof RootRawBioAssay)
6959 01 Oct 15 nicklas 72     {
6959 01 Oct 15 nicklas 73       // The parent may be a root raw bioasay if the overview starts at the
6959 01 Oct 15 nicklas 74       // experiment level
6959 01 Oct 15 nicklas 75       parent = ((RootRawBioAssay)parent).getRawBioAssay();
6959 01 Oct 15 nicklas 76     }
6959 01 Oct 15 nicklas 77
5500 18 Nov 10 nicklas 78     ItemQuery<AnyToAny> query = context.initQuery(AnyToAny.getLinksFrom(parent), "name");
5500 18 Nov 10 nicklas 79
5500 18 Nov 10 nicklas 80     ItemResultIterator<AnyToAny> it = query.iterate(dc);
5500 18 Nov 10 nicklas 81     while (it.hasNext())
5500 18 Nov 10 nicklas 82     {
5500 18 Nov 10 nicklas 83       if (folderNode == null)
5500 18 Nov 10 nicklas 84       {
5500 18 Nov 10 nicklas 85         folderNode = new Node("any", "Other related items", parentNode, ChildNodeDirection.NONE);
5500 18 Nov 10 nicklas 86       }
5500 18 Nov 10 nicklas 87       AnyToAny any = it.next();
7859 20 Oct 20 nicklas 88       boolean annotatableTarget = Annotatable.class.isAssignableFrom(any.getToType().getItemClass());
7859 20 Oct 20 nicklas 89       createItemNode(nf, any, null, false, folderNode, annotatableTarget ? ChildNodeDirection.PROPERTY : ChildNodeDirection.NONE);
5500 18 Nov 10 nicklas 90     }
5500 18 Nov 10 nicklas 91     postValidateFolder(nf, folderNode, parentNode, false);
5500 18 Nov 10 nicklas 92     return folderNode;
5500 18 Nov 10 nicklas 93   }
5500 18 Nov 10 nicklas 94   // --------------------------------
7859 20 Oct 20 nicklas 95   /**
7859 20 Oct 20 nicklas 96     Loads property nodes of an any-to-any node. 
7859 20 Oct 20 nicklas 97     <ul>
7859 20 Oct 20 nicklas 98     <li>Annotations: {@link AnnotationLoader#createPropertyNode(DbControl, OverviewContext, Node)}
7859 20 Oct 20 nicklas 99     </ul>
7859 20 Oct 20 nicklas 100     @since 3.17
7859 20 Oct 20 nicklas 101   */
7859 20 Oct 20 nicklas 102   @Override
7859 20 Oct 20 nicklas 103   protected void loadPropertyChildNodes(DbControl dc, OverviewContext context, Node anyNode)
7859 20 Oct 20 nicklas 104   {
7859 20 Oct 20 nicklas 105     getNodeLoader(context, Item.ANNOTATION).createPropertyNode(dc, context, anyNode);
7859 20 Oct 20 nicklas 106   }
7859 20 Oct 20 nicklas 107   
5500 18 Nov 10 nicklas 108 }