blob: 3cd2efa14a2c4fadd528e65a76eeeec12088aaf9 [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.ambari.server.controller.spi;
import java.util.Map;
import java.util.Set;
/**
* The resource provider allows for the plugging in of a back end data store
* for a resource type. The resource provider is associated with a specific
* resource type and can be queried for a list of resources of that type.
* The resource provider plugs into and is used by the
* {@link ClusterController cluster controller} to obtain a list of resources
* for a given request.
*/
public interface ResourceProvider {
/**
* Create the resources defined by the properties in the given request object.
*
*
* @param request the request object which defines the set of properties
* for the resources to be created
*
* @return the request status
*
* @throws SystemException an internal system exception occurred
* @throws UnsupportedPropertyException the request contains unsupported property ids
* @throws ResourceAlreadyExistsException attempted to create a resource which already exists
* @throws NoSuchParentResourceException a parent resource of the resource to create doesn't exist
*/
public RequestStatus createResources(Request request)
throws SystemException,
UnsupportedPropertyException,
ResourceAlreadyExistsException,
NoSuchParentResourceException;
/**
* Get a set of {@link Resource resources} based on the given request and predicate
* information.
* </p>
* Note that it is not required for this resource provider to completely filter
* the set of resources based on the given predicate. It may not be possible
* since some of the properties involved may be provided by another
* {@link PropertyProvider provider}. This partial filtering is allowed because
* the predicate will always be applied by the calling cluster controller. The
* predicate is made available at this level so that some pre-filtering can be done
* as an optimization.
* </p>
* A simple implementation of a resource provider may choose to just return all of
* the resources of a given type and allow the calling cluster controller to filter
* based on the predicate.
*
*
* @param request the request object which defines the desired set of properties
* @param predicate the predicate object which can be used to filter which
* resources are returned
* @return a set of resources based on the given request and predicate information
*
* @throws SystemException an internal system exception occurred
* @throws UnsupportedPropertyException the request contains unsupported property ids
* @throws NoSuchResourceException the requested resource instance doesn't exist
* @throws NoSuchParentResourceException a parent resource of the requested resource doesn't exist
*/
public Set<Resource> getResources(Request request, Predicate predicate)
throws SystemException,
UnsupportedPropertyException,
NoSuchResourceException,
NoSuchParentResourceException;
/**
* Update the resources selected by the given predicate with the properties
* from the given request object.
*
*
*
* @param request the request object which defines the set of properties
* for the resources to be updated
* @param predicate the predicate object which can be used to filter which
* resources are updated
*
* @return the request status
*
* @throws SystemException an internal system exception occurred
* @throws UnsupportedPropertyException the request contains unsupported property ids
* @throws NoSuchResourceException the resource instance to be updated doesn't exist
* @throws NoSuchParentResourceException a parent resource of the resource doesn't exist
*/
public RequestStatus updateResources(Request request, Predicate predicate)
throws SystemException,
UnsupportedPropertyException,
NoSuchResourceException,
NoSuchParentResourceException;
/**
* Delete the resources selected by the given predicate.
*
*
*
* @param predicate the predicate object which can be used to filter which
* resources are deleted
*
* @return the request status
*
* @throws SystemException an internal system exception occurred
* @throws UnsupportedPropertyException the request contains unsupported property ids
* @throws NoSuchResourceException the resource instance to be deleted doesn't exist
* @throws NoSuchParentResourceException a parent resource of the resource doesn't exist
*/
public RequestStatus deleteResources(Predicate predicate)
throws SystemException,
UnsupportedPropertyException,
NoSuchResourceException,
NoSuchParentResourceException;
/**
* Get the set of property ids for the properties that this provider can provide.
*
* @return the set of property ids for the properties that this provider can provide
*/
// TODO : remove this
public Set<String> getPropertyIdsForSchema();
/**
* Get the key property ids for the resource type associated with this resource
* providers. The key properties are those that uniquely identify the resource.
*
* @return a map of key property ids
*/
public Map<Resource.Type, String> getKeyPropertyIds();
/**
* Check whether the set of given property ids is supported by this resource
* provider.
*
* @return a subset of the given property id set containing any property ids not
* supported by this resource provider. An empty return set indicates
* that all of the given property ids are supported.
*/
public Set<String> checkPropertyIds(Set<String> propertyIds);
}