Class App
java.lang.Object
com.erudika.para.core.App
- All Implemented Interfaces:
Linkable, ParaObject, Votable, Serializable
This is a representation of an application within Para.
It allows the user to create separate apps running on the same infrastructure. Every
Apps can have a dedicated table or they can share the same table using prefixed keys. Also, apps can have a dedicated search index or share one. These are controlled by the two flags
Usually when we have a multi-app environment there's a parent app (dedicated) and lots of child apps (shared) that share the same index with the parent app.
It allows the user to create separate apps running on the same infrastructure. Every
ParaObject belongs to an app.
Apps can have a dedicated table or they can share the same table using prefixed keys. Also, apps can have a dedicated search index or share one. These are controlled by the two flags
isSharingTable() and isSharingIndex().
Usually when we have a multi-app environment there's a parent app (dedicated) and lots of child apps (shared) that share the same index with the parent app.
- Author:
- Alex Bogdanovski [[email protected]]
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumRepresents HTTP methods allowed to be executed on a specific resource/type.Nested classes/interfaces inherited from interface Votable
Votable.VoteValue -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddAllSettings(Map<String, Object> settings) Adds all settings to map of app settings and invokes allAppSettingAddedListeners.static voidaddAppCreatedListener(AppCreatedListener listener) Registers a new create listener.static voidaddAppDeletedListener(AppDeletedListener listener) Registers a new delete listener.static voidRegisters a new app setting added listener.static voidRegisters a new app setting removed listener.voidaddDatatype(String pluralDatatype, String datatype) Adds a user-defined data type to the types map.booleanaddDatatypes(ParaObject... objects) Adds unknown types to this app's list of data types.addSetting(String name, Object value) Adds a new setting to the map.booleanaddValidationConstraint(String type, String field, Constraint c) Adds a new constraint to the list of constraints for a given field and type.Clears all app settings and invokes eachAppSettingRemovedListeners.countChildren(String type) Count the total number of child objects for this object.countLinks(String type2) Count the total number of links between this object and another type of object.create()Stores this object in the data store.voiddelete()Deletes the object permanently by removing it from the data store.voiddeleteChildren(String type) Deletes all child objects permanently.booleanbooleanexists()Checks if an object is stored in the data store.<P extends ParaObject>
List<P> findChildren(String type, String query, Pager... pager) Search through all child objects.<P extends ParaObject>
List<P> findLinkedObjects(String type, String field, String query, Pager... pager) Similar toLinkable.findChildren(java.lang.String, java.lang.String, com.erudika.para.core.utils.Pager...)but for many-to-many relationships.Returns true if this application is active (enabled).getAllResourcePermissions(String... subjectids) Returns all resource permission for a list of subjects ids.getAllValidationConstraints(String... types) Returns all validation constraints for a list of types.getAppid()The application name.The App identifier (the id but without the prefixapp:).Boolean flag which controls whether this object is cached.<P extends ParaObject>
List<P> getChildren(String type, Pager... pager) Returns all child objects linked to this object.<P extends ParaObject>
List<P> getChildren(String type, String field, String term, Pager... pager) Returns all child objects linked to this object.The id of the user who created this.Returns the map containing the app's access key and secret key.Returns a set of custom data types for this app.The timestamp for when this app must be deleted.final StringgetId()/////////////////////////////////////////////////////Boolean flag which controls whether this object is indexed by the search engine.<P extends ParaObject>
List<P> getLinkedObjects(String type, Pager... pager) Similar toLinkable.getChildren(java.lang.String, com.erudika.para.core.utils.Pager...)but for many-to-many relationships.Returns all links between this type object and another type of object.final StringgetName()The name of the object.The URI of this object.The id of the parent object.The plural name of the object.Gets read-only mode.Returns a map of resource permissions.Returns the app's secret key.getSetting(String name) Returns the value of a setting for a given key.A map of all settings (key/values).Boolean flag which controls whether this object is stored in the database or not.getTags()The tags associated with this object.The time when the object was created, in milliseconds.The validity period for access tokens in seconds.final StringgetType()The name of the object's class.The last time this object was updated.Returns a map of user-defined data types and their validation annotations.Returns the version number for this object.getVotes()Returns the total sum of all votes for this object.booleangrantResourcePermission(String subjectid, String resourcePath, EnumSet<App.AllowedMethods> permission) Grants a new permission for a given subject and resource.booleangrantResourcePermission(String subjectid, String resourcePath, EnumSet<App.AllowedMethods> permission, boolean allowGuestAccess) Grants a new permission for a given subject and resource.inthashCode()static final StringReturns the correct id of this app with prefix.static final Stringidentifier(String appid) Returns the identifier without the "app:" prefix.booleanisAllowedTo(String subjectid, String resourcePath, String httpMethod) Checks if a subject is allowed to call method X on resource Y.booleanisLinked(ParaObject toObj) Checks if a given object is linked to this one.booleanChecks if this object is linked to another.static booleanReturn true if the app is the root app (the first one created).booleanReturn true if the app is the root app (the first one created).booleanIs this a sharing the search index with other apps.booleanIs this a sharing the database table with other apps.Links an object to this one in a many-to-many relationship.booleanpermissionsContainOwnKeyword(User user, ParaObject object) Check if the permissions map contains "OWN" keyword, which restricts access to objects to their creators.voidremoveDatatype(String pluralDatatype) Removes a datatype from the types map.removeSetting(String name) Removes a setting from the map.booleanremoveValidationConstraint(String type, String field, String constraintName) Removes a constraint from the map.voidResets the secret key by generating a new one.booleanrevokeAllResourcePermissions(String subjectid) Revokes all permissions for a subject id.booleanrevokeResourcePermission(String subjectid, String resourcePath) Revokes a permission for given subject.voidSets the active flag.voidSets a new app name.voidSets the "isCached" flag.voidsetCreatorid(String creatorid) Sets a new creator id.voidsetDatatypes(Map<String, String> datatypes) Sets the data types for this app.voidsetDeleteOn(Long deleteOn) Sets the time for deletion.final voidSets a new id.voidsetIndexed(Boolean indexed) Sets the "isIndexed" flag.final voidSets a new name.voidsetParentid(String parentid) Sets a new parent id.voidsetReadOnly(Boolean readOnly) Sets read-only mode.voidSets the permissions map.voidSets the secret key.voidsetSettings(Map<String, Object> settings) Overwrites the settings map.voidsetSharingIndex(boolean sharingIndex) Sets the sharingIndex flag.voidsetSharingTable(boolean sharingTable) Sets the sharingTable flag.voidSets the "isStored" flag.voidMerges the given tags with existing tags.voidsetTimestamp(Long timestamp) Sets the timestamp.voidsetTokenValiditySec(Long tokenValiditySec) Sets the access token validity period in seconds.final voidSets a new object type.voidsetUpdated(Long updated) Sets the last updated timestamp.voidsetValidationConstraints(Map<String, Map<String, Map<String, Map<String, ?>>>> validationConstraints) Sets the validation constraints map.voidsetVersion(Long version) Sets the version of this object.voidSets the total votes for this object.toString()voidUnlinks an object from this one.voidUnlinks all objects that are linked to this one.voidupdate()Updates the object permanently.booleanDownvotes the object.booleanUpvotes the object.
-
Field Details
-
APP_ROLE
-
ALLOW_ALL
-
-
Constructor Details
-
App
public App()No-args constructor. -
App
-
-
Method Details
-
id
-
identifier
-
setId
Description copied from interface:ParaObjectSets a new id. Must not be null or empty.- Specified by:
setIdin interfaceParaObject- Parameters:
id- the new id
-
addSetting
-
addAllSettings
Adds all settings to map of app settings and invokes allAppSettingAddedListeners.- Parameters:
settings- a map settings to add- Returns:
- this
-
getSetting
-
removeSetting
-
clearSettings
Clears all app settings and invokes eachAppSettingRemovedListeners.- Returns:
- this
-
getSettings
-
setSettings
-
getValidationConstraints
-
setValidationConstraints
-
getResourcePermissions
-
setResourcePermissions
-
getAppIdentifier
The App identifier (the id but without the prefixapp:). The identifier may start with a whitespace character e.g. " myapp". This indicates that the app is sharing a table with other apps. This is disabled by default unlesspara.prepend_shared_appids_with_space = true- Returns:
- the identifier (appid)
-
getActive
Returns true if this application is active (enabled).- Returns:
- true if active
-
setActive
Sets the active flag. When an app is disabled (active = false) it cannot be accessed through the API.- Parameters:
active- true if active
-
getDeleteOn
-
setDeleteOn
Sets the time for deletion.- Parameters:
deleteOn- a timestamp
-
getTokenValiditySec
The validity period for access tokens in seconds. This setting is for current app only. Always returns a default value if local setting is null.- Returns:
- period in seconds
-
setTokenValiditySec
Sets the access token validity period in seconds.- Parameters:
tokenValiditySec- seconds
-
getSecret
-
setSecret
-
getReadOnly
-
setReadOnly
Sets read-only mode.- Parameters:
readOnly- true if app is in read-only mode
-
getDatatypes
-
setDatatypes
-
isSharingIndex
public boolean isSharingIndex()Is this a sharing the search index with other apps.- Returns:
- true if it does
-
setSharingIndex
public void setSharingIndex(boolean sharingIndex) Sets the sharingIndex flag.- Parameters:
sharingIndex- false means this app should have its own dedicated index
-
isSharingTable
public boolean isSharingTable()Is this a sharing the database table with other apps.- Returns:
- true if it does
-
setSharingTable
public void setSharingTable(boolean sharingTable) Sets the sharingTable flag.- Parameters:
sharingTable- false means this app should have its own dedicated table
-
isRootApp
public boolean isRootApp()Return true if the app is the root app (the first one created).- Returns:
- true if root
-
isRoot
Return true if the app is the root app (the first one created).- Parameters:
appid- an app identifier- Returns:
- true if root
-
getAllValidationConstraints
-
addValidationConstraint
Adds a new constraint to the list of constraints for a given field and type.- Parameters:
type- the typefield- the fieldc- the constraint- Returns:
- true if successful
-
removeValidationConstraint
-
getAllResourcePermissions
-
grantResourcePermission
public boolean grantResourcePermission(String subjectid, String resourcePath, EnumSet<App.AllowedMethods> permission) Grants a new permission for a given subject and resource.- Parameters:
subjectid- the subject to give permissions toresourcePath- the resource name/typepermission- the set or HTTP methods allowed- Returns:
- true if successful
-
grantResourcePermission
public boolean grantResourcePermission(String subjectid, String resourcePath, EnumSet<App.AllowedMethods> permission, boolean allowGuestAccess) Grants a new permission for a given subject and resource.- Parameters:
subjectid- the subject to give permissions toresourcePath- the resource name/typepermission- the set or HTTP methods allowedallowGuestAccess- if true - all unauthenticated requests will go through, 'false' by default.- Returns:
- true if successful
-
revokeResourcePermission
-
revokeAllResourcePermissions
Revokes all permissions for a subject id.- Parameters:
subjectid- subject id- Returns:
- true if successful
-
isAllowedTo
-
permissionsContainOwnKeyword
Check if the permissions map contains "OWN" keyword, which restricts access to objects to their creators.- Parameters:
user- user in contextobject- some object- Returns:
- true if app contains permission for this resource and it is marked with "OWN"
-
addDatatype
-
addDatatypes
Adds unknown types to this app's list of data types. Called on create().- Parameters:
objects- a list of new objects- Returns:
- true if a new data type was added to the list
-
removeDatatype
Removes a datatype from the types map.- Parameters:
pluralDatatype- a datatype, must not be null or empty
-
resetSecret
public void resetSecret()Resets the secret key by generating a new one. -
getCredentials
-
addAppCreatedListener
Registers a new create listener.- Parameters:
listener- the listener
-
addAppDeletedListener
Registers a new delete listener.- Parameters:
listener- the listener
-
addAppSettingAddedListener
Registers a new app setting added listener.- Parameters:
listener- the listener
-
addAppSettingRemovedListener
Registers a new app setting removed listener.- Parameters:
listener- the listener
-
create
Description copied from interface:ParaObjectStores this object in the data store.- Specified by:
createin interfaceParaObject- Returns:
- the id of the object (a new id if object is new)
- See Also:
-
delete
public void delete()Description copied from interface:ParaObjectDeletes the object permanently by removing it from the data store.- Specified by:
deletein interfaceParaObject- See Also:
-
getId
/////////////////////////////////////////////////////- Specified by:
getIdin interfaceParaObject- Returns:
- the id
-
getType
Description copied from interface:ParaObjectThe name of the object's class. This is equivalent toClass.getSimpleName().toLowerCase()- Specified by:
getTypein interfaceParaObject- Returns:
- the simple name of the class
-
setType
Description copied from interface:ParaObjectSets a new object type. Must not be null or empty.- Specified by:
setTypein interfaceParaObject- Parameters:
type- a new type
-
getAppid
Description copied from interface:ParaObjectThe application name. Added to support multiple separate apps. Every object must belong to an app.- Specified by:
getAppidin interfaceParaObject- Returns:
- the app id (name). default: para
-
setAppid
Description copied from interface:ParaObjectSets a new app name. Must not be null or empty.- Specified by:
setAppidin interfaceParaObject- Parameters:
appid- the new app id (name)
-
getObjectURI
Description copied from interface:ParaObjectThe URI of this object. For example: /users/123- Specified by:
getObjectURIin interfaceParaObject- Returns:
- the URI
- See Also:
-
getTags
Description copied from interface:ParaObjectThe tags associated with this object. Tags must not be null or empty.- Specified by:
getTagsin interfaceParaObject- Returns:
- a set of tags, or an empty set
- See Also:
-
setTags
Description copied from interface:ParaObjectMerges the given tags with existing tags.- Specified by:
setTagsin interfaceParaObject- Parameters:
tags- the additional tags, or clears all tags if set to null
-
getStored
Description copied from interface:ParaObjectBoolean flag which controls whether this object is stored in the database or not. Default is true.- Specified by:
getStoredin interfaceParaObject- Returns:
- true if this object is stored in DB.
-
setStored
Description copied from interface:ParaObjectSets the "isStored" flag.- Specified by:
setStoredin interfaceParaObject- Parameters:
stored- when set to true, object is stored in DB.
-
getIndexed
Description copied from interface:ParaObjectBoolean flag which controls whether this object is indexed by the search engine. Default is true.- Specified by:
getIndexedin interfaceParaObject- Returns:
- true if this object is indexed
-
setIndexed
Description copied from interface:ParaObjectSets the "isIndexed" flag.- Specified by:
setIndexedin interfaceParaObject- Parameters:
indexed- when set to true, object is indexed.
-
getCached
Description copied from interface:ParaObjectBoolean flag which controls whether this object is cached. Default is true.- Specified by:
getCachedin interfaceParaObject- Returns:
- true if this object is cached on update() and create().
-
setCached
Description copied from interface:ParaObjectSets the "isCached" flag.- Specified by:
setCachedin interfaceParaObject- Parameters:
cached- when set to true, object is cached.
-
getTimestamp
Description copied from interface:ParaObjectThe time when the object was created, in milliseconds.- Specified by:
getTimestampin interfaceParaObject- Returns:
- the timestamp of creation
-
setTimestamp
Description copied from interface:ParaObjectSets the timestamp.- Specified by:
setTimestampin interfaceParaObject- Parameters:
timestamp- a new timestamp in milliseconds.
-
getCreatorid
Description copied from interface:ParaObjectThe id of the user who created this. Should point to aUserid.- Specified by:
getCreatoridin interfaceParaObject- Returns:
- the id or null
-
setCreatorid
Description copied from interface:ParaObjectSets a new creator id. Must not be null or empty.- Specified by:
setCreatoridin interfaceParaObject- Parameters:
creatorid- a new id
-
getName
Description copied from interface:ParaObjectThe name of the object. Can be anything.- Specified by:
getNamein interfaceParaObject- Returns:
- the name. default: [type id]
-
setName
Description copied from interface:ParaObjectSets a new name. Must not be null or empty.- Specified by:
setNamein interfaceParaObject- Parameters:
name- the new name
-
getPlural
Description copied from interface:ParaObjectThe plural name of the object. For example: user - users- Specified by:
getPluralin interfaceParaObject- Returns:
- the plural name
-
getParentid
Description copied from interface:ParaObjectThe id of the parent object.- Specified by:
getParentidin interfaceParaObject- Returns:
- the id of the parent or null
-
setParentid
Description copied from interface:ParaObjectSets a new parent id. Must not be null or empty.- Specified by:
setParentidin interfaceParaObject- Parameters:
parentid- a new id
-
getUpdated
Description copied from interface:ParaObjectThe last time this object was updated. Timestamp in ms.- Specified by:
getUpdatedin interfaceParaObject- Returns:
- timestamp in milliseconds
-
setUpdated
Description copied from interface:ParaObjectSets the last updated timestamp.- Specified by:
setUpdatedin interfaceParaObject- Parameters:
updated- a new timestamp
-
update
public void update()Description copied from interface:ParaObjectUpdates the object permanently. Changes toLockedfields are ignored.- Specified by:
updatein interfaceParaObject- See Also:
-
exists
public boolean exists()Description copied from interface:ParaObjectChecks if an object is stored in the data store.- Specified by:
existsin interfaceParaObject- Returns:
- true if the object is persisted to the data store.
- See Also:
-
voteUp
-
voteDown
-
getVotes
-
setVotes
-
getVersion
Description copied from interface:ParaObjectReturns the version number for this object. Used primarily for optimistic locking.- Specified by:
getVersionin interfaceParaObject- Returns:
- a positive number,
0if unused or-1, indicating a failed update.
-
setVersion
Description copied from interface:ParaObjectSets the version of this object. This value should come from the database.- Specified by:
setVersionin interfaceParaObject- Parameters:
version- a positive number, different than the current value of the version field
-
countLinks
Description copied from interface:LinkableCount the total number of links between this object and another type of object.- Specified by:
countLinksin interfaceLinkable- Parameters:
type2- the other type of object- Returns:
- the number of links
-
getLinks
Description copied from interface:LinkableReturns all links between this type object and another type of object. -
getLinkedObjects
Description copied from interface:LinkableSimilar toLinkable.getChildren(java.lang.String, com.erudika.para.core.utils.Pager...)but for many-to-many relationships.- Specified by:
getLinkedObjectsin interfaceLinkable- Type Parameters:
P- type of linked objects- Parameters:
type- type of linked objects to look forpager- aPager- Returns:
- a list of linked objects
-
findLinkedObjects
public <P extends ParaObject> List<P> findLinkedObjects(String type, String field, String query, Pager... pager) Description copied from interface:LinkableSimilar toLinkable.findChildren(java.lang.String, java.lang.String, com.erudika.para.core.utils.Pager...)but for many-to-many relationships. Searches through all linked objects connected to this via aLinkerobject.- Specified by:
findLinkedObjectsin interfaceLinkable- Type Parameters:
P- type of linked objects- Parameters:
type- type of linked objects to look forfield- the name of the field to target (within a nested field "nstd")query- a query stringpager- aPager- Returns:
- a list of linked objects matching the search query
-
isLinked
-
isLinked
Description copied from interface:LinkableChecks if a given object is linked to this one. -
link
Description copied from interface:LinkableLinks an object to this one in a many-to-many relationship. Only a link is created. Objects are left untouched. The type of the second object is automatically determined on read. -
unlink
-
unlinkAll
-
countChildren
Description copied from interface:LinkableCount the total number of child objects for this object.- Specified by:
countChildrenin interfaceLinkable- Parameters:
type- the other type of object- Returns:
- the number of links
-
getChildren
Description copied from interface:LinkableReturns all child objects linked to this object.- Specified by:
getChildrenin interfaceLinkable- Type Parameters:
P- the type of children- Parameters:
type- the type of children to look forpager- aPager- Returns:
- a list of
ParaObjectin a one-to-many relationship with this object
-
getChildren
public <P extends ParaObject> List<P> getChildren(String type, String field, String term, Pager... pager) Description copied from interface:LinkableReturns all child objects linked to this object.- Specified by:
getChildrenin interfaceLinkable- Type Parameters:
P- the type of children- Parameters:
type- the type of children to look forfield- the field name to use as filterterm- the field value to use as filterpager- aPager- Returns:
- a list of
ParaObjectin a one-to-many relationship with this object
-
findChildren
Description copied from interface:LinkableSearch through all child objects. Only searches child objects directly connected to this parent via theparentidfield.- Specified by:
findChildrenin interfaceLinkable- Type Parameters:
P- the type of children- Parameters:
type- the type of children to look forquery- a query stringpager- aPager- Returns:
- a list of
ParaObjectin a one-to-many relationship with this object
-
deleteChildren
Description copied from interface:LinkableDeletes all child objects permanently.- Specified by:
deleteChildrenin interfaceLinkable- Parameters:
type- the children's type.
-
hashCode
-
equals
-
toString
-