001package org.andromda.cartridges.ejb3.metafacades; 002 003import java.text.MessageFormat; 004import java.util.ArrayList; 005import java.util.Collection; 006import java.util.Iterator; 007import java.util.LinkedHashSet; 008import java.util.List; 009import org.andromda.cartridges.ejb3.EJB3Globals; 010import org.andromda.cartridges.ejb3.EJB3Profile; 011import org.andromda.metafacades.uml.DependencyFacade; 012import org.andromda.metafacades.uml.ModelElementFacade; 013import org.andromda.metafacades.uml.OperationFacade; 014import org.andromda.metafacades.uml.ParameterFacade; 015import org.andromda.metafacades.uml.Role; 016import org.apache.commons.collections.Closure; 017import org.apache.commons.collections.CollectionUtils; 018import org.apache.commons.collections.Predicate; 019import org.apache.commons.collections.Transformer; 020import org.apache.commons.lang.BooleanUtils; 021import org.apache.commons.lang.StringUtils; 022 023/** 024 * MetafacadeLogic implementation for org.andromda.cartridges.ejb3.metafacades.EJB3SessionOperationFacade. 025 * 026 * @see EJB3SessionOperationFacade 027 */ 028public class EJB3SessionOperationFacadeLogicImpl 029 extends EJB3SessionOperationFacadeLogic 030{ 031 private static final long serialVersionUID = 34L; 032 /** 033 * The property which stores the pattern used to generate the service operation test name 034 */ 035 private static final String SERVICE_OPERATION_TEST_NAME_PATTERN = "serviceOperationTestNamePattern"; 036 037 /** 038 * @param metaObject 039 * @param context 040 */ 041 public EJB3SessionOperationFacadeLogicImpl(final Object metaObject, final String context) 042 { 043 super (metaObject, context); 044 } 045 046 /** 047 * @see EJB3SessionOperationFacade#getViewType() 048 */ 049 @Override 050 protected String handleGetViewType() 051 { 052 String viewType = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_VIEWTYPE); 053 if (StringUtils.isBlank(viewType)) 054 { 055 EJB3SessionFacade sessionFacade = (EJB3SessionFacade)this.getOwner(); 056 if (StringUtils.isNotBlank(sessionFacade.getViewType())) 057 { 058 viewType = sessionFacade.getViewType(); 059 } 060 else 061 { 062 viewType = EJB3Globals.VIEW_TYPE_BOTH; 063 } 064 } 065 return viewType; 066 } 067 068 /** 069 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeRemote() 070 */ 071 @Override 072 protected boolean handleIsViewTypeRemote() 073 { 074 boolean isRemote = false; 075 if (this.getViewType().equalsIgnoreCase(EJB3Globals.VIEW_TYPE_REMOTE)) 076 { 077 isRemote = true; 078 } 079 return isRemote; 080 } 081 082 /** 083 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeLocal() 084 */ 085 @Override 086 protected boolean handleIsViewTypeLocal() 087 { 088 boolean isLocal = false; 089 if (this.getViewType().equalsIgnoreCase(EJB3Globals.VIEW_TYPE_LOCAL)) 090 { 091 isLocal = true; 092 } 093 return isLocal; 094 } 095 096 /** 097 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeBoth() 098 */ 099 @Override 100 protected boolean handleIsViewTypeBoth() 101 { 102 boolean isBoth = false; 103 if (this.getViewType().equalsIgnoreCase(EJB3Globals.VIEW_TYPE_BOTH)) 104 { 105 isBoth = true; 106 } 107 return isBoth; 108 } 109 110 /** 111 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeStrictlyLocal() 112 */ 113 @Override 114 protected boolean handleIsViewTypeStrictlyLocal() 115 { 116 boolean isViewTypeStrictlyLocal = false; 117 String viewType = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_VIEWTYPE); 118 if (StringUtils.equalsIgnoreCase(viewType, EJB3Globals.VIEW_TYPE_LOCAL) || this.isViewTypeStrictlyBoth()) 119 { 120 isViewTypeStrictlyLocal = true; 121 } 122 return isViewTypeStrictlyLocal; 123 } 124 125 /** 126 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeStrictlyRemote() 127 */ 128 @Override 129 protected boolean handleIsViewTypeStrictlyRemote() 130 { 131 boolean isViewTypeStrictlyRemote = false; 132 String viewType = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_VIEWTYPE); 133 if (StringUtils.equalsIgnoreCase(viewType, EJB3Globals.VIEW_TYPE_REMOTE) || this.isViewTypeStrictlyBoth()) 134 { 135 isViewTypeStrictlyRemote = true; 136 } 137 return isViewTypeStrictlyRemote; 138 } 139 140 /** 141 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeStrictlyBoth() 142 */ 143 @Override 144 protected boolean handleIsViewTypeStrictlyBoth() 145 { 146 boolean isViewTypeStrictlyBoth = false; 147 String viewType = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_VIEWTYPE); 148 if (StringUtils.equalsIgnoreCase(viewType, EJB3Globals.VIEW_TYPE_BOTH)) 149 { 150 isViewTypeStrictlyBoth = true; 151 } 152 return isViewTypeStrictlyBoth; 153 } 154 155 /** 156 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeAbsoluteLocal() 157 */ 158 @Override 159 protected boolean handleIsViewTypeAbsoluteLocal() 160 { 161 boolean isViewTypeAsbolutelyLocal = false; 162 EJB3SessionFacade session = (EJB3SessionFacade)this.getOwner(); 163 if (!this.isLifecycleCallback() && 164 StringUtils.equalsIgnoreCase(this.getVisibility(), "public") && 165 ((session.isViewTypeBoth() && 166 ((session.isViewTypeStrictlyRemote() && this.isViewTypeStrictlyLocal()) || 167 ((session.isViewTypeStrictlyLocal() || session.isViewTypeStrictlyBoth()) && 168 !this.isViewTypeStrictlyRemote()))) || 169 (session.isViewTypeStrictlyLocal() && !this.isViewTypeStrictlyRemote()) || 170 this.isViewTypeStrictlyBoth())) 171 { 172 isViewTypeAsbolutelyLocal = true; 173 } 174 return isViewTypeAsbolutelyLocal; 175 } 176 177 /** 178 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeAbsoluteRemote() 179 */ 180 @Override 181 protected boolean handleIsViewTypeAbsoluteRemote() 182 { 183 boolean isViewTypeAsbolutelyRemote = false; 184 EJB3SessionFacade session = (EJB3SessionFacade)this.getOwner(); 185 if (!this.isLifecycleCallback() && 186 StringUtils.equalsIgnoreCase(this.getVisibility(), "public") && 187 ((session.isViewTypeBoth() && 188 ((session.isViewTypeStrictlyLocal() && this.isViewTypeStrictlyRemote()) || 189 ((session.isViewTypeStrictlyRemote() || session.isViewTypeStrictlyBoth()) && 190 !this.isViewTypeStrictlyLocal()))) || 191 (session.isViewTypeStrictlyRemote() && !this.isViewTypeStrictlyLocal()) || 192 this.isViewTypeStrictlyBoth())) 193 { 194 isViewTypeAsbolutelyRemote = true; 195 } 196 return isViewTypeAsbolutelyRemote; 197 } 198 199 /** 200 * @see EJB3SessionOperationFacadeLogic#handleIsViewTypeAbsoluteBoth() 201 */ 202 @Override 203 protected boolean handleIsViewTypeAbsoluteBoth() 204 { 205 boolean isViewTypeAbsolutelyBoth = false; 206 if (this.isViewTypeAbsoluteLocal() && this.isViewTypeAbsoluteRemote()) 207 { 208 isViewTypeAbsolutelyBoth = true; 209 } 210 return isViewTypeAbsolutelyBoth; 211 } 212 213 /** 214 * @see EJB3SessionOperationFacadeLogic#getSignature() 215 * 216 * Override the default implementation to check for timer service and 217 * replace all attributes with javax.ejb.Timer attribute. 218 */ 219 public String getSignature() 220 { 221 String signature = super.getSignature(); 222 if (this.isTimeoutCallback()) 223 { 224 final StringBuilder timeoutSignature = new StringBuilder(this.getName()); 225 timeoutSignature.append("("); 226 timeoutSignature.append("javax.ejb.Timer timer"); 227 timeoutSignature.append(")"); 228 signature = timeoutSignature.toString(); 229 } 230 return signature; 231 } 232 233 /** 234 * @see EJB3SessionOperationFacadeLogic#handleGetTestSignature() 235 */ 236 @Override 237 protected String handleGetTestSignature() 238 { 239 return this.getTestName() + "()"; 240 } 241 242 /** 243 * @see EJB3SessionOperationFacadeLogic#handleGetTestName() 244 */ 245 @Override 246 protected String handleGetTestName() 247 { 248 String serviceOperationTestNamePattern = 249 (String)this.getConfiguredProperty(SERVICE_OPERATION_TEST_NAME_PATTERN); 250 251 String name = this.getName(); 252 // Determine if any overloaded operations exist - test name must be unique even if operation name is not 253 List<OperationFacade> operations = this.getOwner().getOperations(); 254 for (OperationFacade operation : operations) 255 { 256 if (operation.getName().equals(name) && 257 !operation.getArgumentNames().equals(this.getArgumentNames())) 258 { 259 // Two methods with the same name different arguments exist, use argument names to distinguish 260 for (ParameterFacade argument : this.getArguments()) 261 { 262 name += StringUtils.capitalize(argument.getName()); 263 } 264 } 265 } 266 267 // default = testOperationname[Parameternames] 268 return MessageFormat.format( 269 serviceOperationTestNamePattern, 270 StringUtils.trimToEmpty(StringUtils.capitalize(name))); 271 } 272 273 /** 274 * @see EJB3SessionOperationFacadeLogic#getCall() 275 * 276 * Override the default implementation to check for timer service and 277 * add the javax.ejb.Timer attribute to the call. 278 */ 279 public String getCall() 280 { 281 String call = super.getCall(); 282 if (this.isTimeoutCallback()) 283 { 284 final StringBuilder buffer = new StringBuilder(this.getName()); 285 buffer.append("("); 286 buffer.append("timer"); 287 buffer.append(")"); 288 call = buffer.toString(); 289 } 290 return call; 291 } 292 293 /** 294 * @see EJB3SessionOperationFacadeLogic#handleGetTransactionType() 295 * 296 * If no method level transaction type specified, take it from the class level if it exists there. 297 */ 298 @Override 299 protected String handleGetTransactionType() 300 { 301 String transType = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_TRANSACTION_TYPE); 302 if (StringUtils.isNotBlank(transType)) 303 { 304 transType = EJB3MetafacadeUtils.convertTransactionType(transType); 305 } 306 else 307 { 308 EJB3SessionFacade session = (EJB3SessionFacade)this.getOwner(); 309 transType = session.getTransactionType(); 310 } 311 return transType; 312 } 313 314 /** 315 * @see EJB3SessionOperationFacadeLogic#handleIsBusinessOperation() 316 */ 317 @Override 318 protected boolean handleIsBusinessOperation() 319 { 320 return !this.hasStereotype(EJB3Profile.STEREOTYPE_CREATE_METHOD); 321 } 322 323 /** 324 * @see EJB3SessionOperationFacadeLogic#handleGetRolesAllowed() 325 */ 326 @Override 327 protected String handleGetRolesAllowed() 328 { 329 StringBuilder rolesAllowed = null; 330 String separator = ""; 331 332 for (final Iterator iter = this.getNonRunAsRoles().iterator(); iter.hasNext(); ) 333 { 334 if (rolesAllowed == null) 335 { 336 rolesAllowed = new StringBuilder(); 337 } 338 rolesAllowed.append(separator); 339 Role role = (Role)iter.next(); 340 rolesAllowed.append('"'); 341 rolesAllowed.append(role.getName()); 342 rolesAllowed.append('"'); 343 separator = ", "; 344 } 345 return rolesAllowed != null ? rolesAllowed.toString() : null; 346 } 347 348 /** 349 * @see EJB3SessionOperationFacadeLogic#handleIsPermitAll() 350 */ 351 @Override 352 protected boolean handleIsPermitAll() 353 { 354 boolean permitAll = false; 355 String permitAllStr = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_SECURITY_PERMIT_ALL); 356 if (StringUtils.isNotBlank(permitAllStr)) 357 { 358 permitAll = BooleanUtils.toBoolean(permitAllStr); 359 } 360 return permitAll; 361 } 362 363 /** 364 * @see EJB3SessionOperationFacadeLogic#handleIsDenyAll() 365 */ 366 @Override 367 protected boolean handleIsDenyAll() 368 { 369 boolean denyAll = false; 370 String denyAllStr = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_SECURITY_DENY_ALL); 371 if (StringUtils.isNotBlank(denyAllStr)) 372 { 373 denyAll = BooleanUtils.toBoolean(denyAllStr); 374 } 375 return denyAll; 376 } 377 378 /** 379 * @see EJB3SessionOperationFacadeLogic#handleGetFlushMode() 380 */ 381 @Override 382 protected String handleGetFlushMode() 383 { 384 return (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_EJB_PERSISTENCE_FLUSH_MODE); 385 } 386 387 /** 388 * @see EJB3SessionOperationFacadeLogic#handleGetThrowsClause() 389 */ 390 @Override 391 protected String handleGetThrowsClause() 392 { 393 StringBuilder throwsClause = null; 394 if (this.isExceptionsPresent()) 395 { 396 throwsClause = new StringBuilder(this.getExceptionList()); 397 } 398 if (throwsClause != null) 399 { 400 throwsClause.insert(0, "throws "); 401 } 402 return throwsClause != null ? throwsClause.toString() : null; 403 } 404 405 /** 406 * @see EJB3SessionOperationFacadeLogic#handleGetThrowsClause(String) 407 */ 408 @Override 409 protected String handleGetThrowsClause(String initialExceptions) 410 { 411 final StringBuilder throwsClause = new StringBuilder(initialExceptions); 412 if (this.getThrowsClause() != null) 413 { 414 throwsClause.insert(0, ", "); 415 throwsClause.insert(0, this.getThrowsClause()); 416 } 417 else 418 { 419 throwsClause.insert(0, "throws "); 420 } 421 return throwsClause.toString(); 422 } 423 424 /** 425 * @see EJB3SessionOperationFacadeLogic#handleGetNonRunAsRoles() 426 */ 427 protected Collection<Role> handleGetNonRunAsRoles() 428 { 429 final Collection<Role> roles = new LinkedHashSet<Role>(); 430 if (this.getOwner() instanceof EJB3SessionFacade) 431 { 432 roles.addAll(((EJB3SessionFacade)this.getOwner()).getNonRunAsRoles()); 433 } 434 Collection operationRoles = this.getTargetDependencies(); 435 CollectionUtils.filter( 436 operationRoles, 437 new Predicate() 438 { 439 public boolean evaluate(Object object) 440 { 441 DependencyFacade dependency = (DependencyFacade)object; 442 return dependency != null 443 && dependency.getSourceElement() != null 444 && Role.class.isAssignableFrom(dependency.getSourceElement().getClass()) 445 && !dependency.hasStereotype(EJB3Profile.STEREOTYPE_SECURITY_RUNAS); 446 } 447 }); 448 CollectionUtils.transform( 449 operationRoles, 450 new Transformer() 451 { 452 public Object transform(Object object) 453 { 454 return ((DependencyFacade)object).getSourceElement(); 455 } 456 }); 457 roles.addAll(operationRoles); 458 final Collection allRoles = new LinkedHashSet(roles); 459 460 // add all roles which are specializations of this one 461 CollectionUtils.forAllDo( 462 roles, 463 new Closure() 464 { 465 public void execute(Object object) 466 { 467 if (object instanceof Role) 468 { 469 allRoles.addAll(((Role)object).getAllSpecializations()); 470 } 471 } 472 }); 473 return allRoles; 474 } 475 476 /** 477 * @see EJB3SessionOperationFacadeLogic#handleIsTimeoutCallback() 478 */ 479 @Override 480 protected boolean handleIsTimeoutCallback() 481 { 482 return this.hasStereotype(EJB3Profile.STEREOTYPE_SERVICE_TIMER_TIMEOUT); 483 } 484 485 /** 486 * @see EJB3SessionOperationFacadeLogic#handleGetImplementationName() 487 */ 488 @Override 489 protected String handleGetImplementationName() 490 { 491 return this.getImplementationOperationName(StringUtils.capitalize(this.getName())); 492 } 493 494 /** 495 * @see EJB3SessionOperationFacadeLogic#handleGetImplementationCall() 496 */ 497 @Override 498 protected String handleGetImplementationCall() 499 { 500 return this.getImplementationOperationName(StringUtils.capitalize(this.getCall())); 501 } 502 503 /** 504 * @see EJB3SessionOperationFacadeLogic#handleGetImplementationSignature() 505 */ 506 @Override 507 protected String handleGetImplementationSignature() 508 { 509 return ("public".equalsIgnoreCase(this.getVisibility()) ? 510 this.getImplementationOperationName(StringUtils.capitalize(this.getSignature())) : 511 this.getSignature()); 512 } 513 514 /** 515 * Retrieves the implementationOperatName by replacing the <code>replacement</code> in the {@link 516 * EJB3Globals#IMPLEMENTATION_OPERATION_NAME_PATTERN} 517 * 518 * @param replacement the replacement string for the pattern. 519 * @return the operation name 520 */ 521 private String getImplementationOperationName(String replacement) 522 { 523 String implementationNamePattern = 524 (String)this.getConfiguredProperty(EJB3Globals.IMPLEMENTATION_OPERATION_NAME_PATTERN); 525 526 return MessageFormat.format( 527 implementationNamePattern, 528 StringUtils.trimToEmpty(replacement)); 529 } 530 531 /** 532 * @see EJB3SessionOperationFacadeLogic#handleGetInterceptorReferences() 533 */ 534 protected Collection handleGetInterceptorReferences() 535 { 536 Collection references = this.getSourceDependencies(); 537 CollectionUtils.filter( 538 references, 539 new Predicate() 540 { 541 public boolean evaluate(Object object) 542 { 543 DependencyFacade dependency = (DependencyFacade)object; 544 ModelElementFacade targetElement = dependency.getTargetElement(); 545 return (targetElement != null && targetElement.hasStereotype(EJB3Profile.STEREOTYPE_INTERCEPTOR)); 546 } 547 }); 548 CollectionUtils.transform( 549 references, 550 new Transformer() 551 { 552 public Object transform(final Object object) 553 { 554 return ((DependencyFacade)object).getTargetElement(); 555 } 556 }); 557 final Collection interceptors = new LinkedHashSet(references); 558 CollectionUtils.forAllDo( 559 references, 560 new Closure() 561 { 562 public void execute(Object object) 563 { 564 if (object instanceof EJB3InterceptorFacade) 565 { 566 interceptors.addAll(((EJB3InterceptorFacade)object).getInterceptorReferences()); 567 } 568 } 569 }); 570 return interceptors; 571 } 572 573 /** 574 * @see EJB3SessionOperationFacadeLogic#handleIsExcludeDefaultInterceptors() 575 */ 576 @Override 577 protected boolean handleIsExcludeDefaultInterceptors() 578 { 579 boolean excludeDefault = false; 580 String excludeDefaultStr = 581 (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SERVICE_INTERCEPTOR_EXCLUDE_DEFAULT); 582 if (excludeDefaultStr != null) 583 { 584 excludeDefault = BooleanUtils.toBoolean(excludeDefaultStr); 585 } 586 return excludeDefault; 587 } 588 589 /** 590 * @see EJB3SessionOperationFacadeLogic#handleIsExcludeClassInterceptors() 591 */ 592 @Override 593 protected boolean handleIsExcludeClassInterceptors() 594 { 595 boolean excludeClass = false; 596 String excludeClassStr = 597 (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SERVICE_INTERCEPTOR_EXCLUDE_CLASS); 598 if (excludeClassStr != null) 599 { 600 excludeClass = BooleanUtils.toBoolean(excludeClassStr); 601 } 602 return excludeClass; 603 } 604 605 /** 606 * @see EJB3SessionOperationFacadeLogic#handleIsPostConstruct() 607 */ 608 @Override 609 protected boolean handleIsPostConstruct() 610 { 611 return this.hasStereotype(EJB3Profile.STEREOTYPE_POST_CONSTRUCT); 612 } 613 614 /** 615 * @see EJB3SessionOperationFacadeLogic#handleIsPreDestroy() 616 */ 617 @Override 618 protected boolean handleIsPreDestroy() 619 { 620 return this.hasStereotype(EJB3Profile.STEREOTYPE_PRE_DESTROY); 621 } 622 623 /** 624 * @see EJB3SessionOperationFacadeLogic#handleIsPostActivate() 625 */ 626 @Override 627 protected boolean handleIsPostActivate() 628 { 629 return this.hasStereotype(EJB3Profile.STEREOTYPE_POST_ACTIVATE); 630 } 631 632 /** 633 * @see EJB3SessionOperationFacadeLogic#handleIsPrePassivate() 634 */ 635 @Override 636 protected boolean handleIsPrePassivate() 637 { 638 return this.hasStereotype(EJB3Profile.STEREOTYPE_PRE_PASSIVATE); 639 } 640 641 /** 642 * @see EJB3SessionOperationFacadeLogic#handleIsLifecycleCallback() 643 */ 644 @Override 645 protected boolean handleIsLifecycleCallback() 646 { 647 return this.isPostConstruct() || this.isPreDestroy() || this.isPostActivate() || this.isPrePassivate(); 648 } 649 650 /** 651 * @see EJB3SessionOperationFacadeLogic#handleIsSeamValidationValidator() 652 */ 653 @Override 654 protected boolean handleIsSeamValidationValidator() 655 { 656 boolean isSeamValidorMethod = false; 657 if (this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_VALIDATION_VALIDATOR)) 658 { 659 isSeamValidorMethod = true; 660 } 661 return isSeamValidorMethod; 662 } 663 664 /** 665 * @see EJB3SessionOperationFacadeLogic#handleGetSeamValidationOutcome() 666 */ 667 @Override 668 protected String handleGetSeamValidationOutcome() 669 { 670 String validationOutcome = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_VALIDATION_OUTCOME); 671 if (StringUtils.isNotBlank(validationOutcome) && 672 !StringUtils.equals(validationOutcome, "org.jboss.seam.annotations.Outcome.REDISPLAY")) 673 { 674 validationOutcome = "\"" + validationOutcome + "\""; 675 } 676 return validationOutcome; 677 } 678 679 /** 680 * @see EJB3SessionOperationFacadeLogic#handleIsSeamValidationRefreshEntities() 681 */ 682 @Override 683 protected boolean handleIsSeamValidationRefreshEntities() 684 { 685 return BooleanUtils.toBoolean( 686 (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_VALIDATION_REFRESH_ENTITIES)); 687 } 688 689 /** 690 * @see EJB3SessionOperationFacadeLogic#handleIsSeamLifecycleCreate() 691 */ 692 @Override 693 protected boolean handleIsSeamLifecycleCreate() 694 { 695 boolean isSeamLifecycleCreate = false; 696 if (this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_LIFECYCLE_CREATE)) 697 { 698 isSeamLifecycleCreate = true; 699 } 700 return isSeamLifecycleCreate; 701 } 702 703 /** 704 * @see EJB3SessionOperationFacadeLogic#handleIsSeamLifecycleDestroy() 705 */ 706 @Override 707 protected boolean handleIsSeamLifecycleDestroy() 708 { 709 boolean isSeamLifecycleCreate = false; 710 if (this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_LIFECYCLE_DESTROY)) 711 { 712 isSeamLifecycleCreate = true; 713 } 714 return isSeamLifecycleCreate; 715 } 716 717 /** 718 * @see EJB3SessionOperationFacadeLogic#handleIsSeamObserver() 719 */ 720 @Override 721 protected boolean handleIsSeamObserver() 722 { 723 boolean isSeamObserver = false; 724 if (this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_LIFECYCLE_OBSERVER_EVENT) != null) 725 { 726 isSeamObserver = true; 727 } 728 return isSeamObserver; 729 } 730 731 /** 732 * @see EJB3SessionOperationFacadeLogic#handleGetSeamObserverEventName() 733 */ 734 @Override 735 protected String handleGetSeamObserverEventName() 736 { 737 return "(\"" + this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_LIFECYCLE_OBSERVER_EVENT) + "\")"; 738 } 739 740 /** 741 * @see EJB3SessionOperationFacadeLogic#handleIsSeamAsynchronous() 742 */ 743 @Override 744 protected boolean handleIsSeamAsynchronous() 745 { 746 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_ASYNCHRONOUS); 747 } 748 749 /** 750 * @see EJB3SessionOperationFacadeLogic#handleIsSeamBijectionFactory() 751 */ 752 @Override 753 protected boolean handleIsSeamBijectionFactory() 754 { 755 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_BIJECTION_FACTORY); 756 } 757 758 /** 759 * @see EJB3SessionOperationFacadeLogic#handleGetSeamBijectionFactoryParameters() 760 */ 761 @Override 762 protected String handleGetSeamBijectionFactoryParameters() 763 { 764 List<String> parameters = new ArrayList<String>(); 765 String value = (String) this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_BIJECTION_FACTORY_VALUE); 766 if(StringUtils.isNotBlank(value)) 767 { 768 parameters.add("value = \"" + value + "\""); 769 } 770 771 String scope = (String) this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_BIJECTION_FACTORY_SCOPE_TYPE); 772 if(StringUtils.isNotBlank(scope)) 773 { 774 parameters.add("scope = org.jboss.seam.ScopeType." + scope); 775 } 776 777 return EJB3MetafacadeUtils.buildAnnotationParameters(parameters); 778 } 779 780 /** 781 * @see EJB3SessionOperationFacadeLogic#handleIsSeamConversationBegin() 782 */ 783 @Override 784 protected boolean handleIsSeamConversationBegin() 785 { 786 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_BEGIN); 787 } 788 789 /** 790 * @see EJB3SessionOperationFacadeLogic#handleGetSeamConversationBeginParameters() 791 */ 792 @Override 793 protected String handleGetSeamConversationBeginParameters() 794 { 795 if(!this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_BEGIN)) 796 { 797 return null; 798 } 799 else 800 { 801 List<String> parameters = new ArrayList<String>(); 802 String flushMode = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_BEGIN_FLUSH_MODE); 803 if(StringUtils.isNotBlank(flushMode)) 804 { 805 parameters.add("flushMode = org.jboss.seam.annotations.FlushModeType." + flushMode); 806 } 807 808 String pageflow = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_BEGIN_PAGEFLOW); 809 if(StringUtils.isNotBlank(pageflow)) 810 { 811 parameters.add("pageflow = \"" + pageflow + "\""); 812 } 813 814 String join = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_BEGIN_JOIN); 815 if(StringUtils.isNotBlank(join)) 816 { 817 parameters.add("join = " + join.toLowerCase()); 818 } 819 820 String nested = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_BEGIN_NESTED); 821 if(StringUtils.isNotBlank(nested)) 822 { 823 parameters.add("nested = " + nested.toLowerCase()); 824 } 825 826 Collection ifOutcome = this.findTaggedValues(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_BEGIN_IF_OUTCOME); 827 if(ifOutcome != null && !ifOutcome.isEmpty()) 828 { 829 parameters.add(EJB3MetafacadeUtils.buildAnnotationMultivalueParameter("ifOutcome", ifOutcome)); 830 } 831 return EJB3MetafacadeUtils.buildAnnotationParameters(parameters); 832 } 833 } 834 835 /** 836 * @see EJB3SessionOperationFacadeLogic#handleIsSeamConversationBeginTask() 837 */ 838 @Override 839 protected boolean handleIsSeamConversationBeginTask() 840 { 841 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_BEGIN_TASK); 842 } 843 844 /** 845 * @see EJB3SessionOperationFacadeLogic#handleGetSeamConversationBeginTaskParameters() 846 */ 847 @Override 848 protected String handleGetSeamConversationBeginTaskParameters() 849 { 850 if(!this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_BEGIN_TASK)) 851 { 852 return null; 853 } 854 else 855 { 856 List<String> parameters = new ArrayList<String>(); 857 String flushMode = (String)this.findTaggedValue( 858 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_BEGIN_TASK_FLUSH_MODE); 859 if(StringUtils.isNotBlank(flushMode)) 860 { 861 parameters.add("flushMode = org.jboss.seam.annotations.FlushModeType." + flushMode + "\""); 862 } 863 864 String taskIdParameter = (String)this.findTaggedValue( 865 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_BEGIN_TASK_ID_PARAMETER); 866 if(StringUtils.isNotBlank(taskIdParameter)) 867 { 868 parameters.add("taskIdParameter = \"" + taskIdParameter + "\""); 869 } 870 return EJB3MetafacadeUtils.buildAnnotationParameters(parameters); 871 } 872 } 873 874 /** 875 * @see EJB3SessionOperationFacadeLogic#handleIsSeamConversationCreateProcess() 876 */ 877 @Override 878 protected boolean handleIsSeamConversationCreateProcess() 879 { 880 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_CREATE_PROCESS); 881 } 882 883 /** 884 * @see EJB3SessionOperationFacadeLogic#handleGetSeamConversationCreateProcessParameters() 885 */ 886 @Override 887 protected String handleGetSeamConversationCreateProcessParameters() 888 { 889 return "(definition = \"" + 890 this.findTaggedValue(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_CREATE_PROCESS_DEFINITION) + "\")"; 891 } 892 893 /** 894 * @see EJB3SessionOperationFacadeLogic#handleIsSeamConversationEnd() 895 */ 896 @Override 897 protected boolean handleIsSeamConversationEnd() 898 { 899 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_END); 900 } 901 902 /** 903 * @see EJB3SessionOperationFacadeLogic#handleGetSeamConversationEndParameters() 904 */ 905 @Override 906 protected String handleGetSeamConversationEndParameters() 907 { 908 if(!this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_END)) 909 { 910 return null; 911 } 912 else 913 { 914 List<String> parameters = new ArrayList<String>(); 915 String beforeRedirect = (String)this.findTaggedValue( 916 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_END_TASK_BEFORE_REDIRECT); 917 if(StringUtils.isNotBlank(beforeRedirect)) 918 { 919 parameters.add("beforeRedirect = " + beforeRedirect.toLowerCase()); 920 } 921 922 Collection ifOutcome = this.findTaggedValues(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_END_IF_OUTCOME); 923 if(ifOutcome != null && !ifOutcome.isEmpty()) 924 { 925 parameters.add(EJB3MetafacadeUtils.buildAnnotationMultivalueParameter("ifOutcome", ifOutcome)); 926 } 927 928 Collection exceptions = this.findTaggedValues( 929 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_END_EVEN_IF_EXCEPTION); 930 if(exceptions != null && !exceptions.isEmpty()) 931 { 932 parameters.add( 933 EJB3MetafacadeUtils.buildAnnotationMultivalueParameter( 934 "ifOutcome", 935 ifOutcome, 936 false, 937 ".class")); 938 } 939 return EJB3MetafacadeUtils.buildAnnotationParameters(parameters); 940 } 941 } 942 /** 943 * @see EJB3SessionOperationFacadeLogic#handleIsSeamConversationEndTask() 944 */ 945 @Override 946 protected boolean handleIsSeamConversationEndTask() 947 { 948 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_END_TASK); 949 } 950 951 /** 952 * @see EJB3SessionOperationFacadeLogic#handleGetSeamConversationEndTaskParameters() 953 */ 954 @Override 955 protected String handleGetSeamConversationEndTaskParameters() 956 { 957 if(!this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_END_TASK)) 958 { 959 return null; 960 } 961 else 962 { 963 List<String> parameters = new ArrayList<String>(); 964 String transition = (String)this.findTaggedValue( 965 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_END_TASK_TRANSITION_NAME); 966 if(StringUtils.isNotBlank(transition)) 967 { 968 parameters.add("transition = \"" + transition + "\""); 969 } 970 971 String beforeRedirect = (String)this.findTaggedValue( 972 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_END_TASK_BEFORE_REDIRECT); 973 if(StringUtils.isNotBlank(beforeRedirect)) 974 { 975 parameters.add("beforeRedirect = " + beforeRedirect.toLowerCase()); 976 } 977 Collection ifOutcome = this.findTaggedValues(EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_END_TASK_IF_OUTCOME); 978 if(ifOutcome != null && !ifOutcome.isEmpty()) 979 { 980 parameters.add(EJB3MetafacadeUtils.buildAnnotationMultivalueParameter("ifOutcome", ifOutcome)); 981 } 982 return EJB3MetafacadeUtils.buildAnnotationParameters(parameters); 983 } 984 } 985 986 /** 987 * @see EJB3SessionOperationFacadeLogic#handleIsSeamConversationResumeProcess() 988 */ 989 @Override 990 protected boolean handleIsSeamConversationResumeProcess() 991 { 992 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_RESUME_PROCESS); 993 } 994 995 /** 996 * @see EJB3SessionOperationFacadeLogic#handleGetSeamConversationResumeProcessParameters() 997 */ 998 @Override 999 protected String handleGetSeamConversationResumeProcessParameters() 1000 { 1001 return "(processIdParameter = \"" + 1002 this.findTaggedValue( 1003 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_RESUME_PROCESS_PROCESS_ID_PARAMETER) + "\")"; 1004 } 1005 1006 /** 1007 * @see EJB3SessionOperationFacadeLogic#handleIsSeamConversationStartTask() 1008 */ 1009 @Override 1010 protected boolean handleIsSeamConversationStartTask() 1011 { 1012 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_START_TASK); 1013 } 1014 1015 /** 1016 * @see EJB3SessionOperationFacadeLogic#handleGetSeamConversationStartTaskParameters() 1017 */ 1018 @Override 1019 protected String handleGetSeamConversationStartTaskParameters() 1020 { 1021 if (!this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_CONVERSATION_START_TASK)) 1022 { 1023 return null; 1024 } 1025 else 1026 { 1027 List<String> parameters = new ArrayList<String>(); 1028 String flushMode = (String)this.findTaggedValue( 1029 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_START_TASK_FLUSH_MODE); 1030 if (StringUtils.isNotBlank(flushMode)) 1031 { 1032 parameters.add("flushMode = org.jboss.seam.annotations.FlushModeType." + flushMode); 1033 } 1034 1035 String taskIdParameter = (String)this.findTaggedValue( 1036 EJB3Profile.TAGGEDVALUE_SEAM_CONVERSATION_START_TASK_ID_PARAMETER); 1037 if (StringUtils.isNotBlank(taskIdParameter)) 1038 { 1039 parameters.add("taskIdParameter = \"" + taskIdParameter + "\""); 1040 } 1041 1042 return EJB3MetafacadeUtils.buildAnnotationParameters(parameters); 1043 } 1044 } 1045 1046 /** 1047 * @see EJB3SessionOperationFacadeLogic#handleIsSeamTransactional() 1048 */ 1049 @Override 1050 protected boolean handleIsSeamTransactional() 1051 { 1052 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_TRANSACTION_TRANSACTIONAL); 1053 } 1054 1055 /** 1056 * @see EJB3SessionOperationFacadeLogic#handleIsSeamTransactionRollback() 1057 */ 1058 @Override 1059 protected boolean handleIsSeamTransactionRollback() 1060 { 1061 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_TRANSACTION_ROLLBACK); 1062 } 1063 1064 /** 1065 * @see EJB3SessionOperationFacadeLogic#handleGetSeamTransactionRollbackParameters() 1066 */ 1067 @Override 1068 protected String handleGetSeamTransactionRollbackParameters() 1069 { 1070 Collection outcomes = this.findTaggedValues(EJB3Profile.TAGGEDVALUE_SEAM_TRANSACTION_ROLLBACK_IF_OUTCOME); 1071 if (outcomes == null || outcomes.isEmpty()) 1072 { 1073 return null; 1074 } 1075 else 1076 { 1077 return "(" + EJB3MetafacadeUtils.buildAnnotationMultivalueParameter("ifOutcome", outcomes) + ")"; 1078 } 1079 } 1080 1081 /** 1082 * @see EJB3SessionOperationFacadeLogic#handleIsSeamWebRemote() 1083 */ 1084 @Override 1085 protected boolean handleIsSeamWebRemote() 1086 { 1087 return this.hasStereotype(EJB3Profile.STEREOTYPE_SEAM_WEBREMOTE); 1088 } 1089 1090 /** 1091 * @see EJB3SessionOperationFacadeLogic#handleGetSeamWebRemoteParameters() 1092 */ 1093 @Override 1094 protected String handleGetSeamWebRemoteParameters() 1095 { 1096 Collection excludes = this.findTaggedValues(EJB3Profile.TAGGEDVALUE_SEAM_WEBREMOTE_EXCLUDE); 1097 if(excludes == null || excludes.isEmpty()) 1098 { 1099 return null; 1100 } 1101 else 1102 { 1103 return "(" + EJB3MetafacadeUtils.buildAnnotationMultivalueParameter("exclude", excludes) + ")"; 1104 } 1105 } 1106}