[DS-1333] Versioning an Item causes some metadata values to be lost

This commit is contained in:
KevinVdV
2012-10-23 17:56:30 +02:00
parent f43ece0fe6
commit bf492d1dca
3 changed files with 38 additions and 46 deletions

View File

@@ -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;
}
}

View File

@@ -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>

View File

@@ -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>