package com.thinkbiganalytics.nifi.rest.client;
/*-
* #%L
* thinkbig-nifi-rest-client-api
* %%
* Copyright (C) 2017 ThinkBig Analytics
* %%
* Licensed 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.
* #L%
*/
import org.apache.nifi.web.api.dto.ConnectableDTO;
import org.apache.nifi.web.api.dto.ConnectionDTO;
import org.apache.nifi.web.api.dto.ControllerServiceDTO;
import org.apache.nifi.web.api.dto.FlowSnippetDTO;
import org.apache.nifi.web.api.dto.PortDTO;
import org.apache.nifi.web.api.dto.ProcessGroupDTO;
import org.apache.nifi.web.api.dto.status.ProcessGroupStatusDTO;
import java.util.Optional;
import java.util.Set;
import javax.annotation.Nonnull;
/**
* Exposes the NiFi Process Groups REST endpoint as a Java class.
*/
public interface NiFiProcessGroupsRestClient {
/**
* Creates a process group.
*
* @param parentProcessGroupId the parent process group id
* @param name the name for the new process group
* @return the new process group
* @throws NifiComponentNotFoundException if the parent process group does not exist
*/
@Nonnull
ProcessGroupDTO create(@Nonnull String parentProcessGroupId, @Nonnull String name);
/**
* Creates a connection.
*
* @param processGroupId the process group id
* @param source the connection source
* @param dest the connection destination
* @return the connection
* @throws NifiComponentNotFoundException if the process group does not exist
*/
@Nonnull
ConnectionDTO createConnection(@Nonnull String processGroupId, @Nonnull ConnectableDTO source, @Nonnull ConnectableDTO dest);
/**
* Creates a controller service.
*
* @param processGroupId the process group id
* @param controllerService the controller service
* @return the controller service
* @throws NifiComponentNotFoundException if the process group does not exist
* @throws UnsupportedOperationException if the NiFi version is pre-1.0
*/
@Nonnull
ControllerServiceDTO createControllerService(@Nonnull String processGroupId, @Nonnull ControllerServiceDTO controllerService);
/**
* Creates an input port.
*
* @param processGroupId the process group id
* @param inputPort the input port to create
* @return the new input port
* @throws NifiComponentNotFoundException if the process group does not exist
*/
@Nonnull
PortDTO createInputPort(@Nonnull String processGroupId, @Nonnull PortDTO inputPort);
/**
* Creates an output port.
*
* @param processGroupId the process group id
* @param outputPort the output port to create
* @return the new output port
* @throws NifiComponentNotFoundException if the process group does not exist
*/
@Nonnull
PortDTO createOutputPort(@Nonnull String processGroupId, @Nonnull PortDTO outputPort);
/**
* Deletes a process group.
*
* @param processGroup the process group to delete
* @return the deleted process group, if found
* @throws NifiClientRuntimeException if the operation times out
*/
@Nonnull
Optional<ProcessGroupDTO> delete(@Nonnull ProcessGroupDTO processGroup);
/**
* Gets all child process groups.
*
* @param parentGroupId the parent process group id
* @return the child process groups
* @throws NifiComponentNotFoundException if the parent process group does not exist
*/
@Nonnull
Set<ProcessGroupDTO> findAll(@Nonnull String parentGroupId);
/**
* Gets a process group.
*
* @param processGroupId the process group id
* @param recursive {@code true} to include all encapsulated components, or {@code false} for just the immediate children
* @param verbose {@code true} to include any encapsulated components, or {@code false} for just details about the process group
* @return the process group, if found
*/
@Nonnull
Optional<ProcessGroupDTO> findById(@Nonnull String processGroupId, boolean recursive, boolean verbose);
/**
* Gets a process group.
*
* @param processGroupId the process group id
* @param recursive {@code true} to include all encapsulated components, or {@code false} for just the immediate children
* @param verbose {@code true} to include any encapsulated components, or {@code false} for just details about the process group
* @param logRestAccessErrors {@code true} log any REST access exception when getting the Entity, or {@code false} will not log the error.
* @return the process group, if found
*/
@Nonnull
Optional<ProcessGroupDTO> findById(@Nonnull final String processGroupId, final boolean recursive, final boolean verbose, boolean logRestAccessErrors);
/**
* Gets the child process group with the specified name, optionally including all sub-components.
*
* @param parentGroupId the id of the parent process group
* @param groupName the name of the process group to find
* @param recursive {@code true} to include all encapsulated components, or {@code false} for just the immediate children
* @param verbose {@code true} to include any encapsulated components, or {@code false} for just details about the process group
* @return the child process group, or {@code null} if not found
* @throws NifiComponentNotFoundException if the parent process group does not exist
*/
@Nonnull
Optional<ProcessGroupDTO> findByName(@Nonnull String parentGroupId, @Nonnull String groupName, boolean recursive, boolean verbose);
/**
* Get the Status for a processGroup
*/
Optional<ProcessGroupStatusDTO> getStatus(String processGroupId);
/**
* Gets the root process group.
*
* @return the root process group
*/
@Nonnull
ProcessGroupDTO findRoot();
/**
* Gets all connections.
*
* @param processGroupId the process group id
* @return all connections within the process group
* @throws NifiComponentNotFoundException if the process group does not exist
*/
@Nonnull
Set<ConnectionDTO> getConnections(@Nonnull String processGroupId);
/**
* Gets all controller services.
*
* @param processGroupId the process group id
* @return all controller services within the process group
*/
@Nonnull
Set<ControllerServiceDTO> getControllerServices(@Nonnull String processGroupId);
/**
* Gets all input ports.
*
* @param processGroupId the process group id
* @return all input ports within the process group
* @throws NifiComponentNotFoundException if the process group does not exist
*/
@Nonnull
Set<PortDTO> getInputPorts(@Nonnull String processGroupId);
/**
* Gets all output ports.
*
* @param processGroupId the process group id
* @return all output ports within the process group
* @throws NifiComponentNotFoundException if the process group does not exist
*/
@Nonnull
Set<PortDTO> getOutputPorts(@Nonnull String processGroupId);
/**
* Instantiates a template.
*
* @param processGroupId the process group id
* @param templateId the template id
* @return the created flow
* @throws NifiComponentNotFoundException if the process group or template does not exist
*/
@Nonnull
FlowSnippetDTO instantiateTemplate(@Nonnull String processGroupId, @Nonnull String templateId);
/**
* Schedule or unschedule components in the specified Process Group.
*
* @param processGroupId the process group id
* @param parentGroupId the parent process group id
* @param state the desired state of the descendant components
* @throws NifiComponentNotFoundException if the process group does not exist
*/
void schedule(@Nonnull String processGroupId, @Nonnull String parentGroupId, @Nonnull NiFiComponentState state);
/**
* Updates a process group.
*
* @param processGroup the process group
* @return the updated process group
* @throws NifiComponentNotFoundException if the process group does not exist
*/
@Nonnull
ProcessGroupDTO update(@Nonnull ProcessGroupDTO processGroup);
}