use of org.apache.nifi.web.api.entity.VariableEntity in project nifi by apache.
the class DtoFactory method createVariableRegistryDto.
public VariableRegistryDTO createVariableRegistryDto(final ProcessGroup processGroup, final RevisionManager revisionManager) {
final ComponentVariableRegistry variableRegistry = processGroup.getVariableRegistry();
final List<String> variableNames = variableRegistry.getVariableMap().keySet().stream().map(descriptor -> descriptor.getName()).collect(Collectors.toList());
final Set<VariableEntity> variableEntities = new LinkedHashSet<>();
for (final String variableName : variableNames) {
final VariableDTO variableDto = new VariableDTO();
variableDto.setName(variableName);
variableDto.setValue(variableRegistry.getVariableValue(variableName));
variableDto.setProcessGroupId(processGroup.getIdentifier());
final Set<AffectedComponentEntity> affectedComponentEntities = createAffectedComponentEntities(processGroup.getComponentsAffectedByVariable(variableName), revisionManager);
boolean canWrite = true;
for (final AffectedComponentEntity affectedComponent : affectedComponentEntities) {
final PermissionsDTO permissions = affectedComponent.getPermissions();
if (!permissions.getCanRead() || !permissions.getCanWrite()) {
canWrite = false;
break;
}
}
variableDto.setAffectedComponents(affectedComponentEntities);
final VariableEntity variableEntity = new VariableEntity();
variableEntity.setVariable(variableDto);
variableEntity.setCanWrite(canWrite);
variableEntities.add(variableEntity);
}
final VariableRegistryDTO registryDto = new VariableRegistryDTO();
registryDto.setProcessGroupId(processGroup.getIdentifier());
registryDto.setVariables(variableEntities);
return registryDto;
}
use of org.apache.nifi.web.api.entity.VariableEntity in project nifi by apache.
the class PGSetVar method doExecute.
@Override
public VoidResult doExecute(final NiFiClient client, final Properties properties) throws NiFiClientException, IOException, MissingOptionException, CommandException {
final String pgId = getRequiredArg(properties, CommandOption.PG_ID);
final String varName = getRequiredArg(properties, CommandOption.PG_VAR_NAME);
final String varVal = getRequiredArg(properties, CommandOption.PG_VAR_VALUE);
final ProcessGroupClient pgClient = client.getProcessGroupClient();
final VariableRegistryEntity variableRegistry = pgClient.getVariables(pgId);
final VariableRegistryDTO variableRegistryDTO = variableRegistry.getVariableRegistry();
final VariableDTO variableDTO = new VariableDTO();
variableDTO.setName(varName);
variableDTO.setValue(varVal);
final VariableEntity variableEntity = new VariableEntity();
variableEntity.setVariable(variableDTO);
// take the existing DTO and set only the requested variable for this command
variableRegistryDTO.setVariables(Collections.singleton(variableEntity));
// initiate the update request by posting the updated variable registry
final VariableRegistryUpdateRequestEntity createdUpdateRequest = pgClient.updateVariableRegistry(pgId, variableRegistry);
// poll the update request for up to 30 seconds to see if it has completed
// if it doesn't complete then an exception will be thrown, but in either case the request will be deleted
final String updateRequestId = createdUpdateRequest.getRequest().getRequestId();
try {
boolean completed = false;
for (int i = 0; i < 30; i++) {
final VariableRegistryUpdateRequestEntity updateRequest = pgClient.getVariableRegistryUpdateRequest(pgId, updateRequestId);
if (updateRequest != null && updateRequest.getRequest().isComplete()) {
completed = true;
break;
} else {
try {
if (getContext().isInteractive()) {
println("Waiting for update request to complete...");
}
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
if (!completed) {
throw new NiFiClientException("Unable to update variables of process group, cancelling request");
}
} finally {
pgClient.deleteVariableRegistryUpdateRequest(pgId, updateRequestId);
}
return VoidResult.getInstance();
}
use of org.apache.nifi.web.api.entity.VariableEntity in project nifi by apache.
the class StandardNiFiServiceFacade method createVariableRegistryEntity.
private VariableRegistryEntity createVariableRegistryEntity(final ProcessGroup processGroup, final boolean includeAncestorGroups) {
final VariableRegistryDTO registryDto = dtoFactory.createVariableRegistryDto(processGroup, revisionManager);
final RevisionDTO revision = dtoFactory.createRevisionDTO(revisionManager.getRevision(processGroup.getIdentifier()));
final PermissionsDTO permissions = dtoFactory.createPermissionsDto(processGroup);
if (includeAncestorGroups) {
ProcessGroup parent = processGroup.getParent();
while (parent != null) {
final PermissionsDTO parentPerms = dtoFactory.createPermissionsDto(parent);
if (Boolean.TRUE.equals(parentPerms.getCanRead())) {
final VariableRegistryDTO parentRegistryDto = dtoFactory.createVariableRegistryDto(parent, revisionManager);
final Set<VariableEntity> parentVariables = parentRegistryDto.getVariables();
registryDto.getVariables().addAll(parentVariables);
}
parent = parent.getParent();
}
}
return entityFactory.createVariableRegistryEntity(registryDto, revision, permissions);
}
use of org.apache.nifi.web.api.entity.VariableEntity in project nifi by apache.
the class VariableRegistryEndpointMerger method mergeResponses.
@Override
protected void mergeResponses(final VariableRegistryEntity clientEntity, final Map<NodeIdentifier, VariableRegistryEntity> entityMap, final Set<NodeResponse> successfulResponses, final Set<NodeResponse> problematicResponses) {
final VariableRegistryDTO clientVariableRegistry = clientEntity.getVariableRegistry();
final Set<VariableEntity> clientVariableEntities = clientVariableRegistry.getVariables();
if (clientVariableEntities != null) {
for (final Iterator<VariableEntity> i = clientVariableEntities.iterator(); i.hasNext(); ) {
final VariableEntity clientVariableEntity = i.next();
final VariableDTO clientVariable = clientVariableEntity.getVariable();
final Map<NodeIdentifier, Set<AffectedComponentEntity>> nodeAffectedComponentEntities = new HashMap<>();
boolean retainClientVariable = true;
for (final Map.Entry<NodeIdentifier, VariableRegistryEntity> nodeEntry : entityMap.entrySet()) {
final VariableRegistryEntity nodeVariableRegistry = nodeEntry.getValue();
final Set<VariableEntity> nodeVariableEntities = nodeVariableRegistry.getVariableRegistry().getVariables();
// if this node has no variables, then the current client variable should be removed
if (nodeVariableEntities == null) {
retainClientVariable = false;
break;
}
boolean variableFound = false;
for (final VariableEntity nodeVariableEntity : nodeVariableEntities) {
final VariableDTO nodeVariable = nodeVariableEntity.getVariable();
// identify the current clientVariable for each node
if (clientVariable.getProcessGroupId().equals(nodeVariable.getProcessGroupId()) && clientVariable.getName().equals(nodeVariable.getName())) {
variableFound = true;
if (Boolean.FALSE.equals(nodeVariableEntity.getCanWrite())) {
clientVariableEntity.setCanWrite(false);
}
nodeAffectedComponentEntities.put(nodeEntry.getKey(), nodeVariableEntity.getVariable().getAffectedComponents());
break;
}
}
if (!variableFound) {
retainClientVariable = false;
break;
}
}
if (!retainClientVariable) {
i.remove();
} else {
final Set<AffectedComponentEntity> clientAffectedComponentEntities = clientVariableEntity.getVariable().getAffectedComponents();
affectedComponentEntityMerger.mergeAffectedComponents(clientAffectedComponentEntities, nodeAffectedComponentEntities);
}
}
}
}
use of org.apache.nifi.web.api.entity.VariableEntity in project nifi by apache.
the class DtoFactory method populateAffectedComponents.
public VariableRegistryDTO populateAffectedComponents(final VariableRegistryDTO variableRegistry, final ProcessGroup group, final RevisionManager revisionManager) {
if (!group.getIdentifier().equals(variableRegistry.getProcessGroupId())) {
throw new IllegalArgumentException("Variable Registry does not have the same Group ID as the given Process Group");
}
final Set<VariableEntity> variableEntities = new LinkedHashSet<>();
if (variableRegistry.getVariables() != null) {
for (final VariableEntity inputEntity : variableRegistry.getVariables()) {
final VariableEntity entity = new VariableEntity();
final VariableDTO inputDto = inputEntity.getVariable();
final VariableDTO variableDto = new VariableDTO();
variableDto.setName(inputDto.getName());
variableDto.setValue(inputDto.getValue());
variableDto.setProcessGroupId(group.getIdentifier());
final Set<AffectedComponentEntity> affectedComponentEntities = createAffectedComponentEntities(group.getComponentsAffectedByVariable(variableDto.getName()), revisionManager);
boolean canWrite = true;
for (final AffectedComponentEntity affectedComponent : affectedComponentEntities) {
final PermissionsDTO permissions = affectedComponent.getPermissions();
if (!permissions.getCanRead() || !permissions.getCanWrite()) {
canWrite = false;
break;
}
}
variableDto.setAffectedComponents(affectedComponentEntities);
entity.setCanWrite(canWrite);
entity.setVariable(inputDto);
variableEntities.add(entity);
}
}
final VariableRegistryDTO registryDto = new VariableRegistryDTO();
registryDto.setProcessGroupId(group.getIdentifier());
registryDto.setVariables(variableEntities);
return registryDto;
}
Aggregations