001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.party.server.search; 018 019import static com.echothree.model.jooq.server.keys.contact.ContactForeignKeys.PARTY_CONTACT_MECHANISMS_ACTIVE_DETAIL_FK; 020import static com.echothree.model.jooq.server.keys.contact.ContactForeignKeys.PARTY_CONTACT_MECHANISM_DETAILS_PARTY_FK; 021import static com.echothree.model.jooq.server.keys.core.CoreForeignKeys.ENTITY_TIMES_ENTITY_INSTANCE_FK; 022import static com.echothree.model.jooq.server.keys.party.PartyForeignKeys.PARTIES_ACTIVE_DETAIL_FK; 023import static com.echothree.model.jooq.server.keys.party.PartyForeignKeys.PEOPLE_PARTY_FK; 024import static com.echothree.model.jooq.server.tables.contact.ContactEmailAddresses.ContactEmailAddresses; 025import static com.echothree.model.jooq.server.tables.contact.ContactTelephones.ContactTelephones; 026import static com.echothree.model.jooq.server.tables.contact.PartyContactMechanismDetails.PartyContactMechanismDetails; 027import static com.echothree.model.jooq.server.tables.contact.PartyContactMechanisms.PartyContactMechanisms; 028import static com.echothree.model.jooq.server.tables.core.EntityInstances.EntityInstances; 029import static com.echothree.model.jooq.server.tables.core.EntityTimes.EntityTimes; 030import static com.echothree.model.jooq.server.tables.party.Parties.Parties; 031import static com.echothree.model.jooq.server.tables.party.PartyDetails.PartyDetails; 032import static com.echothree.model.jooq.server.tables.party.People.People; 033import com.echothree.model.control.core.common.ComponentVendors; 034import com.echothree.model.control.core.common.EntityTypes; 035import com.echothree.model.control.core.server.control.EntityInstanceControl; 036import com.echothree.model.control.index.common.IndexFields; 037import com.echothree.model.control.index.server.analyzer.BasicAnalyzer; 038import com.echothree.model.control.party.server.analyzer.PartyAnalyzer; 039import com.echothree.model.control.party.server.control.PartyControl; 040import com.echothree.model.control.party.server.logic.PartyLogic; 041import com.echothree.model.control.search.server.search.BaseSearchEvaluator; 042import com.echothree.model.control.search.server.search.EntityInstancePKHolder; 043import com.echothree.model.data.geo.server.entity.GeoCode; 044import com.echothree.model.data.party.server.entity.Language; 045import com.echothree.model.data.party.server.entity.Party; 046import com.echothree.model.data.party.server.entity.PartyAliasType; 047import com.echothree.model.data.party.server.entity.PartyType; 048import com.echothree.model.data.search.server.entity.SearchDefaultOperator; 049import com.echothree.model.data.search.server.entity.SearchSortDirection; 050import com.echothree.model.data.search.server.entity.SearchSortOrder; 051import com.echothree.model.data.search.server.entity.SearchType; 052import com.echothree.model.data.user.server.entity.UserVisit; 053import com.echothree.util.server.message.ExecutionErrorAccumulator; 054import com.echothree.util.server.persistence.Session; 055 056public class PartySearchEvaluator 057 extends BaseSearchEvaluator { 058 059 protected PartyType partyType; 060 protected String entityNameIndexField; 061 private String firstName; 062 private Boolean firstNameSoundex; 063 private String middleName; 064 private Boolean middleNameSoundex; 065 private String lastName; 066 private Boolean lastNameSoundex; 067 private GeoCode countryGeoCode; 068 private String areaCode; 069 private String telephoneNumber; 070 private String telephoneExtension; 071 private String emailAddress; 072 private String partyName; 073 private PartyAliasType partyAliasType; 074 private String alias; 075 076 protected PartySearchEvaluator(UserVisit userVisit, SearchType searchType, SearchDefaultOperator searchDefaultOperator, SearchSortOrder searchSortOrder, 077 SearchSortDirection searchSortDirection, String partyTypeName, final String entityNameIndexField, String indexName) { 078 super(userVisit, searchDefaultOperator, searchType, searchSortOrder, searchSortDirection, null, ComponentVendors.ECHO_THREE.name(), 079 EntityTypes.Party.name(), null, null, indexName); 080 081 this.partyType = PartyLogic.getInstance().getPartyTypeByName(null, partyTypeName); 082 this.entityNameIndexField = entityNameIndexField; 083 084 setField(IndexFields.name.name()); 085 } 086 087 @Override 088 public EntityInstancePKHolder getEntityInstancePKHolderByCreatedTime(Long createdTime) { 089 // Custom version for PartySearchEvaluator that takes into account the PartyType. 090 var query = session.getDslContext() 091 .select(EntityInstances.ENTITY_INSTANCE) 092 .from(EntityInstances) 093 .join(EntityTimes).onKey(ENTITY_TIMES_ENTITY_INSTANCE_FK) 094 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 095 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 096 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 097 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey()), 098 EntityTimes.CREATED_TIME.ge(createdTime)); 099 100 return getEntityInstancePKHolderFromQuery(query); 101 } 102 103 @Override 104 public EntityInstancePKHolder getEntityInstancePKHolderByModifiedTime(Long modifiedTime) { 105 // Custom version for PartySearchEvaluator that takes into account the PartyType. 106 var query = session.getDslContext() 107 .select(EntityInstances.ENTITY_INSTANCE) 108 .from(EntityInstances) 109 .join(EntityTimes).onKey(ENTITY_TIMES_ENTITY_INSTANCE_FK) 110 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 111 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 112 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 113 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey()), 114 EntityTimes.MODIFIED_TIME.ge(modifiedTime)); 115 116 return getEntityInstancePKHolderFromQuery(query); 117 } 118 119 public EntityInstancePKHolder getEntityInstancePKHolderByFirstName(String firstName) { 120 var query = session.getDslContext() 121 .select(EntityInstances.ENTITY_INSTANCE) 122 .from(EntityInstances) 123 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 124 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 125 .join(People).onKey(PEOPLE_PARTY_FK) 126 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 127 People.FIRST_NAME.eq(firstName), 128 People.THRU_TIME.eq(Session.MAX_TIME), 129 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 130 131 return getEntityInstancePKHolderFromQuery(query); 132 } 133 134 public EntityInstancePKHolder getEntityInstancePKHolderByFirstNameSdx(String firstNameSdx) { 135 var query = session.getDslContext() 136 .select(EntityInstances.ENTITY_INSTANCE) 137 .from(EntityInstances) 138 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 139 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 140 .join(People).onKey(PEOPLE_PARTY_FK) 141 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 142 People.FIRST_NAME_SDX.eq(firstNameSdx), 143 People.THRU_TIME.eq(Session.MAX_TIME), 144 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 145 146 return getEntityInstancePKHolderFromQuery(query); 147 } 148 149 public EntityInstancePKHolder getEntityInstancePKHolderByMiddleName(String middleName) { 150 var query = session.getDslContext() 151 .select(EntityInstances.ENTITY_INSTANCE) 152 .from(EntityInstances) 153 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 154 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 155 .join(People).onKey(PEOPLE_PARTY_FK) 156 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 157 People.MIDDLE_NAME.eq(middleName), 158 People.THRU_TIME.eq(Session.MAX_TIME), 159 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 160 161 return getEntityInstancePKHolderFromQuery(query); 162 } 163 164 public EntityInstancePKHolder getEntityInstancePKHolderByMiddleNameSdx(String middleNameSdx) { 165 var query = session.getDslContext() 166 .select(EntityInstances.ENTITY_INSTANCE) 167 .from(EntityInstances) 168 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 169 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 170 .join(People).onKey(PEOPLE_PARTY_FK) 171 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 172 People.MIDDLE_NAME_SDX.eq(middleNameSdx), 173 People.THRU_TIME.eq(Session.MAX_TIME), 174 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 175 176 return getEntityInstancePKHolderFromQuery(query); 177 } 178 179 public EntityInstancePKHolder getEntityInstancePKHolderByLastName(String lastName) { 180 var query = session.getDslContext() 181 .select(EntityInstances.ENTITY_INSTANCE) 182 .from(EntityInstances) 183 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 184 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 185 .join(People).onKey(PEOPLE_PARTY_FK) 186 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 187 People.LAST_NAME.eq(lastName), 188 People.THRU_TIME.eq(Session.MAX_TIME), 189 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 190 191 return getEntityInstancePKHolderFromQuery(query); 192 } 193 194 public EntityInstancePKHolder getEntityInstancePKHolderByLastNameSdx(String lastNameSdx) { 195 var query = session.getDslContext() 196 .select(EntityInstances.ENTITY_INSTANCE) 197 .from(EntityInstances) 198 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 199 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 200 .join(People).onKey(PEOPLE_PARTY_FK) 201 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 202 People.LAST_NAME_SDX.eq(lastNameSdx), 203 People.THRU_TIME.eq(Session.MAX_TIME), 204 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 205 206 return getEntityInstancePKHolderFromQuery(query); 207 } 208 209 public EntityInstancePKHolder getEntityInstancePKHolderByAreaCode(GeoCode countryGeoCode, String areaCode) { 210 var query = session.getDslContext() 211 .select(EntityInstances.ENTITY_INSTANCE) 212 .from(EntityInstances) 213 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 214 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 215 .join(PartyContactMechanismDetails).onKey(PARTY_CONTACT_MECHANISM_DETAILS_PARTY_FK) 216 .join(PartyContactMechanisms).onKey(PARTY_CONTACT_MECHANISMS_ACTIVE_DETAIL_FK) 217 .join(ContactTelephones).on(PartyContactMechanismDetails.CONTACT_MECHANISM.eq(ContactTelephones.CONTACT_MECHANISM)) 218 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 219 ContactTelephones.THRU_TIME.eq(Session.MAX_TIME), 220 ContactTelephones.COUNTRY_GEO_CODE.eq(countryGeoCode.getPrimaryKey()), 221 ContactTelephones.AREA_CODE.eq(areaCode), 222 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 223 224 return getEntityInstancePKHolderFromQuery(query); 225 } 226 227 public EntityInstancePKHolder getEntityInstancePKHolderByTelephoneNumber(GeoCode countryGeoCode, String telephoneNumber) { 228 var query = session.getDslContext() 229 .select(EntityInstances.ENTITY_INSTANCE) 230 .from(EntityInstances) 231 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 232 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 233 .join(PartyContactMechanismDetails).onKey(PARTY_CONTACT_MECHANISM_DETAILS_PARTY_FK) 234 .join(PartyContactMechanisms).onKey(PARTY_CONTACT_MECHANISMS_ACTIVE_DETAIL_FK) 235 .join(ContactTelephones).on(PartyContactMechanismDetails.CONTACT_MECHANISM.eq(ContactTelephones.CONTACT_MECHANISM)) 236 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 237 ContactTelephones.THRU_TIME.eq(Session.MAX_TIME), 238 ContactTelephones.COUNTRY_GEO_CODE.eq(countryGeoCode.getPrimaryKey()), 239 ContactTelephones.TELEPHONE_NUMBER.eq(telephoneNumber), 240 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 241 242 return getEntityInstancePKHolderFromQuery(query); 243 } 244 245 public EntityInstancePKHolder getEntityInstancePKHolderByTelephoneExtension(GeoCode countryGeoCode, String telephoneExtension) { 246 var query = session.getDslContext() 247 .select(EntityInstances.ENTITY_INSTANCE) 248 .from(EntityInstances) 249 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 250 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 251 .join(PartyContactMechanismDetails).onKey(PARTY_CONTACT_MECHANISM_DETAILS_PARTY_FK) 252 .join(PartyContactMechanisms).onKey(PARTY_CONTACT_MECHANISMS_ACTIVE_DETAIL_FK) 253 .join(ContactTelephones).on(PartyContactMechanismDetails.CONTACT_MECHANISM.eq(ContactTelephones.CONTACT_MECHANISM)) 254 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 255 ContactTelephones.THRU_TIME.eq(Session.MAX_TIME), 256 ContactTelephones.COUNTRY_GEO_CODE.eq(countryGeoCode.getPrimaryKey()), 257 ContactTelephones.TELEPHONE_EXTENSION.eq(telephoneExtension), 258 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 259 260 return getEntityInstancePKHolderFromQuery(query); 261 } 262 263 public EntityInstancePKHolder getEntityInstancePKHolderByEmailAddress(String emailAddress) { 264 var query = session.getDslContext() 265 .select(EntityInstances.ENTITY_INSTANCE) 266 .from(EntityInstances) 267 .join(Parties).on(Parties.PARTY.cast(Long.class).eq(EntityInstances.ENTITY_UNIQUE)) 268 .join(PartyDetails).onKey(PARTIES_ACTIVE_DETAIL_FK) 269 .join(PartyContactMechanismDetails).onKey(PARTY_CONTACT_MECHANISM_DETAILS_PARTY_FK) 270 .join(PartyContactMechanisms).onKey(PARTY_CONTACT_MECHANISMS_ACTIVE_DETAIL_FK) 271 .join(ContactEmailAddresses).on(PartyContactMechanismDetails.CONTACT_MECHANISM.eq(ContactEmailAddresses.CONTACT_MECHANISM)) 272 .where(PartyDetails.PARTY_TYPE.eq(partyType.getPrimaryKey()), 273 ContactEmailAddresses.THRU_TIME.eq(Session.MAX_TIME), 274 ContactEmailAddresses.EMAIL_ADDRESS.eq(emailAddress), 275 EntityInstances.ENTITY_TYPE.eq(entityType.getPrimaryKey())); 276 277 return getEntityInstancePKHolderFromQuery(query); 278 } 279 280 public String getFirstName() { 281 return firstName; 282 } 283 284 public void setFirstName(String firstName) { 285 this.firstName = firstName; 286 } 287 288 public Boolean getFirstNameSoundex() { 289 return firstNameSoundex; 290 } 291 292 public void setFirstNameSoundex(Boolean firstNameSoundex) { 293 this.firstNameSoundex = firstNameSoundex; 294 } 295 296 public String getMiddleName() { 297 return middleName; 298 } 299 300 public void setMiddleName(String middleName) { 301 this.middleName = middleName; 302 } 303 304 public Boolean getMiddleNameSoundex() { 305 return middleNameSoundex; 306 } 307 308 public void setMiddleNameSoundex(Boolean middleNameSoundex) { 309 this.middleNameSoundex = middleNameSoundex; 310 } 311 312 public String getLastName() { 313 return lastName; 314 } 315 316 public void setLastName(String lastName) { 317 this.lastName = lastName; 318 } 319 320 public Boolean getLastNameSoundex() { 321 return lastNameSoundex; 322 } 323 324 public void setLastNameSoundex(Boolean lastNameSoundex) { 325 this.lastNameSoundex = lastNameSoundex; 326 } 327 328 public String getPartyName() { 329 return partyName; 330 } 331 332 public GeoCode getCountryGeoCode() { 333 return countryGeoCode; 334 } 335 336 public void setCountryGeoCode(GeoCode countryGeoCode) { 337 this.countryGeoCode = countryGeoCode; 338 } 339 340 public String getAreaCode() { 341 return areaCode; 342 } 343 344 public void setAreaCode(String areaCode) { 345 this.areaCode = areaCode; 346 } 347 348 public String getTelephoneNumber() { 349 return telephoneNumber; 350 } 351 352 public void setTelephoneNumber(String telephoneNumber) { 353 this.telephoneNumber = telephoneNumber; 354 } 355 356 public String getTelephoneExtension() { 357 return telephoneExtension; 358 } 359 360 public void setTelephoneExtension(String telephoneExtension) { 361 this.telephoneExtension = telephoneExtension; 362 } 363 364 public String getEmailAddress() { 365 return emailAddress; 366 } 367 368 public void setEmailAddress(String emailAddress) { 369 this.emailAddress = emailAddress; 370 } 371 372 public void setPartyName(String partyName) { 373 this.partyName = partyName; 374 } 375 376 public PartyAliasType getPartyAliasType() { 377 return partyAliasType; 378 } 379 380 public void setPartyAliasType(PartyAliasType partyAliasType) { 381 this.partyAliasType = partyAliasType; 382 } 383 384 public String getAlias() { 385 return alias; 386 } 387 388 public void setAlias(String alias) { 389 this.alias = alias; 390 } 391 392 @Override 393 public BasicAnalyzer getAnalyzer(final ExecutionErrorAccumulator eea, final Language language) { 394 return new PartyAnalyzer(eea, language, entityType, partyType, entityNameIndexField); 395 } 396 397 /** Subclasses should override and always call their super's executeSearch() */ 398 @Override 399 protected EntityInstancePKHolder executeSearch(final ExecutionErrorAccumulator eea) { 400 EntityInstancePKHolder resultSet = null; 401 var parameterCount = (partyName == null ? 0 : 1) + (alias == null ? 0 : 1); 402 403 if(parameterCount == 0) { 404 resultSet = super.executeSearch(eea); 405 406 if(resultSet == null || resultSet.size() > 0) { 407 if(firstName != null) { 408 if(firstNameSoundex) { 409 String firstNameSdx; 410 411 try { 412 firstNameSdx = firstName == null? null: getSoundex().encode(firstName); 413 } catch (IllegalArgumentException iae) { 414 firstNameSdx = null; 415 } 416 417 if(firstNameSdx != null) { 418 var entityInstancePKHolder = getEntityInstancePKHolderByFirstNameSdx(firstNameSdx); 419 420 if(resultSet == null) { 421 resultSet = entityInstancePKHolder; 422 } else { 423 resultSet.retainAll(entityInstancePKHolder); 424 } 425 } else { 426 resultSet = null; 427 } 428 } else { 429 var entityInstancePKHolder = getEntityInstancePKHolderByFirstName(firstName); 430 431 if(resultSet == null) { 432 resultSet = entityInstancePKHolder; 433 } else { 434 resultSet.retainAll(entityInstancePKHolder); 435 } 436 } 437 } 438 } 439 440 if(resultSet == null || resultSet.size() > 0) { 441 if(middleName != null) { 442 if(middleNameSoundex) { 443 String middleNameSdx; 444 445 try { 446 middleNameSdx = middleName == null? null: getSoundex().encode(middleName); 447 } catch (IllegalArgumentException iae) { 448 middleNameSdx = null; 449 } 450 451 if(middleNameSdx != null) { 452 var entityInstancePKHolder = getEntityInstancePKHolderByMiddleNameSdx(middleNameSdx); 453 454 if(resultSet == null) { 455 resultSet = entityInstancePKHolder; 456 } else { 457 resultSet.retainAll(entityInstancePKHolder); 458 } 459 } else { 460 resultSet = null; 461 } 462 } else { 463 var entityInstancePKHolder = getEntityInstancePKHolderByMiddleName(middleName); 464 465 if(resultSet == null) { 466 resultSet = entityInstancePKHolder; 467 } else { 468 resultSet.retainAll(entityInstancePKHolder); 469 } 470 } 471 } 472 } 473 474 if(resultSet == null || resultSet.size() > 0) { 475 if(lastName != null) { 476 if(lastNameSoundex) { 477 String lastNameSdx; 478 479 try { 480 lastNameSdx = lastName == null? null: getSoundex().encode(lastName); 481 } catch (IllegalArgumentException iae) { 482 lastNameSdx = null; 483 } 484 485 if(lastNameSdx != null) { 486 var entityInstancePKHolder = getEntityInstancePKHolderByLastNameSdx(lastNameSdx); 487 488 if(resultSet == null) { 489 resultSet = entityInstancePKHolder; 490 } else { 491 resultSet.retainAll(entityInstancePKHolder); 492 } 493 } else { 494 resultSet = null; 495 } 496 } else { 497 var entityInstancePKHolder = getEntityInstancePKHolderByLastName(lastName); 498 499 if(resultSet == null) { 500 resultSet = entityInstancePKHolder; 501 } else { 502 resultSet.retainAll(entityInstancePKHolder); 503 } 504 } 505 } 506 } 507 508 if(countryGeoCode != null && areaCode != null && (resultSet == null || resultSet.size() > 0)) { 509 var entityInstancePKHolder = getEntityInstancePKHolderByAreaCode(countryGeoCode, areaCode); 510 511 if(resultSet == null) { 512 resultSet = entityInstancePKHolder; 513 } else { 514 resultSet.retainAll(entityInstancePKHolder); 515 } 516 } 517 518 if(countryGeoCode != null && telephoneNumber != null && (resultSet == null || resultSet.size() > 0)) { 519 var entityInstancePKHolder = getEntityInstancePKHolderByTelephoneNumber(countryGeoCode, telephoneNumber); 520 521 if(resultSet == null) { 522 resultSet = entityInstancePKHolder; 523 } else { 524 resultSet.retainAll(entityInstancePKHolder); 525 } 526 } 527 528 if(countryGeoCode != null && telephoneExtension != null && (resultSet == null || resultSet.size() > 0)) { 529 var entityInstancePKHolder = getEntityInstancePKHolderByTelephoneExtension(countryGeoCode, telephoneExtension); 530 531 if(resultSet == null) { 532 resultSet = entityInstancePKHolder; 533 } else { 534 resultSet.retainAll(entityInstancePKHolder); 535 } 536 } 537 538 if(emailAddress != null && (resultSet == null || resultSet.size() > 0)) { 539 var entityInstancePKHolder = getEntityInstancePKHolderByEmailAddress(emailAddress); 540 541 if(resultSet == null) { 542 resultSet = entityInstancePKHolder; 543 } else { 544 resultSet.retainAll(entityInstancePKHolder); 545 } 546 } 547 548 if(resultSet == null || resultSet.size() > 0) { 549 if(q != null) { 550 var entityInstancePKHolder = executeQuery(eea); 551 552 if(resultSet == null) { 553 resultSet = entityInstancePKHolder; 554 } else { 555 resultSet.retainAll(entityInstancePKHolder); 556 } 557 } 558 } 559 } else { 560 if(parameterCount == 1) { 561 var partyControl = Session.getModelController(PartyControl.class); 562 Party party = null; 563 564 if(alias != null) { 565 if(partyAliasType == null) { 566 partyAliasType = partyControl.getDefaultPartyAliasType(partyType); 567 } 568 569 if(partyAliasType != null) { 570 party = partyControl.getPartyByAlias(partyAliasType, alias); 571 } 572 } 573 574 if(partyName != null) { 575 party = partyControl.getPartyByName(partyName); 576 577 // If it isn't the PartyType we're looking for, toss the Party away. 578 if(!party.getLastDetail().getPartyType().equals(partyType)) { 579 party = null; 580 } 581 } 582 583 if(party != null) { 584 var entityInstanceControl = Session.getModelController(EntityInstanceControl.class); 585 586 resultSet = new EntityInstancePKHolder(1); 587 resultSet.add(entityInstanceControl.getEntityInstanceByBasePK(party.getPrimaryKey()).getPrimaryKey(), null); 588 } 589 } 590 } 591 592 return resultSet; 593 } 594 595}