View Javadoc

1   // Do not edit this file!  It was generated by Melati POEM's DSD preprocessor.
2   
3   package org.paneris.bibliomania.generated;
4   
5   
6   import java.util.Collections;
7   import java.util.Enumeration;
8   import java.util.List;
9   import org.melati.poem.AccessPoemException;
10  import org.melati.poem.CachedSelection;
11  import org.melati.poem.Column;
12  import org.melati.poem.Field;
13  import org.melati.poem.JdbcPersistent;
14  import org.melati.poem.NoSuchRowPoemException;
15  import org.melati.poem.ValidationPoemException;
16  import org.melati.poem.util.EmptyEnumeration;
17  import org.paneris.bibliomania.BibliomaniaDatabaseTables;
18  import org.paneris.bibliomania.Book;
19  import org.paneris.bibliomania.BookFormat;
20  import org.paneris.bibliomania.Download;
21  import org.paneris.bibliomania.Product;
22  import org.paneris.bibliomania.ProductAssociation;
23  import org.paneris.bibliomania.ProductTable;
24  import org.paneris.bibliomania.Publisher;
25  import org.paneris.bibliomania.ShopOrderItem;
26  import org.paneris.bibliomania.SupplierProduct;
27  
28  
29  /**
30   * Melati POEM generated abstract base class for a <code>Persistent</code> 
31   * <code>Product</code> Object.
32   *
33   * see org.melati.poem.prepro.TableDef#generatePersistentBaseJava 
34   */
35  public abstract class ProductBase extends JdbcPersistent {
36  
37  
38   /**
39    * Retrieves the Database object.
40    * 
41    * see org.melati.poem.prepro.TableDef#generatePersistentBaseJava 
42    * @return the database
43    */
44    public BibliomaniaDatabaseTables getBibliomaniaDatabaseTables() {
45      return (BibliomaniaDatabaseTables)getDatabase();
46    }
47  
48  
49   /**
50    * Retrieves the  <code>ProductTable</code> table 
51    * which this <code>Persistent</code> is from.
52    * 
53    * see org.melati.poem.prepro.TableDef#generatePersistentBaseJava 
54    * @return the ProductTable
55    */
56    @SuppressWarnings("unchecked")
57    public ProductTable<Product> getProductTable() {
58      return (ProductTable<Product>)getTable();
59    }
60  
61    @SuppressWarnings("unchecked")
62    private ProductTable<Product> _getProductTable() {
63      return (ProductTable<Product>)getTable();
64    }
65  
66    // Fields in this table 
67   /**
68    * id 
69    */
70    protected Integer id;
71   /**
72    * book - The book to be sold 
73    */
74    protected Integer book;
75   /**
76    * publisher - The publisher for this product 
77    */
78    protected Integer publisher;
79   /**
80    * download - The download object for this product (if any) 
81    */
82    protected Integer download;
83   /**
84    * Product Name - A name for this product if different to the Book title 
85    */
86    protected String name;
87   /**
88    * Description - Additional blurb about the product  
89    */
90    protected String description;
91   /**
92    * Retail Price - Price payable by the customer, including discounts, 
93    * excluding delivery 
94    */
95    protected Double price;
96   /**
97    * List Price - The normal selling price of the product, not including 
98    * delivery 
99    */
100   protected Double listprice;
101  /**
102   * ISBN - The ISBN number of this product (if any) 
103   */
104   protected String ISBN;
105  /**
106   * Picture - A jacket cover image or similar 
107   */
108   protected String picture;
109  /**
110   * Deleted? 
111   */
112   protected Boolean deleted;
113  /**
114   * format - The type of the product 
115   */
116   protected Integer format;
117 
118 
119  /**
120   * Retrieves the <code>Id</code> value, without locking, 
121   * for this <code>Product</code> <code>Persistent</code>.
122   *
123   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
124   * @return the Integer id
125   */
126   public Integer getId_unsafe() {
127     return id;
128   }
129 
130 
131  /**
132   * Sets the <code>Id</code> value directly, without checking, 
133   * for this Product <code>Persistent</code>.
134   * 
135   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
136   * @param cooked  the pre-validated value to set
137   */
138   public void setId_unsafe(Integer cooked) {
139     id = cooked;
140   }
141 
142  /**
143   * Retrieves the Id value, with locking, for this 
144   * <code>Product</code> <code>Persistent</code>.
145   * 
146   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
147   * @throws AccessPoemException 
148   *         if the current <code>AccessToken</code> 
149   *         does not confer write access rights 
150   * @return the value of the field <code>Id</code> for this 
151   *         <code>Product</code> <code>Persistent</code>  
152   */
153 
154   public Integer getId()
155       throws AccessPoemException {
156     readLock();
157     return getId_unsafe();
158   }
159 
160 
161  /**
162   * Sets the <code>Id</code> value, with checking, for this 
163   * <code>Product</code> <code>Persistent</code>.
164   * 
165   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
166   * @param cooked  a validated <code>int</code> 
167   * @throws AccessPoemException 
168   *         if the current <code>AccessToken</code> 
169   *         does not confer write access rights
170   * @throws ValidationPoemException 
171   *         if the value is not valid
172   */
173   public void setId(Integer cooked)
174       throws AccessPoemException, ValidationPoemException {
175     _getProductTable().getIdColumn().
176       getType().assertValidCooked(cooked);
177     writeLock();
178     setId_unsafe(cooked);
179   }
180 
181  /**
182   * Sets the <code>Id</code> value, with checking, for this 
183   * <code>Product</code> <code>Persistent</code>.
184   * 
185   * Generated by org.melati.poem.prepro.IntegerFieldDef#generateBaseMethods 
186   * @param cooked  a validated <code>int</code>
187   * @throws AccessPoemException 
188   *         if the current <code>AccessToken</code> 
189   *         does not confer write access rights
190   * @throws ValidationPoemException 
191   *         if the value is not valid
192   */
193 
194   public final void setId(int cooked)
195       throws AccessPoemException, ValidationPoemException {
196     setId(new Integer(cooked));
197   }
198 
199 
200  /**
201   * Retrieves the <code>Id</code> value as a <code>Field</code>
202   * from this <code>Product</code> <code>Persistent</code>.
203   * 
204   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
205   * @throws AccessPoemException 
206   *         if the current <code>AccessToken</code> 
207   *         does not confer write access rights
208   * @return the Integer id
209   */
210   public Field<Integer> getIdField() throws AccessPoemException {
211     Column<Integer> c = _getProductTable().getIdColumn();
212     return new Field<Integer>((Integer)c.getRaw(this), c);
213   }
214 
215 
216  /**
217   * Retrieves the <code>Book</code> value, without locking, 
218   * for this <code>Product</code> <code>Persistent</code>.
219   *
220   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
221   * @return the Integer book
222   */
223   public Integer getBook_unsafe() {
224     return book;
225   }
226 
227 
228  /**
229   * Sets the <code>Book</code> value directly, without checking, 
230   * for this Product <code>Persistent</code>.
231   * 
232   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
233   * @param cooked  the pre-validated value to set
234   */
235   public void setBook_unsafe(Integer cooked) {
236     book = cooked;
237   }
238 
239  /**
240   * Retrieves the Table Row Object ID. 
241   *
242   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
243   * @throws AccessPoemException  
244   *         if the current <code>AccessToken</code> 
245   *         does not confer read access rights 
246   * @return the TROID as an <code>Integer</code> 
247   */
248 
249   public Integer getBookTroid()
250       throws AccessPoemException {
251     readLock();
252     return getBook_unsafe();
253   }
254 
255 
256  /**
257   * Sets the Table Row Object ID. 
258   * 
259   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
260   * @param raw  a Table Row Object Id 
261   * @throws AccessPoemException  
262   *         if the current <code>AccessToken</code> 
263   *         does not confer write access rights
264   */
265   public void setBookTroid(Integer raw)
266       throws AccessPoemException {
267     setBook(raw == null ? null : 
268         (Book)getBibliomaniaDatabaseTables().getBookTable().getBookObject(raw));
269   }
270 
271 
272  /**
273   * Retrieves the <code>Book</code> object referred to.
274   *  
275   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
276   * @throws AccessPoemException  
277   *         if the current <code>AccessToken</code> 
278   *         does not confer read access rights 
279   * @throws NoSuchRowPoemException  
280   *         if the <code>Persistent</code> has yet to be allocated a TROID 
281   * @return the <code>Book</code> as a <code>Book</code> 
282   */
283   public Book getBook()
284       throws AccessPoemException, NoSuchRowPoemException {
285     Integer troid = getBookTroid();
286     return troid == null ? null :
287         (Book)getBibliomaniaDatabaseTables().getBookTable().getBookObject(troid);
288   }
289 
290 
291  /**
292   * Set the Book.
293   * 
294   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
295   * @param cooked  a validated <code>Book</code>
296   * @throws AccessPoemException  
297   *         if the current <code>AccessToken</code> 
298   *         does not confer write access rights 
299   */
300   public void setBook(Book cooked)
301       throws AccessPoemException {
302     _getProductTable().
303       getBookColumn().
304         getType().assertValidCooked(cooked);
305     writeLock();
306     if (cooked == null)
307       setBook_unsafe(null);
308     else {
309       cooked.existenceLock();
310       setBook_unsafe(cooked.troid());
311     }
312   }
313 
314 
315  /**
316   * Retrieves the <code>Book</code> value as a <code>Field</code>
317   * from this <code>Product</code> <code>Persistent</code>.
318   * 
319   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
320   * @throws AccessPoemException 
321   *         if the current <code>AccessToken</code> 
322   *         does not confer write access rights
323   * @return the Integer book
324   */
325   public Field<Integer> getBookField() throws AccessPoemException {
326     Column<Integer> c = _getProductTable().getBookColumn();
327     return new Field<Integer>((Integer)c.getRaw(this), c);
328   }
329 
330 
331  /**
332   * Retrieves the <code>Publisher</code> value, without locking, 
333   * for this <code>Product</code> <code>Persistent</code>.
334   *
335   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
336   * @return the Integer publisher
337   */
338   public Integer getPublisher_unsafe() {
339     return publisher;
340   }
341 
342 
343  /**
344   * Sets the <code>Publisher</code> value directly, without checking, 
345   * for this Product <code>Persistent</code>.
346   * 
347   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
348   * @param cooked  the pre-validated value to set
349   */
350   public void setPublisher_unsafe(Integer cooked) {
351     publisher = cooked;
352   }
353 
354  /**
355   * Retrieves the Table Row Object ID. 
356   *
357   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
358   * @throws AccessPoemException  
359   *         if the current <code>AccessToken</code> 
360   *         does not confer read access rights 
361   * @return the TROID as an <code>Integer</code> 
362   */
363 
364   public Integer getPublisherTroid()
365       throws AccessPoemException {
366     readLock();
367     return getPublisher_unsafe();
368   }
369 
370 
371  /**
372   * Sets the Table Row Object ID. 
373   * 
374   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
375   * @param raw  a Table Row Object Id 
376   * @throws AccessPoemException  
377   *         if the current <code>AccessToken</code> 
378   *         does not confer write access rights
379   */
380   public void setPublisherTroid(Integer raw)
381       throws AccessPoemException {
382     setPublisher(raw == null ? null : 
383         getBibliomaniaDatabaseTables().getPublisherTable().getPublisherObject(raw));
384   }
385 
386 
387  /**
388   * Retrieves the <code>Publisher</code> object referred to.
389   *  
390   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
391   * @throws AccessPoemException  
392   *         if the current <code>AccessToken</code> 
393   *         does not confer read access rights 
394   * @throws NoSuchRowPoemException  
395   *         if the <code>Persistent</code> has yet to be allocated a TROID 
396   * @return the <code>Publisher</code> as a <code>Publisher</code> 
397   */
398   public Publisher getPublisher()
399       throws AccessPoemException, NoSuchRowPoemException {
400     Integer troid = getPublisherTroid();
401     return troid == null ? null :
402         getBibliomaniaDatabaseTables().getPublisherTable().getPublisherObject(troid);
403   }
404 
405 
406  /**
407   * Set the Publisher.
408   * 
409   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
410   * @param cooked  a validated <code>Publisher</code>
411   * @throws AccessPoemException  
412   *         if the current <code>AccessToken</code> 
413   *         does not confer write access rights 
414   */
415   public void setPublisher(Publisher cooked)
416       throws AccessPoemException {
417     _getProductTable().
418       getPublisherColumn().
419         getType().assertValidCooked(cooked);
420     writeLock();
421     if (cooked == null)
422       setPublisher_unsafe(null);
423     else {
424       cooked.existenceLock();
425       setPublisher_unsafe(cooked.troid());
426     }
427   }
428 
429 
430  /**
431   * Retrieves the <code>Publisher</code> value as a <code>Field</code>
432   * from this <code>Product</code> <code>Persistent</code>.
433   * 
434   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
435   * @throws AccessPoemException 
436   *         if the current <code>AccessToken</code> 
437   *         does not confer write access rights
438   * @return the Integer publisher
439   */
440   public Field<Integer> getPublisherField() throws AccessPoemException {
441     Column<Integer> c = _getProductTable().getPublisherColumn();
442     return new Field<Integer>((Integer)c.getRaw(this), c);
443   }
444 
445 
446  /**
447   * Retrieves the <code>Download</code> value, without locking, 
448   * for this <code>Product</code> <code>Persistent</code>.
449   *
450   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
451   * @return the Integer download
452   */
453   public Integer getDownload_unsafe() {
454     return download;
455   }
456 
457 
458  /**
459   * Sets the <code>Download</code> value directly, without checking, 
460   * for this Product <code>Persistent</code>.
461   * 
462   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
463   * @param cooked  the pre-validated value to set
464   */
465   public void setDownload_unsafe(Integer cooked) {
466     download = cooked;
467   }
468 
469  /**
470   * Retrieves the Table Row Object ID. 
471   *
472   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
473   * @throws AccessPoemException  
474   *         if the current <code>AccessToken</code> 
475   *         does not confer read access rights 
476   * @return the TROID as an <code>Integer</code> 
477   */
478 
479   public Integer getDownloadTroid()
480       throws AccessPoemException {
481     readLock();
482     return getDownload_unsafe();
483   }
484 
485 
486  /**
487   * Sets the Table Row Object ID. 
488   * 
489   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
490   * @param raw  a Table Row Object Id 
491   * @throws AccessPoemException  
492   *         if the current <code>AccessToken</code> 
493   *         does not confer write access rights
494   */
495   public void setDownloadTroid(Integer raw)
496       throws AccessPoemException {
497     setDownload(raw == null ? null : 
498         getBibliomaniaDatabaseTables().getDownloadTable().getDownloadObject(raw));
499   }
500 
501 
502  /**
503   * Retrieves the <code>Download</code> object referred to.
504   *  
505   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
506   * @throws AccessPoemException  
507   *         if the current <code>AccessToken</code> 
508   *         does not confer read access rights 
509   * @throws NoSuchRowPoemException  
510   *         if the <code>Persistent</code> has yet to be allocated a TROID 
511   * @return the <code>Download</code> as a <code>Download</code> 
512   */
513   public Download getDownload()
514       throws AccessPoemException, NoSuchRowPoemException {
515     Integer troid = getDownloadTroid();
516     return troid == null ? null :
517         getBibliomaniaDatabaseTables().getDownloadTable().getDownloadObject(troid);
518   }
519 
520 
521  /**
522   * Set the Download.
523   * 
524   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
525   * @param cooked  a validated <code>Download</code>
526   * @throws AccessPoemException  
527   *         if the current <code>AccessToken</code> 
528   *         does not confer write access rights 
529   */
530   public void setDownload(Download cooked)
531       throws AccessPoemException {
532     _getProductTable().
533       getDownloadColumn().
534         getType().assertValidCooked(cooked);
535     writeLock();
536     if (cooked == null)
537       setDownload_unsafe(null);
538     else {
539       cooked.existenceLock();
540       setDownload_unsafe(cooked.troid());
541     }
542   }
543 
544 
545  /**
546   * Retrieves the <code>Download</code> value as a <code>Field</code>
547   * from this <code>Product</code> <code>Persistent</code>.
548   * 
549   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
550   * @throws AccessPoemException 
551   *         if the current <code>AccessToken</code> 
552   *         does not confer write access rights
553   * @return the Integer download
554   */
555   public Field<Integer> getDownloadField() throws AccessPoemException {
556     Column<Integer> c = _getProductTable().getDownloadColumn();
557     return new Field<Integer>((Integer)c.getRaw(this), c);
558   }
559 
560 
561  /**
562   * Retrieves the <code>Name</code> value, without locking, 
563   * for this <code>Product</code> <code>Persistent</code>.
564   *
565   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
566   * @return the String name
567   */
568   public String getName_unsafe() {
569     return name;
570   }
571 
572 
573  /**
574   * Sets the <code>Name</code> value directly, without checking, 
575   * for this Product <code>Persistent</code>.
576   * 
577   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
578   * @param cooked  the pre-validated value to set
579   */
580   public void setName_unsafe(String cooked) {
581     name = cooked;
582   }
583 
584  /**
585   * Retrieves the Name value, with locking, for this 
586   * <code>Product</code> <code>Persistent</code>.
587   * Field description: 
588   *   A name for this product if different to the Book title 
589   * 
590   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
591   * @throws AccessPoemException 
592   *         if the current <code>AccessToken</code> 
593   *         does not confer write access rights 
594   * @return the value of the field <code>Name</code> for this 
595   *         <code>Product</code> <code>Persistent</code>  
596   */
597 
598   public String getName()
599       throws AccessPoemException {
600     readLock();
601     return getName_unsafe();
602   }
603 
604 
605  /**
606   * Sets the <code>Name</code> value, with checking, for this 
607   * <code>Product</code> <code>Persistent</code>.
608   * Field description: 
609   *   A name for this product if different to the Book title 
610   * 
611   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
612   * @param cooked  a validated <code>int</code> 
613   * @throws AccessPoemException 
614   *         if the current <code>AccessToken</code> 
615   *         does not confer write access rights
616   * @throws ValidationPoemException 
617   *         if the value is not valid
618   */
619   public void setName(String cooked)
620       throws AccessPoemException, ValidationPoemException {
621     _getProductTable().getNameColumn().
622       getType().assertValidCooked(cooked);
623     writeLock();
624     setName_unsafe(cooked);
625   }
626 
627 
628  /**
629   * Retrieves the <code>Name</code> value as a <code>Field</code>
630   * from this <code>Product</code> <code>Persistent</code>.
631   * 
632   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
633   * @throws AccessPoemException 
634   *         if the current <code>AccessToken</code> 
635   *         does not confer write access rights
636   * @return the String name
637   */
638   public Field<String> getNameField() throws AccessPoemException {
639     Column<String> c = _getProductTable().getNameColumn();
640     return new Field<String>((String)c.getRaw(this), c);
641   }
642 
643 
644  /**
645   * Retrieves the <code>Description</code> value, without locking, 
646   * for this <code>Product</code> <code>Persistent</code>.
647   *
648   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
649   * @return the String description
650   */
651   public String getDescription_unsafe() {
652     return description;
653   }
654 
655 
656  /**
657   * Sets the <code>Description</code> value directly, without checking, 
658   * for this Product <code>Persistent</code>.
659   * 
660   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
661   * @param cooked  the pre-validated value to set
662   */
663   public void setDescription_unsafe(String cooked) {
664     description = cooked;
665   }
666 
667  /**
668   * Retrieves the Description value, with locking, for this 
669   * <code>Product</code> <code>Persistent</code>.
670   * Field description: 
671   *   Additional blurb about the product  
672   * 
673   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
674   * @throws AccessPoemException 
675   *         if the current <code>AccessToken</code> 
676   *         does not confer write access rights 
677   * @return the value of the field <code>Description</code> for this 
678   *         <code>Product</code> <code>Persistent</code>  
679   */
680 
681   public String getDescription()
682       throws AccessPoemException {
683     readLock();
684     return getDescription_unsafe();
685   }
686 
687 
688  /**
689   * Sets the <code>Description</code> value, with checking, for this 
690   * <code>Product</code> <code>Persistent</code>.
691   * Field description: 
692   *   Additional blurb about the product  
693   * 
694   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
695   * @param cooked  a validated <code>int</code> 
696   * @throws AccessPoemException 
697   *         if the current <code>AccessToken</code> 
698   *         does not confer write access rights
699   * @throws ValidationPoemException 
700   *         if the value is not valid
701   */
702   public void setDescription(String cooked)
703       throws AccessPoemException, ValidationPoemException {
704     _getProductTable().getDescriptionColumn().
705       getType().assertValidCooked(cooked);
706     writeLock();
707     setDescription_unsafe(cooked);
708   }
709 
710 
711  /**
712   * Retrieves the <code>Description</code> value as a <code>Field</code>
713   * from this <code>Product</code> <code>Persistent</code>.
714   * 
715   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
716   * @throws AccessPoemException 
717   *         if the current <code>AccessToken</code> 
718   *         does not confer write access rights
719   * @return the String description
720   */
721   public Field<String> getDescriptionField() throws AccessPoemException {
722     Column<String> c = _getProductTable().getDescriptionColumn();
723     return new Field<String>((String)c.getRaw(this), c);
724   }
725 
726 
727  /**
728   * Retrieves the <code>Price</code> value, without locking, 
729   * for this <code>Product</code> <code>Persistent</code>.
730   *
731   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
732   * @return the Double price
733   */
734   public Double getPrice_unsafe() {
735     return price;
736   }
737 
738 
739  /**
740   * Sets the <code>Price</code> value directly, without checking, 
741   * for this Product <code>Persistent</code>.
742   * 
743   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
744   * @param cooked  the pre-validated value to set
745   */
746   public void setPrice_unsafe(Double cooked) {
747     price = cooked;
748   }
749 
750  /**
751   * Retrieves the Price value, with locking, for this 
752   * <code>Product</code> <code>Persistent</code>.
753   * Field description: 
754   *   Price payable by the customer, including discounts, excluding delivery 
755   * 
756   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
757   * @throws AccessPoemException 
758   *         if the current <code>AccessToken</code> 
759   *         does not confer write access rights 
760   * @return the value of the field <code>Price</code> for this 
761   *         <code>Product</code> <code>Persistent</code>  
762   */
763 
764   public Double getPrice()
765       throws AccessPoemException {
766     readLock();
767     return getPrice_unsafe();
768   }
769 
770 
771  /**
772   * Sets the <code>Price</code> value, with checking, for this 
773   * <code>Product</code> <code>Persistent</code>.
774   * Field description: 
775   *   Price payable by the customer, including discounts, excluding delivery 
776   * 
777   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
778   * @param cooked  a validated <code>int</code> 
779   * @throws AccessPoemException 
780   *         if the current <code>AccessToken</code> 
781   *         does not confer write access rights
782   * @throws ValidationPoemException 
783   *         if the value is not valid
784   */
785   public void setPrice(Double cooked)
786       throws AccessPoemException, ValidationPoemException {
787     _getProductTable().getPriceColumn().
788       getType().assertValidCooked(cooked);
789     writeLock();
790     setPrice_unsafe(cooked);
791   }
792 
793  /**
794   * Sets the <code>Price</code> value, with checking, for this <code>Product</code> <code>Persistent</code>.
795   * Field description: 
796   *   Price payable by the customer, including discounts, excluding delivery 
797   * 
798   * 
799   * Generated by org.melati.poem.prepro.DoubleFieldDef#generateBaseMethods 
800   * @param cooked  a validated <code>int</code> 
801   * @throws AccessPoemException 
802   *         if the current <code>AccessToken</code> 
803   *         does not confer write access rights
804   * @throws ValidationPoemException 
805   *         if the value is not valid
806   */
807 
808   public final void setPrice(double cooked)
809       throws AccessPoemException, ValidationPoemException {
810     setPrice(new Double(cooked));
811   }
812 
813 
814  /**
815   * Retrieves the <code>Price</code> value as a <code>Field</code>
816   * from this <code>Product</code> <code>Persistent</code>.
817   * 
818   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
819   * @throws AccessPoemException 
820   *         if the current <code>AccessToken</code> 
821   *         does not confer write access rights
822   * @return the Double price
823   */
824   public Field<Double> getPriceField() throws AccessPoemException {
825     Column<Double> c = _getProductTable().getPriceColumn();
826     return new Field<Double>((Double)c.getRaw(this), c);
827   }
828 
829 
830  /**
831   * Retrieves the <code>Listprice</code> value, without locking, 
832   * for this <code>Product</code> <code>Persistent</code>.
833   *
834   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
835   * @return the Double listprice
836   */
837   public Double getListprice_unsafe() {
838     return listprice;
839   }
840 
841 
842  /**
843   * Sets the <code>Listprice</code> value directly, without checking, 
844   * for this Product <code>Persistent</code>.
845   * 
846   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
847   * @param cooked  the pre-validated value to set
848   */
849   public void setListprice_unsafe(Double cooked) {
850     listprice = cooked;
851   }
852 
853  /**
854   * Retrieves the Listprice value, with locking, for this 
855   * <code>Product</code> <code>Persistent</code>.
856   * Field description: 
857   *   The normal selling price of the product, not including delivery 
858   * 
859   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
860   * @throws AccessPoemException 
861   *         if the current <code>AccessToken</code> 
862   *         does not confer write access rights 
863   * @return the value of the field <code>Listprice</code> for this 
864   *         <code>Product</code> <code>Persistent</code>  
865   */
866 
867   public Double getListprice()
868       throws AccessPoemException {
869     readLock();
870     return getListprice_unsafe();
871   }
872 
873 
874  /**
875   * Sets the <code>Listprice</code> value, with checking, for this 
876   * <code>Product</code> <code>Persistent</code>.
877   * Field description: 
878   *   The normal selling price of the product, not including delivery 
879   * 
880   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
881   * @param cooked  a validated <code>int</code> 
882   * @throws AccessPoemException 
883   *         if the current <code>AccessToken</code> 
884   *         does not confer write access rights
885   * @throws ValidationPoemException 
886   *         if the value is not valid
887   */
888   public void setListprice(Double cooked)
889       throws AccessPoemException, ValidationPoemException {
890     _getProductTable().getListpriceColumn().
891       getType().assertValidCooked(cooked);
892     writeLock();
893     setListprice_unsafe(cooked);
894   }
895 
896  /**
897   * Sets the <code>Listprice</code> value, with checking, for this <code>Product</code> <code>Persistent</code>.
898   * Field description: 
899   *   The normal selling price of the product, not including delivery 
900   * 
901   * 
902   * Generated by org.melati.poem.prepro.DoubleFieldDef#generateBaseMethods 
903   * @param cooked  a validated <code>int</code> 
904   * @throws AccessPoemException 
905   *         if the current <code>AccessToken</code> 
906   *         does not confer write access rights
907   * @throws ValidationPoemException 
908   *         if the value is not valid
909   */
910 
911   public final void setListprice(double cooked)
912       throws AccessPoemException, ValidationPoemException {
913     setListprice(new Double(cooked));
914   }
915 
916 
917  /**
918   * Retrieves the <code>Listprice</code> value as a <code>Field</code>
919   * from this <code>Product</code> <code>Persistent</code>.
920   * 
921   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
922   * @throws AccessPoemException 
923   *         if the current <code>AccessToken</code> 
924   *         does not confer write access rights
925   * @return the Double listprice
926   */
927   public Field<Double> getListpriceField() throws AccessPoemException {
928     Column<Double> c = _getProductTable().getListpriceColumn();
929     return new Field<Double>((Double)c.getRaw(this), c);
930   }
931 
932 
933  /**
934   * Retrieves the <code>ISBN</code> value, without locking, 
935   * for this <code>Product</code> <code>Persistent</code>.
936   *
937   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
938   * @return the String ISBN
939   */
940   public String getISBN_unsafe() {
941     return ISBN;
942   }
943 
944 
945  /**
946   * Sets the <code>ISBN</code> value directly, without checking, 
947   * for this Product <code>Persistent</code>.
948   * 
949   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
950   * @param cooked  the pre-validated value to set
951   */
952   public void setISBN_unsafe(String cooked) {
953     ISBN = cooked;
954   }
955 
956  /**
957   * Retrieves the ISBN value, with locking, for this 
958   * <code>Product</code> <code>Persistent</code>.
959   * Field description: 
960   *   The ISBN number of this product (if any) 
961   * 
962   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
963   * @throws AccessPoemException 
964   *         if the current <code>AccessToken</code> 
965   *         does not confer write access rights 
966   * @return the value of the field <code>ISBN</code> for this 
967   *         <code>Product</code> <code>Persistent</code>  
968   */
969 
970   public String getISBN()
971       throws AccessPoemException {
972     readLock();
973     return getISBN_unsafe();
974   }
975 
976 
977  /**
978   * Sets the <code>ISBN</code> value, with checking, for this 
979   * <code>Product</code> <code>Persistent</code>.
980   * Field description: 
981   *   The ISBN number of this product (if any) 
982   * 
983   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
984   * @param cooked  a validated <code>int</code> 
985   * @throws AccessPoemException 
986   *         if the current <code>AccessToken</code> 
987   *         does not confer write access rights
988   * @throws ValidationPoemException 
989   *         if the value is not valid
990   */
991   public void setISBN(String cooked)
992       throws AccessPoemException, ValidationPoemException {
993     _getProductTable().getISBNColumn().
994       getType().assertValidCooked(cooked);
995     writeLock();
996     setISBN_unsafe(cooked);
997   }
998 
999 
1000  /**
1001   * Retrieves the <code>ISBN</code> value as a <code>Field</code>
1002   * from this <code>Product</code> <code>Persistent</code>.
1003   * 
1004   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
1005   * @throws AccessPoemException 
1006   *         if the current <code>AccessToken</code> 
1007   *         does not confer write access rights
1008   * @return the String ISBN
1009   */
1010   public Field<String> getISBNField() throws AccessPoemException {
1011     Column<String> c = _getProductTable().getISBNColumn();
1012     return new Field<String>((String)c.getRaw(this), c);
1013   }
1014 
1015 
1016  /**
1017   * Retrieves the <code>Picture</code> value, without locking, 
1018   * for this <code>Product</code> <code>Persistent</code>.
1019   *
1020   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
1021   * @return the String picture
1022   */
1023   public String getPicture_unsafe() {
1024     return picture;
1025   }
1026 
1027 
1028  /**
1029   * Sets the <code>Picture</code> value directly, without checking, 
1030   * for this Product <code>Persistent</code>.
1031   * 
1032   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
1033   * @param cooked  the pre-validated value to set
1034   */
1035   public void setPicture_unsafe(String cooked) {
1036     picture = cooked;
1037   }
1038 
1039  /**
1040   * Retrieves the Picture value, with locking, for this 
1041   * <code>Product</code> <code>Persistent</code>.
1042   * Field description: 
1043   *   A jacket cover image or similar 
1044   * 
1045   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
1046   * @throws AccessPoemException 
1047   *         if the current <code>AccessToken</code> 
1048   *         does not confer write access rights 
1049   * @return the value of the field <code>Picture</code> for this 
1050   *         <code>Product</code> <code>Persistent</code>  
1051   */
1052 
1053   public String getPicture()
1054       throws AccessPoemException {
1055     readLock();
1056     return getPicture_unsafe();
1057   }
1058 
1059 
1060  /**
1061   * Sets the <code>Picture</code> value, with checking, for this 
1062   * <code>Product</code> <code>Persistent</code>.
1063   * Field description: 
1064   *   A jacket cover image or similar 
1065   * 
1066   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
1067   * @param cooked  a validated <code>int</code> 
1068   * @throws AccessPoemException 
1069   *         if the current <code>AccessToken</code> 
1070   *         does not confer write access rights
1071   * @throws ValidationPoemException 
1072   *         if the value is not valid
1073   */
1074   public void setPicture(String cooked)
1075       throws AccessPoemException, ValidationPoemException {
1076     _getProductTable().getPictureColumn().
1077       getType().assertValidCooked(cooked);
1078     writeLock();
1079     setPicture_unsafe(cooked);
1080   }
1081 
1082 
1083  /**
1084   * Retrieves the <code>Picture</code> value as a <code>Field</code>
1085   * from this <code>Product</code> <code>Persistent</code>.
1086   * 
1087   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
1088   * @throws AccessPoemException 
1089   *         if the current <code>AccessToken</code> 
1090   *         does not confer write access rights
1091   * @return the String picture
1092   */
1093   public Field<String> getPictureField() throws AccessPoemException {
1094     Column<String> c = _getProductTable().getPictureColumn();
1095     return new Field<String>((String)c.getRaw(this), c);
1096   }
1097 
1098 
1099  /**
1100   * Retrieves the <code>Deleted</code> value, without locking, 
1101   * for this <code>Product</code> <code>Persistent</code>.
1102   *
1103   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
1104   * @return the Boolean deleted
1105   */
1106   public Boolean getDeleted_unsafe() {
1107     return deleted;
1108   }
1109 
1110 
1111  /**
1112   * Sets the <code>Deleted</code> value directly, without checking, 
1113   * for this Product <code>Persistent</code>.
1114   * 
1115   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
1116   * @param cooked  the pre-validated value to set
1117   */
1118   public void setDeleted_unsafe(Boolean cooked) {
1119     deleted = cooked;
1120   }
1121 
1122  /**
1123   * Retrieves the Deleted value, with locking, for this 
1124   * <code>Product</code> <code>Persistent</code>.
1125   * 
1126   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods 
1127   * @throws AccessPoemException 
1128   *         if the current <code>AccessToken</code> 
1129   *         does not confer write access rights 
1130   * @return the value of the field <code>Deleted</code> for this 
1131   *         <code>Product</code> <code>Persistent</code>  
1132   */
1133 
1134   public Boolean getDeleted()
1135       throws AccessPoemException {
1136     readLock();
1137     return getDeleted_unsafe();
1138   }
1139 
1140 
1141  /**
1142   * Sets the <code>Deleted</code> value, with checking, for this 
1143   * <code>Product</code> <code>Persistent</code>.
1144   * 
1145   * Generated by org.melati.poem.prepro.AtomFieldDef#generateBaseMethods  
1146   * @param cooked  a validated <code>int</code> 
1147   * @throws AccessPoemException 
1148   *         if the current <code>AccessToken</code> 
1149   *         does not confer write access rights
1150   * @throws ValidationPoemException 
1151   *         if the value is not valid
1152   */
1153   public void setDeleted(Boolean cooked)
1154       throws AccessPoemException, ValidationPoemException {
1155     _getProductTable().getDeletedColumn().
1156       getType().assertValidCooked(cooked);
1157     writeLock();
1158     setDeleted_unsafe(cooked);
1159   }
1160 
1161  /**
1162   * Sets the <code>Deleted</code> value, with checking, 
1163   * from a <code>boolean</code>, for this 
1164   * <code>Product</code> <code>Persistent</code>.
1165   * 
1166   * Generated by org.melati.poem.prepro.BooleanFieldDef#generateBaseMethods 
1167   * @param cooked  a <code>boolean</code> 
1168   * @throws AccessPoemException 
1169   *         if the current <code>AccessToken</code> 
1170   *         does not confer write access rights
1171   * @throws ValidationPoemException 
1172   *         if the value is not valid
1173   */
1174 
1175   public final void setDeleted(boolean cooked)
1176       throws AccessPoemException, ValidationPoemException {
1177     setDeleted(cooked ? Boolean.TRUE : Boolean.FALSE);
1178   }
1179 
1180 
1181  /**
1182   * Retrieves the <code>Deleted</code> value as a <code>Field</code>
1183   * from this <code>Product</code> <code>Persistent</code>.
1184   * 
1185   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
1186   * @throws AccessPoemException 
1187   *         if the current <code>AccessToken</code> 
1188   *         does not confer write access rights
1189   * @return the Boolean deleted
1190   */
1191   public Field<Boolean> getDeletedField() throws AccessPoemException {
1192     Column<Boolean> c = _getProductTable().getDeletedColumn();
1193     return new Field<Boolean>((Boolean)c.getRaw(this), c);
1194   }
1195 
1196 
1197  /**
1198   * Retrieves the <code>Format</code> value, without locking, 
1199   * for this <code>Product</code> <code>Persistent</code>.
1200   *
1201   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
1202   * @return the Integer format
1203   */
1204   public Integer getFormat_unsafe() {
1205     return format;
1206   }
1207 
1208 
1209  /**
1210   * Sets the <code>Format</code> value directly, without checking, 
1211   * for this Product <code>Persistent</code>.
1212   * 
1213   * see org.melati.poem.prepro.FieldDef#generateBaseMethods 
1214   * @param cooked  the pre-validated value to set
1215   */
1216   public void setFormat_unsafe(Integer cooked) {
1217     format = cooked;
1218   }
1219 
1220  /**
1221   * Retrieves the Table Row Object ID. 
1222   *
1223   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
1224   * @throws AccessPoemException  
1225   *         if the current <code>AccessToken</code> 
1226   *         does not confer read access rights 
1227   * @return the TROID as an <code>Integer</code> 
1228   */
1229 
1230   public Integer getFormatTroid()
1231       throws AccessPoemException {
1232     readLock();
1233     return getFormat_unsafe();
1234   }
1235 
1236 
1237  /**
1238   * Sets the Table Row Object ID. 
1239   * 
1240   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
1241   * @param raw  a Table Row Object Id 
1242   * @throws AccessPoemException  
1243   *         if the current <code>AccessToken</code> 
1244   *         does not confer write access rights
1245   */
1246   public void setFormatTroid(Integer raw)
1247       throws AccessPoemException {
1248     setFormat(raw == null ? null : 
1249         getBibliomaniaDatabaseTables().getBookFormatTable().getBookFormatObject(raw));
1250   }
1251 
1252 
1253  /**
1254   * Retrieves the <code>Format</code> object referred to.
1255   *  
1256   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
1257   * @throws AccessPoemException  
1258   *         if the current <code>AccessToken</code> 
1259   *         does not confer read access rights 
1260   * @throws NoSuchRowPoemException  
1261   *         if the <code>Persistent</code> has yet to be allocated a TROID 
1262   * @return the <code>Format</code> as a <code>BookFormat</code> 
1263   */
1264   public BookFormat getFormat()
1265       throws AccessPoemException, NoSuchRowPoemException {
1266     Integer troid = getFormatTroid();
1267     return troid == null ? null :
1268         getBibliomaniaDatabaseTables().getBookFormatTable().getBookFormatObject(troid);
1269   }
1270 
1271 
1272  /**
1273   * Set the Format.
1274   * 
1275   * Generated by org.melati.poem.prepro.ReferenceFieldDef#generateBaseMethods 
1276   * @param cooked  a validated <code>BookFormat</code>
1277   * @throws AccessPoemException  
1278   *         if the current <code>AccessToken</code> 
1279   *         does not confer write access rights 
1280   */
1281   public void setFormat(BookFormat cooked)
1282       throws AccessPoemException {
1283     _getProductTable().
1284       getFormatColumn().
1285         getType().assertValidCooked(cooked);
1286     writeLock();
1287     if (cooked == null)
1288       setFormat_unsafe(null);
1289     else {
1290       cooked.existenceLock();
1291       setFormat_unsafe(cooked.troid());
1292     }
1293   }
1294 
1295 
1296  /**
1297   * Retrieves the <code>Format</code> value as a <code>Field</code>
1298   * from this <code>Product</code> <code>Persistent</code>.
1299   * 
1300   * see org.melati.poem.prepro.FieldDef#generateFieldCreator 
1301   * @throws AccessPoemException 
1302   *         if the current <code>AccessToken</code> 
1303   *         does not confer write access rights
1304   * @return the Integer format
1305   */
1306   public Field<Integer> getFormatField() throws AccessPoemException {
1307     Column<Integer> c = _getProductTable().getFormatColumn();
1308     return new Field<Integer>((Integer)c.getRaw(this), c);
1309   }
1310 
1311   private CachedSelection<ProductAssociation> productProductAssociations = null;
1312   /** References to this Product in the ProductAssociation table via its product field.*/
1313   @SuppressWarnings("unchecked")
1314   public Enumeration<ProductAssociation> getProductProductAssociations() {
1315     if (getTroid() == null)
1316       return new EmptyEnumeration<ProductAssociation>();
1317     else {
1318       if (productProductAssociations == null)
1319         productProductAssociations =
1320           getBibliomaniaDatabaseTables().getProductAssociationTable().getProductColumn().cachedSelectionWhereEq(getTroid());
1321       return productProductAssociations.objects();
1322     }
1323   }
1324 
1325 
1326   /** References to this Product in the ProductAssociation table via its product field, as a List.*/
1327   public List<ProductAssociation> getProductProductAssociationList() {
1328     return Collections.list(getProductProductAssociations());
1329   }
1330 
1331 
1332 
1333   private CachedSelection<SupplierProduct> productSupplierProducts = null;
1334   /** References to this Product in the SupplierProduct table via its product field.*/
1335   @SuppressWarnings("unchecked")
1336   public Enumeration<SupplierProduct> getProductSupplierProducts() {
1337     if (getTroid() == null)
1338       return new EmptyEnumeration<SupplierProduct>();
1339     else {
1340       if (productSupplierProducts == null)
1341         productSupplierProducts =
1342           getBibliomaniaDatabaseTables().getSupplierProductTable().getProductColumn().cachedSelectionWhereEq(getTroid());
1343       return productSupplierProducts.objects();
1344     }
1345   }
1346 
1347 
1348   /** References to this Product in the SupplierProduct table via its product field, as a List.*/
1349   public List<SupplierProduct> getProductSupplierProductList() {
1350     return Collections.list(getProductSupplierProducts());
1351   }
1352 
1353 
1354 
1355   private CachedSelection<ShopOrderItem> productShopOrderItems = null;
1356   /** References to this Product in the ShopOrderItem table via its product field.*/
1357   @SuppressWarnings("unchecked")
1358   public Enumeration<ShopOrderItem> getProductShopOrderItems() {
1359     if (getTroid() == null)
1360       return new EmptyEnumeration<ShopOrderItem>();
1361     else {
1362       if (productShopOrderItems == null)
1363         productShopOrderItems =
1364           getBibliomaniaDatabaseTables().getShopOrderItemTable().getProductColumn().cachedSelectionWhereEq(getTroid());
1365       return productShopOrderItems.objects();
1366     }
1367   }
1368 
1369 
1370   /** References to this Product in the ShopOrderItem table via its product field, as a List.*/
1371   public List<ShopOrderItem> getProductShopOrderItemList() {
1372     return Collections.list(getProductShopOrderItems());
1373   }
1374 
1375 
1376 
1377 }
1378