com.atlassian.jira.entity.property
Interface JsonEntityPropertyManager

All Known Implementing Classes:
JsonEntityPropertyManagerImpl

@ExperimentalApi
public interface JsonEntityPropertyManager

Low-level database API for accessing JSON entity properties.

JSON entity properties are similar to PropertySets in that they are permitted to hold more or less arbitrary collections of data. There are, however, several important differences:

Note: The entityName used here MUST be unique to the service that maintains the properties. To reduce the risk of collision, it SHOULD NOT be the same as the name of the owning entity itself, as there may be other services that also which to attach properties to that same entity. For example, the RemoteVersionLinkService uses "RemoteVersionLink" as its entityName, not "Version".

Since:
v6.1

Method Summary
 long countByEntity(String entityName, Long entityId)
          Counts the number of properties that match the given entity.
 long countByEntityNameAndPropertyKey(String entityName, String key)
          Counts the number of properties that match the given entity name and property key.
 void delete(String entityName, Long entityId, String key)
          Deletes the stored value for an entity property, if it exists.
 void deleteByEntity(String entityName, Long entityId)
          Deletes all properties that are associated with the provided entity.
 void deleteByEntityNameAndPropertyKey(String entityName, String key)
          Deletes all properties that are associated with the provided entity name and property key.
 boolean exists(String entityName, Long entityId, String key)
          Returns whether or not a given property exists.
 List<String> findKeys(String entityName, Long entityId)
          Produces a list of entity property keys that match the provided entity name and entity id.
 List<String> findKeys(String entityName, String keyPrefix)
          Produces a list of entity property keys that match the provided entity name and key prefix.
 EntityProperty get(String entityName, Long entityId, String key)
          Look up an entity property by the entity name, entity id, and property key.
 int getMaximumValueLength()
          The maximum allowed length (in characters) permitted for the String json value when calling put(String, Long, String, String) (or putDryRun(String, Long, String, String)).
 void put(String entityName, Long entityId, String key, String json)
          Set the value for an entity property, creating, updating, or deleting it as necessary.
 void putDryRun(String entityName, Long entityId, String key, String json)
          Performs all of the validation that would be performed during a put(String, Long, String, String) request, but does not actually store the value.
 EntityPropertyQuery<?> query()
          Returns a query object for finding, counting, or deleting properties with various restrictions.
 

Method Detail

get

@Nullable
EntityProperty get(String entityName,
                            Long entityId,
                            String key)
Look up an entity property by the entity name, entity id, and property key.

Parameters:
entityName - the entity name of the property
entityId - the entity ID of the property
key - the key of the property
Returns:
the matching property, or null if the property does not exist.

put

void put(@Nonnull
         String entityName,
         @Nonnull
         Long entityId,
         @Nonnull
         String key,
         @Nullable
         String json)
Set the value for an entity property, creating, updating, or deleting it as necessary.

Parameters:
entityName - the entity name for the property (maximum length 255). As explained in the class documentation, this value should be unique to the service creating the properties and will generally not be the same as the entity to which the properties are attached.
entityId - the entity ID for the property. In general, this will be the same as the ID of the owning entity; for example, the RemoteVersionLinkService uses the version ID for this value.
key - the key for the property (maximum length 255). This value should generally be suitable for a reverse lookup when the same data might be associated with multiple entities. For example, the RemoteVersionLinkService uses the global ID of the remote object, which is the same identifier used by applinks to identify a Confluence page, Bamboo project, etc.
json - the new value for the property, or null to delete it (maximum length is available by calling getMaximumValueLength())
Throws:
FieldTooLongJsonPropertyException - if any of the values exceed the maximum permitted length
InvalidJsonPropertyException - if json is malformed
IllegalArgumentException - if entityId is null, or if entityName or key is either null or blank.
See Also:
putDryRun(String, Long, String, String)

putDryRun

void putDryRun(@Nonnull
               String entityName,
               @Nonnull
               Long entityId,
               @Nonnull
               String key,
               @Nullable
               String json)
Performs all of the validation that would be performed during a put(String, Long, String, String) request, but does not actually store the value.

Parameters:
entityName - as for put(String, Long, String, String)
entityId - as for put(String, Long, String, String)
key - as for put(String, Long, String, String)
json - as for put(String, Long, String, String)
Throws:
FieldTooLongJsonPropertyException - as for put(String, Long, String, String)
InvalidJsonPropertyException - as for put(String, Long, String, String)
IllegalArgumentException - as for put(String, Long, String, String)
See Also:
put(String, Long, String, String)

