/**
  * Add the default Resident Identity Provider entry when a new tenant is registered.
  *
  * @param tenantInfo Information about the newly created tenant
  */
 public void onTenantCreate(TenantInfoBean tenantInfo) throws StratosException {
   try {
     String tenantDomain = tenantInfo.getTenantDomain();
     IdentityProvider identityProvider = new IdentityProvider();
     identityProvider.setIdentityProviderName(
         IdentityApplicationConstants.RESIDENT_IDP_RESERVED_NAME);
     identityProvider.setHomeRealmId("localhost");
     identityProvider.setPrimary(true);
     IdentityProviderManager.getInstance().addResidentIdP(identityProvider, tenantDomain);
   } catch (IdentityApplicationManagementException e) {
     String message =
         "Error when adding Resident Identity Provider entry for tenant "
             + tenantInfo.getTenantDomain();
     log.error(message, e);
     throw new StratosException(message);
   }
 }
  /** @param message - map message which contains data to tenant creation via a rest call. */
  @Override
  public void onMessage(Message message) {

    TenantInfoBean tenantInfoBean = null;
    MapMessage mapMessage;
    if (message instanceof MapMessage) {
      mapMessage = (MapMessage) message;
      String tenantInfoJson;
      try {
        tenantInfoJson = mapMessage.getString(AppFactoryConstants.TENANT_INFO);
        ObjectMapper mapper = new ObjectMapper();
        tenantInfoBean = mapper.readValue(tenantInfoJson, TenantInfoBean.class);

        if (log.isDebugEnabled()) {
          log.debug("Received a message for tenant domain " + tenantInfoBean.getTenantDomain());
        }
        mapMessage.acknowledge();
      } catch (JMSException e) {
        log.error("Error while getting message content.", e);
        throw new RuntimeException(e);
      } catch (JsonParseException e) {
        log.error("Error while converting the json to object.", e);
        throw new RuntimeException(e);
      } catch (JsonMappingException e) {
        log.error("Error while converting the json to object.", e);
        throw new RuntimeException(e);
      } catch (IOException e) {
        log.error("Error while converting the json to object.", e);
        throw new RuntimeException(e);
      }
    }

    try {
      int tenantId =
          ServiceHolder.getRealmService()
              .getTenantManager()
              .getTenantId(tenantInfoBean.getTenantDomain());
      if (tenantId == MultitenantConstants.INVALID_TENANT_ID) {
        addTenant(tenantInfoBean);
      } else {
        if (log.isDebugEnabled()) {
          log.debug(
              "Tenant Already exist, skipping the tenant addition. Tenant domain : "
                  + tenantInfoBean.getTenantDomain()
                  + "and tenant Id : "
                  + tenantInfoBean.getTenantId());
        }
      }

    } catch (JMSException e) {
      String msg = "Can not read received map massage";
      log.error(msg, e);
      throw new RuntimeException(e);
    } catch (AppFactoryException e) {
      String msg = "Can not create tenant";
      log.error(msg, e);
      throw new RuntimeException(e);
    } catch (Exception e) {
      String msg = "Can not create tenant";
      log.error(msg, e);
      throw new RuntimeException(e);
    }
  }