The Tenant Manager supports pluggable CrUD logic via the ITenantOperationsListener interface. Currently, if any one of these fails, the whole things fails. (These behaviors are not, however, wrapped in a single transaction; you can end up with a partially-created tenant.)
Some behaviors, while desirable, are not important enough to torpedo the entire process. (E.g. sending the tenant admin an email to notify) We need to make it possible for each ITenantOperationsListener to report on the status of what they attempted:
FAIL (I didn't work, but please proceed)
ABORT (I didn't work, and you cannot proceed)
We should, furthermore, wrap this info up with messages from the process – what was don't, or what failed – into a new "report" screen that displays after you add a tenant and tells you all about what occured.
Lastly, some ITenantOperationsListener instances have behavior that you might want to offer ad-hoc. (E.g. re-send the tenant admin email) We should implement some plumbing to allow ITenantOperationsListener object to offer Actions that can be accessed from the UI.