blob: c5d66f55d854437021fcbb92552bfa598fa916cb [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.nifi.registry.revision.entity;
import java.util.List;
import java.util.function.Supplier;
/**
* A service to perform CRUD operations on a RevisableEntity.
*/
public interface RevisableEntityService {
/**
* Creates an entity using the RevisionManager.
*
* @param requestEntity the entity to create
* @param creatorIdentity the identity of the user performing the create operation
* @param createEntity a function that creates the entity and returns the created reference
* @param <T> the type of RevisableEntity
* @return the created entity
*/
<T extends RevisableEntity> T create(T requestEntity, String creatorIdentity, Supplier<T> createEntity);
/**
* Retrieves a RevisableEntity and populates the RevisionInfo.
*
* @param getEntity a function that retrieves an entity
* @param <T> the type of RevisableEntity
* @return the retrieved entity
*/
<T extends RevisableEntity> T get(Supplier<T> getEntity);
/**
* Retrieves a List of RevisableEntity instances and populates the RevisionInfo.
*
* @param getEntities a function that retrieves a list of entities
* @param <T> the type of RevisableEntity
* @return the list of retrieved entity
*/
<T extends RevisableEntity> List<T> getEntities(Supplier<List<T>> getEntities);
/**
* Updates a RevisableEntity using the RevisionManager.
*
* @param requestEntity the entity to update
* @param updaterIdentity the identity of the user performing the update operation
* @param updateEntity a function that updates the entity and returns the updated reference
* @param <T> the type of RevisableEntity
* @return the updated entity
*/
<T extends RevisableEntity> T update(T requestEntity, String updaterIdentity, Supplier<T> updateEntity);
/**
* Deletes a RevisableEntity using the RevisionManager.
*
* @param entityIdentifier the identifier of the entity to delete
* @param revisionInfo the RevisionInfo for the entity to delete
* @param deleteEntity a function that deletes the entity and returns the deleted reference
* @param <T> the type of RevisableEntity
* @return the deleted entity
*/
<T extends RevisableEntity> T delete(String entityIdentifier, RevisionInfo revisionInfo, Supplier<T> deleteEntity);
}