@POST
    @Path("qualifiedName")
    @Consumes({Servlets.JSON_MEDIA_TYPE, MediaType.APPLICATION_JSON})
    @Produces(Servlets.JSON_MEDIA_TYPE)
    public Response updateByUniqueAttribute(@QueryParam("type") String entityType,
                                            @QueryParam("property") String attribute,
                                            @QueryParam("value") String value, @Context HttpServletRequest request) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("==> EntityResource.updateByUniqueAttribute({}, {}, {})", entityType, attribute, value);
        }

        AtlasPerfTracer perf = null;
        String entityJson = null;
        try {
            if (AtlasPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
                perf = AtlasPerfTracer.getPerfTracer(PERF_LOG, "EntityResource.updateByUniqueAttribute(" + entityType + ", " + attribute + ", " + value + ")");
            }

            entityJson = Servlets.getRequestPayload(request);

            if (LOG.isDebugEnabled()) {
                LOG.debug("Partially updating entity by unique attribute {} {} {} {} ", entityType, attribute, value, entityJson);
            }

            Referenceable updatedEntity = InstanceSerialization.fromJsonReferenceable(entityJson, true);

            entityType = ParamChecker.notEmpty(entityType, "Entity type cannot be null");
            attribute  = ParamChecker.notEmpty(attribute, "attribute name cannot be null");
            value      = ParamChecker.notEmpty(value, "attribute value cannot be null");

            Map<String, Object> attributes = new HashMap<>();
            attributes.put(attribute, value);

            // update referenceable with Id if not specified in payload
            Id updateId = updatedEntity.getId();

            if (updateId != null && !updateId.isAssigned()) {
                String guid = AtlasGraphUtilsV1.getGuidByUniqueAttributes(getEntityType(entityType), attributes);

                updatedEntity.replaceWithNewId(new Id(guid, 0, updatedEntity.getTypeName()));
            }

            AtlasEntitiesWithExtInfo   entitiesInfo     = restAdapters.toAtlasEntity(updatedEntity);
            EntityMutationResponse     mutationResponse = entitiesStore.createOrUpdate(new AtlasEntityStream(entitiesInfo), true);
            CreateUpdateEntitiesResult result           = restAdapters.toCreateUpdateEntitiesResult(mutationResponse);

            if (LOG.isDebugEnabled()) {
                LOG.debug("Updated entities: {}", result.getEntityResult());
            }

            JSONObject response = getResponse(result);
            return Response.ok(response).build();
        } catch (AtlasBaseException e) {
            LOG.error("Unable to partially update entity {} {}:{}.{}", entityJson, entityType, attribute, value, e);
            throw toWebApplicationException(e);
        } catch (ValueConversionException ve) {
            LOG.error("Unable to persist entity instance due to a deserialization error {} ", entityJson, ve);
            throw new WebApplicationException(Servlets.getErrorResponse(ve.getCause(), Response.Status.BAD_REQUEST));
        } catch(EntityExistsException e) {
            LOG.error("Unique constraint violation for entity {} ", entityJson, e);
            throw new WebApplicationException(Servlets.getErrorResponse(e, Response.Status.CONFLICT));
        } catch (EntityNotFoundException e) {
            LOG.error("An entity with type={} and qualifiedName={} does not exist {} ", entityType, value, entityJson, e);
            throw new WebApplicationException(Servlets.getErrorResponse(e, Response.Status.NOT_FOUND));
        } catch (AtlasException | IllegalArgumentException e) {
            LOG.error("Unable to partially update entity {} {}:{}.{}", entityJson, entityType, attribute, value, e);
            throw new WebApplicationException(Servlets.getErrorResponse(e, Response.Status.BAD_REQUEST));
        } catch (WebApplicationException e) {
            LOG.error("Unable to partially update entity {} {}:{}.{}", entityJson, entityType, attribute, value, e);
            throw e;
        } catch (Throwable e) {
            LOG.error("Unable to partially update entity {} {}:{}.{}", entityJson, entityType, attribute, value, e);
            throw new WebApplicationException(Servlets.getErrorResponse(e, Response.Status.INTERNAL_SERVER_ERROR));
        } finally {
            AtlasPerfTracer.log(perf);

            if (LOG.isDebugEnabled()) {
                LOG.debug("<== EntityResource.updateByUniqueAttribute({}, {}, {})", entityType, attribute, value);
            }
        }
    }
