* @return the persisted security
*/
public static ManageableSecurity addOrUpdateSecurity(SecurityMaster securityMaster, ManageableSecurity security, boolean deleteAndReAdd) {
ArgumentChecker.notNull(security, "security");
BeanCompare beanCompare = new BeanCompare();
SecuritySearchRequest searchReq = new SecuritySearchRequest();
ExternalIdSearch idSearch = new ExternalIdSearch(security.getExternalIdBundle()); // match any one of the IDs
searchReq.setVersionCorrection(VersionCorrection.ofVersionAsOf(Instant.now())); // valid now
searchReq.setExternalIdSearch(idSearch);
searchReq.setFullDetail(true);
searchReq.setSortOrder(SecuritySearchSortOrder.VERSION_FROM_INSTANT_DESC);
SecuritySearchResult searchResult = securityMaster.search(searchReq);
if (deleteAndReAdd) {
for (ManageableSecurity foundSecurity : searchResult.getSecurities()) {
securityMaster.remove(foundSecurity.getUniqueId());
}
} else {
for (ManageableSecurity foundSecurity : searchResult.getSecurities()) {
List<BeanDifference<?>> differences = null;
if (foundSecurity.getClass().equals(security.getClass())) {
try {
differences = beanCompare.compare(foundSecurity, security);
} catch (Exception e) {
s_logger.error("Error comparing securities with ID bundle " + security.getExternalIdBundle(), e);
return null;
}
}