mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
[DS-1333] Versioning an Item causes some metadata values to be lost
This commit is contained in:
@@ -13,6 +13,7 @@ import org.dspace.core.Context;
|
||||
import org.dspace.storage.bitstore.BitstreamStorageManager;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -23,22 +24,20 @@ import java.sql.SQLException;
|
||||
*/
|
||||
public abstract class AbstractVersionProvider {
|
||||
|
||||
private Set<String> ignoredMetadataFields;
|
||||
|
||||
protected void copyMetadata(Item itemNew, Item nativeItem){
|
||||
DCValue[] md = nativeItem.getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY);
|
||||
for (DCValue aMd : md) {
|
||||
if ((aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("relation") && (aMd.qualifier != null && aMd.qualifier.equals("haspart")))
|
||||
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("relation") && (aMd.qualifier != null && aMd.qualifier.equals("ispartof")))
|
||||
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("identifier"))
|
||||
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("relation") && (aMd.qualifier != null && aMd.qualifier.equals("isversionof")))
|
||||
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("date") && (aMd.qualifier != null && aMd.qualifier.equals("accessioned")))
|
||||
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("date") && (aMd.qualifier != null && aMd.qualifier.equals("available")))
|
||||
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("description") && (aMd.qualifier != null && aMd.qualifier.equals("provenance"))))
|
||||
String unqualifiedMetadataField = aMd.schema + "." + aMd.element;
|
||||
String qualifiedMetadataField = unqualifiedMetadataField + (aMd.qualifier == null ? "" : "." + aMd.qualifier);
|
||||
if(getIgnoredMetadataFields().contains(qualifiedMetadataField) ||
|
||||
getIgnoredMetadataFields().contains(unqualifiedMetadataField + "." + Item.ANY))
|
||||
{
|
||||
//Skip this metadata field
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
itemNew.addMetadata(aMd.schema, aMd.element, aMd.qualifier, aMd.language, aMd.value);
|
||||
}
|
||||
}
|
||||
@@ -67,4 +66,12 @@ public abstract class AbstractVersionProvider {
|
||||
int idNew = BitstreamStorageManager.clone(context, nativeBitstream.getID());
|
||||
return Bitstream.find(context, idNew);
|
||||
}
|
||||
|
||||
public void setIgnoredMetadataFields(Set<String> ignoredMetadataFields) {
|
||||
this.ignoredMetadataFields = ignoredMetadataFields;
|
||||
}
|
||||
|
||||
public Set getIgnoredMetadataFields() {
|
||||
return ignoredMetadataFields;
|
||||
}
|
||||
}
|
||||
|
@@ -38,28 +38,4 @@
|
||||
<bean class="org.dspace.versioning.VersionHistoryDAO"/>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!! ITEM LEVEL VERSIONING SERVICES !!!!!!!!!!!!!!!!!!!!! -->
|
||||
|
||||
<!-- Versioning Service Application Interface for DSpace Will be autowired with
|
||||
a Versioning Provider present in Spring context.-->
|
||||
<bean id="org.dspace.versioning.VersioningService"
|
||||
class="org.dspace.versioning.VersioningServiceImpl"
|
||||
autowire="byType"
|
||||
scope="singleton">
|
||||
<property name="versionDAO">
|
||||
<bean class="org.dspace.versioning.VersionDAO"/>
|
||||
</property>
|
||||
<property name="versionHistoryDAO">
|
||||
<bean class="org.dspace.versioning.VersionHistoryDAO"/>
|
||||
</property>
|
||||
<property name="provider">
|
||||
<!-- Default Item Versioning Provider, defines behavior for replicating
|
||||
Item, Metadata, BUndles and Bitstreams. Autowired at this time. -->
|
||||
<bean class="org.dspace.versioning.DefaultItemVersionProvider"/>
|
||||
</property>
|
||||
|
||||
</bean>
|
||||
|
||||
</beans>
|
||||
|
@@ -17,23 +17,32 @@
|
||||
<!-- Versioning Service Application Interface for DSpace Will be autowired with
|
||||
a Versioning Provider present in Spring context.
|
||||
Default Item Versioning Provider, defines behavior for replicating
|
||||
Item, Metadata, BUndles and Bitstreams. Autowired at this time.
|
||||
|
||||
Item, Metadata, Bundles and Bitstreams. Autowired at this time.
|
||||
-->
|
||||
<bean id="org.dspace.versioning.VersioningService"
|
||||
class="org.dspace.versioning.VersioningServiceImpl"
|
||||
autowire="byType"
|
||||
scope="singleton">
|
||||
<property name="versionDAO">
|
||||
<bean class="org.dspace.versioning.VersionDAO"/>
|
||||
</property>
|
||||
<property name="versionHistoryDAO">
|
||||
<bean class="org.dspace.versioning.VersionHistoryDAO"/>
|
||||
</property>
|
||||
<property name="provider">
|
||||
|
||||
<bean class="org.dspace.versioning.DefaultItemVersionProvider"/>
|
||||
</property>
|
||||
|
||||
<property name="versionDAO">
|
||||
<bean class="org.dspace.versioning.VersionDAO"/>
|
||||
</property>
|
||||
<property name="versionHistoryDAO">
|
||||
<bean class="org.dspace.versioning.VersionHistoryDAO"/>
|
||||
</property>
|
||||
<property name="provider">
|
||||
<!-- Default Item Versioning Provider, defines behavior for replicating
|
||||
Item, Metadata, Budles and Bitstreams. Autowired at this time. -->
|
||||
<bean class="org.dspace.versioning.DefaultItemVersionProvider">
|
||||
<property name="ignoredMetadataFields">
|
||||
<set>
|
||||
<value>dc.date.accessioned</value>
|
||||
<value>dc.description.provenance</value>
|
||||
</set>
|
||||
</property>
|
||||
|
||||
</bean>
|
||||
</property>
|
||||
|
||||
</bean>
|
||||
-->
|
||||
|
||||
</beans>
|
||||
|
Reference in New Issue
Block a user