1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 package org.ogf.graap.wsag.wsrf.persistence;
36
37 import javax.persistence.Basic;
38 import javax.persistence.Column;
39 import javax.persistence.Entity;
40 import javax.persistence.EntityManager;
41 import javax.persistence.GeneratedValue;
42 import javax.persistence.GenerationType;
43 import javax.persistence.Id;
44 import javax.persistence.Lob;
45 import javax.persistence.NamedQueries;
46 import javax.persistence.NamedQuery;
47 import javax.persistence.NoResultException;
48 import javax.persistence.NonUniqueResultException;
49 import javax.persistence.Query;
50 import javax.persistence.Table;
51 import javax.persistence.Transient;
52 import javax.persistence.UniqueConstraint;
53
54 import org.apache.log4j.Logger;
55 import org.ogf.graap.wsag.server.persistence.EmfRegistry;
56 import org.ogf.graap.wsag.server.persistence.PersistedResourceException;
57 import org.w3.x2005.x08.addressing.EndpointReferenceType;
58
59
60
61
62
63
64
65
66 @Entity
67 @Table( name = "AGREEMENT_EPR_CONTAINER", uniqueConstraints = @UniqueConstraint( columnNames = {
68 "agreement_id", "agreement_factory_id" } ) )
69 @NamedQueries( {
70 @NamedQuery( name = "AgreementEprContainer.findAll", query = "SELECT a FROM AgreementEprContainer a" ),
71 @NamedQuery(
72 name = "AgreementEprContainer.findAllByAgreementFactoryId",
73 query = "SELECT a FROM AgreementEprContainer a WHERE a.agreementFactoryId = :agreementFactoryId" ),
74 @NamedQuery( name = "AgreementEprContainer.findByEpr",
75 query = "SELECT a FROM AgreementEprContainer a WHERE a.epr = :epr" ),
76 @NamedQuery( name = "AgreementEprContainer.findByEprAddress",
77 query = "SELECT a FROM AgreementEprContainer a WHERE a.eprAddress = :eprAddress" ),
78 @NamedQuery( name = "AgreementEprContainer.findByAgreementId",
79 query = "SELECT a FROM AgreementEprContainer a WHERE a.agreementId = :agreementId" ) } )
80 public class AgreementEprContainer
81 {
82
83 @Transient
84 private static final int EPR_FIELD_SIZE = 163840;
85
86
87 @Transient
88 private static final Logger LOG = Logger.getLogger( AgreementEprContainer.class );
89
90
91 @SuppressWarnings( "unused" )
92 @Id
93 @Column( name = "id" )
94 @GeneratedValue( strategy = GenerationType.TABLE )
95 @Basic( optional = false )
96 private Integer id;
97
98
99 @Column( name = "agreement_id", nullable = false )
100 @Basic( optional = false )
101 private String agreementId;
102
103
104 @Column( name = "agreement_factory_id", nullable = false )
105 @Basic( optional = false )
106 private String agreementFactoryId;
107
108
109 @Lob
110 @Column( name = "epr", nullable = false, length = EPR_FIELD_SIZE )
111 @Basic( optional = false )
112 private String epr;
113
114
115 @Column( name = "epr_address", nullable = false )
116 @Basic( optional = false )
117 private String eprAddress;
118
119
120
121
122
123 public AgreementEprContainer()
124 {
125 }
126
127
128
129
130
131
132
133
134
135 public AgreementEprContainer( String agreementId, EndpointReferenceType epr )
136 {
137 this.agreementId = agreementId;
138 this.setEpr( epr );
139 }
140
141
142
143
144
145 public String getAgreementId()
146 {
147 return agreementId;
148 }
149
150
151
152
153
154
155 public void setAgreementId( String agreementId )
156 {
157 this.agreementId = agreementId;
158 }
159
160
161
162
163
164
165
166
167
168 public EndpointReferenceType getEpr() throws PersistedResourceException
169 {
170 try
171 {
172 EndpointReferenceType theEpr = EndpointReferenceType.Factory.parse( epr );
173 return theEpr;
174 }
175 catch ( Exception e )
176 {
177 throw new PersistedResourceException( e );
178 }
179 }
180
181
182
183
184
185
186 public void setEpr( EndpointReferenceType epr )
187 {
188 this.epr = epr.xmlText();
189
190 assert epr != null;
191 assert epr.getAddress() != null;
192 this.eprAddress = epr.getAddress().getStringValue();
193 }
194
195
196
197
198
199 public String getAgreementFactoryId()
200 {
201 return agreementFactoryId;
202 }
203
204
205
206
207
208
209 public void setAgreementFactoryId( String agreementFactoryId )
210 {
211 this.agreementFactoryId = agreementFactoryId;
212 }
213
214
215
216
217 public String getEprAddress()
218 {
219 return eprAddress;
220 }
221
222
223
224
225
226
227 public void setEprAddress( String eprAddress )
228 {
229 this.eprAddress = eprAddress;
230 }
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247 public static EndpointReferenceType findEPRForAgreement( String agreementId ) throws Exception
248 {
249 LOG.trace( "AgreementEprContainer -> findEPRForAgreement(String agreementId)" );
250
251
252 EntityManager em = EmfRegistry.getEntityManager();
253 AgreementEprContainer agreementEprContainer = null;
254 try
255 {
256 Query query = em.createNamedQuery( "AgreementEprContainer.findByAgreementId" );
257 query.setParameter( "agreementId", agreementId );
258
259 try
260 {
261 agreementEprContainer = (AgreementEprContainer) query.getSingleResult();
262 }
263 catch ( NoResultException ex )
264 {
265 LOG.error( "Could not find an agreement for the agreement id '" + agreementId + "'." );
266 throw new Exception( "Could not find an agreement for the EPR address '" + agreementId + "'." );
267 }
268 catch ( NonUniqueResultException ex )
269 {
270 LOG.error( "Found multiple agreements for the agreement id '" + agreementId + "'." );
271 throw new Exception( "Found multiple agreements for the agreement id '" + agreementId + "'." );
272 }
273 }
274 finally
275 {
276 em.close();
277 }
278
279
280 return agreementEprContainer.getEpr();
281 }
282 }