delete

void delete(@Nonnull
            String entityName,
            @Nonnull
            Long entityId,
            @Nonnull
            String key)
Deletes the stored value for an entity property, if it exists.

Parameters:
entityName - the entity name of the property to be deleted
entityId - the entity ID of the property to be deleted
key - the key of the property to be deleted

getMaximumValueLength

int getMaximumValueLength()
The maximum allowed length (in characters) permitted for the String json value when calling put(String, Long, String, String) (or putDryRun(String, Long, String, String)). This value is currently 32,768, but this may change in the future.


query

EntityPropertyQuery<?> query()
Returns a query object for finding, counting, or deleting properties with various restrictions. See EntityPropertyQuery for usage and minimum requirements.

Returns:
the query object

findKeys

@Nonnull
List<String> findKeys(@Nonnull
                              String entityName,
                              @Nonnull
                              String keyPrefix)
Produces a list of entity property keys that match the provided entity name and key prefix. This convenience method is exactly equivalent to:
     query().entityName(entityName)
          .keyPrefix(keyPrefix)
          .findDistinctKeys()
 

Parameters:
entityName - the entity name for the entities that are associated with the properties.
keyPrefix - the prefix to apply for limiting which keys are returned; must not be null or a blank string
Returns:
the list of distinct matching keys, sorted in ascending alphabetical order
Throws:
IllegalArgumentException - if either entityName or keyPrefix is null or blank

findKeys

@Nonnull
List<String> findKeys(@Nonnull
                              String entityName,
                              @Nonnull
                              Long entityId)
Produces a list of entity property keys that match the provided entity name and entity id. This convenience method is exactly equivalent to:
     query().entityName(entityName)
          .entityId(entityId)
          .EntityPropertyQuery.ExecutableQuery.findKeys()
 

Parameters:
entityName - the entity name for the entities that are associated with the properties.
entityId - the id of the entity.
Returns:
the list of distinct matching keys, sorted in ascending alphabetical order
Throws:
IllegalArgumentException - if either entityName or entityId is null or blank

exists

boolean exists(@Nonnull
               String entityName,
               @Nonnull
               Long entityId,
               @Nonnull
               String key)
Returns whether or not a given property exists. This convenience method is equivalent to get(String, Long, String) != null, but does not actually retrieve the JSON data from the database, so it may have better performance characteristics when the JSON content is not needed.

Parameters:
entityName - the entity name for the property
entityId - the entity ID for the property
key - the key for the property

countByEntity

long countByEntity(@Nonnull
                   String entityName,
                   @Nonnull
                   Long entityId)
Counts the number of properties that match the given entity. This convenience method is exactly equivalent to:
     query().entityName(entityName)
          .entityId(entityId)
          .count()
 

Parameters:
entityName - the entity name of the owning entity
entityId - the entity ID of the owning entity
Returns:
the count of properties assigned to that entity
Throws:
IllegalArgumentException - if either entityName is null or blank or entityId is null.

countByEntityNameAndPropertyKey

long countByEntityNameAndPropertyKey(@Nonnull
                                     String entityName,
                                     @Nonnull
                                     String key)
Counts the number of properties that match the given entity name and property key. This convenience method is exactly equivalent to:
     query().entityName(entityName)
          .key(key)
          .count()
 

Parameters:
entityName - the entity name of the owning entities
key - the property key to look for
Returns:
the count of properties with that key which are assigned to entities with the given name
Throws:
IllegalArgumentException - if either entityName or key is null or blank

deleteByEntity

void deleteByEntity(@Nonnull
                    String entityName,
                    @Nonnull
                    Long entityId)
Deletes all properties that are associated with the provided entity. This convenience method is exactly equivalent to:
     query().entityName(entityName)
          .entityId(entityId)
          .delete()
 

Parameters:
entityName - the entity name for the properties
entityId - the entity ID for the properties

deleteByEntityNameAndPropertyKey

void deleteByEntityNameAndPropertyKey(@Nonnull
                                      String entityName,
                                      @Nonnull
                                      String key)
Deletes all properties that are associated with the provided entity name and property key. This convenience method is exactly equivalent to:
     query().entityName(entityName)
          .key(key)
          .delete()
 

Parameters:
entityName - the entity name for the properties
key - the property key for the properties


Copyright © 2002-2014 Atlassian. All Rights Reserved.