[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 org.dspace.storage.bitstore.BitstreamStorageManager;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Set;
/** /**
* *
@@ -23,22 +24,20 @@ import java.sql.SQLException;
*/ */
public abstract class AbstractVersionProvider { public abstract class AbstractVersionProvider {
private Set<String> ignoredMetadataFields;
protected void copyMetadata(Item itemNew, Item nativeItem){ protected void copyMetadata(Item itemNew, Item nativeItem){
DCValue[] md = nativeItem.getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY); DCValue[] md = nativeItem.getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY);
for (DCValue aMd : md) { for (DCValue aMd : md) {
if ((aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("relation") && (aMd.qualifier != null && aMd.qualifier.equals("haspart"))) String unqualifiedMetadataField = aMd.schema + "." + aMd.element;
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("relation") && (aMd.qualifier != null && aMd.qualifier.equals("ispartof"))) String qualifiedMetadataField = unqualifiedMetadataField + (aMd.qualifier == null ? "" : "." + aMd.qualifier);
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("identifier")) if(getIgnoredMetadataFields().contains(qualifiedMetadataField) ||
|| (aMd.schema.equals(MetadataSchema.DC_SCHEMA) && aMd.element.equals("relation") && (aMd.qualifier != null && aMd.qualifier.equals("isversionof"))) getIgnoredMetadataFields().contains(unqualifiedMetadataField + "." + Item.ANY))
|| (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"))))
{ {
//Skip this metadata field
continue; continue;
} }
itemNew.addMetadata(aMd.schema, aMd.element, aMd.qualifier, aMd.language, aMd.value); 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()); int idNew = BitstreamStorageManager.clone(context, nativeBitstream.getID());
return Bitstream.find(context, idNew); 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"/> <bean class="org.dspace.versioning.VersionHistoryDAO"/>
</property> </property>
</bean> </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> </beans>

View File

@@ -17,23 +17,32 @@
<!-- Versioning Service Application Interface for DSpace Will be autowired with <!-- Versioning Service Application Interface for DSpace Will be autowired with
a Versioning Provider present in Spring context. a Versioning Provider present in Spring context.
Default Item Versioning Provider, defines behavior for replicating 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" <bean id="org.dspace.versioning.VersioningService"
class="org.dspace.versioning.VersioningServiceImpl" class="org.dspace.versioning.VersioningServiceImpl"
autowire="byType" autowire="byType"
scope="singleton"> scope="singleton">
<property name="versionDAO"> <property name="versionDAO">
<bean class="org.dspace.versioning.VersionDAO"/> <bean class="org.dspace.versioning.VersionDAO"/>
</property> </property>
<property name="versionHistoryDAO"> <property name="versionHistoryDAO">
<bean class="org.dspace.versioning.VersionHistoryDAO"/> <bean class="org.dspace.versioning.VersionHistoryDAO"/>
</property> </property>
<property name="provider"> <property name="provider">
<!-- Default Item Versioning Provider, defines behavior for replicating
<bean class="org.dspace.versioning.DefaultItemVersionProvider"/> Item, Metadata, Budles and Bitstreams. Autowired at this time. -->
</property> <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> </bean>
-->
</beans> </beans>