Package org.apache.sling.tenant

# Interface TenantManager

@ProviderType public interface TenantManager
The `TenantManager` service interface defines the API that administrative tools will use to created, update or remove Tenants.

The implementation will make use of `TenantCustomizer` services to customize management of tenants.

Tenant properties can be created, modified, and removed with the `setProperty(Tenant, String, Object)`, `setProperties(Tenant, Map)` and `removeProperties(Tenant, String...)` methods. Please note that every call to any of these methods causes the `TenantCustomizer` services to be called. To limit these calls for multiple changes the `setProperties(Tenant, Map)` method should be called.

## Method Summary

Modifier and Type
Method
Description
`Tenant`
`create(String tenantId, Map<String,Object> properties)`
Creates a new tenant with the given tenant ID and the initial set of properties.
`void`
`remove(Tenant tenant)`
Removes the given tenant.
`void`
`removeProperties(Tenant tenant, String... propertyNames)`
Removes one or more properties from the tenant.
`void`
`setProperties(Tenant tenant, Map<String,Object> properties)`
Sets or removes multiple properties on the tenant.
`void`
`setProperty(Tenant tenant, String name, Object value)`
Sets a single property of the tenant to a new value or removes the property if the value is `null`.

## Method Details

### create

Tenant create(String tenantId, Map<String,Object> properties)
Creates a new tenant with the given tenant ID and the initial set of properties.

After creating the tenant, the `TenantManagerHook.setup(Tenant)` method is called to allow customizers to configure additional properties.

Before returning the newly created tenant object the data is persisted.

Parameters:
  `tenantId` - The name of the new tenant. This name must not be `null` or an empty string. It must also not be the same name as that of an existing tenant.
  `properties` - An optional map of initial properties. This may be `null` to not preset any properties. It is recommended, though, that this map contain at least the `Tenant.PROP_NAME` and `Tenant.PROP_DESCRIPTION` properties.
Returns:
  The newly created `Tenant` instance or `null` if a tenant with the id already exists.
Throws:
  `NullPointerException` - if `tenantId` is `null`.

### setProperty

void setProperty(Tenant tenant, String name, Object value)
Sets a single property of the tenant to a new value or removes the property if the value is `null`.

Before returning the `TenantManagerHook.change(Tenant)` method is called to allow customizers to configure additional properties.

Parameters:
  `tenant` - The tenant whose property is to be set or remove.
  `name` - The name of the property to set or remove.
  `value` - The new value of the property. If this value is `null` the property is actually removed.
Throws:
  `NullPointerException` - if `tenant` or `name` is `null`.

### setProperties

void setProperties(Tenant tenant, Map<String,Object> properties)
Sets or removes multiple properties on the tenant.

Before returning the `TenantManagerHook.change(Tenant)` method is called to allow customizers to configure additional properties.

Parameters:
  `tenant` - The tenant whose properties are to be modified.
  `properties` - The map of properties to set or remove. A property whose value is `null` is removed from the tenant.
Throws:
  `NullPointerException` - if `tenant` or `properties` is `null`.

### removeProperties

void removeProperties(Tenant tenant, String... propertyNames)
Removes one or more properties from the tenant.

Before returning the `TenantManagerHook.change(Tenant)` method is called to allow customizers to configure additional properties unless the `properties` parameter is `null` or empty.

Parameters:
  `tenant` - The tenant from which to remove properties.
  `propertyNames` - The list of properties to be removed. If this is `null` or empty, nothing happens and the `TenantCustomizer` is not called.
Throws:
  `NullPointerException` - if `tenant` is `null`.

### remove

void remove(Tenant tenant)
Removes the given tenant.

Before returning the `TenantManagerHook.remove(Tenant)` method is called to allow customizers to implement further cleanup upon tenant removal.

Parameters:
  `tenant` - The tenant to remove.
Throws:
  `NullPointerException` - if `tenant` is `null`