All Versions
- DSpace 7.x (Current Release)
- DSpace 8.x (Unreleased)
- DSpace 6.x (EOL)
- DSpace 5.x (EOL)
- More Versions...
Unreleased Documentation
This documentation is unreleased and still in development. It may describe features which are not yet released in DSpace.
Looking for another version? See all documentation
A QA event is an entity stored on the qaevent solr collection.
{ |
A QA Event owns data related to an item archived in the repository: into it's message property it may have values for new metadata to be added to the Item.
The entity has properties such as: Source, Topic, Target (resource_uuid) and Message.
All the system described here is turned off and on with the configuration property: qaevents.enabled. It defaults to false. To enable this feature, you must set it to "true" in your local.cfg
qaevents.enabled = true |
A QA Source is the recognized authority through which the qa event has landed on the repository. Source names are stored into the configuration key: qaevents.source . It is defaulted as:
qaevents.sources = openaire, DSpaceUsers, coar-notify |
Every QA Event must have a recognized source: this means that at time of writing we recognize 3 possible sources.
The QA Topic describes the type of event. As the topic is known - it is expected for the message content to have a certain format. All the topic managed by the openaire source are stored into the configuration key: qaevents.openaire.import.topic. it is defaulted as:
qaevents.openaire.import.topic = ENRICH/MISSING/ABSTRACT |
the target of a qa event is an item archived into the repository. The qa event solr document owns the item system uuid into the resource_uuid property.
the message of a qa event is a json-formatted string that contains all the new values related to the item.
A qa events lands on the repository according to its source. for example: Openaire has an import batch for qaevents in json format to be loaded, Coar-Notify creates new qa event solr document when certain ldn messages are received.
QA Events are visible at Menu -< Notifications → Quality Assurance
This is the main page of the Quality Assurance.
The first column shows the Sources the user can see.
The last column shows the counter of the events the user can see.
By clicking at the counter the source page is shown. Here there's the list of all the qa events the user can see,
grouped by their topic
Every qa event can be accepted, discarded or rejected.
When accepted an action is triggered. There's a configured correspondence between the topic of the event and an action to be performed.
When discarded or rejected the solr document of the qa event is deleted.
Every decision been made from this panel (about qa events) is reported on the outside through an http post call. It is directed to all the receivers configured at the configuration key: qaevents. + source + .acknowledge-url
it contains a simple json as payload as:
{ |
On the Repository side what is performed is encapsulated in a JAVA class specialized to deal with a specific TOPIC. The /config/spring/api/qaevents.xml
spring configuration file map each TOPIC to a specific implementation
<bean id="org.dspace.qaevent.service.QAEventActionService" class="org.dspace.qaevent.service.impl.QAEventActionServiceImpl">
<property name="topicsToActions">
<map>
<!--The key are the TOPIC, the value must be a valid implementation of the
org.dspace.qaevent.QAEventAction interface -->
<entry value-ref="ProjectLinkedEntityAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MORE_PROJECT"/></key>
</entry>
<entry value-ref="ProjectLinkedEntityAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MISSING_PROJECT"/></key>
</entry>
<entry value-ref="AbstractMetadataAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MISSING_ABSTRACT"/></key>
</entry>
<entry value-ref="AddReviewMetadataAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MORE_REVIEW"/></key>
</entry>
<entry value-ref="AddEndorsedMetadataAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MORE_ENDORSEMENT"/></key>
</entry>
<entry value-ref="PIDMetadataAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MORE_PID"/></key>
</entry>
<entry value-ref="PIDMetadataAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MISSING_PID"/></key>
</entry>
<entry value-ref="AddLinkMetadataAction">
<key><util:constant static-field="org.dspace.qaevent.QANotifyPatterns.TOPIC_ENRICH_MORE_LINK"/></key>
</entry>
</map>
</property>
</bean>
Each implementation allows to configure additional parameters to deal with the event as needed, ranging from the simple definition of the metadata to use to save the information as in the case of the Abstract related events
<bean id="AbstractMetadataAction" class="org.dspace.qaevent.action.QAOpenaireSimpleMetadataAction">
<property name="metadata" value="dc.description.abstract" />
</bean>
to a dynamic mapping used for SUBJECT and PID related events
<!-- Add a new identifier to the given item, using the defined types mapping -->
<bean id="PIDMetadataAction" class="org.dspace.qaevent.action.QAOpenaireMetadataMapAction">
<property name="types">
<map>
<!--The key are the type of identifier (or subject) reported in the message, the value is the metadata in
the linked entity where the information should be stored -->
<entry key="default" value="dc.identifier.other" />
<!-- <entry key="doi" value="dc.identifier.doi" />
<entry key="pmid" value="dc.identifier.pmid" /> -->
</map>
</property>
</bean>
to the definition of the metadata used in linked entity for Project related events
<!-- This action bind the publication to the project, otherwise if the project has not been specified,
create a new project with the available data and then bind it to the publication -->
<bean id="ProjectLinkedEntityAction" class="org.dspace.qaevent.action.QAEntityOpenaireMetadataAction">
<!-- which metadata will hold the relation between the publication and the project -->
<property name="relation" value="isPublicationOfProject" />
<!-- the type of local entity used to store the project details -->
<property name="entityType" value="Project" />
<property name="entityMetadata">
<map>
<!--The key are the json path of qa message, the value is the metadata in
the linked entity where the information should be stored -->
<!-- <entry key="acronym" value="" /> -->
<entry key="code" value="dc.identifier" />
<!-- <entry key="funder" value="oairecerif.funder" /> -->
<entry key="title" value="dc.title" />
<!-- <entry key="fundingProgram" value="oairecerif.fundingProgram" /> -->
<!-- <entry key="openaireId" value="oairecerif.funding.identifier" /> -->
</map>
</property>
</bean>
QA Events are filtered by a security system. The system is defined on the spring context (see qaevents.xml in specific) on the QAEVentSecurityService bean. The default security system is set as only DSpace administrators can see and manage all sources. A security system can be assigned to none, one or more qa sources. The default one is used for Openaire source. Two more security system are defined at time of writing: one for each managed source: DSpaceUsers and coar-notify. Security filters help to hide qa events to the logged user. IE coar-notify security filter allow users to see qa events only to administrators and to targeted-item submitters.