This project has retired. For details please refer to its
Attic page.
UDDIPublicationImpl xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juddi.api.impl;
18
19 import java.io.StringWriter;
20 import java.io.UnsupportedEncodingException;
21 import java.util.ArrayList;
22 import java.util.Date;
23 import java.util.GregorianCalendar;
24 import java.util.List;
25 import javax.jws.WebService;
26 import javax.persistence.EntityManager;
27 import javax.persistence.EntityTransaction;
28 import javax.persistence.Query;
29 import javax.xml.bind.JAXB;
30 import javax.xml.datatype.DatatypeConfigurationException;
31 import javax.xml.datatype.DatatypeFactory;
32 import javax.xml.ws.Holder;
33 import org.apache.commons.configuration.ConfigurationException;
34 import org.apache.commons.logging.Log;
35 import org.apache.commons.logging.LogFactory;
36 import org.apache.juddi.api.util.PublicationQuery;
37 import org.apache.juddi.api.util.QueryStatus;
38 import org.apache.juddi.config.AppConfig;
39 import org.apache.juddi.config.PersistenceManager;
40 import org.apache.juddi.config.Property;
41 import org.apache.juddi.mapping.MappingApiToModel;
42 import org.apache.juddi.mapping.MappingModelToApi;
43 import org.apache.juddi.model.BindingTemplate;
44 import org.apache.juddi.model.BusinessEntity;
45 import org.apache.juddi.model.BusinessService;
46 import org.apache.juddi.model.ChangeRecord;
47 import org.apache.juddi.model.Signature;
48 import org.apache.juddi.model.Tmodel;
49 import org.apache.juddi.model.UddiEntityPublisher;
50 import org.apache.juddi.query.FetchBusinessEntitiesQuery;
51 import org.apache.juddi.query.FetchTModelsQuery;
52 import org.apache.juddi.query.FindBusinessByPublisherQuery;
53 import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
54 import org.apache.juddi.query.FindTModelByPublisherQuery;
55 import org.apache.juddi.query.TModelQuery;
56 import org.apache.juddi.query.util.DynamicQuery;
57 import org.apache.juddi.query.util.FindQualifiers;
58 import org.apache.juddi.replication.ReplicationNotifier;
59 import org.apache.juddi.v3.error.ErrorMessage;
60 import org.apache.juddi.v3.error.FatalErrorException;
61 import org.apache.juddi.v3.error.InvalidValueException;
62 import org.apache.juddi.validation.ValidatePublish;
63 import org.uddi.api_v3.AddPublisherAssertions;
64 import org.uddi.api_v3.AssertionStatusItem;
65 import org.uddi.api_v3.BindingDetail;
66 import org.uddi.api_v3.BusinessDetail;
67 import org.uddi.api_v3.CompletionStatus;
68 import org.uddi.api_v3.DeleteBinding;
69 import org.uddi.api_v3.DeleteBusiness;
70 import org.uddi.api_v3.DeletePublisherAssertions;
71 import org.uddi.api_v3.DeleteService;
72 import org.uddi.api_v3.DeleteTModel;
73 import org.uddi.api_v3.GetRegisteredInfo;
74 import org.uddi.api_v3.InfoSelection;
75 import org.uddi.api_v3.ListDescription;
76 import org.uddi.api_v3.OperationalInfo;
77 import org.uddi.api_v3.PublisherAssertion;
78 import org.uddi.api_v3.RegisteredInfo;
79 import org.uddi.api_v3.SaveBinding;
80 import org.uddi.api_v3.SaveBusiness;
81 import org.uddi.api_v3.SaveService;
82 import org.uddi.api_v3.SaveTModel;
83 import org.uddi.api_v3.ServiceDetail;
84 import org.uddi.api_v3.TModel;
85 import org.uddi.api_v3.TModelDetail;
86 import org.uddi.repl_v3.ChangeRecordDelete;
87 import org.uddi.repl_v3.ChangeRecordDeleteAssertion;
88 import org.uddi.repl_v3.ChangeRecordHide;
89 import org.uddi.repl_v3.ChangeRecordIDType;
90 import org.uddi.repl_v3.ChangeRecordNewData;
91 import org.uddi.repl_v3.ChangeRecordNewDataConditional;
92 import org.uddi.repl_v3.ChangeRecordPublisherAssertion;
93 import org.uddi.v3_service.DispositionReportFaultMessage;
94 import org.uddi.v3_service.UDDIPublicationPortType;
95
96
97
98
99
100
101
102
103 @WebService(serviceName = "UDDIPublicationService",
104 endpointInterface = "org.uddi.v3_service.UDDIPublicationPortType",
105 targetNamespace = "urn:uddi-org:api_v3_portType")
106 public class UDDIPublicationImpl extends AuthenticatedService implements UDDIPublicationPortType {
107
108 private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
109 private UDDIServiceCounter serviceCounter;
110
111
112 public UDDIPublicationImpl() {
113 super();
114 serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIPublicationImpl.class);
115
116 }
117
118 @Override
119 public void addPublisherAssertions(AddPublisherAssertions body)
120 throws DispositionReportFaultMessage {
121 long startTime = System.currentTimeMillis();
122
123 EntityManager em = PersistenceManager.getEntityManager();
124 EntityTransaction tx = em.getTransaction();
125 try {
126 tx.begin();
127
128 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
129
130 new ValidatePublish(publisher).validateAddPublisherAssertions(em, body);
131
132 List<org.uddi.api_v3.PublisherAssertion> apiPubAssertionList = body.getPublisherAssertion();
133 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
134 for (org.uddi.api_v3.PublisherAssertion apiPubAssertion : apiPubAssertionList) {
135
136 org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
137
138 MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
139
140 org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(modelPubAssertion.getClass(), modelPubAssertion.getId());
141 boolean persistNewAssertion = true;
142 if (existingPubAssertion != null) {
143 if (modelPubAssertion.getTmodelKey().equalsIgnoreCase(existingPubAssertion.getTmodelKey())
144 && modelPubAssertion.getKeyName().equalsIgnoreCase(existingPubAssertion.getKeyName())
145 && modelPubAssertion.getKeyValue().equalsIgnoreCase(existingPubAssertion.getKeyValue())) {
146
147 if (publisher.isOwner(existingPubAssertion.getBusinessEntityByFromKey())) {
148 existingPubAssertion.setFromCheck("true");
149 }
150 if (publisher.isOwner(existingPubAssertion.getBusinessEntityByToKey())) {
151 existingPubAssertion.setToCheck("true");
152 }
153
154 removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
155 savePushliserAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
156
157 em.merge(existingPubAssertion);
158 persistNewAssertion = false;
159 changes.add(getChangeRecord_deletePublisherAssertion(apiPubAssertion, getNode(), existingPubAssertion.getToCheck().equalsIgnoreCase("false"), existingPubAssertion.getFromCheck().equalsIgnoreCase("false"), System.currentTimeMillis()));
160 } else {
161
162
163
164 removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
165 em.remove(existingPubAssertion);
166 changes.add(getChangeRecord_deletePublisherAssertion(apiPubAssertion, getNode(), true, true, System.currentTimeMillis()));
167 }
168 }
169
170 if (persistNewAssertion) {
171 org.apache.juddi.model.BusinessEntity beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getFromKey());
172 org.apache.juddi.model.BusinessEntity beTo = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getToKey());
173 modelPubAssertion.setBusinessEntityByFromKey(beFrom);
174 modelPubAssertion.setBusinessEntityByToKey(beTo);
175
176 modelPubAssertion.setFromCheck("false");
177 modelPubAssertion.setToCheck("false");
178
179 if (publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey())) {
180 modelPubAssertion.setFromCheck("true");
181 }
182 if (publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey())) {
183 modelPubAssertion.setToCheck("true");
184 }
185 modelPubAssertion.setModified(new Date());
186 savePushliserAssertionSignatures(modelPubAssertion.getBusinessEntityByFromKey().getEntityKey(), modelPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
187
188 em.persist(modelPubAssertion);
189
190 changes.add(getChangeRecord_NewAssertion(apiPubAssertion, modelPubAssertion, getNode()));
191
192 }
193
194 }
195
196 tx.commit();
197 for (int i = 0; i < changes.size(); i++) {
198 ReplicationNotifier.enqueue(changes.get(i));
199 }
200
201 long procTime = System.currentTimeMillis() - startTime;
202 serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS,
203 QueryStatus.SUCCESS, procTime);
204 } catch (DispositionReportFaultMessage drfm) {
205 long procTime = System.currentTimeMillis() - startTime;
206 serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);
207 throw drfm;
208 } finally {
209 if (tx.isActive()) {
210 tx.rollback();
211 }
212 em.close();
213 }
214 }
215
216 public void deleteBinding(DeleteBinding body)
217 throws DispositionReportFaultMessage {
218 long startTime = System.currentTimeMillis();
219
220 EntityManager em = PersistenceManager.getEntityManager();
221 EntityTransaction tx = em.getTransaction();
222 try {
223 tx.begin();
224
225 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
226
227 new ValidatePublish(publisher).validateDeleteBinding(em, body);
228
229 List<String> entityKeyList = body.getBindingKey();
230 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
231 for (String entityKey : entityKeyList) {
232 deleteBinding(entityKey, em);
233 changes.add(getChangeRecord_deleteBinding(entityKey, getNode()));
234 }
235 tx.commit();
236 for (int i = 0; i < changes.size(); i++) {
237 ReplicationNotifier.enqueue(changes.get(i));
238 }
239
240 long procTime = System.currentTimeMillis() - startTime;
241 serviceCounter.update(PublicationQuery.DELETE_BINDING,
242 QueryStatus.SUCCESS, procTime);
243 } catch (DispositionReportFaultMessage drfm) {
244 long procTime = System.currentTimeMillis() - startTime;
245 serviceCounter.update(PublicationQuery.DELETE_BINDING, QueryStatus.FAILED, procTime);
246 throw drfm;
247 } finally {
248 if (tx.isActive()) {
249 tx.rollback();
250 }
251 em.close();
252 }
253 }
254
255
256
257
258
259
260
261
262
263 protected void deleteBinding(String entityKey, EntityManager em) throws DispositionReportFaultMessage {
264
265 Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey);
266
267 ((org.apache.juddi.model.BindingTemplate) obj).getBusinessService().setModifiedIncludingChildren(new Date());
268
269 ((org.apache.juddi.model.BindingTemplate) obj).getBusinessService().getBusinessEntity().setModifiedIncludingChildren(new Date());
270
271 em.remove(obj);
272
273 }
274
275 public void deleteBusiness(DeleteBusiness body)
276 throws DispositionReportFaultMessage {
277 long startTime = System.currentTimeMillis();
278
279 EntityManager em = PersistenceManager.getEntityManager();
280 EntityTransaction tx = em.getTransaction();
281 try {
282 tx.begin();
283
284 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
285
286 new ValidatePublish(publisher).validateDeleteBusiness(em, body);
287
288 List<String> entityKeyList = body.getBusinessKey();
289 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
290 for (String entityKey : entityKeyList) {
291 deleteBusiness(entityKey, em);
292 changes.add(getChangeRecord_deleteBusiness(entityKey, getNode()));
293 }
294
295 tx.commit();
296 for (int i = 0; i < changes.size(); i++) {
297 ReplicationNotifier.enqueue(changes.get(i));
298 }
299 long procTime = System.currentTimeMillis() - startTime;
300 serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.SUCCESS, procTime);
301 } catch (DispositionReportFaultMessage drfm) {
302 long procTime = System.currentTimeMillis() - startTime;
303 serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.FAILED, procTime);
304 throw drfm;
305 } finally {
306 if (tx.isActive()) {
307 tx.rollback();
308 }
309 em.close();
310 }
311 }
312
313
314
315
316
317
318
319
320
321 protected void deleteBusiness(String key, EntityManager em) throws DispositionReportFaultMessage {
322 Object obj = em.find(org.apache.juddi.model.BusinessEntity.class, key);
323 em.remove(obj);
324 }
325
326 public void deletePublisherAssertions(DeletePublisherAssertions body)
327 throws DispositionReportFaultMessage {
328 long startTime = System.currentTimeMillis();
329
330 EntityManager em = PersistenceManager.getEntityManager();
331 EntityTransaction tx = em.getTransaction();
332 try {
333 tx.begin();
334
335 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
336
337 new ValidatePublish(publisher).validateDeletePublisherAssertions(em, body);
338
339 List<org.uddi.api_v3.PublisherAssertion> entityList = body.getPublisherAssertion();
340 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
341 for (org.uddi.api_v3.PublisherAssertion entity : entityList) {
342 org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
343
344 MappingApiToModel.mapPublisherAssertion(entity, modelPubAssertion);
345
346 org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(org.apache.juddi.model.PublisherAssertion.class,
347 modelPubAssertion.getId());
348 if (existingPubAssertion == null) {
349 throw new InvalidValueException(new ErrorMessage("E_assertionNotFound"));
350 }
351
352 boolean fromkey = publisher.isOwner(em.find(BusinessEntity.class, entity.getFromKey()));
353 boolean tokey = publisher.isOwner(em.find(BusinessEntity.class, entity.getToKey()));
354 if (fromkey) {
355 existingPubAssertion.setFromCheck("false");
356 }
357 if (tokey) {
358 existingPubAssertion.setToCheck("false");
359 }
360 if ("false".equalsIgnoreCase(existingPubAssertion.getToCheck())
361 && "false".equalsIgnoreCase(existingPubAssertion.getFromCheck())) {
362 logger.info("Publisher assertion updated database via replication");
363 removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
364 em.remove(existingPubAssertion);
365 } else {
366 existingPubAssertion.setModified(new Date());
367 logger.info("Publisher assertion updated database via replication");
368 removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
369 savePushliserAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(),
370 existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
371 em.persist(existingPubAssertion);
372 }
373
374 changes.add(getChangeRecord_deletePublisherAssertion(entity, getNode(), tokey, fromkey, existingPubAssertion.getModified().getTime()));
375 }
376
377 tx.commit();
378 for (int i = 0; i < changes.size(); i++) {
379 ReplicationNotifier.enqueue(changes.get(i));
380 }
381 long procTime = System.currentTimeMillis() - startTime;
382 serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS,
383 QueryStatus.SUCCESS, procTime);
384 } catch (DispositionReportFaultMessage drfm) {
385 long procTime = System.currentTimeMillis() - startTime;
386 serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);
387 throw drfm;
388 } finally {
389 if (tx.isActive()) {
390 tx.rollback();
391 }
392 em.close();
393 }
394 }
395
396
397
398
399
400
401
402
403
404
405
406 protected void deletePublisherAssertion(org.uddi.repl_v3.ChangeRecordDeleteAssertion entity, EntityManager em) throws DispositionReportFaultMessage {
407
408 org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
409
410 MappingApiToModel.mapPublisherAssertion(entity.getPublisherAssertion(), modelPubAssertion);
411
412 org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(org.apache.juddi.model.PublisherAssertion.class,
413 modelPubAssertion.getId());
414
415 if (existingPubAssertion == null) {
416 throw new FatalErrorException(new ErrorMessage("E_assertionNotFound"));
417 }
418 boolean fromkey = entity.isFromBusinessCheck();
419 boolean tokey = entity.isToBusinessCheck();
420 if (fromkey) {
421 existingPubAssertion.setFromCheck("false");
422 }
423 if (tokey) {
424 existingPubAssertion.setToCheck("false");
425 }
426 if ("false".equalsIgnoreCase(existingPubAssertion.getToCheck())
427 && "false".equalsIgnoreCase(existingPubAssertion.getFromCheck())) {
428 logger.info("Deletion of publisher assertion from database via replication");
429 removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
430 em.remove(existingPubAssertion);
431 } else {
432 existingPubAssertion.setModified(new Date());
433 logger.info("Publisher assertion updated database via replication");
434 removeExistingPublisherAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(), existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), em);
435 savePushliserAssertionSignatures(existingPubAssertion.getBusinessEntityByFromKey().getEntityKey(),
436 existingPubAssertion.getBusinessEntityByToKey().getEntityKey(), modelPubAssertion.getSignatures(), em);
437 em.persist(existingPubAssertion);
438 }
439
440 }
441
442 public void deleteService(DeleteService body)
443 throws DispositionReportFaultMessage {
444 long startTime = System.currentTimeMillis();
445
446 EntityManager em = PersistenceManager.getEntityManager();
447 EntityTransaction tx = em.getTransaction();
448 try {
449 tx.begin();
450
451 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
452
453 new ValidatePublish(publisher).validateDeleteService(em, body);
454
455 List<String> entityKeyList = body.getServiceKey();
456 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
457 for (String entityKey : entityKeyList) {
458 deleteService(entityKey, em);
459 changes.add(getChangeRecord_deleteService(entityKey, getNode()));
460 }
461
462 tx.commit();
463 for (int i = 0; i < changes.size(); i++) {
464 ReplicationNotifier.enqueue(changes.get(i));
465 }
466 long procTime = System.currentTimeMillis() - startTime;
467 serviceCounter.update(PublicationQuery.DELETE_SERVICE,
468 QueryStatus.SUCCESS, procTime);
469 } catch (DispositionReportFaultMessage drfm) {
470 long procTime = System.currentTimeMillis() - startTime;
471 serviceCounter.update(PublicationQuery.DELETE_SERVICE, QueryStatus.FAILED, procTime);
472 throw drfm;
473 } finally {
474 if (tx.isActive()) {
475 tx.rollback();
476 }
477 em.close();
478 }
479 }
480
481
482
483
484
485
486
487
488
489 protected void deleteService(String key, EntityManager em) throws DispositionReportFaultMessage {
490 Object obj = em.find(org.apache.juddi.model.BusinessService.class, key);
491
492 if (obj != null) {
493 em.remove(obj);
494 } else {
495 logger.warn("Unable to remove service with the key '" + key + "', it doesn't exist in the database");
496 }
497 }
498
499
500
501
502 @Override
503 public void deleteTModel(DeleteTModel body)
504 throws DispositionReportFaultMessage {
505 long startTime = System.currentTimeMillis();
506
507 EntityManager em = PersistenceManager.getEntityManager();
508 EntityTransaction tx = em.getTransaction();
509 try {
510 tx.begin();
511
512 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
513
514 new ValidatePublish(publisher).validateDeleteTModel(em, body);
515
516
517 List<String> entityKeyList = body.getTModelKey();
518 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
519 for (String entityKey : entityKeyList) {
520 deleteTModel(entityKey, em);
521 changes.add(getChangeRecord_deleteTModelHide(entityKey, getNode()));
522 }
523
524 tx.commit();
525
526 for (int i = 0; i < changes.size(); i++) {
527 ReplicationNotifier.enqueue(changes.get(i));
528 }
529 long procTime = System.currentTimeMillis() - startTime;
530 serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.SUCCESS, procTime);
531 } catch (DispositionReportFaultMessage drfm) {
532 long procTime = System.currentTimeMillis() - startTime;
533 serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.FAILED, procTime);
534 throw drfm;
535 } finally {
536 if (tx.isActive()) {
537 tx.rollback();
538 }
539 em.close();
540 }
541 }
542
543
544
545
546
547
548
549
550
551 protected void deleteTModel(String key, EntityManager em) {
552 Object obj = em.find(org.apache.juddi.model.Tmodel.class, key);
553 ((org.apache.juddi.model.Tmodel) obj).setDeleted(true);
554 }
555
556
557
558
559 @Override
560 public List<AssertionStatusItem> getAssertionStatusReport(String authInfo,
561 CompletionStatus completionStatus)
562 throws DispositionReportFaultMessage {
563 long startTime = System.currentTimeMillis();
564
565 EntityManager em = PersistenceManager.getEntityManager();
566 EntityTransaction tx = em.getTransaction();
567 try {
568 tx.begin();
569
570 UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
571
572 List<org.uddi.api_v3.AssertionStatusItem> result = PublicationHelper.getAssertionStatusItemList(publisher, completionStatus, em);
573
574 tx.commit();
575 long procTime = System.currentTimeMillis() - startTime;
576 serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT,
577 QueryStatus.SUCCESS, procTime);
578
579 return result;
580 } catch (DispositionReportFaultMessage drfm) {
581 long procTime = System.currentTimeMillis() - startTime;
582 serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, QueryStatus.FAILED, procTime);
583 throw drfm;
584 } finally {
585 if (tx.isActive()) {
586 tx.rollback();
587 }
588 em.close();
589 }
590 }
591
592 public List<PublisherAssertion> getPublisherAssertions(String authInfo)
593 throws DispositionReportFaultMessage {
594 long startTime = System.currentTimeMillis();
595
596 EntityManager em = PersistenceManager.getEntityManager();
597 EntityTransaction tx = em.getTransaction();
598 try {
599 tx.begin();
600
601 UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
602
603 List<org.uddi.api_v3.PublisherAssertion> result = new ArrayList<org.uddi.api_v3.PublisherAssertion>(0);
604
605 List<?> businessKeysFound = null;
606 businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
607
608 List<org.apache.juddi.model.PublisherAssertion> pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, null);
609 if (pubAssertionList != null) {
610 for (org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) {
611 org.uddi.api_v3.PublisherAssertion apiPubAssertion = new org.uddi.api_v3.PublisherAssertion();
612
613 MappingModelToApi.mapPublisherAssertion(modelPubAssertion, apiPubAssertion);
614
615 result.add(apiPubAssertion);
616 }
617 }
618
619 tx.commit();
620 long procTime = System.currentTimeMillis() - startTime;
621 serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
622 QueryStatus.SUCCESS, procTime);
623 return result;
624 } catch (DispositionReportFaultMessage drfm) {
625 long procTime = System.currentTimeMillis() - startTime;
626 serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
627 QueryStatus.FAILED, procTime);
628 throw drfm;
629 } finally {
630 if (tx.isActive()) {
631 tx.rollback();
632 }
633 em.close();
634 }
635 }
636
637
638
639
640
641 public RegisteredInfo getRegisteredInfo(GetRegisteredInfo body)
642 throws DispositionReportFaultMessage {
643 long startTime = System.currentTimeMillis();
644
645 EntityManager em = PersistenceManager.getEntityManager();
646 EntityTransaction tx = em.getTransaction();
647 try {
648 tx.begin();
649
650 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
651
652 new ValidatePublish(publisher).validateRegisteredInfo(body);
653
654 List<?> businessKeysFound = null;
655 businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
656
657 List<?> tmodelKeysFound = null;
658
659 if (body.getInfoSelection().equals(InfoSelection.HIDDEN)) {
660 tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted", Boolean.TRUE, DynamicQuery.PREDICATE_EQUALS));
661 } else if (body.getInfoSelection().equals(InfoSelection.VISIBLE)) {
662 tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted", Boolean.FALSE, DynamicQuery.PREDICATE_EQUALS));
663 } else {
664 tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound);
665 }
666
667 RegisteredInfo result = new RegisteredInfo();
668
669
670 List<?> queryResults = FetchBusinessEntitiesQuery.select(em, new FindQualifiers(), businessKeysFound, null, null, null);
671 if (queryResults.size() > 0) {
672 result.setBusinessInfos(new org.uddi.api_v3.BusinessInfos());
673
674 for (Object item : queryResults) {
675 org.apache.juddi.model.BusinessEntity modelBusinessEntity = (org.apache.juddi.model.BusinessEntity) item;
676 org.uddi.api_v3.BusinessInfo apiBusinessInfo = new org.uddi.api_v3.BusinessInfo();
677
678 MappingModelToApi.mapBusinessInfo(modelBusinessEntity, apiBusinessInfo);
679
680 result.getBusinessInfos().getBusinessInfo().add(apiBusinessInfo);
681 }
682 }
683
684
685 queryResults = FetchTModelsQuery.select(em, new FindQualifiers(), tmodelKeysFound, null, null, null);
686 if (queryResults.size() > 0) {
687 result.setTModelInfos(new org.uddi.api_v3.TModelInfos());
688
689 for (Object item : queryResults) {
690 org.apache.juddi.model.Tmodel modelTModel = (org.apache.juddi.model.Tmodel) item;
691 org.uddi.api_v3.TModelInfo apiTModelInfo = new org.uddi.api_v3.TModelInfo();
692
693 MappingModelToApi.mapTModelInfo(modelTModel, apiTModelInfo);
694
695 result.getTModelInfos().getTModelInfo().add(apiTModelInfo);
696 }
697 }
698
699 tx.commit();
700 long procTime = System.currentTimeMillis() - startTime;
701 serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
702 QueryStatus.SUCCESS, procTime);
703
704 return result;
705 } catch (DispositionReportFaultMessage drfm) {
706 long procTime = System.currentTimeMillis() - startTime;
707 serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
708 QueryStatus.FAILED, procTime);
709 throw drfm;
710 } finally {
711 if (tx.isActive()) {
712 tx.rollback();
713 }
714 em.close();
715 }
716 }
717
718
719
720
721
722 public BindingDetail saveBinding(SaveBinding body)
723 throws DispositionReportFaultMessage {
724 long startTime = System.currentTimeMillis();
725
726 EntityManager em = PersistenceManager.getEntityManager();
727 EntityTransaction tx = em.getTransaction();
728 try {
729 tx.begin();
730
731 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
732 publisher.populateKeyGeneratorKeys(em);
733 ValidatePublish validator = new ValidatePublish(publisher);
734 validator.validateSaveBinding(em, body, null, publisher);
735
736 BindingDetail result = new BindingDetail();
737 result.setListDescription(new ListDescription());
738 List<org.uddi.api_v3.BindingTemplate> apiBindingTemplateList = body.getBindingTemplate();
739 List<org.apache.juddi.model.ChangeRecord> changes = new ArrayList<ChangeRecord>();
740
741 for (org.uddi.api_v3.BindingTemplate apiBindingTemplate : apiBindingTemplateList) {
742
743 org.apache.juddi.model.BindingTemplate modelBindingTemplate = new org.apache.juddi.model.BindingTemplate();
744
745 org.apache.juddi.model.BusinessService modelBusinessService = new org.apache.juddi.model.BusinessService();
746 modelBusinessService.setEntityKey(apiBindingTemplate.getServiceKey());
747
748 MappingApiToModel.mapBindingTemplate(apiBindingTemplate, modelBindingTemplate, modelBusinessService);
749
750 setOperationalInfo(em, modelBindingTemplate, publisher, true);
751
752 em.persist(modelBindingTemplate);
753
754 result.getBindingTemplate().add(apiBindingTemplate);
755 result.getListDescription().setActualCount(result.getListDescription().getActualCount() + 1);
756 result.getListDescription().setIncludeCount(result.getListDescription().getIncludeCount() + 1);
757 validator.validateSaveBindingMax(em, modelBindingTemplate.getBusinessService().getEntityKey());
758 changes.add(getChangeRecord(modelBindingTemplate, apiBindingTemplate, getNode()));
759 }
760
761 tx.commit();
762 for (int i = 0; i < changes.size(); i++) {
763 ReplicationNotifier.enqueue(changes.get(i));
764 }
765 long procTime = System.currentTimeMillis() - startTime;
766 serviceCounter.update(PublicationQuery.SAVE_BINDING,
767 QueryStatus.SUCCESS, procTime);
768
769 return result;
770 } catch (DispositionReportFaultMessage drfm) {
771 long procTime = System.currentTimeMillis() - startTime;
772 serviceCounter.update(PublicationQuery.SAVE_BINDING,
773 QueryStatus.FAILED, procTime);
774 throw drfm;
775 } finally {
776 if (tx.isActive()) {
777 tx.rollback();
778 }
779 em.close();
780 }
781 }
782
783
784
785
786
787 public BusinessDetail saveBusiness(SaveBusiness body)
788 throws DispositionReportFaultMessage {
789 long startTime = System.currentTimeMillis();
790
791 EntityManager em = PersistenceManager.getEntityManager();
792 EntityTransaction tx = em.getTransaction();
793 try {
794 tx.begin();
795
796 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
797 publisher.populateKeyGeneratorKeys(em);
798 ValidatePublish validator = new ValidatePublish(publisher);
799 validator.validateSaveBusiness(em, body, null, publisher);
800
801 BusinessDetail result = new BusinessDetail();
802
803 List<org.uddi.api_v3.BusinessEntity> apiBusinessEntityList = body.getBusinessEntity();
804 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
805
806 for (org.uddi.api_v3.BusinessEntity apiBusinessEntity : apiBusinessEntityList) {
807
808 org.apache.juddi.model.BusinessEntity modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
809
810 MappingApiToModel.mapBusinessEntity(apiBusinessEntity, modelBusinessEntity);
811
812 setOperationalInfo(em, modelBusinessEntity, publisher);
813 log.debug("Saving business " + modelBusinessEntity.getEntityKey());
814
815 em.persist(modelBusinessEntity);
816 changes.add(getChangeRecord(modelBusinessEntity, apiBusinessEntity, getNode()));
817 result.getBusinessEntity().add(apiBusinessEntity);
818 }
819
820
821 validator.validateSaveBusinessMax(em);
822
823 tx.commit();
824 for (int i = 0; i < changes.size(); i++) {
825 ReplicationNotifier.enqueue(changes.get(i));
826 }
827 long procTime = System.currentTimeMillis() - startTime;
828 serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
829 QueryStatus.SUCCESS, procTime);
830
831 return result;
832 } catch (DispositionReportFaultMessage drfm) {
833 long procTime = System.currentTimeMillis() - startTime;
834 serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
835 QueryStatus.FAILED, procTime);
836 throw drfm;
837 } catch (Exception ex) {
838 StringWriter sw = new StringWriter();
839 if (body != null) {
840 JAXB.marshal(body, sw);
841 }
842 log.fatal("unexpected error!" + sw.toString(), ex);
843 throw new FatalErrorException(new ErrorMessage("E_fatalError", ex.getMessage()));
844 } finally {
845 if (tx.isActive()) {
846 tx.rollback();
847 }
848 em.close();
849 }
850 }
851
852
853
854
855
856 public ServiceDetail saveService(SaveService body)
857 throws DispositionReportFaultMessage {
858 long startTime = System.currentTimeMillis();
859
860 EntityManager em = PersistenceManager.getEntityManager();
861 EntityTransaction tx = em.getTransaction();
862 try {
863 tx.begin();
864
865 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
866 publisher.populateKeyGeneratorKeys(em);
867 ValidatePublish validator = new ValidatePublish(publisher);
868 validator.validateSaveService(em, body, null, publisher);
869
870 ServiceDetail result = new ServiceDetail();
871
872 List<org.uddi.api_v3.BusinessService> apiBusinessServiceList = body.getBusinessService();
873 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
874 for (org.uddi.api_v3.BusinessService apiBusinessService : apiBusinessServiceList) {
875
876 org.apache.juddi.model.BusinessService modelBusinessService = new org.apache.juddi.model.BusinessService();
877 org.apache.juddi.model.BusinessEntity modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
878 modelBusinessEntity.setEntityKey(apiBusinessService.getBusinessKey());
879
880 MappingApiToModel.mapBusinessService(apiBusinessService, modelBusinessService, modelBusinessEntity);
881
882 setOperationalInfo(em, modelBusinessService, publisher, false);
883
884 em.persist(modelBusinessService);
885
886 result.getBusinessService().add(apiBusinessService);
887
888 validator.validateSaveServiceMax(em, modelBusinessService.getBusinessEntity().getEntityKey());
889 changes.add(getChangeRecord(modelBusinessService, apiBusinessService, getNode()));
890 }
891
892 tx.commit();
893 for (int i = 0; i < changes.size(); i++) {
894 ReplicationNotifier.enqueue(changes.get(i));
895 }
896 long procTime = System.currentTimeMillis() - startTime;
897 serviceCounter.update(PublicationQuery.SAVE_SERVICE,
898 QueryStatus.SUCCESS, procTime);
899
900 return result;
901 } catch (DispositionReportFaultMessage drfm) {
902 long procTime = System.currentTimeMillis() - startTime;
903 serviceCounter.update(PublicationQuery.SAVE_SERVICE,
904 QueryStatus.FAILED, procTime);
905 throw drfm;
906 } finally {
907 if (tx.isActive()) {
908 tx.rollback();
909 }
910 em.close();
911 }
912 }
913
914
915
916
917
918 @Override
919 public TModelDetail saveTModel(SaveTModel body)
920 throws DispositionReportFaultMessage {
921 long startTime = System.currentTimeMillis();
922
923 EntityManager em = PersistenceManager.getEntityManager();
924 EntityTransaction tx = em.getTransaction();
925 try {
926 tx.begin();
927
928 UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
929 publisher.populateKeyGeneratorKeys(em);
930 new ValidatePublish(publisher).validateSaveTModel(em, body, null, publisher);
931
932 TModelDetail result = new TModelDetail();
933
934 List<org.uddi.api_v3.TModel> apiTModelList = body.getTModel();
935 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
936 for (org.uddi.api_v3.TModel apiTModel : apiTModelList) {
937
938
939
940 org.apache.juddi.model.Tmodel modelTModel = new org.apache.juddi.model.Tmodel();
941
942 MappingApiToModel.mapTModel(apiTModel, modelTModel);
943
944 setOperationalInfo(em, modelTModel, publisher);
945
946 em.persist(modelTModel);
947
948 result.getTModel().add(apiTModel);
949 changes.add(getChangeRecord(modelTModel, apiTModel, getNode()));
950
951
952
953
954
955
956
957
958
959
960 }
961
962 tx.commit();
963 for (int i = 0; i < changes.size(); i++) {
964 ReplicationNotifier.enqueue(changes.get(i));
965 }
966 long procTime = System.currentTimeMillis() - startTime;
967 serviceCounter.update(PublicationQuery.SAVE_TMODEL,
968 QueryStatus.SUCCESS, procTime);
969
970 return result;
971 } catch (DispositionReportFaultMessage drfm) {
972 long procTime = System.currentTimeMillis() - startTime;
973 serviceCounter.update(PublicationQuery.SAVE_TMODEL,
974 QueryStatus.FAILED, procTime);
975 throw drfm;
976 } finally {
977 if (tx.isActive()) {
978 tx.rollback();
979 }
980 em.close();
981 }
982 }
983
984
985
986
987
988 @Override
989 public void setPublisherAssertions(String authInfo,
990 Holder<List<PublisherAssertion>> publisherAssertion)
991 throws DispositionReportFaultMessage {
992 long startTime = System.currentTimeMillis();
993
994 EntityManager em = PersistenceManager.getEntityManager();
995 EntityTransaction tx = em.getTransaction();
996 List<ChangeRecord> changes = new ArrayList<ChangeRecord>();
997 try {
998 tx.begin();
999
1000 UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
1001
1002 new ValidatePublish(publisher).validateSetPublisherAssertions(em, publisherAssertion);
1003
1004 List<?> businessKeysFound = null;
1005 businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
1006
1007
1008
1009 List<org.apache.juddi.model.PublisherAssertion> existingAssertions = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, null);
1010
1011 logger.debug(">>>> Existing assertions " + existingAssertions.size() + ", inbound set " + publisherAssertion.value.size());
1012 List<org.apache.juddi.model.PublisherAssertion> deleteMe = diff(publisherAssertion.value, existingAssertions);
1013 logger.debug(">>>> DIFF size is " + deleteMe.size());
1014 for (org.apache.juddi.model.PublisherAssertion del : deleteMe) {
1015 logger.debug(">>>> PROCESSING " + del.getBusinessEntityByFromKey().getEntityKey() + " " + del.getBusinessEntityByToKey().getEntityKey());
1016 boolean from = false;
1017 if (del.getFromCheck() != null) {
1018 del.getFromCheck().equalsIgnoreCase("true");
1019 }
1020 boolean to = false;
1021 if (del.getToCheck() != null) {
1022 del.getToCheck().equalsIgnoreCase("true");
1023 }
1024 if (publisher.isOwner(del.getBusinessEntityByFromKey())) {
1025 from = false;
1026 }
1027 if (publisher.isOwner(del.getBusinessEntityByToKey())) {
1028 to = false;
1029 }
1030 PublisherAssertion api = new PublisherAssertion();
1031 MappingModelToApi.mapPublisherAssertion(del, api);
1032
1033 if (!to && !from) {
1034 logger.debug(">>>> DELETE ME " + del.getBusinessEntityByFromKey().getEntityKey() + " " + del.getBusinessEntityByToKey().getEntityKey());
1035 em.remove(del);
1036 } else {
1037 logger.debug(">>>> MERGING ME " + del.getBusinessEntityByFromKey().getEntityKey() + " " + del.getBusinessEntityByToKey().getEntityKey());
1038 del.setFromCheck(from ? "true" : "false");
1039 del.setToCheck(to ? "true" : "false");
1040 del.setModified(new Date());
1041 em.merge(del);
1042 }
1043 changes.add(getChangeRecord_deletePublisherAssertion(api, getNode(), to, from, System.currentTimeMillis()));
1044 }
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076 tx.commit();
1077 if (!publisherAssertion.value.isEmpty()) {
1078 AddPublisherAssertions addPublisherAssertions = new AddPublisherAssertions();
1079 addPublisherAssertions.setAuthInfo(authInfo);
1080 addPublisherAssertions.getPublisherAssertion().addAll(publisherAssertion.value);
1081 addPublisherAssertions(addPublisherAssertions);
1082 }
1083 for (int i = 0; i < changes.size(); i++) {
1084 ReplicationNotifier.enqueue(changes.get(i));
1085 }
1086 long procTime = System.currentTimeMillis() - startTime;
1087 serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
1088 QueryStatus.SUCCESS, procTime);
1089 } catch (DispositionReportFaultMessage drfm) {
1090 long procTime = System.currentTimeMillis() - startTime;
1091 serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
1092 QueryStatus.FAILED, procTime);
1093 throw drfm;
1094 } finally {
1095 if (tx.isActive()) {
1096 tx.rollback();
1097 }
1098 em.close();
1099 }
1100 }
1101
1102 private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BusinessEntity uddiEntity, UddiEntityPublisher publisher) throws DispositionReportFaultMessage {
1103
1104 uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
1105
1106 Date now = new Date();
1107 uddiEntity.setModified(now);
1108 uddiEntity.setModifiedIncludingChildren(now);
1109
1110 String nodeId = "";
1111 try {
1112 nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
1113 } catch (ConfigurationException ce) {
1114 throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
1115 }
1116 uddiEntity.setNodeId(nodeId);
1117
1118 org.apache.juddi.model.BusinessEntity existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
1119 if (existingUddiEntity != null) {
1120 uddiEntity.setCreated(existingUddiEntity.getCreated());
1121 } else {
1122 uddiEntity.setCreated(now);
1123 }
1124
1125 List<org.apache.juddi.model.BusinessService> serviceList = uddiEntity.getBusinessServices();
1126 for (org.apache.juddi.model.BusinessService service : serviceList) {
1127 setOperationalInfo(em, service, publisher, true);
1128 }
1129
1130 if (existingUddiEntity != null) {
1131 em.remove(existingUddiEntity);
1132 }
1133
1134 }
1135
1136 private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BusinessService uddiEntity, UddiEntityPublisher publisher, boolean isChild) throws DispositionReportFaultMessage {
1137
1138 uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
1139
1140 Date now = new Date();
1141 uddiEntity.setModified(now);
1142 uddiEntity.setModifiedIncludingChildren(now);
1143
1144 if (!isChild) {
1145 org.apache.juddi.model.BusinessEntity parent = em.find(org.apache.juddi.model.BusinessEntity.class, uddiEntity.getBusinessEntity().getEntityKey());
1146 parent.setModifiedIncludingChildren(now);
1147 em.persist(parent);
1148 }
1149
1150 String nodeId = "";
1151 try {
1152 nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
1153 } catch (ConfigurationException ce) {
1154 throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
1155 }
1156 uddiEntity.setNodeId(nodeId);
1157
1158 org.apache.juddi.model.BusinessService existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
1159 if (existingUddiEntity != null) {
1160 uddiEntity.setCreated(existingUddiEntity.getCreated());
1161 } else {
1162 uddiEntity.setCreated(now);
1163 }
1164
1165 List<org.apache.juddi.model.BindingTemplate> bindingList = uddiEntity.getBindingTemplates();
1166 for (org.apache.juddi.model.BindingTemplate binding : bindingList) {
1167 setOperationalInfo(em, binding, publisher, true);
1168 }
1169
1170 if (existingUddiEntity != null) {
1171 em.remove(existingUddiEntity);
1172 }
1173
1174 }
1175
1176 private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BindingTemplate uddiEntity, UddiEntityPublisher publisher, boolean isChild) throws DispositionReportFaultMessage {
1177
1178 uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
1179
1180 Date now = new Date();
1181 uddiEntity.setModified(now);
1182 uddiEntity.setModifiedIncludingChildren(now);
1183
1184
1185 org.apache.juddi.model.BusinessService parent = em.find(org.apache.juddi.model.BusinessService.class, uddiEntity.getBusinessService().getEntityKey());
1186 if (parent != null) {
1187 parent.setModifiedIncludingChildren(now);
1188 em.persist(parent);
1189
1190
1191 org.apache.juddi.model.BusinessEntity businessParent = em.find(org.apache.juddi.model.BusinessEntity.class, parent.getBusinessEntity().getEntityKey());
1192 if (businessParent != null) {
1193 businessParent.setModifiedIncludingChildren(now);
1194 em.persist(businessParent);
1195 } else {
1196 logger.debug("Parent business is null for saved binding template!");
1197 }
1198 } else {
1199 logger.debug("Parent service is null for saved binding template!");
1200 }
1201
1202
1203 String nodeId = "";
1204 try {
1205 nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
1206 } catch (ConfigurationException ce) {
1207 throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
1208 }
1209 uddiEntity.setNodeId(nodeId);
1210
1211 org.apache.juddi.model.BindingTemplate existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
1212 if (existingUddiEntity != null) {
1213 uddiEntity.setCreated(existingUddiEntity.getCreated());
1214 } else {
1215 uddiEntity.setCreated(now);
1216 }
1217
1218 if (existingUddiEntity != null) {
1219 em.remove(existingUddiEntity);
1220 }
1221
1222 }
1223
1224 private void setOperationalInfo(EntityManager em, org.apache.juddi.model.Tmodel uddiEntity, UddiEntityPublisher publisher) throws DispositionReportFaultMessage {
1225
1226 uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
1227
1228 Date now = new Date();
1229 uddiEntity.setModified(now);
1230 uddiEntity.setModifiedIncludingChildren(now);
1231
1232 String nodeId = "";
1233 try {
1234 nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
1235 } catch (ConfigurationException ce) {
1236 throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID));
1237 }
1238 uddiEntity.setNodeId(nodeId);
1239
1240 org.apache.juddi.model.Tmodel existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
1241 if (existingUddiEntity != null) {
1242 uddiEntity.setCreated(existingUddiEntity.getCreated());
1243 } else {
1244 uddiEntity.setCreated(now);
1245 }
1246
1247 if (existingUddiEntity != null) {
1248 em.remove(existingUddiEntity);
1249 }
1250
1251 }
1252
1253 public static ChangeRecord getChangeRecord(BindingTemplate modelBindingTemplate, org.uddi.api_v3.BindingTemplate api, String node) throws DispositionReportFaultMessage {
1254 ChangeRecord cr = new ChangeRecord();
1255 cr.setEntityKey(modelBindingTemplate.getEntityKey());
1256 cr.setNodeID(node);
1257
1258 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
1259 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1260 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1261 crapi.setChangeRecordNewData(new ChangeRecordNewData());
1262 crapi.getChangeRecordNewData().setBindingTemplate(api);
1263 crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
1264 MappingModelToApi.mapOperationalInfo(modelBindingTemplate, crapi.getChangeRecordNewData().getOperationalInfo());
1265 StringWriter sw = new StringWriter();
1266 JAXB.marshal(crapi, sw);
1267 try {
1268 cr.setContents(sw.toString().getBytes("UTF8"));
1269 } catch (UnsupportedEncodingException ex) {
1270 logger.error(ex);
1271 }
1272 return cr;
1273 }
1274
1275 public static ChangeRecord getChangeRecord(BusinessService model, org.uddi.api_v3.BusinessService api, String node) throws DispositionReportFaultMessage {
1276 ChangeRecord cr = new ChangeRecord();
1277 cr.setEntityKey(model.getEntityKey());
1278 cr.setNodeID(node);
1279
1280 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
1281 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1282 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1283 crapi.setChangeRecordNewData(new ChangeRecordNewData());
1284 crapi.getChangeRecordNewData().setBusinessService(api);
1285 crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
1286 MappingModelToApi.mapOperationalInfo(model, crapi.getChangeRecordNewData().getOperationalInfo());
1287 StringWriter sw = new StringWriter();
1288 JAXB.marshal(crapi, sw);
1289 try {
1290 cr.setContents(sw.toString().getBytes("UTF8"));
1291 } catch (UnsupportedEncodingException ex) {
1292 logger.error(ex);
1293 }
1294 return cr;
1295 }
1296
1297 public ChangeRecord getChangeRecord_deleteBusiness(String entityKey, String node) {
1298 ChangeRecord cr = new ChangeRecord();
1299 cr.setEntityKey(entityKey);
1300 cr.setNodeID(node);
1301
1302 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
1303 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1304 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1305 crapi.setChangeRecordDelete(new ChangeRecordDelete());
1306 crapi.getChangeRecordDelete().setBusinessKey(entityKey);
1307 crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
1308
1309 StringWriter sw = new StringWriter();
1310 JAXB.marshal(crapi, sw);
1311 try {
1312 cr.setContents(sw.toString().getBytes("UTF8"));
1313 } catch (UnsupportedEncodingException ex) {
1314 logger.error(ex);
1315 }
1316 return cr;
1317 }
1318
1319 public ChangeRecord getChangeRecord_deleteService(String entityKey, String node) {
1320 ChangeRecord cr = new ChangeRecord();
1321 cr.setEntityKey(entityKey);
1322 cr.setNodeID(node);
1323
1324 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
1325 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1326 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1327 crapi.setChangeRecordDelete(new ChangeRecordDelete());
1328 crapi.getChangeRecordDelete().setServiceKey(entityKey);
1329 crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
1330
1331 StringWriter sw = new StringWriter();
1332 JAXB.marshal(crapi, sw);
1333 try {
1334 cr.setContents(sw.toString().getBytes("UTF8"));
1335 } catch (UnsupportedEncodingException ex) {
1336 logger.error(ex);
1337 }
1338 return cr;
1339 }
1340
1341
1342
1343
1344
1345
1346
1347
1348 public ChangeRecord getChangeRecord_deleteTModelHide(String entityKey, String node) {
1349 ChangeRecord cr = new ChangeRecord();
1350 cr.setEntityKey(entityKey);
1351 cr.setNodeID(node);
1352 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordHide);
1353 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1354 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1355
1356 crapi.setChangeRecordHide(new ChangeRecordHide());
1357 crapi.getChangeRecordHide().setTModelKey(entityKey);
1358 crapi.getChangeRecordHide().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
1359
1360 StringWriter sw = new StringWriter();
1361 JAXB.marshal(crapi, sw);
1362
1363 try {
1364 cr.setContents(sw.toString().getBytes("UTF8"));
1365 } catch (UnsupportedEncodingException ex) {
1366 logger.error(ex);
1367 }
1368 return cr;
1369 }
1370
1371
1372
1373
1374
1375
1376
1377
1378 public static ChangeRecord getChangeRecord_deleteTModelDelete(String entityKey, String node, DatatypeFactory df) {
1379 ChangeRecord cr = new ChangeRecord();
1380 cr.setEntityKey(entityKey);
1381 cr.setNodeID(node);
1382 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
1383 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1384 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1385
1386 crapi.setChangeRecordDelete(new ChangeRecordDelete());
1387 crapi.getChangeRecordDelete().setTModelKey(entityKey);
1388 crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
1389
1390 StringWriter sw = new StringWriter();
1391 JAXB.marshal(crapi, sw);
1392
1393 try {
1394 cr.setContents(sw.toString().getBytes("UTF8"));
1395 } catch (UnsupportedEncodingException ex) {
1396 logger.error(ex);
1397 }
1398 return cr;
1399 }
1400
1401 public static ChangeRecord getChangeRecord(BusinessEntity modelBusinessEntity, org.uddi.api_v3.BusinessEntity apiBusinessEntity, String node) throws DispositionReportFaultMessage {
1402 ChangeRecord cr = new ChangeRecord();
1403 cr.setEntityKey(modelBusinessEntity.getEntityKey());
1404 cr.setNodeID(node);
1405
1406 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
1407 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1408 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1409 crapi.setChangeRecordNewData(new ChangeRecordNewData());
1410 crapi.getChangeRecordNewData().setBusinessEntity(apiBusinessEntity);
1411 crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
1412 MappingModelToApi.mapOperationalInfo(modelBusinessEntity, crapi.getChangeRecordNewData().getOperationalInfo());
1413 StringWriter sw = new StringWriter();
1414 JAXB.marshal(crapi, sw);
1415 try {
1416 cr.setContents(sw.toString().getBytes("UTF8"));
1417 } catch (UnsupportedEncodingException ex) {
1418 logger.error(ex);
1419 }
1420 return cr;
1421 }
1422
1423 public static ChangeRecord getChangeRecord(Tmodel modelBusinessEntity, org.uddi.api_v3.TModel apiBusinessEntity, String node) throws DispositionReportFaultMessage {
1424 ChangeRecord cr = new ChangeRecord();
1425 if (!apiBusinessEntity.getTModelKey().equals(modelBusinessEntity.getEntityKey())) {
1426 throw new FatalErrorException(new ErrorMessage("E_fatalError", "the model and api keys do not match when saving a tmodel!"));
1427 }
1428 cr.setEntityKey(modelBusinessEntity.getEntityKey());
1429 cr.setNodeID(node);
1430
1431 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewData);
1432 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1433 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1434 crapi.setChangeRecordNewData(new ChangeRecordNewData());
1435 crapi.getChangeRecordNewData().setTModel(apiBusinessEntity);
1436 crapi.getChangeRecordNewData().getTModel().setTModelKey(modelBusinessEntity.getEntityKey());
1437 crapi.getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
1438 MappingModelToApi.mapOperationalInfo(modelBusinessEntity, crapi.getChangeRecordNewData().getOperationalInfo());
1439 StringWriter sw = new StringWriter();
1440 JAXB.marshal(crapi, sw);
1441 try {
1442 cr.setContents(sw.toString().getBytes("UTF8"));
1443 } catch (UnsupportedEncodingException ex) {
1444 logger.error(ex);
1445 }
1446 return cr;
1447 }
1448
1449 public ChangeRecord getChangeRecord_deleteBinding(String entityKey, String node) {
1450 ChangeRecord cr = new ChangeRecord();
1451 cr.setEntityKey(entityKey);
1452 cr.setNodeID(node);
1453
1454 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDelete);
1455 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1456 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1457 crapi.setChangeRecordDelete(new ChangeRecordDelete());
1458 crapi.getChangeRecordDelete().setBindingKey(entityKey);
1459 crapi.getChangeRecordDelete().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
1460
1461 StringWriter sw = new StringWriter();
1462 JAXB.marshal(crapi, sw);
1463 try {
1464 cr.setContents(sw.toString().getBytes("UTF8"));
1465 } catch (UnsupportedEncodingException ex) {
1466 logger.error(ex);
1467 }
1468 return cr;
1469 }
1470
1471 public ChangeRecord getChangeRecord_deletePublisherAssertion(PublisherAssertion entity, String node, boolean ToBusinessDelete, boolean FromBusinessDelete, long timestamp) {
1472 ChangeRecord cr = new ChangeRecord();
1473
1474 cr.setNodeID(node);
1475
1476 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordDeleteAssertion);
1477 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1478 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1479 crapi.setChangeRecordDeleteAssertion(new ChangeRecordDeleteAssertion());
1480 crapi.getChangeRecordDeleteAssertion().setPublisherAssertion(entity);
1481 crapi.getChangeRecordDeleteAssertion().setToBusinessCheck(ToBusinessDelete);
1482 crapi.getChangeRecordDeleteAssertion().setFromBusinessCheck(FromBusinessDelete);
1483 GregorianCalendar gcal = new GregorianCalendar();
1484 gcal.setTimeInMillis(timestamp);
1485 crapi.getChangeRecordDeleteAssertion().setModified(df.newXMLGregorianCalendar(gcal));
1486
1487 StringWriter sw = new StringWriter();
1488 JAXB.marshal(crapi, sw);
1489 try {
1490 cr.setContents(sw.toString().getBytes("UTF8"));
1491 } catch (UnsupportedEncodingException ex) {
1492 logger.error(ex);
1493 }
1494 return cr;
1495 }
1496
1497 public ChangeRecord getChangeRecord_NewAssertion(PublisherAssertion apiPubAssertion, org.apache.juddi.model.PublisherAssertion modelPubAssertion, String node) {
1498 ChangeRecord cr = new ChangeRecord();
1499
1500 cr.setNodeID(node);
1501
1502 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordPublisherAssertion);
1503 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1504 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1505 crapi.setChangeRecordPublisherAssertion(new ChangeRecordPublisherAssertion());
1506 crapi.getChangeRecordPublisherAssertion().setFromBusinessCheck(modelPubAssertion.getFromCheck().equalsIgnoreCase("true"));
1507 crapi.getChangeRecordPublisherAssertion().setToBusinessCheck(modelPubAssertion.getToCheck().equalsIgnoreCase("true"));
1508 crapi.getChangeRecordPublisherAssertion().setPublisherAssertion(apiPubAssertion);
1509
1510 crapi.getChangeRecordPublisherAssertion().setModified(df.newXMLGregorianCalendar(new GregorianCalendar()));
1511
1512 StringWriter sw = new StringWriter();
1513 JAXB.marshal(crapi, sw);
1514 try {
1515 cr.setContents(sw.toString().getBytes("UTF8"));
1516 } catch (UnsupportedEncodingException ex) {
1517 logger.error(ex);
1518 }
1519 return cr;
1520 }
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530 private List<org.apache.juddi.model.PublisherAssertion> diff(List<PublisherAssertion> value, List<org.apache.juddi.model.PublisherAssertion> existingAssertions) throws DispositionReportFaultMessage {
1531 List<org.apache.juddi.model.PublisherAssertion> ret = new ArrayList<org.apache.juddi.model.PublisherAssertion>();
1532 if (value == null || value.isEmpty()) {
1533 return existingAssertions;
1534 }
1535 if (existingAssertions == null) {
1536 return new ArrayList<org.apache.juddi.model.PublisherAssertion>();
1537 }
1538 for (org.apache.juddi.model.PublisherAssertion model : existingAssertions) {
1539
1540 boolean found = false;
1541 for (PublisherAssertion paapi : value) {
1542 if (model.getBusinessEntityByFromKey().getEntityKey().equalsIgnoreCase(paapi.getFromKey())
1543 && model.getBusinessEntityByToKey().getEntityKey().equalsIgnoreCase(paapi.getToKey())
1544 && model.getKeyName().equals(paapi.getKeyedReference().getKeyName())
1545 && model.getKeyValue().equals(paapi.getKeyedReference().getKeyValue())
1546 && model.getTmodelKey().equalsIgnoreCase(paapi.getKeyedReference().getTModelKey())) {
1547 found = true;
1548 break;
1549 }
1550 }
1551 if (!found) {
1552 ret.add(model);
1553 }
1554 }
1555 return ret;
1556 }
1557
1558 private static ChangeRecord getChangeRecordConditional(Tmodel modelTModel, TModel apiTModel, String node) throws DispositionReportFaultMessage {
1559 ChangeRecord cr = new ChangeRecord();
1560 if (!apiTModel.getTModelKey().equals(modelTModel.getEntityKey())) {
1561 throw new FatalErrorException(new ErrorMessage("E_fatalError", "the model and api keys do not match when saving a tmodel!"));
1562 }
1563 cr.setEntityKey(modelTModel.getEntityKey());
1564 cr.setNodeID(node);
1565
1566 cr.setRecordType(ChangeRecord.RecordType.ChangeRecordNewDataConditional);
1567 org.uddi.repl_v3.ChangeRecord crapi = new org.uddi.repl_v3.ChangeRecord();
1568 crapi.setChangeID(new ChangeRecordIDType(node, -1L));
1569 crapi.setChangeRecordNewDataConditional(new ChangeRecordNewDataConditional());
1570 crapi.getChangeRecordNewDataConditional().setChangeRecordNewData(new ChangeRecordNewData());
1571 crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().setTModel(apiTModel);
1572 crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().getTModel().setTModelKey(modelTModel.getEntityKey());
1573 crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().setOperationalInfo(new OperationalInfo());
1574 MappingModelToApi.mapOperationalInfo(modelTModel, crapi.getChangeRecordNewDataConditional().getChangeRecordNewData().getOperationalInfo());
1575 StringWriter sw = new StringWriter();
1576 JAXB.marshal(crapi, sw);
1577 try {
1578 cr.setContents(sw.toString().getBytes("UTF8"));
1579 } catch (UnsupportedEncodingException ex) {
1580 logger.error(ex);
1581 }
1582 return cr;
1583 }
1584
1585 private void removeExistingPublisherAssertionSignatures(String from, String to, EntityManager em) {
1586 Query createQuery = em.createQuery("delete from Signature pa where pa.publisherAssertionFromKey=:from and pa.publisherAssertionToKey=:to");
1587 createQuery.setParameter("from", from);
1588 createQuery.setParameter("to", to);
1589 createQuery.executeUpdate();
1590 }
1591
1592 private void savePushliserAssertionSignatures(String from, String to, List<Signature> signatures, EntityManager em) {
1593 if (signatures == null) {
1594 return;
1595 }
1596 for (Signature s : signatures) {
1597 s.setPublisherAssertionFromKey(from);
1598 s.setPublisherAssertionToKey(to);
1599 em.persist(s);
1600 }
1601 }
1602
1603 }