public class

JsonEntityPropertyManagerImpl

extends Object
implements JsonEntityPropertyManager
java.lang.Object
   ↳ com.atlassian.jira.entity.property.JsonEntityPropertyManagerImpl

Class Overview

Low-level database API for accessing JSON entity properties.

Summary

Constants
int MAXIMUM_ENTITY_NAME_LENGTH If you any of these change these values, please update the JavaDocs for put(String, Long, String, String) and getMaximumValueLength() accordingly.
int MAXIMUM_KEY_LENGTH
int MAXIMUM_VALUE_LENGTH
Public Constructors
JsonEntityPropertyManagerImpl(EntityEngine entityEngine, EventPublisher eventPublisher, DbConnectionManager dbConnectionManager)
Public Methods
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 deleteByEntityNameAndEntityIds(String entityName, List<Long> entityIds)
Deletes all properties that are associated with the provided entities.
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.
@Nonnull List<String> findKeys(String entityName, Long entityId)
Produces a list of entity property keys that match the provided entity name and entity id.
@Nonnull 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.
@Nullable Map<StringEntityProperty> get(String entityName, Long entityId, List<String> keys)
Retrieve all entity properties by the entity name, entity id and the supplied keys
Map<StringEntityProperty> get(String entityName, Long entityId)
Retrieve all entity properties by the entity name, entity id.
int getMaximumValueLength()
The maximum allowed length (in characters) permitted for the String json value when calling put(String, Long, String, String) (or putDryRun(String, 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 put(ApplicationUser user, String entityName, Long entityId, String key, String json, Function2<ApplicationUserEntityProperty, ? extends EntityPropertySetEvent> eventFunction, boolean dispatchEvent)
Set the value for an entity property, creating, updating, or deleting it as necessary.
void putDryRun(String entityName, 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.
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.atlassian.jira.entity.property.JsonEntityPropertyManager

Constants

public static final int MAXIMUM_ENTITY_NAME_LENGTH

If you any of these change these values, please update the JavaDocs for put(String, Long, String, String) and getMaximumValueLength() accordingly.

Constant Value: 255 (0x000000ff)

public static final int MAXIMUM_KEY_LENGTH

Constant Value: 255 (0x000000ff)

public static final int MAXIMUM_VALUE_LENGTH

Constant Value: 32768 (0x00008000)

Public Constructors

public JsonEntityPropertyManagerImpl (EntityEngine entityEngine, EventPublisher eventPublisher, DbConnectionManager dbConnectionManager)

Public Methods

public long countByEntity (String entityName, 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

public long countByEntityNameAndPropertyKey (String entityName, 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

public void delete (String entityName, Long entityId, 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

public void deleteByEntity (String entityName, 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

public void deleteByEntityNameAndEntityIds (String entityName, List<Long> entityIds)

Deletes all properties that are associated with the provided entities.

Parameters
entityName the entity name for the properties
entityIds the IDs of the entities

public void deleteByEntityNameAndPropertyKey (String entityName, 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

public boolean exists (String entityName, Long entityId, 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

@Nonnull public List<String> findKeys (String entityName, 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)
          .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

@Nonnull public List<String> findKeys (String entityName, 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

public 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.

@Nullable public Map<StringEntityProperty> get (String entityName, Long entityId, List<String> keys)

Retrieve all entity properties by the entity name, entity id and the supplied keys

Parameters
entityName the entity name of the property
entityId the entity ID of the property
keys list of property keys to match
Returns
  • a map with the property key as the map key of all properties for the entity.

public Map<StringEntityProperty> get (String entityName, Long entityId)

Retrieve all entity properties by the entity name, entity id.

Parameters
entityName the entity name of the property
entityId the entity ID of the property
Returns
  • a map with the property key as the map key of all properties for the entity.

public int getMaximumValueLength ()

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

public void put (String entityName, Long entityId, String key, 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())

public void put (ApplicationUser user, String entityName, Long entityId, String key, String json, Function2<ApplicationUserEntityProperty, ? extends EntityPropertySetEvent> eventFunction, boolean dispatchEvent)

Set the value for an entity property, creating, updating, or deleting it as necessary.

Parameters
user The user performing the action. The event will be actioned as this user
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())
eventFunction the function that generates the event to be thrown. See EntityPropertyHelper for some functions that may be used to generate events
dispatchEvent true if the method should dispatch an event after it is run.

public void putDryRun (String entityName, 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.

public 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