doc/src/docbook/examples/AChildItem.java.txt

Code
Comments
Other
Rev Date Author Line
5675 28 Jun 11 nicklas 1 /*
5675 28 Jun 11 nicklas 2   $Id $
5675 28 Jun 11 nicklas 3
5675 28 Jun 11 nicklas 4   Copyright (C) 2011 Your name
5675 28 Jun 11 nicklas 5
5675 28 Jun 11 nicklas 6   This file is part of BASE - BioArray Software Environment.
5675 28 Jun 11 nicklas 7   Available at http://base.thep.lu.se/
5675 28 Jun 11 nicklas 8
5675 28 Jun 11 nicklas 9   BASE is free software; you can redistribute it and/or
5675 28 Jun 11 nicklas 10   modify it under the terms of the GNU General Public License
5675 28 Jun 11 nicklas 11   as published by the Free Software Foundation; either version 3
5675 28 Jun 11 nicklas 12   of the License, or (at your option) any later version.
5675 28 Jun 11 nicklas 13
5675 28 Jun 11 nicklas 14   BASE is distributed in the hope that it will be useful,
5675 28 Jun 11 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5675 28 Jun 11 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5675 28 Jun 11 nicklas 17   GNU General Public License for more details.
5675 28 Jun 11 nicklas 18
5675 28 Jun 11 nicklas 19   You should have received a copy of the GNU General Public License
5675 28 Jun 11 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5675 28 Jun 11 nicklas 21 */
5675 28 Jun 11 nicklas 22 package net.sf.basedb.core;
5675 28 Jun 11 nicklas 23 import net.sf.basedb.core.data.ChildData;
5675 28 Jun 11 nicklas 24 import net.sf.basedb.core.data.SharedData;
5675 28 Jun 11 nicklas 25 /**
5675 28 Jun 11 nicklas 26   This class is used to represent a child item to {@link AnyItem} in BASE.
5675 28 Jun 11 nicklas 27
5675 28 Jun 11 nicklas 28   @author Your name
5675 28 Jun 11 nicklas 29   @since 3.0
5675 28 Jun 11 nicklas 30   @see ChildData
5675 28 Jun 11 nicklas 31   @base.modified $Date$
5675 28 Jun 11 nicklas 32 */
5675 28 Jun 11 nicklas 33 public class AChildItem
5675 28 Jun 11 nicklas 34   extends ChildItem<AnyChildData>
5675 28 Jun 11 nicklas 35   implements Nameable
5675 28 Jun 11 nicklas 36 {
5675 28 Jun 11 nicklas 37
5675 28 Jun 11 nicklas 38   private static final QueryRuntimeFilter RUNTIME_FILTER = 
5675 28 Jun 11 nicklas 39     new QueryRuntimeFilterFactory.ChildFilter(Item.CHILDITEM, Item.ANYITEM);
5675 28 Jun 11 nicklas 40
5675 28 Jun 11 nicklas 41   /**
5675 28 Jun 11 nicklas 42     Create a new <code>ChildItem</code> item.
5675 28 Jun 11 nicklas 43
5675 28 Jun 11 nicklas 44     @param dc The <code>DbControl</code> which will be used for
5675 28 Jun 11 nicklas 45       permission checking and database access
5675 28 Jun 11 nicklas 46     @param parent The <code>AnyItem</code> which is the parent
5675 28 Jun 11 nicklas 47     @return The new <code>ChildItem</code> item
5675 28 Jun 11 nicklas 48     @throws BaseException If there is an error
5675 28 Jun 11 nicklas 49     @see AnyItem#newChildItem()
5675 28 Jun 11 nicklas 50   */
5675 28 Jun 11 nicklas 51   public static AChildItem getNew(DbControl dc, AnyItem parent)
5675 28 Jun 11 nicklas 52     throws BaseException
5675 28 Jun 11 nicklas 53   {
5675 28 Jun 11 nicklas 54     AChildItem c = dc.newItem(AChildItem.class);
5675 28 Jun 11 nicklas 55     c.setParent(parent);
5675 28 Jun 11 nicklas 56     c.setName("New child item");
5675 28 Jun 11 nicklas 57     return c;
5675 28 Jun 11 nicklas 58   }
5675 28 Jun 11 nicklas 59
5675 28 Jun 11 nicklas 60   /**
5675 28 Jun 11 nicklas 61     Get a <code>ChildItem</code> item when you know the id.
5675 28 Jun 11 nicklas 62
5675 28 Jun 11 nicklas 63     @param dc The <code>DbControl</code> which will be used for
5675 28 Jun 11 nicklas 64       permission checking and database access.
5675 28 Jun 11 nicklas 65     @param id The id of the item to load
5675 28 Jun 11 nicklas 66     @return The <code>ChildItem</code> item
5675 28 Jun 11 nicklas 67     @throws ItemNotFoundException If an item with the specified 
5675 28 Jun 11 nicklas 68       id is not found
5675 28 Jun 11 nicklas 69     @throws PermissionDeniedException If the logged in user doesn't 
5675 28 Jun 11 nicklas 70       have {@link Permission#READ} permission to the item
5675 28 Jun 11 nicklas 71     @throws BaseException If there is another error
5675 28 Jun 11 nicklas 72   */
5675 28 Jun 11 nicklas 73   public static AChildItem getById(DbControl dc, int id)
5675 28 Jun 11 nicklas 74     throws ItemNotFoundException, PermissionDeniedException, BaseException
5675 28 Jun 11 nicklas 75   {
5675 28 Jun 11 nicklas 76     AChildItem c = dc.loadItem(AChildItem.class, id);
5675 28 Jun 11 nicklas 77     if (c == null) throw new ItemNotFoundException("AChildItem[id="+id+"]");
5675 28 Jun 11 nicklas 78     return c;
5675 28 Jun 11 nicklas 79   }
5675 28 Jun 11 nicklas 80
5675 28 Jun 11 nicklas 81   /**
5675 28 Jun 11 nicklas 82     Get a query configured to retrieve children for the specified parent.
5675 28 Jun 11 nicklas 83     
5675 28 Jun 11 nicklas 84     @param parent The parent to retreive child items for, null is allowed if
5675 28 Jun 11 nicklas 85       the logged in user has generic READ permission for AnyItem:s in which case
5675 28 Jun 11 nicklas 86       all ChildItems will be returned
5675 28 Jun 11 nicklas 87     @return An {@link ItemQuery} object
5675 28 Jun 11 nicklas 88     @see AnyItem#getChildItems()
5675 28 Jun 11 nicklas 89   */
5675 28 Jun 11 nicklas 90   public static ItemQuery<AChildItem> getQuery(AnyItem parent)
5675 28 Jun 11 nicklas 91   {
5675 28 Jun 11 nicklas 92     Query<AChildItem> query = null;
5675 28 Jun 11 nicklas 93     if (parent != null)
5675 28 Jun 11 nicklas 94     {
5675 28 Jun 11 nicklas 95       query = new ItemQuery<AChildItem>(AChildItem.class, null);
5675 28 Jun 11 nicklas 96       query.restrictPermanent(
5675 28 Jun 11 nicklas 97         Restrictions.eq(
5675 28 Jun 11 nicklas 98           Hql.property("anyItem"), 
5675 28 Jun 11 nicklas 99           Hql.entity(parent)
5675 28 Jun 11 nicklas 100         )
5675 28 Jun 11 nicklas 101       );
5675 28 Jun 11 nicklas 102     }
5675 28 Jun 11 nicklas 103     else
5675 28 Jun 11 nicklas 104     {
5675 28 Jun 11 nicklas 105       query = new ItemQuery<AChildItem>(AChildItem.class, RUNTIME_FILTER);
5675 28 Jun 11 nicklas 106     }
5675 28 Jun 11 nicklas 107     return query;
5675 28 Jun 11 nicklas 108   }
5675 28 Jun 11 nicklas 109
5675 28 Jun 11 nicklas 110   // Constructor
5675 28 Jun 11 nicklas 111   AChildItem(ChildData childData)
5675 28 Jun 11 nicklas 112   {
5675 28 Jun 11 nicklas 113     super(childData);
5675 28 Jun 11 nicklas 114   }
5675 28 Jun 11 nicklas 115
5675 28 Jun 11 nicklas 116   /*
5675 28 Jun 11 nicklas 117     From the Nameable interface
5675 28 Jun 11 nicklas 118     -------------------------------------------
5675 28 Jun 11 nicklas 119   */
5675 28 Jun 11 nicklas 120   public String getName()
5675 28 Jun 11 nicklas 121   {
5675 28 Jun 11 nicklas 122     return getData().getName();
5675 28 Jun 11 nicklas 123   }
5675 28 Jun 11 nicklas 124   public void setName(String name)
5675 28 Jun 11 nicklas 125     throws PermissionDeniedException, InvalidDataException
5675 28 Jun 11 nicklas 126   {
5675 28 Jun 11 nicklas 127     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 128     NameableUtil.setName(getData(), name);
5675 28 Jun 11 nicklas 129   }
5675 28 Jun 11 nicklas 130   public String getDescription()
5675 28 Jun 11 nicklas 131   {
5675 28 Jun 11 nicklas 132     return getData().getDescription();
5675 28 Jun 11 nicklas 133   }
5675 28 Jun 11 nicklas 134   public void setDescription(String description)
5675 28 Jun 11 nicklas 135     throws PermissionDeniedException, InvalidDataException
5675 28 Jun 11 nicklas 136   {
5675 28 Jun 11 nicklas 137     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 138     NameableUtil.setDescription(getData(), description);
5675 28 Jun 11 nicklas 139   }
5675 28 Jun 11 nicklas 140   // -------------------------------------------
5675 28 Jun 11 nicklas 141   /*
5675 28 Jun 11 nicklas 142     From the BasicItem class
5675 28 Jun 11 nicklas 143     -------------------------------------------
5675 28 Jun 11 nicklas 144   */
5675 28 Jun 11 nicklas 145   /**
5675 28 Jun 11 nicklas 146     Always return FALSE.
5675 28 Jun 11 nicklas 147     It is very seldom a child item is referenced by some other item than
5675 28 Jun 11 nicklas 148     the parent item.
5675 28 Jun 11 nicklas 149   */
5675 28 Jun 11 nicklas 150   public boolean isUsed()
5675 28 Jun 11 nicklas 151     throws BaseException
5675 28 Jun 11 nicklas 152   {
5675 28 Jun 11 nicklas 153     return false;
5675 28 Jun 11 nicklas 154   }
5675 28 Jun 11 nicklas 155   // -------------------------------------------
5675 28 Jun 11 nicklas 156   /*
5675 28 Jun 11 nicklas 157     From the ChildItem class
5675 28 Jun 11 nicklas 158     -------------------------------------------
5675 28 Jun 11 nicklas 159   */
5675 28 Jun 11 nicklas 160   SharedData getSharedParent()
5675 28 Jun 11 nicklas 161   {
5675 28 Jun 11 nicklas 162     return getData().getParent();
5675 28 Jun 11 nicklas 163   }
5675 28 Jun 11 nicklas 164   // -------------------------------------------
5675 28 Jun 11 nicklas 165
5675 28 Jun 11 nicklas 166   /**
5675 28 Jun 11 nicklas 167     Get the parent AnyItem this child item belongs to.
5675 28 Jun 11 nicklas 168     @return The <code>AnyItem</code> item
5675 28 Jun 11 nicklas 169     @throws PermissionDeniedException If the logged in user doesn't have 
5675 28 Jun 11 nicklas 170       {@link Permission#READ} permission
5675 28 Jun 11 nicklas 171     @throws BaseException If there is another error
5675 28 Jun 11 nicklas 172   */
5675 28 Jun 11 nicklas 173   public AnyItem getParent()
5675 28 Jun 11 nicklas 174     throws PermissionDeniedException, BaseException
5675 28 Jun 11 nicklas 175   {
5675 28 Jun 11 nicklas 176     return getDbControl().getItem(AnyItem.class, getData().getParent());
5675 28 Jun 11 nicklas 177   }
5675 28 Jun 11 nicklas 178   /**
5675 28 Jun 11 nicklas 179     Set the parent AnyItem this child item belongs to. Can only be set 
5675 28 Jun 11 nicklas 180     on a new item.
5675 28 Jun 11 nicklas 181     @throws InvalidDataException If the parent is null
5675 28 Jun 11 nicklas 182   */
5675 28 Jun 11 nicklas 183   void setParent(AnyItem parent)
5675 28 Jun 11 nicklas 184     throws PermissionDeniedException, InvalidDataException
5675 28 Jun 11 nicklas 185   {
5675 28 Jun 11 nicklas 186     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 187     if (parent == null) throw new InvalidUseOfNullException("parent");
5675 28 Jun 11 nicklas 188     getData().setParent(parent.getData());
5675 28 Jun 11 nicklas 189   }
5675 28 Jun 11 nicklas 190
5675 28 Jun 11 nicklas 191 }
5675 28 Jun 11 nicklas 192