doc/src/docbook/examples/AnyItem.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.AnyData;
5675 28 Jun 11 nicklas 24 /**
5675 28 Jun 11 nicklas 25   This class is used to represent an AnyItem in BASE.
5675 28 Jun 11 nicklas 26
5675 28 Jun 11 nicklas 27   @author Your name
5675 28 Jun 11 nicklas 28   @since 3.0
5675 28 Jun 11 nicklas 29   @see AnyData
5675 28 Jun 11 nicklas 30   @base.modified $Date$
5675 28 Jun 11 nicklas 31 */
5675 28 Jun 11 nicklas 32 public class AnyItem
5675 28 Jun 11 nicklas 33   extends CommonItem<AnyData>
5675 28 Jun 11 nicklas 34   implements Subtypable
5675 28 Jun 11 nicklas 35 {
5675 28 Jun 11 nicklas 36
5675 28 Jun 11 nicklas 37   /**
5675 28 Jun 11 nicklas 38     Create a new <code>AnyItem</code> item.
5675 28 Jun 11 nicklas 39   
5675 28 Jun 11 nicklas 40     @param dc The <code>DbControl</code> which will be used for
5675 28 Jun 11 nicklas 41       permission checking and database access
5675 28 Jun 11 nicklas 42     @return The new <code>AnyItem</code> item
5675 28 Jun 11 nicklas 43     @throws BaseException If there is an error
5675 28 Jun 11 nicklas 44   */
5675 28 Jun 11 nicklas 45   public static AnyItem getNew(DbControl dc)
5675 28 Jun 11 nicklas 46     throws BaseException
5675 28 Jun 11 nicklas 47   {
5675 28 Jun 11 nicklas 48     AnyItem a = dc.newItem(AnyItem.class);
5675 28 Jun 11 nicklas 49     a.setName("New any item");
5675 28 Jun 11 nicklas 50     return a;
5675 28 Jun 11 nicklas 51   }
5675 28 Jun 11 nicklas 52
5675 28 Jun 11 nicklas 53   /**
5675 28 Jun 11 nicklas 54     Get an <code>AnyItem</code> item when you know the id.
5675 28 Jun 11 nicklas 55   
5675 28 Jun 11 nicklas 56     @param dc The <code>DbControl</code> which will be used for
5675 28 Jun 11 nicklas 57       permission checking and database access.
5675 28 Jun 11 nicklas 58     @param id The id of the item to load
5675 28 Jun 11 nicklas 59     @return The <code>AnyItem</code> item
5675 28 Jun 11 nicklas 60     @throws ItemNotFoundException If an item with the specified 
5675 28 Jun 11 nicklas 61       id is not found
5675 28 Jun 11 nicklas 62     @throws PermissionDeniedException If the logged in user doesn't 
5675 28 Jun 11 nicklas 63       have read permission to the item
5675 28 Jun 11 nicklas 64     @throws BaseException If there is another error
5675 28 Jun 11 nicklas 65   */
5675 28 Jun 11 nicklas 66   public static AnyItem getById(DbControl dc, int id)
5675 28 Jun 11 nicklas 67     throws ItemNotFoundException, PermissionDeniedException, BaseException
5675 28 Jun 11 nicklas 68   {
5675 28 Jun 11 nicklas 69     AnyItem a = dc.loadItem(AnyItem.class, id);
5675 28 Jun 11 nicklas 70     if (a == null) throw new ItemNotFoundException("AnyItem[id="+id+"]");
5675 28 Jun 11 nicklas 71     return a;
5675 28 Jun 11 nicklas 72   }
5675 28 Jun 11 nicklas 73
5675 28 Jun 11 nicklas 74   /**
5675 28 Jun 11 nicklas 75     Get a query configured to retrieve anyitems. 
5675 28 Jun 11 nicklas 76     @return An {@link ItemQuery} object
5675 28 Jun 11 nicklas 77   */
5675 28 Jun 11 nicklas 78   public static ItemQuery<AnyItem> getQuery()
5675 28 Jun 11 nicklas 79   {
5675 28 Jun 11 nicklas 80     return new ItemQuery<AnyItem>(AnyItem.class);
5675 28 Jun 11 nicklas 81   }
5675 28 Jun 11 nicklas 82
5675 28 Jun 11 nicklas 83   // Constructor
5675 28 Jun 11 nicklas 84   AnyItem(AnyData anyData)
5675 28 Jun 11 nicklas 85   {
5675 28 Jun 11 nicklas 86     super(anyData);
5675 28 Jun 11 nicklas 87   }
5675 28 Jun 11 nicklas 88
5675 28 Jun 11 nicklas 89   /*
5675 28 Jun 11 nicklas 90     From the BasicItem class
5675 28 Jun 11 nicklas 91     -------------------------------------------
5675 28 Jun 11 nicklas 92   */
5675 28 Jun 11 nicklas 93   /**
5675 28 Jun 11 nicklas 94     TODO - Check if:
5675 28 Jun 11 nicklas 95     <ul>
5675 28 Jun 11 nicklas 96     <li>other items are using this AnyItem
5675 28 Jun 11 nicklas 97     </ul>
5675 28 Jun 11 nicklas 98     (or remove this method)
5675 28 Jun 11 nicklas 99   */
5675 28 Jun 11 nicklas 100   public boolean isUsed()
5675 28 Jun 11 nicklas 101     throws BaseException
5675 28 Jun 11 nicklas 102   {
5675 28 Jun 11 nicklas 103     org.hibernate.Session session = getDbControl().getHibernateSession();
5675 28 Jun 11 nicklas 104     org.hibernate.Query query = 
5675 28 Jun 11 nicklas 105       HibernateUtil.getPredefinedQuery(session, "GET_OTHER_ITEM_FOR_ANYITEM", "count(*)");
5675 28 Jun 11 nicklas 106     /*
5675 28 Jun 11 nicklas 107       SELECT {1}
5675 28 Jun 11 nicklas 108       FROM OtherItemData o
5675 28 Jun 11 nicklas 109       WHERE o.anyItem = :anyItem
5675 28 Jun 11 nicklas 110     */
5675 28 Jun 11 nicklas 111     query.setEntity("anyItem", this.getData());
5675 28 Jun 11 nicklas 112     boolean used = HibernateUtil.loadData(Long.class, query) > 0;
5675 28 Jun 11 nicklas 113     return used || super.isUsed();
5675 28 Jun 11 nicklas 114   }
5675 28 Jun 11 nicklas 115   
5675 28 Jun 11 nicklas 116   /**
5675 28 Jun 11 nicklas 117     TODO - Get all:
5675 28 Jun 11 nicklas 118     <ul>
5675 28 Jun 11 nicklas 119     <li>other items using this AnyItem
5675 28 Jun 11 nicklas 120     <ul>
5675 28 Jun 11 nicklas 121     (or remove this method)
5675 28 Jun 11 nicklas 122   */
5675 28 Jun 11 nicklas 123   @Override
5675 28 Jun 11 nicklas 124   public Set<ItemProxy> getUsingItems()
5675 28 Jun 11 nicklas 125   {
5675 28 Jun 11 nicklas 126     Set<ItemProxy> using = super.getUsingItems();
5675 28 Jun 11 nicklas 127     org.hibernate.Session session = getDbControl().getHibernateSession();
5675 28 Jun 11 nicklas 128       
5675 28 Jun 11 nicklas 129     // Other items
5675 28 Jun 11 nicklas 130     org.hibernate.Query query = HibernateUtil.getPredefinedQuery(session, 
5675 28 Jun 11 nicklas 131         "GET_OTHER_ITEM_FOR_ANYITEM", "o.id");
5675 28 Jun 11 nicklas 132     /*
5675 28 Jun 11 nicklas 133       SELECT {1}
5675 28 Jun 11 nicklas 134       FROM OtherItemData o
5675 28 Jun 11 nicklas 135       WHERE o.anyItem = :anyItem
5675 28 Jun 11 nicklas 136     */
5675 28 Jun 11 nicklas 137     query.setEntity("anyItem", this.getData());
5675 28 Jun 11 nicklas 138     addUsingItems(using, Item.OTHER, query);
5675 28 Jun 11 nicklas 139     return using;
5675 28 Jun 11 nicklas 140   }
5675 28 Jun 11 nicklas 141   
5675 28 Jun 11 nicklas 142   /**
5675 28 Jun 11 nicklas 143     TODO - grant or deny extra permissions or remove this method
5675 28 Jun 11 nicklas 144   */
5675 28 Jun 11 nicklas 145   void initPermissions(int granted, int denied)
5675 28 Jun 11 nicklas 146     throws BaseException
5675 28 Jun 11 nicklas 147   {
5675 28 Jun 11 nicklas 148     // Place your extra permissions here
5675 28 Jun 11 nicklas 149     super.initPermissions(granted, denied);
5675 28 Jun 11 nicklas 150   }
5675 28 Jun 11 nicklas 151   /**
5675 28 Jun 11 nicklas 152     TODO - set default items
5675 28 Jun 11 nicklas 153     (or remove this method
5675 28 Jun 11 nicklas 154   */
5675 28 Jun 11 nicklas 155   void setProjectDefaults(Project activeProject)
5675 28 Jun 11 nicklas 156     throws BaseException
5675 28 Jun 11 nicklas 157   {
5675 28 Jun 11 nicklas 158     // The protocol used to create the item
5675 28 Jun 11 nicklas 159     if (!protocolHasBeenSet)
5675 28 Jun 11 nicklas 160     {
5675 28 Jun 11 nicklas 161       ProtocolData protocol = 
5675 28 Jun 11 nicklas 162         (ProtocolData)activeProject.findDefaultRelatedData(dc, this, Item.PROTOCOL, false);
5675 28 Jun 11 nicklas 163       if (protocol != null) 
5675 28 Jun 11 nicklas 164       {
5675 28 Jun 11 nicklas 165         getData().setProtocol(protocol);
5675 28 Jun 11 nicklas 166         protocolHasBeenSet = true;
5675 28 Jun 11 nicklas 167       }
5675 28 Jun 11 nicklas 168     }
5675 28 Jun 11 nicklas 169   }
5675 28 Jun 11 nicklas 170   // -------------------------------------------
5675 28 Jun 11 nicklas 171   /*
5675 28 Jun 11 nicklas 172     From the Subtypable interface
5675 28 Jun 11 nicklas 173     -----------------------------
5675 28 Jun 11 nicklas 174   */
5675 28 Jun 11 nicklas 175   @Override
5675 28 Jun 11 nicklas 176   @SubtypableRelatedItems({Item.PROTOCOL})
5675 28 Jun 11 nicklas 177   public ItemSubtype getItemSubtype()
5675 28 Jun 11 nicklas 178   {
5675 28 Jun 11 nicklas 179     return getDbControl().getItem(ItemSubtype.class, getData().getItemSubtype());
5675 28 Jun 11 nicklas 180   }
5675 28 Jun 11 nicklas 181   @Override
5675 28 Jun 11 nicklas 182   public void setItemSubtype(ItemSubtype subtype)
5675 28 Jun 11 nicklas 183   {
5675 28 Jun 11 nicklas 184     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 185     if (subtype != null)
5675 28 Jun 11 nicklas 186     {
5675 28 Jun 11 nicklas 187       subtype.setOnItem(this);
5675 28 Jun 11 nicklas 188     }
5675 28 Jun 11 nicklas 189     else
5675 28 Jun 11 nicklas 190     {
5675 28 Jun 11 nicklas 191       getData().setItemSubtype(null);
5675 28 Jun 11 nicklas 192     }
5675 28 Jun 11 nicklas 193   }
5675 28 Jun 11 nicklas 194   // -------------------------------------------
5675 28 Jun 11 nicklas 195
5675 28 Jun 11 nicklas 196   // TODO - Methods below this line are examples only, modify or remove as needed
5675 28 Jun 11 nicklas 197   /**
5675 28 Jun 11 nicklas 198     Get the value of the string property.
5675 28 Jun 11 nicklas 199   */
5675 28 Jun 11 nicklas 200   public String getStringProperty()
5675 28 Jun 11 nicklas 201   {
5675 28 Jun 11 nicklas 202     return getData().getStringProperty();
5675 28 Jun 11 nicklas 203   }
5675 28 Jun 11 nicklas 204   public static final int MAX_STRINGPROPERTY_LENGTH = AnyData.MAX_STRINGPROPERTY_LENGTH;
5675 28 Jun 11 nicklas 205   /**
5675 28 Jun 11 nicklas 206     Set the value of the string property. Null values are not 
5675 28 Jun 11 nicklas 207     allowed and the length must be shorter than 
5675 28 Jun 11 nicklas 208     {@link #MAX_STRINGPROPERTY_LENGTH}.
5675 28 Jun 11 nicklas 209     @param value The new value
5675 28 Jun 11 nicklas 210     @throws PermissionDeniedException If the logged in user
5675 28 Jun 11 nicklas 211       doesn't have write permission
5675 28 Jun 11 nicklas 212     @throws InvalidDataException If the value is null or too long
5675 28 Jun 11 nicklas 213   */
5675 28 Jun 11 nicklas 214   public void setStringProperty(String value)
5675 28 Jun 11 nicklas 215     throws PermissionDeniedException, InvalidDataException
5675 28 Jun 11 nicklas 216   {
5675 28 Jun 11 nicklas 217     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 218     getData.setStringProperty(
5675 28 Jun 11 nicklas 219       StringUtil.setNotNullString(value, "stringProperty", MAX_STRINGPROPERTY_LENGTH)
5675 28 Jun 11 nicklas 220     );
5675 28 Jun 11 nicklas 221   }
5675 28 Jun 11 nicklas 222
5675 28 Jun 11 nicklas 223   /**
5675 28 Jun 11 nicklas 224     Get the value of the int property.
5675 28 Jun 11 nicklas 225   */
5675 28 Jun 11 nicklas 226   public int getIntProperty()
5675 28 Jun 11 nicklas 227   {
5675 28 Jun 11 nicklas 228     return getData().getIntProperty();
5675 28 Jun 11 nicklas 229   }
5675 28 Jun 11 nicklas 230   /**
5675 28 Jun 11 nicklas 231     Set the value of the int property. The value mustn't be less than
5675 28 Jun 11 nicklas 232     zero.
5675 28 Jun 11 nicklas 233     @param value The new value
5675 28 Jun 11 nicklas 234     @throws PermissionDeniedException If the logged in user
5675 28 Jun 11 nicklas 235       doesn't have write permission
5675 28 Jun 11 nicklas 236     @throws InvalidDataException If the value is less than zero
5675 28 Jun 11 nicklas 237   */
5675 28 Jun 11 nicklas 238   public void setIntProperty(int value)
5675 28 Jun 11 nicklas 239     throws PermissionDeniedException, InvalidDataException
5675 28 Jun 11 nicklas 240   {
5675 28 Jun 11 nicklas 241     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 242     getData.setIntProperty(
5675 28 Jun 11 nicklas 243       IntegerUtil.checkMin(value, "intProperty", 0)
5675 28 Jun 11 nicklas 244     );
5675 28 Jun 11 nicklas 245   }
5675 28 Jun 11 nicklas 246
5675 28 Jun 11 nicklas 247   /**
5675 28 Jun 11 nicklas 248     Get the value of the boolean property.
5675 28 Jun 11 nicklas 249   */
5675 28 Jun 11 nicklas 250   public boolean isBooleanProperty()
5675 28 Jun 11 nicklas 251   {
5675 28 Jun 11 nicklas 252     return getData().isBooleanProperty();
5675 28 Jun 11 nicklas 253   }
5675 28 Jun 11 nicklas 254   /**
5675 28 Jun 11 nicklas 255     Set the value of the boolean property. 
5675 28 Jun 11 nicklas 256     @param value The new value
5675 28 Jun 11 nicklas 257     @throws PermissionDeniedException If the logged in user
5675 28 Jun 11 nicklas 258       doesn't have write permission
5675 28 Jun 11 nicklas 259   */
5675 28 Jun 11 nicklas 260   public void setBooleanProperty(boolean value)
5675 28 Jun 11 nicklas 261     throws PermissionDeniedException
5675 28 Jun 11 nicklas 262   {
5675 28 Jun 11 nicklas 263     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 264     getData.setBooleanProperty(value);
5675 28 Jun 11 nicklas 265   }
5675 28 Jun 11 nicklas 266
5675 28 Jun 11 nicklas 267   /**
5675 28 Jun 11 nicklas 268     Get the value of the date property.
5675 28 Jun 11 nicklas 269     @return A date object or null if unknown
5675 28 Jun 11 nicklas 270   */
5675 28 Jun 11 nicklas 271   public Date getDateProperty()
5675 28 Jun 11 nicklas 272   {
5675 28 Jun 11 nicklas 273     return DateUtil.copy(getData().getDateProperty());
5675 28 Jun 11 nicklas 274   }
5675 28 Jun 11 nicklas 275   /**
5675 28 Jun 11 nicklas 276     Set the value of the date property. Null values are allowed.
5675 28 Jun 11 nicklas 277     @param value The new value
5675 28 Jun 11 nicklas 278     @throws PermissionDeniedException If the logged in user
5675 28 Jun 11 nicklas 279       doesn't have write permission
5675 28 Jun 11 nicklas 280   */
5675 28 Jun 11 nicklas 281   public void setDateProperty(Date value)
5675 28 Jun 11 nicklas 282     throws PermissionDeniedException
5675 28 Jun 11 nicklas 283   {
5675 28 Jun 11 nicklas 284     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 285     getData().setDateProperty(DateUtil.setNullableDate(value, "dateProperty"));
5675 28 Jun 11 nicklas 286   }
5675 28 Jun 11 nicklas 287   
5675 28 Jun 11 nicklas 288   /**
5675 28 Jun 11 nicklas 289     Get the associated other item.
5675 28 Jun 11 nicklas 290     @return The <code>OtherItem</code> item
5675 28 Jun 11 nicklas 291     @throws PermissionDeniedException If the logged in user 
5675 28 Jun 11 nicklas 292       doesn't have read permission
5675 28 Jun 11 nicklas 293     @throws BaseException If there is another error
5675 28 Jun 11 nicklas 294   */
5675 28 Jun 11 nicklas 295   public OtherItem getOtherItem()
5675 28 Jun 11 nicklas 296     throws PermissionDeniedException, BaseException
5675 28 Jun 11 nicklas 297   {
5675 28 Jun 11 nicklas 298     return getDbControl().getItem(OtherItem.class, getData().getOtherItem());
5675 28 Jun 11 nicklas 299   }
5675 28 Jun 11 nicklas 300   /**
5675 28 Jun 11 nicklas 301     Set the associated item. Null is not allowed.
5675 28 Jun 11 nicklas 302     @param other The other item
5675 28 Jun 11 nicklas 303     @throws PermissionDeniedException If the logged in user 
5675 28 Jun 11 nicklas 304       doesn't have write permission
5675 28 Jun 11 nicklas 305     @throws InvalidDataException If the other item is null
5675 28 Jun 11 nicklas 306     @throws BaseException If there is another error
5675 28 Jun 11 nicklas 307   */
5675 28 Jun 11 nicklas 308   public void setOtherItem(OtherItem other)
5675 28 Jun 11 nicklas 309     throws PermissionDeniedException, InvalidDataException, BaseException
5675 28 Jun 11 nicklas 310   {
5675 28 Jun 11 nicklas 311     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 312     if (otherItem == null) throw new InvalidUseOfNullException("otherItem");
5675 28 Jun 11 nicklas 313     getData().setOtherItem(otherItem.getData());
5675 28 Jun 11 nicklas 314   }
5675 28 Jun 11 nicklas 315
5675 28 Jun 11 nicklas 316   /**
5675 28 Jun 11 nicklas 317     Create a child item for this any item.
5675 28 Jun 11 nicklas 318     @return The new <code>ChildItem</code> object
5675 28 Jun 11 nicklas 319     @throws PermissionDeniedException If the logged in user doesn't have
5675 28 Jun 11 nicklas 320       write permission
5675 28 Jun 11 nicklas 321     @throws BaseException If there is another error
5675 28 Jun 11 nicklas 322   */
5675 28 Jun 11 nicklas 323   public AChildItem newChildItem()
5675 28 Jun 11 nicklas 324     throws PermissionDeniedException, BaseException
5675 28 Jun 11 nicklas 325   {
5675 28 Jun 11 nicklas 326     checkPermission(Permission.WRITE);
5675 28 Jun 11 nicklas 327     return AChildItem.getNew(getDbControl(), this);
5675 28 Jun 11 nicklas 328   }
5675 28 Jun 11 nicklas 329   
5675 28 Jun 11 nicklas 330   /**
5675 28 Jun 11 nicklas 331     Get a query that will return all child items for this any item.
5675 28 Jun 11 nicklas 332     @return An {@link ItemQuery} object
5675 28 Jun 11 nicklas 333   */
5675 28 Jun 11 nicklas 334   public ItemQuery<AChildItem> getChildItems()
5675 28 Jun 11 nicklas 335   {
5675 28 Jun 11 nicklas 336     return AChildItem.getQuery(this);
5675 28 Jun 11 nicklas 337   }
5675 28 Jun 11 nicklas 338
5675 28 Jun 11 nicklas 339 }