KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > transfer > Anchor


1 /*
2  * Created on 20.10.2004
3  */

4 package com.nightlabs.ipanema.transfer;
5
6 import java.io.Serializable JavaDoc;
7 import java.util.HashMap JavaDoc;
8 import java.util.Map JavaDoc;
9
10 import javax.jdo.JDOHelper;
11
12 /**
13  * An Anchor is an end-point for a Transfer. Every Transfer has exactly two Anchors -
14  * a source and a destination. Anchor can be everything that is able to receive,
15  * hold and give away something (e.g. money or products). Examples for Anchors may be:
16  * a legal entity, a storage area, an account.
17  *
18  * @author Marco Schulze - marco at nightlabs dot de
19  * @author Alexander Bieber <alex[AT]nightlabs[DOT]de>
20  *
21  * @jdo.persistence-capable
22  * identity-type = "application"
23  * objectid-class = "com.nightlabs.ipanema.transfer.id.AnchorID"
24  * detachable = "true"
25  *
26  * @jdo.inheritance strategy = "new-table"
27  */

28 public abstract class Anchor
29     implements Serializable JavaDoc
30 {
31     /**
32      * @jdo.field primary-key="true"
33      * @jdo.column length="100"
34      */

35     private String JavaDoc organisationID;
36
37     /**
38      * @jdo.field primary-key="true"
39      * @jdo.column length="100"
40      */

41     private String JavaDoc anchorID;
42
43     /**
44      * key: String transferPK<br/>
45      * value: Transfer transfer
46      *
47      * @jdo.field
48      * persistence-modifier="persistent"
49      * collection-type="map"
50      * key-type="java.lang.String"
51      * value-type="Transfer"
52      * dependent="true"
53      *
54      * @jdo.join
55      *
56      * @jdo.map-vendor-extension vendor-name="jpox" key="key-length" value="max 255"
57      */

58     protected Map JavaDoc transfers = new HashMap JavaDoc();
59
60     protected Anchor() { }
61
62     public Anchor(String JavaDoc organisationID, String JavaDoc anchorID)
63     {
64         this.organisationID = organisationID;
65         this.anchorID = anchorID;
66     }
67
68     public static String JavaDoc getPrimaryKey(String JavaDoc organisationID, String JavaDoc anchorID)
69     {
70         return organisationID + '/' + anchorID;
71     }
72
73     public String JavaDoc getPrimaryKey()
74     {
75         return getPrimaryKey(organisationID, anchorID);
76     }
77
78     /**
79      * @return Returns the organisationID.
80      */

81     public String JavaDoc getOrganisationID()
82     {
83         return organisationID;
84     }
85     /**
86      * @return Returns the anchorID.
87      */

88     public String JavaDoc getAnchorID()
89     {
90         return anchorID;
91     }
92
93     /**
94      * This method adds the given Transfer to the <tt>Map transfers</tt> and calls <tt>internalBookTransfer</tt>.
95      *
96      * @param transfer The transfer to be booked.
97      * @throws DuplicateTransferException If the given transfer has already been booked.
98      */

99     public void bookTransfer(Transfer transfer)
100     {
101         if (transfer == null)
102             throw new NullPointerException JavaDoc("transfer must not be null!");
103         
104         if (!JDOHelper.isPersistent(this))
105             throw new IllegalStateException JavaDoc("This instance of Anchor is not persistent. Non persistent instances can not book transfers!!");
106         
107         String JavaDoc pk = transfer.getPrimaryKey();
108         if (transfers.containsKey(pk))
109             throw new DuplicateTransferException("Transfer \""+pk+"\" has already been booked!");
110
111         if (transfer.getAnchorType(this) == Transfer.ANCHORTYPE_UNKNOWN)
112             throw new AnchorMismatchException("This Anchor \""+this.getPrimaryKey()+"\" is not a side of the transfer \""+transfer.getPrimaryKey()+"\"!");
113
114         internalBookTransfer(transfer);
115         
116         transfers.put(pk,transfer);
117     }
118
119     protected abstract void internalBookTransfer(Transfer transfer);
120 }
121
Popular Tags