class StandardFDRemoteProcessGroupService extends BaseComponentService<VersionedRemoteProcessGroup,FDRemoteProcessGroup> implements FDRemoteProcessGroupService {

    @Override
    public FDRemoteProcessGroup create(final String flowId, final String processGroupId, final VersionedRemoteProcessGroup requestComponentConfig) {
        final String targetUris = requestComponentConfig.getTargetUris();
        if (StringUtils.isBlank(targetUris)) {
            throw new IllegalArgumentException("Cannot add a Remote Process Group without specifying the Target URI(s)");
        }

        validateRequestValues(requestComponentConfig);

        return createComponent(
                flowId,
                processGroupId,
                null,
                requestComponentConfig,
                () -> {
                    final VersionedRemoteProcessGroup componentConfig = new VersionedRemoteProcessGroup();
                    componentConfig.setTransportProtocol(DEFAULT_TRANSPORT_PROTOCOL);
                    componentConfig.setCommunicationsTimeout(DEFAULT_COMMUNICATION_TIMEOUT);
                    componentConfig.setYieldDuration(DEFAULT_YIELD_DURATION);
                    componentConfig.setLocalNetworkInterface("");
                    componentConfig.setProxyHost("");
                    componentConfig.setInputPorts(new HashSet<>());
                    componentConfig.setOutputPorts(new HashSet<>());

                    final FDRemoteProcessGroup component = new FDRemoteProcessGroup();
                    component.setComponentConfiguration(componentConfig);
                    return component;
                },
                VersionedProcessGroup::getRemoteProcessGroups,
                null);
    }

    public  StandardFDRemoteProcessGroupService(final FDFlowManager flowManager, final ValidationService validationService);

}