protected <T, G extends Exception> void persistCopyObjectTree(CopyOperation<T,G> copyOperation, Class<T> clazz, T original, MultiTenantCopyContext context) throws G {
try {
if (context.getEquivalentId(clazz.getName(), genericEntityService.getIdentifier(original)) != null) {
return;
}
context.clearOriginalIdentifiers();
genericEntityService.clearAutoFlushMode();
Object copy = copyOperation.execute(original);
BroadleafRequestContext.getBroadleafRequestContext().setEnforceEnterpriseCollectionBehaviorState(EnforceEnterpriseCollectionBehaviorState.FALSE);
persistCopyObjectTreeInternal(copy, new HashSet<Integer>(), context);
genericEntityService.flush();
} catch (Exception e) {
LOG.error("Unable to persist the copy object tree", e);
throw ExceptionHelper.refineException(e);
} finally {
BroadleafRequestContext.getBroadleafRequestContext().setEnforceEnterpriseCollectionBehaviorState(EnforceEnterpriseCollectionBehaviorState.TRUE);
context.clearOriginalIdentifiers();
genericEntityService.enableAutoFlushMode();
}
}