@ POST @ Path ( "qualifiedName" ) @ Consumes ( { Servlets . JSON_MEDIA_TYPE , MediaType . APPLICATION_JSON } ) @ Produces ( Servlets . JSON_MEDIA_TYPE ) public Response updateByUniqueAttribute ( @ QueryParam ( "type" ) String entityType , @ QueryParam ( "property" ) String attribute , @ QueryParam ( "value" ) String value , @ Context HttpServletRequest request ) { if ( LOG . isDebugEnabled ( ) ) { LOG . debug ( "==> EntityResource.updateByUniqueAttribute({}, {}, {})" , entityType , attribute , value ) ; } AtlasPerfTracer perf = null ; String entityJson = null ; try { if ( AtlasPerfTracer . isPerfTraceEnabled ( PERF_LOG ) ) { perf = AtlasPerfTracer . getPerfTracer ( PERF_LOG , "EntityResource.updateByUniqueAttribute(" + entityType + ", " + attribute + ", " + value + ")" ) ; } entityJson = Servlets . getRequestPayload ( request ) ; if ( LOG . isDebugEnabled ( ) ) { LOG . debug ( "Partially updating entity by unique attribute {} {} {} {} " , entityType , attribute , value , entityJson ) ; } Referenceable updatedEntity = InstanceSerialization . fromJsonReferenceable ( entityJson , true ) ; entityType = ParamChecker . notEmpty ( entityType , "Entity type cannot be null" ) ; attribute = ParamChecker . notEmpty ( attribute , "attribute name cannot be null" ) ; value = ParamChecker . notEmpty ( value , "attribute value cannot be null" ) ; Map < String , Object > attributes = new HashMap < > ( ) ; attributes . put ( attribute , value ) ; Id updateId = updatedEntity . getId ( ) ; if ( updateId != null && ! updateId . isAssigned ( ) ) { String guid = AtlasGraphUtilsV1 . getGuidByUniqueAttributes ( getEntityType ( entityType ) , attributes ) ; updatedEntity . replaceWithNewId ( new Id ( guid , 0 , updatedEntity . getTypeName ( ) ) ) ; } AtlasEntitiesWithExtInfo entitiesInfo = restAdapters . toAtlasEntity ( updatedEntity ) ; EntityMutationResponse mutationResponse = entitiesStore . createOrUpdate ( new AtlasEntityStream ( entitiesInfo ) , true ) ; CreateUpdateEntitiesResult result = restAdapters . toCreateUpdateEntitiesResult ( mutationResponse ) ; if ( LOG . isDebugEnabled ( ) ) { LOG . debug ( "Updated entities: {}" , result . getEntityResult ( ) ) ; } JSONObject response = getResponse ( result ) ; return Response . ok ( response ) . build ( ) ; } catch ( AtlasBaseException e ) { LOG . error ( "Unable to partially update entity {} {}:{}.{}" , entityJson , entityType , attribute , value , e ) ; throw toWebApplicationException ( e ) ; } catch ( ValueConversionException ve ) { LOG . error ( "Unable to persist entity instance due to a deserialization error {} " , entityJson , ve ) ; throw new WebApplicationException ( Servlets . getErrorResponse ( ve . getCause ( ) , Response . Status . BAD_REQUEST ) ) ; } catch ( EntityExistsException e ) { LOG . error ( "Unique constraint violation for entity {} " , entityJson , e ) ; throw new WebApplicationException ( Servlets . getErrorResponse ( e , Response . Status . CONFLICT ) ) ; } catch ( EntityNotFoundException e ) { LOG . error ( "An entity with type={} and qualifiedName={} does not exist {} " , entityType , value , entityJson , e ) ; throw new WebApplicationException ( Servlets . getErrorResponse ( e , Response . Status . NOT_FOUND ) ) ; } catch ( AtlasException | IllegalArgumentException e ) { LOG . error ( "Unable to partially update entity {} {}:{}.{}" , entityJson , entityType , attribute , value , e ) ; throw new WebApplicationException ( Servlets . getErrorResponse ( e , Response . Status . BAD_REQUEST ) ) ; } catch ( WebApplicationException e ) { LOG . error ( "Unable to partially update entity {} {}:{}.{}" , entityJson , entityType , attribute , value , e ) ; throw e ; } catch ( Throwable e ) { LOG . error ( "Unable to partially update entity {} {}:{}.{}" , entityJson , entityType , attribute , value , e ) ; throw new WebApplicationException ( Servlets . getErrorResponse ( e , Response . Status . INTERNAL_SERVER_ERROR ) ) ; } finally { AtlasPerfTracer . log ( perf ) ; if ( LOG . isDebugEnabled ( ) ) { LOG . debug ( "<== EntityResource.updateByUniqueAttribute({}, {}, {})" , entityType , attribute , value ) ; } } }
Adds/Updates given entity identified by its unique attribute( entityType, attributeName and value)
Updates support only partial update of an entity - Adds/updates any new values specified
Updates do not support removal of attribute values

@param entityType the entity type
@param attribute the unique attribute used to identify the entity
@param value the unique attributes value
@param request The updated entity json
@return response payload as json
The body contains the JSONArray of entity json. The service takes care of de-duping the entities based on any
unique attribute for the give type.