| /** |
| * 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 key property ids for the resource type associated with this resource |
| * provider. The key properties are those that uniquely identify the resource. |
| *</p> |
| * For example, the resource 'HostComponent' is uniquely identified by |
| * its associated 'Cluster', 'Host' and 'Component' resources. The key property ids |
| * for a 'HostComponent' resource includes the property ids of the foreign key |
| * references from the 'HostComponent' to 'Cluster', 'Host' and 'Component' resources. |
| * |
| * @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); |
| } |