blob: cfc0034738d83b84d5fadcfa6c5c9c9f8d3823a7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sling.tenant;
import java.util.Map;
import org.osgi.annotation.versioning.ProviderType;
/**
* The <code>TenantManager</code> service interface defines the API that
* administrative tools will use to created, update or remove Tenants.
* <p>
* The implementation will make use of
* {@link org.apache.sling.tenant.spi.TenantCustomizer} services to customize
* management of tenants.
* <p>
* Tenant properties can be created, modified, and removed with the
* {@link #setProperty(Tenant, String, Object)},
* {@link #setProperties(Tenant, Map)} and
* {@link #removeProperties(Tenant, String...)} methods. Please note that every
* call to any of these methods causes the
* {@link org.apache.sling.tenant.spi.TenantCustomizer} services to be called.
* To limit these calls for multiple changes the
* {@link #setProperties(Tenant, Map)} method should be called.
*/
@ProviderType
public interface TenantManager {
/**
* Creates a new tenant with the given tenant ID and the initial set of
* properties.
* <p>
* After creating the tenant, the
* {@link org.apache.sling.tenant.spi.TenantManagerHook#setup(Tenant)}
* method is called to allow customizers to configure additional properties.
* <p>
* Before returning the newly created tenant object the data is persisted.
*
* @param tenantId The name of the new tenant. This name must not be
* {@code null} or an empty string. It must also not be the same
* name as that of an existing tenant.
* @param properties An optional map of initial properties. This may be
* {@code null} to not preset any properties. It is recommended,
* though, that this map contain at least the
* {@link Tenant#PROP_NAME} and {@link Tenant#PROP_DESCRIPTION}
* properties.
* @return The newly created {@link Tenant} instance or {@code null} if a tenant
* with the id already exists.
* @throws NullPointerException if {@code tenantId} is {@code null}.
*/
Tenant create(String tenantId, Map<String, Object> properties);
/**
* Sets a single property of the tenant to a new value or removes the
* property if the value is {@code null}.
* <p>
* Before returning the
* {@link org.apache.sling.tenant.spi.TenantManagerHook#change(Tenant)}
* method is called to allow customizers to configure additional properties.
*
* @param tenant The tenant whose property is to be set or remove.
* @param name The name of the property to set or remove.
* @param value The new value of the property. If this value is {@code null}
* the property is actually removed.
* @throws NullPointerException if {@code tenant} or {@code name} is
* {@code null}.
*/
void setProperty(Tenant tenant, String name, Object value);
/**
* Sets or removes multiple properties on the tenant.
* <p>
* Before returning the
* {@link org.apache.sling.tenant.spi.TenantManagerHook#change(Tenant)}
* method is called to allow customizers to configure additional properties.
*
* @param tenant The tenant whose properties are to be modified.
* @param properties The map of properties to set or remove. A property
* whose value is {@code null} is removed from the tenant.
* @throws NullPointerException if {@code tenant} or {@code properties} is
* {@code null}.
*/
void setProperties(Tenant tenant, Map<String, Object> properties);
/**
* Removes one or more properties from the tenant.
* <p>
* Before returning the
* {@link org.apache.sling.tenant.spi.TenantManagerHook#change(Tenant)}
* method is called to allow customizers to configure additional properties
* unless the {@code properties} parameter is {@code null} or empty.
*
* @param tenant The tenant from which to remove properties.
* @param propertyNames The list of properties to be removed. If this is
* {@code null} or empty, nothing happens and the
* {@link org.apache.sling.tenant.spi.TenantCustomizer} is not
* called.
* @throws NullPointerException if {@code tenant} is {@code null}.
*/
void removeProperties(Tenant tenant, String... propertyNames);
/**
* Removes the given tenant.
* <p>
* Before returning the
* {@link org.apache.sling.tenant.spi.TenantManagerHook#remove(Tenant)}
* method is called to allow customizers to implement further cleanup upon
* tenant removal.
*
* @param tenant The tenant to remove.
* @throws NullPointerException if {@code tenant} is {@code null}
*/
void remove(Tenant tenant);
}