Class ContentQueryManager<T>
- All Implemented Interfaces:
Cloneable,GenericQueryManager<T>,ValidationContext
ContentQueryManager simplifies working with content a lot.
It extends GenericQueryManager and is a drop-in replacement that can be used instead.
The ContentQueryManager class works hand-in-hand with
CMF-related constraints that are provided via the classes Validation and ConstrainedProperty. The additional constraints
allow you to provide CMF-related metadata for bean properties while still
having access to all regular constraints.
The most important additional constraint is 'mimeType'. Setting this
constraint directs RIFE to delegate the handling of that property's data to
the CMF instead of storing it as a regular column in a database table. The
property content location (i.e. its full path) is generated automatically
based on the bean class name, the instance's identifier value (i.e. the
primary key used by GenericQueryManager), and the property
name. So for example, if you have an instance of the NewsItem
class whose identifier is 23, then the full path that is
generated for a property named text is '/newsitem/23/text'.
Note that this always specifies the most recent version of the property,
but that older versions are also available from the content store.
Before being able to use the CMF and a ContentQueryManager,
you must install both of them, as in this example:
DatabaseContentFactory.instance(datasource).install(); new ContentQueryManager(datasource, NewsItem.class).install();
Apart from the handling of content, this query manager also integrates
the functionalities of the OrdinalManager class.
The new 'ordinal'
constraint indicates which bean property will be used to order that table's
rows. When saving and deleting beans, the ordinal values will be
automatically updated in the entire table. The
ContentQueryManager also provides the move, up and down
methods to easily manipulate the order of existing rows.
- Since:
- 1.0
-
Constructor Summary
ConstructorsConstructorDescriptionContentQueryManager(Datasource datasource, Class<T> klass) Creates a newContentQueryManagerinstance for a specific class.ContentQueryManager(Datasource datasource, Class<T> klass, Class backendClass) Creates a newContentQueryManagerinstance for a specific class.ContentQueryManager(Datasource datasource, Class<T> klass, String table) Creates a newContentQueryManagerinstance for a specific class, but with a different table name for the database storage.ContentQueryManager(Datasource datasource, Class<T> klass, ContentManager contentManager) Creates a newContentQueryManagerinstance for a specific class. -
Method Summary
Modifier and TypeMethodDescriptionbuildCmfPath(int objectId, String propertyName) Builds the path that is used by theContentQueryManagerfor a certain bean ID and property.buildCmfPath(T bean, String propertyName) Builds the path that is used by theContentQueryManagerfor a certain bean and property.buildServeContentPath(int objectId, String propertyName) Builds the path that is used by theServeContentelement for a certain bean ID and property.buildServeContentPath(T bean, String propertyName) Builds the path that is used by theServeContentelement for a certain bean and property.clone()Simply clones the instance with the default clone method.<OtherBeanType>
GenericQueryManager<OtherBeanType>createNewManager(Class<OtherBeanType> type) Create a new generic query manager of the same kind but for another bean class.booleandelete(int objectId) Deletes a bean according to its ID.booleandown(Constrained bean, String propertyName) Moves the row that corresponds to the provided bean instance downwards according to a property with an ordinal constraint.getContentForHtml(int objectId, String propertyName, Context context, Route route) Retrieves a content data representation for use in html.getContentForHtml(T bean, String propertyName, Context context, Route route) Retrieves a content data representation for use in html.Returns theContentManagerthat is used to store and retrieve the content.Retrieves the default repository that is used by thisContentQueryManager.booleanhasContent(int objectId, String propertyName) Checks if there's content available for a certain property of a bean.booleanhasContent(T bean, String propertyName) Checks if there's content available for a certain property of a bean.booleanmove(Constrained bean, String propertyName, OrdinalManager.Direction direction) Moves the row that corresponds to the provided bean instance according to a property with an ordinal constraint.repository(String repository) Sets the default repository that will be used by thisContentQueryManager.restore()Restores all beans.restore(int objectId) Restores a bean according to its ID.restore(RestoreQuery query) Restores all beans from aRestoreQuery.restoreFirst(RestoreQuery query) Restores the first bean from aRestoreQuery.intSaves a bean.booleanstoreEmptyContent(T bean, String propertyName) Empties the content of a certain bean property.booleanup(Constrained bean, String propertyName) Moves the row that corresponds to the provided bean instance upwards according to a property with an ordinal constraint.Methods inherited from class rife.database.querymanagers.generic.GenericQueryManagerDelegate
addListener, count, count, delete, getBaseClass, getCountQuery, getDatasource, getDelegate, getDeleteQuery, getDeleteQuery, getIdentifierName, getIdentifierValue, getInstallTableQuery, getRestoreQuery, getRestoreQuery, getTable, insert, install, install, remove, removeListeners, restore, restore, restore, restore, update, validate
-
Constructor Details
-
ContentQueryManager
Creates a newContentQueryManagerinstance for a specific class.All content will be stored in a
DatabaseContent.- Parameters:
datasource- the datasource that indicates where the data will be storedklass- the class of the bean that will be handled by thisContentQueryManagerbackendClass- the class will be used by thisContentQueryManagerto reference data in the backend- Since:
- 1.0
-
ContentQueryManager
Creates a newContentQueryManagerinstance for a specific class, but with a different table name for the database storage.All content will be stored in a
DatabaseContent.- Parameters:
datasource- the datasource that indicates where the data will be storedklass- the class of the bean that will be handled by thisContentQueryManagertable- the name of the database table in which the non CMF data will be stored- Since:
- 1.6
-
ContentQueryManager
Creates a newContentQueryManagerinstance for a specific class.All content will be stored in a
DatabaseContent.- Parameters:
datasource- the datasource that indicates where the data will be storedklass- the class of the bean that will be handled by thisContentQueryManager- Since:
- 1.0
-
ContentQueryManager
Creates a newContentQueryManagerinstance for a specific class.All content will be stored in the provided
ContentManagerinstance. This constructor is handy if you want to integrate a custom content manager implementation.- Parameters:
datasource- the datasource that indicates where the data will be storedklass- the class of the bean that will be handled by thisContentQueryManagercontentManager- aContentManagerinstance- Since:
- 1.0
-
-
Method Details
-
repository
Sets the default repository that will be used by thisContentQueryManager.- Returns:
- this
ContentQueryManager - Since:
- 1.4
- See Also:
-
getRepository
Retrieves the default repository that is used by thisContentQueryManager.- Returns:
- this
ContentQueryManager's repository - Since:
- 1.4
- See Also:
-
getContentManager
Returns theContentManagerthat is used to store and retrieve the content.- Returns:
- the
ContentManager - Since:
- 1.0
-
move
Moves the row that corresponds to the provided bean instance according to a property with an ordinal constraint.- Parameters:
bean- the bean instance that corresponds to the row that has to be movedpropertyName- the name of the property with an ordinal constraintdirection-OrdinalManager.UPorOrdinalManager.DOWN- Returns:
trueif the row was moved successfully; orfalseotherwise- Since:
- 1.0
-
up
Moves the row that corresponds to the provided bean instance upwards according to a property with an ordinal constraint.- Parameters:
bean- the bean instance that corresponds to the row that has to be movedpropertyName- the name of the property with an ordinal constraint- Returns:
trueif the row was moved successfully; orfalseotherwise- Since:
- 1.0
-
down
Moves the row that corresponds to the provided bean instance downwards according to a property with an ordinal constraint.- Parameters:
bean- the bean instance that corresponds to the row that has to be movedpropertyName- the name of the property with an ordinal constraint- Returns:
trueif the row was moved successfully; orfalseotherwise- Since:
- 1.0
-
storeEmptyContent
Empties the content of a certain bean property.When a bean is saved,
nullcontent properties are simply ignored when the property hasn't got anautoRetrievedconstraint. This is needed to make it possible to only update a bean's data without having to fetch the content from the back-end and store it together with the other data just to make a simple update. However, this makes it impossible to rely onnullto indicate empty content. This method has thus been added explicitly for this purpose.- Parameters:
bean- the bean instance that contains the propertypropertyName- the name of the property whose content has to be emptied in the database- Returns:
trueif the empty content was stored successfully; orfalseotherwise- Since:
- 1.0
-
save
Saves a bean.This augments the regular
GenericQueryManager'ssavemethod with behaviour that correctly handles content or ordinal properties. When a bean is saved,nullcontent properties are simply ignored when the property hasn't got anautoRetrievedconstraint. This is needed to make it possible to only update a bean's data without having to fetch the content from the back-end and store it together with the other data just to make a simple update.- Specified by:
savein interfaceGenericQueryManager<T>- Overrides:
savein classGenericQueryManagerDelegate<T>- Parameters:
bean- the bean instance that has to be saved- Returns:
trueif the bean was stored successfully; orfalseotherwise- Throws:
DatabaseException- Since:
- 1.0
-
restore
Restores a bean according to its ID.This augments the regular
GenericQueryManager'srestoremethod with behaviour that correctly handles content properties.- Specified by:
restorein interfaceGenericQueryManager<T>- Overrides:
restorein classGenericQueryManagerDelegate<T>- Parameters:
objectId- the ID of the bean that has to be restored- Returns:
- the bean instance if it was restored successfully; or
nullif it couldn't be found - Throws:
DatabaseException- Since:
- 1.0
-
restoreFirst
Restores the first bean from aRestoreQuery.This augments the regular
GenericQueryManager'srestoremethod with behaviour that correctly handles content properties.- Specified by:
restoreFirstin interfaceGenericQueryManager<T>- Overrides:
restoreFirstin classGenericQueryManagerDelegate<T>- Parameters:
query- the query that will be used to restore the beans- Returns:
- the first bean instance that was found; or
nullif no beans could be found - Throws:
DatabaseException- Since:
- 1.0
- See Also:
-
restore
Restores all beans.This augments the regular
GenericQueryManager'srestoremethod with behaviour that correctly handles content properties.- Specified by:
restorein interfaceGenericQueryManager<T>- Overrides:
restorein classGenericQueryManagerDelegate<T>- Returns:
- the list of beans; or
nullif no beans could be found - Throws:
DatabaseException- Since:
- 1.0
-
restore
Restores all beans from aRestoreQuery.This augments the regular
GenericQueryManager'srestoremethod with behaviour that correctly handles content properties.- Specified by:
restorein interfaceGenericQueryManager<T>- Overrides:
restorein classGenericQueryManagerDelegate<T>- Parameters:
query- the query that will be used to restore the beans- Returns:
- the list of beans; or
nullif no beans could be found - Throws:
DatabaseException- Since:
- 1.0
- See Also:
-
delete
Deletes a bean according to its ID.This augments the regular
GenericQueryManager'srestoremethod with behaviour that correctly handles content and ordinal properties.- Specified by:
deletein interfaceGenericQueryManager<T>- Overrides:
deletein classGenericQueryManagerDelegate<T>- Parameters:
objectId- the ID of the bean that has to be restored- Returns:
trueif the bean was deleted successfully; orfalseif it couldn't be found- Throws:
DatabaseException- Since:
- 1.0
-
hasContent
Checks if there's content available for a certain property of a bean.- Parameters:
bean- the bean instance that will be checkedpropertyName- the name of the property whose content availability will be checked- Returns:
trueif content is available; orfalseotherwise- Throws:
DatabaseException- Since:
- 1.0
-
hasContent
Checks if there's content available for a certain property of a bean.- Parameters:
objectId- the ID of the bean instance that will be checkedpropertyName- the name of the property whose content availability will be checked- Returns:
trueif content is available; orfalseotherwise- Throws:
DatabaseException- Since:
- 1.0
-
buildCmfPath
Builds the path that is used by theContentQueryManagerfor a certain bean and property.- Parameters:
bean- the bean instance that will be used to construct the pathpropertyName- the name of the property that will be used to construct the path- Returns:
- the requested path
- Since:
- 1.0
-
buildCmfPath
Builds the path that is used by theContentQueryManagerfor a certain bean ID and property.- Parameters:
objectId- the bean ID that will be used to construct the pathpropertyName- the name of the property that will be used to construct the path- Returns:
- the requested path
- Since:
- 1.0
-
buildServeContentPath
Builds the path that is used by theServeContentelement for a certain bean and property.Any declaration of the repository name will be ignored, since the
ServeContentelement doesn't allow you to provide this through the URL for safety reasons.- Parameters:
bean- the bean instance that will be used to construct the pathpropertyName- the name of the property that will be used to construct the path- Returns:
- the requested path
- Since:
- 1.4
-
buildServeContentPath
Builds the path that is used by theServeContentelement for a certain bean ID and property.Any declaration of the repository name will be ignored, since the
ServeContentelement doesn't allow you to provide this through the URL for safety reasons.- Parameters:
objectId- the bean ID that will be used to construct the pathpropertyName- the name of the property that will be used to construct the path- Returns:
- the requested path
- Since:
- 1.4
-
getContentForHtml
public String getContentForHtml(T bean, String propertyName, Context context, Route route) throws ContentManagerException Retrieves a content data representation for use in html.This is mainly used to integrate content data inside a html document. For instance, html content will be displayed as-is, while image content will cause an image tag to be generated with the correct source URL to serve the image.
- Parameters:
bean- the bean instance that contains the datapropertyName- the name of the property whose html representation will be providedcontext- an active web engine contextroute- a route that leads to arife.cmf.elements.ServeContentelement- Returns:
- the html content representation
- Throws:
ContentManagerException- if an unexpected error occurred- Since:
- 1.0
-
getContentForHtml
public String getContentForHtml(int objectId, String propertyName, Context context, Route route) throws ContentManagerException Retrieves a content data representation for use in html.This is mainly used to integrate content data inside a html document. For instance, html content will be displayed as-is, while image content will cause an image tag to be generated with the correct source URL to serve the image.
- Parameters:
objectId- the ID of the bean that contains the datapropertyName- the name of the property whose html representation will be providedcontext- an active web engine contextroute- a route that leads to arife.cmf.elements.ServeContentelement- Returns:
- the html content representation
- Throws:
ContentManagerException- if an unexpected error occurred- Since:
- 1.0
-
clone
Simply clones the instance with the default clone method. This creates a shallow copy of all fields and the clone will in fact just be another reference to the same underlying data. The independence of each cloned instance is consciously not respected since they rely on resources that can't be cloned. -
createNewManager
public <OtherBeanType> GenericQueryManager<OtherBeanType> createNewManager(Class<OtherBeanType> type) Description copied from interface:GenericQueryManagerCreate a new generic query manager of the same kind but for another bean class.- Specified by:
createNewManagerin interfaceGenericQueryManager<T>- Overrides:
createNewManagerin classGenericQueryManagerDelegate<T>- Parameters:
type- the class of the bean for which the new generic query manager has to be created- Returns:
- a new generic query manager instance
-