fix conflict

This commit is contained in:
Tom Desair
2016-04-07 16:31:10 +02:00
committed by dylan
parent b19189634d
commit 8db0faed33
102 changed files with 665 additions and 535 deletions

View File

@@ -7,19 +7,7 @@
*/ */
package org.dspace.administer; package org.dspace.administer;
import java.io.BufferedWriter; import org.apache.commons.cli.*;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.xml.serialize.Method; import org.apache.xml.serialize.Method;
import org.apache.xml.serialize.OutputFormat; import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer; import org.apache.xml.serialize.XMLSerializer;
@@ -31,6 +19,14 @@ import org.dspace.content.service.MetadataSchemaService;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @author Graham Triggs * @author Graham Triggs
@@ -314,16 +310,16 @@ public class MetadataExporter
private static String getSchemaName(Context context, MetadataField mdField) throws SQLException, RegistryExportException private static String getSchemaName(Context context, MetadataField mdField) throws SQLException, RegistryExportException
{ {
// Get name from cache // Get name from cache
String name = schemaMap.get(mdField.getMetadataSchema().getSchemaID()); String name = schemaMap.get(mdField.getMetadataSchema().getID());
if (name == null) if (name == null)
{ {
// Name not retrieved before, so get the schema now // Name not retrieved before, so get the schema now
MetadataSchema mdSchema = metadataSchemaService.find(context, mdField.getMetadataSchema().getSchemaID()); MetadataSchema mdSchema = metadataSchemaService.find(context, mdField.getMetadataSchema().getID());
if (mdSchema != null) if (mdSchema != null)
{ {
name = mdSchema.getName(); name = mdSchema.getName();
schemaMap.put(mdSchema.getSchemaID(), name); schemaMap.put(mdSchema.getID(), name);
} }
else else
{ {

View File

@@ -10,6 +10,7 @@ package org.dspace.app.requestitem;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@@ -19,7 +20,7 @@ import java.util.Date;
*/ */
@Entity @Entity
@Table(name="requestitem") @Table(name="requestitem")
public class RequestItem { public class RequestItem implements ReloadableEntity<Integer> {
@Id @Id
@@ -76,7 +77,7 @@ public class RequestItem {
{ {
} }
public int getID() { public Integer getID() {
return requestitem_id; return requestitem_id;
} }

View File

@@ -8,6 +8,7 @@
package org.dspace.app.util; package org.dspace.app.util;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@@ -19,7 +20,7 @@ import java.util.Date;
*/ */
@Entity @Entity
@Table(name="webapp") @Table(name="webapp")
public class WebApp { public class WebApp implements ReloadableEntity<Integer> {
@Id @Id
@@ -50,7 +51,7 @@ public class WebApp {
} }
public Integer getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -503,6 +503,8 @@ public class AuthorizeServiceImpl implements AuthorizeService
throws SQLException, AuthorizeException throws SQLException, AuthorizeException
{ {
// now add them to the destination object // now add them to the destination object
List<ResourcePolicy> newPolicies = new LinkedList<>();
for (ResourcePolicy srp : policies) for (ResourcePolicy srp : policies)
{ {
ResourcePolicy rp = resourcePolicyService.create(c); ResourcePolicy rp = resourcePolicyService.create(c);
@@ -517,21 +519,17 @@ public class AuthorizeServiceImpl implements AuthorizeService
rp.setRpName(srp.getRpName()); rp.setRpName(srp.getRpName());
rp.setRpDescription(srp.getRpDescription()); rp.setRpDescription(srp.getRpDescription());
rp.setRpType(srp.getRpType()); rp.setRpType(srp.getRpType());
// and write out new policy
resourcePolicyService.update(c, rp); // and add policy to list of new policies
newPolicies.add(rp);
} }
serviceFactory.getDSpaceObjectService(dest).updateLastModified(c, dest); resourcePolicyService.update(c, newPolicies);
} }
@Override @Override
public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException { public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException {
resourcePolicyService.removeAllPolicies(c, o, true); resourcePolicyService.removeAllPolicies(c, o);
}
@Override
public void removeAllPolicies(Context c, DSpaceObject o, boolean updateLastModified) throws SQLException, AuthorizeException {
resourcePolicyService.removeAllPolicies(c, o, updateLastModified);
} }
@Override @Override
@@ -681,7 +679,6 @@ public class AuthorizeServiceImpl implements AuthorizeService
myPolicy.setEPerson(eperson); myPolicy.setEPerson(eperson);
myPolicy.setRpType(rpType); myPolicy.setRpType(rpType);
resourcePolicyService.update(context, myPolicy); resourcePolicyService.update(context, myPolicy);
serviceFactory.getDSpaceObjectService(dso).updateLastModified(context, dso);
return myPolicy; return myPolicy;
} }

View File

@@ -10,6 +10,7 @@ package org.dspace.authorize;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
@@ -25,7 +26,7 @@ import java.util.Date;
*/ */
@Entity @Entity
@Table(name="resourcepolicy") @Table(name="resourcepolicy")
public class ResourcePolicy{ public class ResourcePolicy implements ReloadableEntity<Integer> {
public static String TYPE_SUBMISSION = "TYPE_SUBMISSION"; public static String TYPE_SUBMISSION = "TYPE_SUBMISSION";
public static String TYPE_WORKFLOW = "TYPE_WORKFLOW"; public static String TYPE_WORKFLOW = "TYPE_WORKFLOW";
public static String TYPE_CUSTOM= "TYPE_CUSTOM"; public static String TYPE_CUSTOM= "TYPE_CUSTOM";

View File

@@ -7,13 +7,9 @@
*/ */
package org.dspace.authorize; package org.dspace.authorize;
import java.sql.SQLException; import org.apache.commons.collections.CollectionUtils;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.authorize.dao.ResourcePolicyDAO; import org.dspace.authorize.dao.ResourcePolicyDAO;
import org.dspace.authorize.service.ResourcePolicyService; import org.dspace.authorize.service.ResourcePolicyService;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
@@ -24,6 +20,9 @@ import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException;
import java.util.*;
/** /**
* Service implementation for the ResourcePolicy object. * Service implementation for the ResourcePolicy object.
* This class is responsible for all business logic calls for the ResourcePolicy object and is autowired by spring. * This class is responsible for all business logic calls for the ResourcePolicy object and is autowired by spring.
@@ -204,17 +203,7 @@ public class ResourcePolicyServiceImpl implements ResourcePolicyService
@Override @Override
public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException { public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException {
// FIXME: authorization check? contentServiceFactory.getDSpaceObjectService(o).updateLastModified(c, o);
removeAllPolicies(c, o, true);
}
@Override
public void removeAllPolicies(Context c, DSpaceObject o, boolean updateLastModified) throws SQLException, AuthorizeException {
// FIXME: authorization check?
if(updateLastModified)
{
contentServiceFactory.getDSpaceObjectService(o).updateLastModified(c, o);
}
resourcePolicyDAO.deleteByDso(c, o); resourcePolicyDAO.deleteByDso(c, o);
} }
@@ -269,12 +258,31 @@ public class ResourcePolicyServiceImpl implements ResourcePolicyService
*/ */
@Override @Override
public void update(Context context, ResourcePolicy resourcePolicy) throws SQLException, AuthorizeException { public void update(Context context, ResourcePolicy resourcePolicy) throws SQLException, AuthorizeException {
if(resourcePolicy.getdSpaceObject() != null){ update(context, Collections.singletonList(resourcePolicy));
//A policy for a DSpace Object has been modified, fire a modify event on the DSpace object }
contentServiceFactory.getDSpaceObjectService(resourcePolicy.getdSpaceObject()).updateLastModified(context, resourcePolicy.getdSpaceObject());
}
// FIXME: Check authorisation /**
resourcePolicyDAO.save(context, resourcePolicy); * Update the ResourcePolicies
*/
@Override
public void update(Context context, List<ResourcePolicy> resourcePolicies) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(resourcePolicies)) {
Set<DSpaceObject> relatedDSpaceObjects = new HashSet<>();
for (ResourcePolicy resourcePolicy : resourcePolicies) {
if (resourcePolicy.getdSpaceObject() != null) {
relatedDSpaceObjects.add(resourcePolicy.getdSpaceObject());
}
// FIXME: Check authorisation
resourcePolicyDAO.save(context, resourcePolicy);
}
//Update the last modified timestamp of all related DSpace Objects
for (DSpaceObject dSpaceObject : relatedDSpaceObjects) {
//A policy for a DSpace Object has been modified, fire a modify event on the DSpace object
contentServiceFactory.getDSpaceObjectService(dSpaceObject).updateLastModified(context, dSpaceObject);
}
}
} }
} }

View File

@@ -7,10 +7,6 @@
*/ */
package org.dspace.authorize.service; package org.dspace.authorize.service;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.ResourcePolicy; import org.dspace.authorize.ResourcePolicy;
import org.dspace.content.Collection; import org.dspace.content.Collection;
@@ -19,6 +15,10 @@ import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
/** /**
* AuthorizeManager handles all authorization checks for DSpace. For better * AuthorizeManager handles all authorization checks for DSpace. For better
* security, DSpace assumes that you do not have the right to do something * security, DSpace assumes that you do not have the right to do something
@@ -309,8 +309,6 @@ public interface AuthorizeService {
*/ */
public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException; public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException;
public void removeAllPolicies(Context c, DSpaceObject o, boolean updateLastModified) throws SQLException, AuthorizeException;
/** /**
* removes ALL policies for an object that are not of the input type. * removes ALL policies for an object that are not of the input type.
* *

View File

@@ -45,8 +45,6 @@ public interface ResourcePolicyService extends DSpaceCRUDService<ResourcePolicy>
public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException; public void removeAllPolicies(Context c, DSpaceObject o) throws SQLException, AuthorizeException;
public void removeAllPolicies(Context c, DSpaceObject o, boolean updateLastModified) throws SQLException, AuthorizeException;
public void removePolicies(Context c, DSpaceObject o, int actionId) throws SQLException, AuthorizeException; public void removePolicies(Context c, DSpaceObject o, int actionId) throws SQLException, AuthorizeException;
public void removePolicies(Context c, DSpaceObject o, String type) throws SQLException, AuthorizeException; public void removePolicies(Context c, DSpaceObject o, String type) throws SQLException, AuthorizeException;

View File

@@ -9,6 +9,7 @@ package org.dspace.checker;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.content.Bitstream; import org.dspace.content.Bitstream;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@@ -25,7 +26,7 @@ import java.util.Date;
*/ */
@Entity @Entity
@Table(name="checksum_history") @Table(name="checksum_history")
public class ChecksumHistory public class ChecksumHistory implements ReloadableEntity<Long>
{ {
@@ -33,7 +34,7 @@ public class ChecksumHistory
@Column(name="check_id") @Column(name="check_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="checksum_history_check_id_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="checksum_history_check_id_seq")
@SequenceGenerator(name="checksum_history_check_id_seq", sequenceName="checksum_history_check_id_seq", allocationSize = 1) @SequenceGenerator(name="checksum_history_check_id_seq", sequenceName="checksum_history_check_id_seq", allocationSize = 1)
private long id; private Long id;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "bitstream_id") @JoinColumn(name = "bitstream_id")
@@ -66,7 +67,7 @@ public class ChecksumHistory
{ {
} }
public long getId() { public Long getID() {
return id; return id;
} }

View File

@@ -15,12 +15,16 @@ import java.util.List;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.BitstreamFormatService; import org.dspace.content.service.BitstreamFormatService;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.hibernate.annotations.Cascade; import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CollectionId; import org.hibernate.annotations.CollectionId;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import org.hibernate.proxy.HibernateProxyHelper; import org.hibernate.proxy.HibernateProxyHelper;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
/** /**
* Class representing a particular bitstream format. * Class representing a particular bitstream format.
@@ -33,14 +37,14 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name="bitstreamformatregistry") @Table(name="bitstreamformatregistry")
public class BitstreamFormat implements Serializable public class BitstreamFormat implements Serializable, ReloadableEntity<Integer>
{ {
@Id @Id
@Column(name="bitstream_format_id", nullable = false, unique = true) @Column(name="bitstream_format_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="bitstreamformatregistry_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="bitstreamformatregistry_seq")
@SequenceGenerator(name="bitstreamformatregistry_seq", sequenceName="bitstreamformatregistry_seq", allocationSize = 1, initialValue = 1) @SequenceGenerator(name="bitstreamformatregistry_seq", sequenceName="bitstreamformatregistry_seq", allocationSize = 1, initialValue = 1)
private int id; private Integer id;
@Column(name="short_description", length = 128, unique = true) @Column(name="short_description", length = 128, unique = true)
private String shortDescription; private String shortDescription;
@@ -111,7 +115,7 @@ public class BitstreamFormat implements Serializable
* *
* @return the internal identifier * @return the internal identifier
*/ */
public final int getID() public final Integer getID()
{ {
return id; return id;
} }

View File

@@ -18,6 +18,7 @@ import org.dspace.core.LogManager;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@@ -181,17 +182,25 @@ public class BitstreamFormatServiceImpl implements BitstreamFormatService {
@Override @Override
public void update(Context context, BitstreamFormat bitstreamFormat) throws SQLException, AuthorizeException { public void update(Context context, BitstreamFormat bitstreamFormat) throws SQLException, AuthorizeException {
// Check authorisation - only administrators can change formats update(context, Collections.singletonList(bitstreamFormat));
if (!authorizeService.isAdmin(context)) }
{
throw new AuthorizeException( @Override
"Only administrators can modify bitstream formats"); public void update(Context context, List<BitstreamFormat> bitstreamFormats) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(bitstreamFormats)) {
// Check authorisation - only administrators can change formats
if (!authorizeService.isAdmin(context)) {
throw new AuthorizeException(
"Only administrators can modify bitstream formats");
}
for (BitstreamFormat bitstreamFormat : bitstreamFormats) {
log.info(LogManager.getHeader(context, "update_bitstream_format",
"bitstream_format_id=" + bitstreamFormat.getID()));
bitstreamFormatDAO.save(context, bitstreamFormat);
}
} }
log.info(LogManager.getHeader(context, "update_bitstream_format",
"bitstream_format_id=" + bitstreamFormat.getID()));
bitstreamFormatDAO.save(context, bitstreamFormat);
} }
@Override @Override

View File

@@ -250,7 +250,9 @@ public class BitstreamServiceImpl extends DSpaceObjectServiceImpl<Bitstream> imp
bitstream.getBundles().clear(); bitstream.getBundles().clear();
deleteMetadata(context, bitstream);
// Remove policies
authorizeService.removeAllPolicies(context, bitstream);
// Remove bitstream itself // Remove bitstream itself
bitstream.setDeleted(true); bitstream.setDeleted(true);

View File

@@ -409,8 +409,6 @@ public class BundleServiceImpl extends DSpaceObjectServiceImpl<Bundle> implement
// remove our authorization policies // remove our authorization policies
authorizeService.removeAllPolicies(context, bundle); authorizeService.removeAllPolicies(context, bundle);
deleteMetadata(context, bundle);
// Remove ourself // Remove ourself
bundleDAO.delete(context, bundle); bundleDAO.delete(context, bundle);
} }

View File

@@ -16,7 +16,6 @@ import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.ResourcePolicy; import org.dspace.authorize.ResourcePolicy;
import org.dspace.authorize.service.AuthorizeService; import org.dspace.authorize.service.AuthorizeService;
import org.dspace.content.dao.CollectionDAO; import org.dspace.content.dao.CollectionDAO;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.*; import org.dspace.content.service.*;
import org.dspace.core.*; import org.dspace.core.*;
import org.dspace.core.service.LicenseService; import org.dspace.core.service.LicenseService;
@@ -25,12 +24,7 @@ import org.dspace.eperson.service.GroupService;
import org.dspace.eperson.service.SubscribeService; import org.dspace.eperson.service.SubscribeService;
import org.dspace.event.Event; import org.dspace.event.Event;
import org.dspace.harvest.HarvestedCollection; import org.dspace.harvest.HarvestedCollection;
import org.dspace.harvest.HarvestedCollectionServiceImpl;
import org.dspace.harvest.HarvestedItem;
import org.dspace.harvest.factory.HarvestServiceFactory;
import org.dspace.harvest.service.HarvestedCollectionService; import org.dspace.harvest.service.HarvestedCollectionService;
import org.dspace.harvest.service.HarvestedItemService;
import org.dspace.kernel.ServiceManager;
import org.dspace.workflow.factory.WorkflowServiceFactory; import org.dspace.workflow.factory.WorkflowServiceFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -744,8 +738,6 @@ public class CollectionServiceImpl extends DSpaceObjectServiceImpl<Collection> i
groupService.delete(context, g); groupService.delete(context, g);
} }
deleteMetadata(context, collection);
Iterator<Community> owningCommunities = collection.getCommunities().iterator(); Iterator<Community> owningCommunities = collection.getCommunities().iterator();
while (owningCommunities.hasNext()) while (owningCommunities.hasNext())
{ {

View File

@@ -532,9 +532,6 @@ public class CommunityServiceImpl extends DSpaceObjectServiceImpl<Community> imp
// Remove any Handle // Remove any Handle
handleService.unbindHandle(context, community); handleService.unbindHandle(context, community);
deleteMetadata(context, community);
Group g = community.getAdministrators(); Group g = community.getAdministrators();
// Delete community row // Delete community row

View File

@@ -11,6 +11,7 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.dspace.authorize.ResourcePolicy; import org.dspace.authorize.ResourcePolicy;
import org.dspace.core.ReloadableEntity;
import org.dspace.handle.Handle; import org.dspace.handle.Handle;
import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.GenericGenerator;
@@ -25,7 +26,7 @@ import javax.persistence.*;
@Entity @Entity
@Inheritance(strategy= InheritanceType.JOINED) @Inheritance(strategy= InheritanceType.JOINED)
@Table(name = "dspaceobject") @Table(name = "dspaceobject")
public abstract class DSpaceObject implements Serializable public abstract class DSpaceObject implements Serializable, ReloadableEntity<java.util.UUID>
{ {
@Id @Id
@GeneratedValue(generator = "system-uuid") @GeneratedValue(generator = "system-uuid")
@@ -38,18 +39,18 @@ public abstract class DSpaceObject implements Serializable
@Transient @Transient
private StringBuffer eventDetails = null; private StringBuffer eventDetails = null;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "dSpaceObject", cascade={CascadeType.PERSIST}, orphanRemoval = true) @OneToMany(fetch = FetchType.LAZY, mappedBy = "dSpaceObject", cascade = CascadeType.ALL)
@OrderBy("metadataField, place") @OrderBy("metadataField, place")
private List<MetadataValue> metadata = new ArrayList<>(); private List<MetadataValue> metadata = new ArrayList<>();
@OneToMany(fetch = FetchType.LAZY, mappedBy = "dso") @OneToMany(fetch = FetchType.LAZY, mappedBy = "dso")
// Order by is here to ensure that the oldest handle is retrieved first, // Order by is here to ensure that the oldest handle is retrieved first,
// multiple handles are assigned to the latest version of an item the original handle will have the lowest identifier // multiple handles are assigned to the latest version of an item the original handle will have the lowest identifier
// This handle is the prefered handle. // This handle is the preferred handle.
@OrderBy("id ASC") @OrderBy("id ASC")
private List<Handle> handles = new ArrayList<>(); private List<Handle> handles = new ArrayList<>();
@OneToMany(fetch = FetchType.LAZY, mappedBy = "dSpaceObject", cascade={CascadeType.PERSIST}, orphanRemoval = false) @OneToMany(fetch = FetchType.LAZY, mappedBy = "dSpaceObject", cascade = CascadeType.ALL)
private List<ResourcePolicy> resourcePolicies = new ArrayList<>(); private List<ResourcePolicy> resourcePolicies = new ArrayList<>();
/** /**

View File

@@ -393,17 +393,6 @@ public abstract class DSpaceObjectServiceImpl<T extends DSpaceObject> implements
} }
} }
/**
* Protected method that deletes all metadata values from the database, should only be called when deleting the item.
* @param context the dspaceObject
* @param dso the dspaceObject who's metadata we are to delete
* @throws SQLException if database error
*/
protected void deleteMetadata(Context context, T dso) throws SQLException {
metadataValueService.delete(context, dso);
}
/** /**
* Utility method for pattern-matching metadata elements. This * Utility method for pattern-matching metadata elements. This
* method will return <code>true</code> if the given schema, * method will return <code>true</code> if the given schema,

View File

@@ -7,10 +7,10 @@
*/ */
package org.dspace.content; package org.dspace.content;
import java.sql.SQLException;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import java.sql.SQLException;
/** /**
* Interface for manipulating in-progress submissions, without having to know at * Interface for manipulating in-progress submissions, without having to know at
* which stage of submission they are (in workspace or workflow system) * which stage of submission they are (in workspace or workflow system)
@@ -25,7 +25,7 @@ public interface InProgressSubmission
* *
* @return the internal identifier * @return the internal identifier
*/ */
int getID(); Integer getID();
/** /**
* Get the incomplete item object * Get the incomplete item object

View File

@@ -610,14 +610,9 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
log.info(LogManager.getHeader(context, "delete_item", "item_id=" log.info(LogManager.getHeader(context, "delete_item", "item_id="
+ item.getID())); + item.getID()));
deleteMetadata(context, item);
// Remove bundles // Remove bundles
removeAllBundles(context, item); removeAllBundles(context, item);
// remove all of our authorization policies
authorizeService.removeAllPolicies(context, item, false);
// Remove any Handle // Remove any Handle
handleService.unbindHandle(context, item); handleService.unbindHandle(context, item);

View File

@@ -8,6 +8,7 @@
package org.dspace.content; package org.dspace.content;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.hibernate.annotations.Cache; import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.proxy.HibernateProxyHelper; import org.hibernate.proxy.HibernateProxyHelper;
@@ -29,13 +30,13 @@ import javax.persistence.*;
@Cacheable @Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="metadatafieldregistry") @Table(name="metadatafieldregistry")
public class MetadataField { public class MetadataField implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="metadata_field_id", nullable = false, unique = true) @Column(name="metadata_field_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadatafieldregistry_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadatafieldregistry_seq")
@SequenceGenerator(name="metadatafieldregistry_seq", sequenceName="metadatafieldregistry_seq", allocationSize = 1, initialValue = 1) @SequenceGenerator(name="metadatafieldregistry_seq", sequenceName="metadatafieldregistry_seq", allocationSize = 1, initialValue = 1)
private int id; private Integer id;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "metadata_schema_id",nullable = false) @JoinColumn(name = "metadata_schema_id",nullable = false)
@@ -67,7 +68,7 @@ public class MetadataField {
* *
* @return metadata field id * @return metadata field id
*/ */
public int getFieldID() public Integer getID()
{ {
return id; return id;
} }
@@ -175,7 +176,7 @@ public class MetadataField {
return false; return false;
} }
final MetadataField other = (MetadataField) obj; final MetadataField other = (MetadataField) obj;
if (this.getFieldID() != other.getFieldID()) if (this.getID() != other.getID())
{ {
return false; return false;
} }
@@ -190,8 +191,8 @@ public class MetadataField {
public int hashCode() public int hashCode()
{ {
int hash = 7; int hash = 7;
hash = 47 * hash + getFieldID(); hash = 47 * hash + getID();
hash = 47 * hash + getMetadataSchema().getSchemaID(); hash = 47 * hash + getMetadataSchema().getID();
return hash; return hash;
} }

View File

@@ -58,7 +58,7 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
if (hasElement(context, -1, metadataSchema, element, qualifier)) if (hasElement(context, -1, metadataSchema, element, qualifier))
{ {
throw new NonUniqueMetadataException("Please make " + element + "." throw new NonUniqueMetadataException("Please make " + element + "."
+ qualifier + " unique within schema #" + metadataSchema.getSchemaID()); + qualifier + " unique within schema #" + metadataSchema.getID());
} }
// Create a table row and update it with the values // Create a table row and update it with the values
@@ -71,7 +71,7 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
metadataFieldDAO.save(context, metadataField); metadataFieldDAO.save(context, metadataField);
log.info(LogManager.getHeader(context, "create_metadata_field", log.info(LogManager.getHeader(context, "create_metadata_field",
"metadata_field_id=" + metadataField.getFieldID())); "metadata_field_id=" + metadataField.getID()));
return metadataField; return metadataField;
} }
@@ -118,7 +118,7 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
} }
// Ensure the element and qualifier are unique within a given schema. // Ensure the element and qualifier are unique within a given schema.
if (hasElement(context, metadataField.getFieldID(), metadataField.getMetadataSchema(), metadataField.getElement(), metadataField.getQualifier())) if (hasElement(context, metadataField.getID(), metadataField.getMetadataSchema(), metadataField.getElement(), metadataField.getQualifier()))
{ {
throw new NonUniqueMetadataException("Please make " + metadataField.getMetadataSchema().getName() + "." + metadataField.getElement() + "." throw new NonUniqueMetadataException("Please make " + metadataField.getMetadataSchema().getName() + "." + metadataField.getElement() + "."
+ metadataField.getQualifier()); + metadataField.getQualifier());
@@ -127,7 +127,7 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
metadataFieldDAO.save(context, metadataField); metadataFieldDAO.save(context, metadataField);
log.info(LogManager.getHeader(context, "update_metadatafieldregistry", log.info(LogManager.getHeader(context, "update_metadatafieldregistry",
"metadata_field_id=" + metadataField.getFieldID() + "element=" + metadataField.getElement() "metadata_field_id=" + metadataField.getID() + "element=" + metadataField.getElement()
+ "qualifier=" + metadataField.getQualifier())); + "qualifier=" + metadataField.getQualifier()));
} }
@@ -141,7 +141,7 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
} }
log.info(LogManager.getHeader(context, "delete_metadata_field", log.info(LogManager.getHeader(context, "delete_metadata_field",
"metadata_field_id=" + metadataField.getFieldID())); "metadata_field_id=" + metadataField.getID()));
metadataValueService.deleteByMetadataField(context, metadataField); metadataValueService.deleteByMetadataField(context, metadataField);
metadataFieldDAO.delete(context, metadataField); metadataFieldDAO.delete(context, metadataField);

View File

@@ -8,12 +8,11 @@
package org.dspace.content; package org.dspace.content;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.hibernate.annotations.*; import org.dspace.core.ReloadableEntity;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.proxy.HibernateProxyHelper; import org.hibernate.proxy.HibernateProxyHelper;
import javax.persistence.*; import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Table;
/** /**
* Class representing a schema in DSpace. * Class representing a schema in DSpace.
@@ -32,7 +31,7 @@ import javax.persistence.Table;
@Cacheable @Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="metadataschemaregistry") @Table(name="metadataschemaregistry")
public class MetadataSchema public class MetadataSchema implements ReloadableEntity<Integer>
{ {
/** Short Name of built-in Dublin Core schema. */ /** Short Name of built-in Dublin Core schema. */
public static final String DC_SCHEMA = "dc"; public static final String DC_SCHEMA = "dc";
@@ -41,7 +40,7 @@ public class MetadataSchema
@Column(name="metadata_schema_id") @Column(name="metadata_schema_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadataschemaregistry_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadataschemaregistry_seq")
@SequenceGenerator(name="metadataschemaregistry_seq", sequenceName="metadataschemaregistry_seq", allocationSize = 1) @SequenceGenerator(name="metadataschemaregistry_seq", sequenceName="metadataschemaregistry_seq", allocationSize = 1)
private int id; private Integer id;
@Column(name = "namespace", unique = true, length = 256) @Column(name = "namespace", unique = true, length = 256)
private String namespace; private String namespace;
@@ -137,7 +136,7 @@ public class MetadataSchema
* *
* @return schema record key * @return schema record key
*/ */
public int getSchemaID() public Integer getID()
{ {
return id; return id;
} }

View File

@@ -73,7 +73,7 @@ public class MetadataSchemaServiceImpl implements MetadataSchemaService {
metadataSchemaDAO.save(context, metadataSchema); metadataSchemaDAO.save(context, metadataSchema);
log.info(LogManager.getHeader(context, "create_metadata_schema", log.info(LogManager.getHeader(context, "create_metadata_schema",
"metadata_schema_id=" "metadata_schema_id="
+ metadataSchema.getSchemaID())); + metadataSchema.getID()));
return metadataSchema; return metadataSchema;
} }
@@ -92,21 +92,21 @@ public class MetadataSchemaServiceImpl implements MetadataSchemaService {
} }
// Ensure the schema name is unique // Ensure the schema name is unique
if (!uniqueShortName(context, metadataSchema.getSchemaID(), metadataSchema.getName())) if (!uniqueShortName(context, metadataSchema.getID(), metadataSchema.getName()))
{ {
throw new NonUniqueMetadataException("Please make the name " + metadataSchema.getName() throw new NonUniqueMetadataException("Please make the name " + metadataSchema.getName()
+ " unique"); + " unique");
} }
// Ensure the schema namespace is unique // Ensure the schema namespace is unique
if (!uniqueNamespace(context, metadataSchema.getSchemaID(), metadataSchema.getNamespace())) if (!uniqueNamespace(context, metadataSchema.getID(), metadataSchema.getNamespace()))
{ {
throw new NonUniqueMetadataException("Please make the namespace " + metadataSchema.getNamespace() throw new NonUniqueMetadataException("Please make the namespace " + metadataSchema.getNamespace()
+ " unique"); + " unique");
} }
metadataSchemaDAO.save(context, metadataSchema); metadataSchemaDAO.save(context, metadataSchema);
log.info(LogManager.getHeader(context, "update_metadata_schema", log.info(LogManager.getHeader(context, "update_metadata_schema",
"metadata_schema_id=" + metadataSchema.getSchemaID() + "namespace=" "metadata_schema_id=" + metadataSchema.getID() + "namespace="
+ metadataSchema.getNamespace() + "name=" + metadataSchema.getName())); + metadataSchema.getNamespace() + "name=" + metadataSchema.getName()));
} }
@@ -120,7 +120,7 @@ public class MetadataSchemaServiceImpl implements MetadataSchemaService {
} }
log.info(LogManager.getHeader(context, "delete_metadata_schema", log.info(LogManager.getHeader(context, "delete_metadata_schema",
"metadata_schema_id=" + metadataSchema.getSchemaID())); "metadata_schema_id=" + metadataSchema.getID()));
metadataSchemaDAO.delete(context, metadataSchema); metadataSchemaDAO.delete(context, metadataSchema);
} }

View File

@@ -8,6 +8,7 @@
package org.dspace.content; package org.dspace.content;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import org.hibernate.proxy.HibernateProxyHelper; import org.hibernate.proxy.HibernateProxyHelper;
@@ -26,14 +27,14 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name="metadatavalue") @Table(name="metadatavalue")
public class MetadataValue public class MetadataValue implements ReloadableEntity<Integer>
{ {
/** The reference to the metadata field */ /** The reference to the metadata field */
@Id @Id
@Column(name="metadata_value_id") @Column(name="metadata_value_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadatavalue_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadatavalue_seq")
@SequenceGenerator(name="metadatavalue_seq", sequenceName="metadatavalue_seq", allocationSize = 1) @SequenceGenerator(name="metadatavalue_seq", sequenceName="metadatavalue_seq", allocationSize = 1)
private int valueId; private Integer id;
/** The primary key for the metadata value */ /** The primary key for the metadata value */
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
@@ -81,9 +82,9 @@ public class MetadataValue
* *
* @return metadata value ID * @return metadata value ID
*/ */
public int getValueId() public Integer getID()
{ {
return valueId; return id;
} }
/** /**
@@ -238,11 +239,11 @@ public class MetadataValue
return false; return false;
} }
final MetadataValue other = (MetadataValue) obj; final MetadataValue other = (MetadataValue) obj;
if (this.valueId != other.valueId) if (this.id != other.id)
{ {
return false; return false;
} }
if (this.getValueId() != other.getValueId()) if (this.getID() != other.getID())
{ {
return false; return false;
} }
@@ -257,8 +258,8 @@ public class MetadataValue
public int hashCode() public int hashCode()
{ {
int hash = 7; int hash = 7;
hash = 47 * hash + this.valueId; hash = 47 * hash + this.id;
hash = 47 * hash + this.getValueId(); hash = 47 * hash + this.getID();
hash = 47 * hash + this.getDSpaceObject().getID().hashCode(); hash = 47 * hash + this.getDSpaceObject().getID().hashCode();
return hash; return hash;
} }

View File

@@ -72,7 +72,7 @@ public class MetadataValueServiceImpl implements MetadataValueService {
public void update(Context context, MetadataValue metadataValue) throws SQLException { public void update(Context context, MetadataValue metadataValue) throws SQLException {
metadataValueDAO.save(context, metadataValue); metadataValueDAO.save(context, metadataValue);
log.info(LogManager.getHeader(context, "update_metadatavalue", log.info(LogManager.getHeader(context, "update_metadatavalue",
"metadata_value_id=" + metadataValue.getValueId())); "metadata_value_id=" + metadataValue.getID()));
} }
@@ -89,17 +89,10 @@ public class MetadataValueServiceImpl implements MetadataValueService {
@Override @Override
public void delete(Context context, MetadataValue metadataValue) throws SQLException { public void delete(Context context, MetadataValue metadataValue) throws SQLException {
log.info(LogManager.getHeader(context, "delete_metadata_value", log.info(LogManager.getHeader(context, "delete_metadata_value",
" metadata_value_id=" + metadataValue.getValueId())); " metadata_value_id=" + metadataValue.getID()));
metadataValueDAO.delete(context, metadataValue); metadataValueDAO.delete(context, metadataValue);
} }
@Override
public void delete(Context context, DSpaceObject dso) throws SQLException {
log.info(LogManager.getHeader(context, "delete_metadata_values",
" dso=" + dso.getID()));
metadataValueDAO.delete(context, dso);
}
@Override @Override
public List<MetadataValue> findByValueLike(Context context, String value) throws SQLException { public List<MetadataValue> findByValueLike(Context context, String value) throws SQLException {
return metadataValueDAO.findByValueLike(context, value); return metadataValueDAO.findByValueLike(context, value);

View File

@@ -7,19 +7,19 @@
*/ */
package org.dspace.content; package org.dspace.content;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowItem;
import org.hibernate.proxy.HibernateProxyHelper; import org.hibernate.proxy.HibernateProxyHelper;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/** /**
* Class representing an item in the process of being submitted by a user * Class representing an item in the process of being submitted by a user
@@ -29,14 +29,14 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name = "workspaceitem") @Table(name = "workspaceitem")
public class WorkspaceItem implements InProgressSubmission, Serializable public class WorkspaceItem implements InProgressSubmission, Serializable, ReloadableEntity<Integer>
{ {
@Id @Id
@Column(name = "workspace_item_id", unique = true, nullable = false) @Column(name = "workspace_item_id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="workspaceitem_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="workspaceitem_seq")
@SequenceGenerator(name="workspaceitem_seq", sequenceName="workspaceitem_seq", allocationSize = 1) @SequenceGenerator(name="workspaceitem_seq", sequenceName="workspaceitem_seq", allocationSize = 1)
private int workspaceItemId; private Integer workspaceItemId;
/** The item this workspace object pertains to */ /** The item this workspace object pertains to */
@OneToOne(fetch = FetchType.LAZY) @OneToOne(fetch = FetchType.LAZY)
@@ -90,7 +90,7 @@ public class WorkspaceItem implements InProgressSubmission, Serializable
* @return the internal identifier * @return the internal identifier
*/ */
@Override @Override
public int getID() public Integer getID()
{ {
return workspaceItemId; return workspaceItemId;
} }

View File

@@ -69,7 +69,7 @@ public class CrosswalkMetadataValidator {
if (forceCreate && schemaChoice.equals("add")) { if (forceCreate && schemaChoice.equals("add")) {
try { try {
mdSchema = metadataSchemaService.create(context, schema, String.valueOf(new Date().getTime())); mdSchema = metadataSchemaService.create(context, schema, String.valueOf(new Date().getTime()));
mdSchema.setNamespace("unknown" + mdSchema.getSchemaID()); mdSchema.setNamespace("unknown" + mdSchema.getID());
metadataSchemaService.update(context, mdSchema); metadataSchemaService.update(context, mdSchema);
} catch (NonUniqueMetadataException e) { } catch (NonUniqueMetadataException e) {
// This case should not be possible // This case should not be possible

View File

@@ -7,7 +7,6 @@
*/ */
package org.dspace.content.dao; package org.dspace.content.dao;
import org.dspace.content.DSpaceObject;
import org.dspace.content.MetadataField; import org.dspace.content.MetadataField;
import org.dspace.content.MetadataValue; import org.dspace.content.MetadataValue;
import org.dspace.core.Context; import org.dspace.core.Context;
@@ -36,5 +35,4 @@ public interface MetadataValueDAO extends GenericDAO<MetadataValue> {
int countRows(Context context) throws SQLException; int countRows(Context context) throws SQLException;
public void delete(Context context, DSpaceObject dso) throws SQLException;
} }

View File

@@ -72,7 +72,7 @@ public class CollectionDAOImpl extends AbstractHibernateDSODAO<Collection> imple
if(limit != null){ if(limit != null){
hibernateQuery.setMaxResults(limit); hibernateQuery.setMaxResults(limit);
} }
hibernateQuery.setParameter(order.toString(), order.getFieldID()); hibernateQuery.setParameter(order.toString(), order.getID());
return list(hibernateQuery); return list(hibernateQuery);
} }

View File

@@ -70,7 +70,7 @@ public class CommunityDAOImpl extends AbstractHibernateDSODAO<Community> impleme
if(limit != null){ if(limit != null){
query.setMaxResults(limit); query.setMaxResults(limit);
} }
query.setParameter(sortField.toString(), sortField.getFieldID()); query.setParameter(sortField.toString(), sortField.getID());
return list(query); return list(query);
} }
@@ -90,7 +90,7 @@ public class CommunityDAOImpl extends AbstractHibernateDSODAO<Community> impleme
addMetadataSortQuery(queryBuilder, Arrays.asList(sortField), ListUtils.EMPTY_LIST); addMetadataSortQuery(queryBuilder, Arrays.asList(sortField), ListUtils.EMPTY_LIST);
Query query = createQuery(context, queryBuilder.toString()); Query query = createQuery(context, queryBuilder.toString());
query.setParameter(sortField.toString(), sortField.getFieldID()); query.setParameter(sortField.toString(), sortField.getID());
return findMany(context, query); return findMany(context, query);
} }

View File

@@ -107,7 +107,7 @@ public class ItemDAOImpl extends AbstractHibernateDSODAO<Item> implements ItemDA
addMetadataSortQuery(query, Collections.singletonList(metadataField), null); addMetadataSortQuery(query, Collections.singletonList(metadataField), null);
Query hibernateQuery = createQuery(context, query.toString()); Query hibernateQuery = createQuery(context, query.toString());
hibernateQuery.setParameter(metadataField.toString(), metadataField.getFieldID()); hibernateQuery.setParameter(metadataField.toString(), metadataField.getID());
hibernateQuery.setParameter("in_archive", true); hibernateQuery.setParameter("in_archive", true);
hibernateQuery.setParameter("submitter", eperson); hibernateQuery.setParameter("submitter", eperson);
hibernateQuery.setMaxResults(limit); hibernateQuery.setMaxResults(limit);

View File

@@ -7,7 +7,6 @@
*/ */
package org.dspace.content.dao.impl; package org.dspace.content.dao.impl;
import org.dspace.content.DSpaceObject;
import org.dspace.content.MetadataField; import org.dspace.content.MetadataField;
import org.dspace.content.MetadataValue; import org.dspace.content.MetadataValue;
import org.dspace.content.dao.MetadataValueDAO; import org.dspace.content.dao.MetadataValueDAO;
@@ -41,7 +40,7 @@ public class MetadataValueDAOImpl extends AbstractHibernateDAO<MetadataValue> im
{ {
Criteria criteria = createCriteria(context, MetadataValue.class); Criteria criteria = createCriteria(context, MetadataValue.class);
criteria.add( criteria.add(
Restrictions.eq("metadataField.id", metadataField.getFieldID()) Restrictions.eq("metadataField.id", metadataField.getID())
); );
criteria.setFetchMode("metadataField", FetchMode.JOIN); criteria.setFetchMode("metadataField", FetchMode.JOIN);
@@ -83,11 +82,4 @@ public class MetadataValueDAOImpl extends AbstractHibernateDAO<MetadataValue> im
return count(createQuery(context, "SELECT count(*) FROM MetadataValue")); return count(createQuery(context, "SELECT count(*) FROM MetadataValue"));
} }
@Override
public void delete(Context context, DSpaceObject dso) throws SQLException {
String queryString = "delete from MetadataValue where dSpaceObject= :dso";
Query query = createQuery(context, queryString);
query.setParameter("dso", dso);
query.executeUpdate();
}
} }

View File

@@ -82,14 +82,6 @@ public interface MetadataValueService {
*/ */
public void delete(Context context, MetadataValue metadataValue) throws SQLException; public void delete(Context context, MetadataValue metadataValue) throws SQLException;
/**
* Delete all metadata fields for a specified dspace object
* @param context dspace context
* @param dso the dspace object
* @throws SQLException
*/
public void delete(Context context, DSpaceObject dso) throws SQLException;
public List<MetadataValue> findByValueLike(Context context, String value) throws SQLException; public List<MetadataValue> findByValueLike(Context context, String value) throws SQLException;
public void deleteByMetadataField(Context context, MetadataField metadataField) throws SQLException; public void deleteByMetadataField(Context context, MetadataField metadataField) throws SQLException;

View File

@@ -158,11 +158,6 @@ public class Context
return dbConnection; return dbConnection;
} }
public void enableBatchMode(boolean batchModeEnabled) throws SQLException {
dbConnection.setOptimizedForBatchProcessing(batchModeEnabled);
}
public DatabaseConfigVO getDBConfig() throws SQLException public DatabaseConfigVO getDBConfig() throws SQLException
{ {
return dbConnection.getDatabaseConfig(); return dbConnection.getDatabaseConfig();
@@ -371,6 +366,16 @@ public class Context
} }
} }
/**
* Commit the current transaction with the database, persisting any pending changes.
* The database connection is not closed and can be reused afterwards.
*
* <b>WARNING: After calling this method all previously fetched entities are "detached" (pending
* changes are not tracked anymore). You have to reload all entities you still want to work manually
* after this method call (see {@link Context#reloadEntity(ReloadableEntity)}).</b>
*
* @throws SQLException When committing the transaction in the database fails.
*/
public void commit() throws SQLException public void commit() throws SQLException
{ {
// If Context is no longer open/valid, just note that it has already been closed // If Context is no longer open/valid, just note that it has already been closed
@@ -397,6 +402,7 @@ public class Context
{ {
//Commit our changes //Commit our changes
dbConnection.commit(); dbConnection.commit();
reloadContextBoundEntities();
} }
} }
} }
@@ -624,21 +630,82 @@ public class Context
dbConnection.shutdown(); dbConnection.shutdown();
} }
/**
* Clear the cache of all object that have been read from the database so far. This will also free up
* (heap space) memory. You should use this method when processing a large number of records.
*
* <b>WARNING: After calling this method all previously fetched entities are "detached" (pending
* changes are not tracked anymore). You have to reload all entities you still want to work manually
* after this method call (see {@link Context#reloadEntity(ReloadableEntity)}).</b>
*
* This method will take care of reloading the current user.
*
* @throws SQLException When clearing the entity cache fails
*/
public void clearCache() throws SQLException { public void clearCache() throws SQLException {
if(log.isDebugEnabled()) { if(log.isDebugEnabled()) {
log.debug("Cache size before clear cache is " + getCacheSize()); log.debug("Cache size before clear cache is " + getCacheSize());
} }
UUID epersonId = getCurrentUser().getID();
this.getDBConnection().clearCache(); this.getDBConnection().clearCache();
if(epersonId != null) { reloadContextBoundEntities();
setCurrentUser(EPersonServiceFactory.getInstance().getEPersonService().find(this, epersonId)); }
}
}
/**
* Returns the size of the cache of all object that have been read from the database so far. A larger number
* means that more memory is consumed by the cache. This also has a negative impact on the query performance. In
* that case you should consider clearing the cache (see {@link Context#clearCache() clearCache}).
*
* @throws SQLException When connecting to the active cache fails.
*/
public long getCacheSize() throws SQLException { public long getCacheSize() throws SQLException {
return this.getDBConnection().getCacheSize(); return this.getDBConnection().getCacheSize();
} }
/**
* Enable or disable "batch processing mode" for this context.
*
* Enabling batch processing mode means that the database connection is configured so that it is optimized to
* process a large number of records.
*
* Disabling batch processing mode restores the normal behaviour that is optimal for querying and updating a
* small number of records.
*
* @param batchModeEnabled When true, batch processing mode will be enabled. If false, it will be disabled.
* @throws SQLException When configuring the database connection fails.
*/
public void enableBatchMode(boolean batchModeEnabled) throws SQLException {
dbConnection.setOptimizedForBatchProcessing(batchModeEnabled);
}
/**
* Check if "batch processing mode" is enabled for this context.
* @return True if batch processing mode is enabled, false otherwise.
*/
public boolean isBatchModeEnabled() {
return dbConnection.isOptimizedForBatchProcessing();
}
/**
* Reload an entity from the database into the cache. This method will return a reference to the "attached"
* entity. This means changes to the entity will be tracked and persisted to the database.
*
* @param entity The entity to reload
* @param <E> The class of the enity. The entity must implement the {@link ReloadableEntity} interface.
* @return A (possibly) <b>NEW</b> reference to the entity that should be used for further processing.
* @throws SQLException When reloading the entity from the database fails.
*/
@SuppressWarnings("unchecked")
public <E extends ReloadableEntity> E reloadEntity(E entity) throws SQLException {
return (E) dbConnection.reloadEntity(entity);
}
/**
* Reload all entities related to this context.
* @throws SQLException When reloading one of the entities fails.
*/
private void reloadContextBoundEntities() throws SQLException {
currentUser = reloadEntity(currentUser);
}
} }

View File

@@ -44,5 +44,13 @@ public interface DBConnection<T> {
public void setOptimizedForBatchProcessing(boolean batchOptimized) throws SQLException; public void setOptimizedForBatchProcessing(boolean batchOptimized) throws SQLException;
public boolean isOptimizedForBatchProcessing();
public long getCacheSize() throws SQLException; public long getCacheSize() throws SQLException;
/**
* Reload a DSpace object from the database. This will make sure the object is valid and stored in the cache.
* @param entity The DSpace object to reload
*/
public <E extends ReloadableEntity> E reloadEntity(E entity) throws SQLException;
} }

View File

@@ -7,17 +7,20 @@
*/ */
package org.dspace.core; package org.dspace.core;
import org.dspace.content.DSpaceObject;
import org.dspace.storage.rdbms.DatabaseConfigVO; import org.dspace.storage.rdbms.DatabaseConfigVO;
import org.hibernate.FlushMode; import org.hibernate.FlushMode;
import org.hibernate.Session; import org.hibernate.Session;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
import org.hibernate.Transaction; import org.hibernate.Transaction;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.proxy.HibernateProxyHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate4.SessionFactoryUtils; import org.springframework.orm.hibernate4.SessionFactoryUtils;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.io.Serializable;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.SQLException; import java.sql.SQLException;
@@ -124,12 +127,29 @@ public class HibernateDBConnection implements DBConnection<Session> {
return getSession().getStatistics().getEntityCount(); return getSession().getStatistics().getEntityCount();
} }
@Override
@SuppressWarnings("unchecked")
public <E extends ReloadableEntity> E reloadEntity(final E entity) throws SQLException {
if(entity == null) {
return null;
} else if(getSession().contains(entity)) {
return entity;
} else {
return (E) getSession().get(HibernateProxyHelper.getClassWithoutInitializingProxy(entity), entity.getID());
}
}
@Override @Override
public void setOptimizedForBatchProcessing(final boolean batchOptimized) throws SQLException { public void setOptimizedForBatchProcessing(final boolean batchOptimized) throws SQLException {
this.batchModeEnabled = batchOptimized; this.batchModeEnabled = batchOptimized;
configureBatchMode(); configureBatchMode();
} }
@Override
public boolean isOptimizedForBatchProcessing() {
return batchModeEnabled;
}
private void configureBatchMode() throws SQLException { private void configureBatchMode() throws SQLException {
if(batchModeEnabled) { if(batchModeEnabled) {
getSession().setFlushMode(FlushMode.ALWAYS); getSession().setFlushMode(FlushMode.ALWAYS);

View File

@@ -0,0 +1,20 @@
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.core;
import java.io.Serializable;
/**
* Interface that has to be implemented by all entities that can be reloaded by the Context
* (see {@link org.dspace.core.Context#reloadEntity(ReloadableEntity)} ])}
*/
public interface ReloadableEntity<T extends Serializable> {
T getID();
}

View File

@@ -7,24 +7,19 @@
*/ */
package org.dspace.eperson; package org.dspace.eperson;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Locale;
import javax.mail.MessagingException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.core.ConfigurationManager; import org.dspace.core.*;
import org.dspace.core.Context;
import org.dspace.core.Email;
import org.dspace.core.I18nUtil;
import org.dspace.core.Utils;
import org.dspace.eperson.service.AccountService; import org.dspace.eperson.service.AccountService;
import org.dspace.eperson.service.EPersonService; import org.dspace.eperson.service.EPersonService;
import org.dspace.eperson.service.RegistrationDataService; import org.dspace.eperson.service.RegistrationDataService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import javax.mail.MessagingException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Locale;
/** /**
* *
* Methods for handling registration by email and forgotten passwords. When * Methods for handling registration by email and forgotten passwords. When
@@ -219,7 +214,7 @@ public class AccountServiceImpl implements AccountService
if (log.isDebugEnabled()) if (log.isDebugEnabled())
{ {
log.debug("Created callback " log.debug("Created callback "
+ rd.getId() + rd.getID()
+ " with token " + rd.getToken() + " with token " + rd.getToken()
+ " with email \"" + email + "\""); + " with email \"" + email + "\"");
} }

View File

@@ -209,9 +209,6 @@ public class EPersonServiceImpl extends DSpaceObjectServiceImpl<EPerson> impleme
throw new AuthorizeException(new EPersonDeletionException(constraintList)); throw new AuthorizeException(new EPersonDeletionException(constraintList));
} }
// Delete the Dublin Core
deleteMetadata(context, ePerson);
context.addEvent(new Event(Event.DELETE, Constants.EPERSON, ePerson.getID(), ePerson.getEmail(), getIdentifiers(context, ePerson))); context.addEvent(new Event(Event.DELETE, Constants.EPERSON, ePerson.getID(), ePerson.getEmail(), getIdentifiers(context, ePerson)));
// XXX FIXME: This sidesteps the object model code so it won't // XXX FIXME: This sidesteps the object model code so it won't

View File

@@ -361,8 +361,6 @@ public class GroupServiceImpl extends DSpaceObjectServiceImpl<Group> implements
ePerson.getGroups().remove(group); ePerson.getGroups().remove(group);
} }
deleteMetadata(context, group);
// empty out group2groupcache table (if we do it after we delete our object we get an issue with references) // empty out group2groupcache table (if we do it after we delete our object we get an issue with references)
group2GroupCacheDAO.deleteAll(context); group2GroupCacheDAO.deleteAll(context);
// Remove ourself // Remove ourself
@@ -467,7 +465,7 @@ public class GroupServiceImpl extends DSpaceObjectServiceImpl<Group> implements
protected boolean epersonInGroup(Context context, String groupName, EPerson ePerson) protected boolean epersonInGroup(Context context, String groupName, EPerson ePerson)
throws SQLException throws SQLException
{ {
return groupDAO.findByNameAndEPerson(context, groupName, ePerson) != null; return groupDAO.findByNameAndMembership(context, groupName, ePerson) != null;
} }

View File

@@ -8,6 +8,7 @@
package org.dspace.eperson; package org.dspace.eperson;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@@ -19,13 +20,13 @@ import java.util.Date;
*/ */
@Entity @Entity
@Table(name="registrationdata") @Table(name="registrationdata")
public class RegistrationData { public class RegistrationData implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="registrationdata_id") @Column(name="registrationdata_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="registrationdata_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="registrationdata_seq")
@SequenceGenerator(name="registrationdata_seq", sequenceName="registrationdata_seq", allocationSize = 1) @SequenceGenerator(name="registrationdata_seq", sequenceName="registrationdata_seq", allocationSize = 1)
private int id; private Integer id;
@Column(name = "email", unique = true, length = 64) @Column(name = "email", unique = true, length = 64)
private String email; private String email;
@@ -47,7 +48,7 @@ public class RegistrationData {
} }
public int getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -7,6 +7,7 @@
*/ */
package org.dspace.eperson; package org.dspace.eperson;
import org.apache.commons.collections.CollectionUtils;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.dao.RegistrationDataDAO; import org.dspace.eperson.dao.RegistrationDataDAO;
@@ -14,6 +15,8 @@ import org.dspace.eperson.service.RegistrationDataService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
/** /**
* Service implementation for the RegistrationData object. * Service implementation for the RegistrationData object.
@@ -61,8 +64,16 @@ public class RegistrationDataServiceImpl implements RegistrationDataService
@Override @Override
public void update(Context context, RegistrationData registrationData) throws SQLException, AuthorizeException { public void update(Context context, RegistrationData registrationData) throws SQLException, AuthorizeException {
registrationDataDAO.save(context, registrationData); update(context, Collections.singletonList(registrationData));
}
@Override
public void update(Context context, List<RegistrationData> registrationDataRecords) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(registrationDataRecords)) {
for (RegistrationData registrationData : registrationDataRecords) {
registrationDataDAO.save(context, registrationData);
}
}
} }
@Override @Override

View File

@@ -9,6 +9,7 @@ package org.dspace.eperson;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
@@ -19,13 +20,13 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name = "subscription") @Table(name = "subscription")
public class Subscription { public class Subscription implements ReloadableEntity<Integer> {
@Id @Id
@Column(name = "subscription_id", unique = true, nullable = false) @Column(name = "subscription_id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="subscription_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="subscription_seq")
@SequenceGenerator(name="subscription_seq", sequenceName="subscription_seq", allocationSize = 1) @SequenceGenerator(name="subscription_seq", sequenceName="subscription_seq", allocationSize = 1)
private int id; private Integer id;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "collection_id") @JoinColumn(name = "collection_id")
@@ -45,7 +46,7 @@ public class Subscription {
} }
public int getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -126,6 +126,6 @@ public interface GroupDAO extends DSpaceObjectDAO<Group>, DSpaceObjectLegacySupp
* @return The group with the specified name * @return The group with the specified name
* @throws SQLException if database error * @throws SQLException if database error
*/ */
Group findByNameAndEPerson(Context context, String groupName, EPerson ePerson) throws SQLException; Group findByNameAndMembership(Context context, String groupName, EPerson ePerson) throws SQLException;
} }

View File

@@ -44,7 +44,6 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
Query query = createQuery(context, Query query = createQuery(context,
"SELECT p " + "SELECT p " +
"FROM EPerson p " + "FROM EPerson p " +
"LEFT JOIN FETCH p.metadata " +
"WHERE p.email = :email" ); "WHERE p.email = :email" );
query.setParameter("email", email.toLowerCase()); query.setParameter("email", email.toLowerCase());
@@ -59,7 +58,6 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
Query query = createQuery(context, Query query = createQuery(context,
"SELECT p " + "SELECT p " +
"FROM EPerson p " + "FROM EPerson p " +
"LEFT JOIN FETCH p.metadata " +
"WHERE p.netid = :netid" ); "WHERE p.netid = :netid" );
query.setParameter("netid", netid); query.setParameter("netid", netid);
@@ -70,8 +68,7 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
@Override @Override
public List<EPerson> search(Context context, String query, List<MetadataField> queryFields, List<MetadataField> sortFields, int offset, int limit) throws SQLException public List<EPerson> search(Context context, String query, List<MetadataField> queryFields, List<MetadataField> sortFields, int offset, int limit) throws SQLException
{ {
String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase() String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase() + " ";
+ " LEFT JOIN FETCH " + EPerson.class.getSimpleName().toLowerCase() + ".metadata ";
if(query != null) query= "%"+query.toLowerCase()+"%"; if(query != null) query= "%"+query.toLowerCase()+"%";
Query hibernateQuery = getSearchQuery(context, queryString, query, queryFields, sortFields, null); Query hibernateQuery = getSearchQuery(context, queryString, query, queryFields, sortFields, null);
@@ -98,8 +95,7 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
@Override @Override
public List<EPerson> findAll(Context context, MetadataField metadataSortField, String sortField) throws SQLException { public List<EPerson> findAll(Context context, MetadataField metadataSortField, String sortField) throws SQLException {
String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase() String queryString = "SELECT " + EPerson.class.getSimpleName().toLowerCase() + " FROM EPerson as " + EPerson.class.getSimpleName().toLowerCase();
+ " LEFT JOIN FETCH " + EPerson.class.getSimpleName().toLowerCase() + ".metadata ";
List<MetadataField> sortFields = ListUtils.EMPTY_LIST; List<MetadataField> sortFields = ListUtils.EMPTY_LIST;
@@ -131,7 +127,6 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
Query query = createQuery(context, Query query = createQuery(context,
"SELECT p " + "SELECT p " +
"FROM EPerson p " + "FROM EPerson p " +
"LEFT JOIN FETCH p.metadata " +
"WHERE p.password IS NOT NULL AND p.digestAlgorithm IS NULL " ); "WHERE p.password IS NOT NULL AND p.digestAlgorithm IS NULL " );
return list(query); return list(query);
@@ -142,7 +137,6 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
Query query = createQuery(context, Query query = createQuery(context,
"SELECT p " + "SELECT p " +
"FROM EPerson p " + "FROM EPerson p " +
"LEFT JOIN FETCH p.metadata " +
"WHERE p.lastActive <= :date " ); "WHERE p.lastActive <= :date " );
query.setParameter("date", date); query.setParameter("date", date);
@@ -172,7 +166,7 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
query.setParameter("queryParam", "%"+queryParam.toLowerCase()+"%"); query.setParameter("queryParam", "%"+queryParam.toLowerCase()+"%");
} }
for (MetadataField metadataField : metadataFieldsToJoin) { for (MetadataField metadataField : metadataFieldsToJoin) {
query.setParameter(metadataField.toString(), metadataField.getFieldID()); query.setParameter(metadataField.toString(), metadataField.getID());
} }
return query; return query;
@@ -180,7 +174,7 @@ public class EPersonDAOImpl extends AbstractHibernateDSODAO<EPerson> implements
@Override @Override
public List<EPerson> findAllSubscribers(Context context) throws SQLException { public List<EPerson> findAllSubscribers(Context context) throws SQLException {
return list(createQuery(context, "SELECT DISTINCT e from Subscription s JOIN s.ePerson e LEFT JOIN FETCH e.metadata ")); return list(createQuery(context, "SELECT DISTINCT e from Subscription s JOIN s.ePerson e "));
} }
@Override @Override

View File

@@ -47,7 +47,7 @@ public class GroupDAOImpl extends AbstractHibernateDSODAO<Group> implements Grou
addMetadataValueWhereQuery(queryBuilder, Collections.singletonList(metadataField), "=", null); addMetadataValueWhereQuery(queryBuilder, Collections.singletonList(metadataField), "=", null);
Query query = createQuery(context, queryBuilder.toString()); Query query = createQuery(context, queryBuilder.toString());
query.setParameter(metadataField.toString(), metadataField.getFieldID()); query.setParameter(metadataField.toString(), metadataField.getID());
query.setParameter("queryParam", searchValue); query.setParameter("queryParam", searchValue);
return list(query); return list(query);
@@ -65,7 +65,7 @@ public class GroupDAOImpl extends AbstractHibernateDSODAO<Group> implements Grou
Query query = createQuery(context, queryBuilder.toString()); Query query = createQuery(context, queryBuilder.toString());
for (MetadataField sortField : sortMetadataFields) { for (MetadataField sortField : sortMetadataFields) {
query.setParameter(sortField.toString(), sortField.getFieldID()); query.setParameter(sortField.toString(), sortField.getID());
} }
return list(query); return list(query);
} }
@@ -101,7 +101,7 @@ public class GroupDAOImpl extends AbstractHibernateDSODAO<Group> implements Grou
} }
@Override @Override
public Group findByNameAndEPerson(Context context, String groupName, EPerson ePerson) throws SQLException { public Group findByNameAndMembership(Context context, String groupName, EPerson ePerson) throws SQLException {
if(groupName == null || ePerson == null) { if(groupName == null || ePerson == null) {
return null; return null;
} else { } else {

View File

@@ -11,6 +11,7 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
@@ -21,7 +22,7 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name="handle") @Table(name="handle")
public class Handle { public class Handle implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="handle_id") @Column(name="handle_id")
@@ -53,7 +54,7 @@ public class Handle {
} }
public Integer getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -7,10 +7,6 @@
*/ */
package org.dspace.handle; package org.dspace.handle;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
@@ -22,6 +18,10 @@ import org.dspace.handle.dao.HandleDAO;
import org.dspace.handle.service.HandleService; import org.dspace.handle.service.HandleService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/** /**
* Interface to the <a href="http://www.handle.net" target=_new>CNRI Handle * Interface to the <a href="http://www.handle.net" target=_new>CNRI Handle
* System </a>. * System </a>.
@@ -133,7 +133,7 @@ public class HandleServiceImpl implements HandleService
throws SQLException throws SQLException
{ {
Handle handle = handleDAO.create(context, new Handle()); Handle handle = handleDAO.create(context, new Handle());
String handleId = createId(handle.getId()); String handleId = createId(handle.getID());
handle.setHandle(handleId); handle.setHandle(handleId);
handle.setDSpaceObject(dso); handle.setDSpaceObject(dso);

View File

@@ -9,6 +9,7 @@ package org.dspace.harvest;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
import java.util.Date; import java.util.Date;
@@ -19,7 +20,7 @@ import java.util.Date;
@Entity @Entity
@Table(name="harvested_collection") @Table(name="harvested_collection")
public class HarvestedCollection public class HarvestedCollection implements ReloadableEntity<Integer>
{ {
@Id @Id
@Column(name="id") @Column(name="id")
@@ -86,6 +87,10 @@ public class HarvestedCollection
{ {
} }
public Integer getID() {
return id;
}
/** /**
* A function to set all harvesting-related parameters at once * A function to set all harvesting-related parameters at once
*/ */

View File

@@ -11,6 +11,7 @@ import java.util.Date;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
@@ -19,13 +20,13 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name="harvested_item") @Table(name="harvested_item")
public class HarvestedItem public class HarvestedItem implements ReloadableEntity<Integer>
{ {
@Id @Id
@Column(name="id") @Column(name="id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="harvested_item_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="harvested_item_seq")
@SequenceGenerator(name="harvested_item_seq", sequenceName="harvested_item_seq", allocationSize = 1) @SequenceGenerator(name="harvested_item_seq", sequenceName="harvested_item_seq", allocationSize = 1)
private int id; private Integer id;
@OneToOne(fetch = FetchType.LAZY) @OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="item_id", unique = true) @JoinColumn(name="item_id", unique = true)
@@ -48,7 +49,7 @@ public class HarvestedItem
{ {
} }
public int getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -215,6 +215,7 @@ public class OAIHarvester {
*/ */
public void runHarvest() throws SQLException, IOException, AuthorizeException public void runHarvest() throws SQLException, IOException, AuthorizeException
{ {
boolean originalMode = ourContext.isBatchModeEnabled();
ourContext.enableBatchMode(true); ourContext.enableBatchMode(true);
// figure out the relevant parameters // figure out the relevant parameters
@@ -436,7 +437,7 @@ public class OAIHarvester {
log.info("Harvest from " + oaiSource + " successful. The process took " + timeTaken + " milliseconds. Harvested " + currentRecord + " items."); log.info("Harvest from " + oaiSource + " successful. The process took " + timeTaken + " milliseconds. Harvested " + currentRecord + " items.");
harvestedCollection.update(ourContext, harvestRow); harvestedCollection.update(ourContext, harvestRow);
ourContext.enableBatchMode(false); ourContext.enableBatchMode(originalMode);
} }
private void intermediateCommit() throws SQLException { private void intermediateCommit() throws SQLException {
@@ -462,9 +463,9 @@ public class OAIHarvester {
} }
private void reloadRequiredEntities() throws SQLException { private void reloadRequiredEntities() throws SQLException {
//Load our objects in our cache //Reload our objects in our cache
targetCollection = collectionService.find(ourContext, targetCollection.getID()); targetCollection = ourContext.reloadEntity(targetCollection);
harvestRow = harvestedCollection.find(ourContext, targetCollection); harvestRow = ourContext.reloadEntity(harvestRow);
} }
/** /**

View File

@@ -10,6 +10,7 @@ package org.dspace.identifier;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import javax.persistence.*; import javax.persistence.*;
@@ -21,7 +22,7 @@ import javax.persistence.*;
@Entity @Entity
@Table(name = "Doi" ) @Table(name = "Doi" )
public class DOI public class DOI
implements Identifier implements Identifier, ReloadableEntity<Integer>
{ {
public static final String SCHEME = "doi:"; public static final String SCHEME = "doi:";
@@ -55,7 +56,7 @@ public class DOI
{ {
} }
public Integer getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -841,7 +841,7 @@ public class DOIIdentifierProvider
// We need to generate a new DOI. // We need to generate a new DOI.
doi = doiService.create(context); doi = doiService.create(context);
doiIdentifier = this.getPrefix() + "/" + this.getNamespaceSeparator() + doiIdentifier = this.getPrefix() + "/" + this.getNamespaceSeparator() +
doi.getId(); doi.getID();
} }
// prepare new doiRow // prepare new doiRow

View File

@@ -7,9 +7,6 @@
*/ */
package org.dspace.identifier; package org.dspace.identifier;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
@@ -27,6 +24,10 @@ import org.dspace.versioning.service.VersioningService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required; import org.springframework.beans.factory.annotation.Required;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/** /**
* *
* @author Marsa Haoua * @author Marsa Haoua
@@ -269,7 +270,7 @@ public class VersionedDOIIdentifierProvider extends DOIIdentifierProvider
// as we reuse the DOI ID, we do not have to check whether the DOI exists already. // as we reuse the DOI ID, we do not have to check whether the DOI exists already.
String identifier = this.getPrefix() + "/" + this.getNamespaceSeparator() + String identifier = this.getPrefix() + "/" + this.getNamespaceSeparator() +
doi.getId().toString(); doi.getID().toString();
if (version.getVersionNumber() > 1) if (version.getVersionNumber() > 1)
{ {

View File

@@ -11,6 +11,7 @@ import org.dspace.authorize.AuthorizeException;
import org.dspace.core.Context; import org.dspace.core.Context;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List;
/** /**
* Interface containing the simple CRUD methods so we don't have to add them over and again to every service which * Interface containing the simple CRUD methods so we don't have to add them over and again to every service which
@@ -26,5 +27,7 @@ public interface DSpaceCRUDService<T> {
public void update(Context context, T t) throws SQLException, AuthorizeException; public void update(Context context, T t) throws SQLException, AuthorizeException;
public void update(Context context, List<T> t) throws SQLException, AuthorizeException;
public void delete(Context context, T t) throws SQLException, AuthorizeException; public void delete(Context context, T t) throws SQLException, AuthorizeException;
} }

View File

@@ -9,6 +9,7 @@ package org.dspace.versioning;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.hibernate.proxy.HibernateProxyHelper; import org.hibernate.proxy.HibernateProxyHelper;
@@ -24,13 +25,13 @@ import java.util.Date;
*/ */
@Entity @Entity
@Table(name="versionitem") @Table(name="versionitem")
public class Version { public class Version implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="versionitem_id") @Column(name="versionitem_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="versionitem_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="versionitem_seq")
@SequenceGenerator(name="versionitem_seq", sequenceName="versionitem_seq", allocationSize = 1) @SequenceGenerator(name="versionitem_seq", sequenceName="versionitem_seq", allocationSize = 1)
private int id; private Integer id;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id") @JoinColumn(name = "item_id")
@@ -68,7 +69,7 @@ public class Version {
} }
public int getId() { public Integer getID() {
return id; return id;
} }
@@ -133,7 +134,7 @@ public class Version {
} }
final Version that = (Version)o; final Version that = (Version)o;
if (this.getId() != that.getId()) if (this.getID() != that.getID())
{ {
return false; return false;
} }
@@ -144,7 +145,7 @@ public class Version {
@Override @Override
public int hashCode() { public int hashCode() {
int hash=7; int hash=7;
hash=79*hash+ this.getId(); hash=79*hash+ this.getID();
return hash; return hash;
} }
} }

View File

@@ -8,6 +8,7 @@
package org.dspace.versioning; package org.dspace.versioning;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.hibernate.proxy.HibernateProxyHelper; import org.hibernate.proxy.HibernateProxyHelper;
import javax.persistence.*; import javax.persistence.*;
@@ -25,7 +26,7 @@ import org.apache.log4j.Logger;
*/ */
@Entity @Entity
@Table(name="versionhistory") @Table(name="versionhistory")
public class VersionHistory { public class VersionHistory implements ReloadableEntity<Integer> {
private static final Logger log = Logger.getLogger(VersionHistory.class); private static final Logger log = Logger.getLogger(VersionHistory.class);
@@ -33,7 +34,7 @@ public class VersionHistory {
@Column(name="versionhistory_id") @Column(name="versionhistory_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="versionhistory_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="versionhistory_seq")
@SequenceGenerator(name="versionhistory_seq", sequenceName="versionhistory_seq", allocationSize = 1) @SequenceGenerator(name="versionhistory_seq", sequenceName="versionhistory_seq", allocationSize = 1)
private int id; private Integer id;
//We use fetchtype eager for versions since we always require our versions when loading the history //We use fetchtype eager for versions since we always require our versions when loading the history
@OneToMany(fetch = FetchType.EAGER, mappedBy = "versionHistory") @OneToMany(fetch = FetchType.EAGER, mappedBy = "versionHistory")
@@ -50,7 +51,7 @@ public class VersionHistory {
} }
public int getId() { public Integer getID() {
return id; return id;
} }
@@ -92,7 +93,7 @@ public class VersionHistory {
} }
final VersionHistory that = (VersionHistory)o; final VersionHistory that = (VersionHistory)o;
if (this.getId() != that.getId()) if (this.getID() != that.getID())
{ {
return false; return false;
} }
@@ -104,7 +105,7 @@ public class VersionHistory {
public int hashCode() public int hashCode()
{ {
int hash=7; int hash=7;
hash=79*hash+ this.getId(); hash=79*hash+ this.getID();
return hash; return hash;
} }

View File

@@ -7,17 +7,19 @@
*/ */
package org.dspace.versioning; package org.dspace.versioning;
import org.apache.commons.collections.CollectionUtils;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.versioning.dao.VersionHistoryDAO; import org.dspace.versioning.dao.VersionHistoryDAO;
import org.dspace.versioning.service.VersionHistoryService; import org.dspace.versioning.service.VersionHistoryService;
import org.dspace.versioning.service.VersioningService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.dspace.versioning.service.VersioningService;
/** /**
* *
@@ -52,7 +54,16 @@ public class VersionHistoryServiceImpl implements VersionHistoryService
@Override @Override
public void update(Context context, VersionHistory versionHistory) throws SQLException, AuthorizeException { public void update(Context context, VersionHistory versionHistory) throws SQLException, AuthorizeException {
versionHistoryDAO.save(context, versionHistory); update(context, Collections.singletonList(versionHistory));
}
@Override
public void update(Context context, List<VersionHistory> versionHistories) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(versionHistories)) {
for (VersionHistory versionHistory : versionHistories) {
versionHistoryDAO.save(context, versionHistory);
}
}
} }
@Override @Override

View File

@@ -8,18 +8,18 @@
package org.dspace.versioning.dao.impl; package org.dspace.versioning.dao.impl;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context;
import org.dspace.core.AbstractHibernateDAO; import org.dspace.core.AbstractHibernateDAO;
import org.dspace.core.Context;
import org.dspace.versioning.Version; import org.dspace.versioning.Version;
import org.dspace.versioning.VersionHistory;
import org.dspace.versioning.dao.VersionDAO; import org.dspace.versioning.dao.VersionDAO;
import org.hibernate.Criteria; import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.Restrictions;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.dspace.versioning.VersionHistory;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
/** /**
* Hibernate implementation of the Database Access Object interface class for the Version object. * Hibernate implementation of the Database Access Object interface class for the Version object.
@@ -51,7 +51,7 @@ public class VersionDAOImpl extends AbstractHibernateDAO<Version> implements Ver
Query q = this.createQuery(c, Query q = this.createQuery(c,
"SELECT (COALESCE(MAX(versionNumber), 0) + 1) " "SELECT (COALESCE(MAX(versionNumber), 0) + 1) "
+ "FROM Version WHERE versionHistory.id = :historyId"); + "FROM Version WHERE versionHistory.id = :historyId");
q.setParameter("historyId", vh.getId()); q.setParameter("historyId", vh.getID());
int next = (Integer) q.uniqueResult(); int next = (Integer) q.uniqueResult();
return next; return next;

View File

@@ -7,15 +7,15 @@
*/ */
package org.dspace.workflowbasic; package org.dspace.workflowbasic;
import java.sql.SQLException;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowItem;
import javax.persistence.*; import javax.persistence.*;
import java.sql.SQLException;
/** /**
* Class representing an item going through the workflow process in DSpace * Class representing an item going through the workflow process in DSpace
@@ -25,14 +25,14 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name = "workflowitem") @Table(name = "workflowitem")
public class BasicWorkflowItem implements WorkflowItem public class BasicWorkflowItem implements WorkflowItem, ReloadableEntity<Integer>
{ {
@Id @Id
@Column(name = "workflow_id", unique = true, nullable = false) @Column(name = "workflow_id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="workflowitem_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="workflowitem_seq")
@SequenceGenerator(name="workflowitem_seq", sequenceName="workflowitem_seq", allocationSize = 1) @SequenceGenerator(name="workflowitem_seq", sequenceName="workflowitem_seq", allocationSize = 1)
private int workflowitemId; private Integer workflowitemId;
/** The item this workflow object pertains to */ /** The item this workflow object pertains to */
@@ -78,7 +78,7 @@ public class BasicWorkflowItem implements WorkflowItem
* @return the internal identifier * @return the internal identifier
*/ */
@Override @Override
public int getID() public Integer getID()
{ {
return workflowitemId; return workflowitemId;
} }

View File

@@ -8,6 +8,7 @@
package org.dspace.workflowbasic; package org.dspace.workflowbasic;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import javax.persistence.*; import javax.persistence.*;
@@ -19,7 +20,7 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name = "tasklistitem") @Table(name = "tasklistitem")
public class TaskListItem { public class TaskListItem implements ReloadableEntity<Integer> {
@Id @Id
@Column(name = "tasklist_id", unique = true, nullable = false) @Column(name = "tasklist_id", unique = true, nullable = false)
@@ -64,4 +65,8 @@ public class TaskListItem {
void setWorkflowItem(BasicWorkflowItem workflowItem) { void setWorkflowItem(BasicWorkflowItem workflowItem) {
this.workflowItem = workflowItem; this.workflowItem = workflowItem;
} }
public Integer getID() {
return taskListItemId;
}
} }

View File

@@ -8,6 +8,7 @@
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import javax.persistence.*; import javax.persistence.*;
@@ -22,14 +23,14 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name="cwf_claimtask") @Table(name="cwf_claimtask")
public class ClaimedTask { public class ClaimedTask implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="claimtask_id") @Column(name="claimtask_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_claimtask_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_claimtask_seq")
@SequenceGenerator(name="cwf_claimtask_seq", sequenceName="cwf_claimtask_seq", allocationSize = 1) @SequenceGenerator(name="cwf_claimtask_seq", sequenceName="cwf_claimtask_seq", allocationSize = 1)
private int id; private Integer id;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "workflowitem_id") @JoinColumn(name = "workflowitem_id")
@@ -64,7 +65,7 @@ public class ClaimedTask {
} }
public int getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -7,6 +7,7 @@
*/ */
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.apache.commons.collections.CollectionUtils;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
@@ -15,6 +16,8 @@ import org.dspace.xmlworkflow.storedcomponents.service.ClaimedTaskService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -48,7 +51,16 @@ public class ClaimedTaskServiceImpl implements ClaimedTaskService
@Override @Override
public void update(Context context, ClaimedTask claimedTask) throws SQLException, AuthorizeException { public void update(Context context, ClaimedTask claimedTask) throws SQLException, AuthorizeException {
claimedTaskDAO.save(context, claimedTask); update(context, Collections.singletonList(claimedTask));
}
@Override
public void update(Context context, List<ClaimedTask> claimedTasks) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(claimedTasks)) {
for (ClaimedTask claimedTask : claimedTasks) {
claimedTaskDAO.save(context, claimedTask);
}
}
} }
@Override @Override

View File

@@ -9,6 +9,7 @@ package org.dspace.xmlworkflow.storedcomponents;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
import javax.persistence.*; import javax.persistence.*;
@@ -28,13 +29,13 @@ import java.sql.SQLException;
*/ */
@Entity @Entity
@Table(name="cwf_collectionrole") @Table(name="cwf_collectionrole")
public class CollectionRole { public class CollectionRole implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="collectionrole_id") @Column(name="collectionrole_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_collectionrole_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_collectionrole_seq")
@SequenceGenerator(name="cwf_collectionrole_seq", sequenceName="cwf_collectionrole_seq", allocationSize = 1) @SequenceGenerator(name="cwf_collectionrole_seq", sequenceName="cwf_collectionrole_seq", allocationSize = 1)
private int id; private Integer id;
// @Column(name = "role_id") // @Column(name = "role_id")
// @Lob // @Lob
@@ -83,4 +84,7 @@ public class CollectionRole {
return group; return group;
} }
public Integer getID() {
return id;
}
} }

View File

@@ -8,6 +8,7 @@
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import javax.persistence.*; import javax.persistence.*;
@@ -22,13 +23,13 @@ import javax.persistence.*;
*/ */
@Entity @Entity
@Table(name="cwf_in_progress_user") @Table(name="cwf_in_progress_user")
public class InProgressUser { public class InProgressUser implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="in_progress_user_id") @Column(name="in_progress_user_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_in_progress_user_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_in_progress_user_seq")
@SequenceGenerator(name="cwf_in_progress_user_seq", sequenceName="cwf_in_progress_user_seq", allocationSize = 1) @SequenceGenerator(name="cwf_in_progress_user_seq", sequenceName="cwf_in_progress_user_seq", allocationSize = 1)
private int id; private Integer id;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="user_id") @JoinColumn(name="user_id")
@@ -51,7 +52,7 @@ public class InProgressUser {
} }
public int getId() { public Integer getID() {
return id; return id;
} }

View File

@@ -7,6 +7,7 @@
*/ */
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.apache.commons.collections.CollectionUtils;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
@@ -15,6 +16,7 @@ import org.dspace.xmlworkflow.storedcomponents.service.InProgressUserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@@ -71,7 +73,16 @@ public class InProgressUserServiceImpl implements InProgressUserService {
@Override @Override
public void update(Context context, InProgressUser inProgressUser) throws SQLException, AuthorizeException { public void update(Context context, InProgressUser inProgressUser) throws SQLException, AuthorizeException {
inProgressUserDAO.save(context, inProgressUser); update(context, Collections.singletonList(inProgressUser));
}
@Override
public void update(Context context, List<InProgressUser> inProgressUsers) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(inProgressUsers)) {
for (InProgressUser inProgressUser : inProgressUsers) {
inProgressUserDAO.save(context, inProgressUser);
}
}
} }
@Override @Override

View File

@@ -8,6 +8,7 @@
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
@@ -24,13 +25,13 @@ import java.sql.SQLException;
*/ */
@Entity @Entity
@Table(name="cwf_pooltask") @Table(name="cwf_pooltask")
public class PoolTask { public class PoolTask implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="pooltask_id") @Column(name="pooltask_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_pooltask_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_pooltask_seq")
@SequenceGenerator(name="cwf_pooltask_seq", sequenceName="cwf_pooltask_seq", allocationSize = 1) @SequenceGenerator(name="cwf_pooltask_seq", sequenceName="cwf_pooltask_seq", allocationSize = 1)
private int id; private Integer id;
@OneToOne @OneToOne
@JoinColumn(name = "workflowitem_id") @JoinColumn(name = "workflowitem_id")
@@ -70,6 +71,10 @@ public class PoolTask {
} }
public Integer getID() {
return id;
}
public void setEperson(EPerson eperson){ public void setEperson(EPerson eperson){
this.ePerson = eperson; this.ePerson = eperson;
} }
@@ -117,5 +122,4 @@ public class PoolTask {
public String getActionID(){ public String getActionID(){
return this.actionId; return this.actionId;
} }
} }

View File

@@ -7,6 +7,7 @@
*/ */
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.apache.commons.collections.CollectionUtils;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
@@ -20,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -133,7 +135,16 @@ public class PoolTaskServiceImpl implements PoolTaskService {
@Override @Override
public void update(Context context, PoolTask poolTask) throws SQLException, AuthorizeException { public void update(Context context, PoolTask poolTask) throws SQLException, AuthorizeException {
poolTaskDAO.save(context, poolTask); update(context, Collections.singletonList(poolTask));
}
@Override
public void update(Context context, List<PoolTask> poolTasks) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(poolTasks)) {
for (PoolTask poolTask : poolTasks) {
poolTaskDAO.save(context, poolTask);
}
}
} }
@Override @Override

View File

@@ -8,6 +8,7 @@
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.eperson.Group; import org.dspace.eperson.Group;
@@ -26,13 +27,13 @@ import java.sql.SQLException;
*/ */
@Entity @Entity
@Table(name="cwf_workflowitemrole") @Table(name="cwf_workflowitemrole")
public class WorkflowItemRole { public class WorkflowItemRole implements ReloadableEntity<Integer> {
@Id @Id
@Column(name="workflowitemrole_id") @Column(name="workflowitemrole_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_workflowitemrole_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_workflowitemrole_seq")
@SequenceGenerator(name="cwf_workflowitemrole_seq", sequenceName="cwf_workflowitemrole_seq", allocationSize = 1) @SequenceGenerator(name="cwf_workflowitemrole_seq", sequenceName="cwf_workflowitemrole_seq", allocationSize = 1)
private int id; private Integer id;
// @Column(name = "role_id") // @Column(name = "role_id")
// @Lob // @Lob
@@ -62,6 +63,10 @@ public class WorkflowItemRole {
} }
public Integer getID() {
return id;
}
public void setRoleId(String id){ public void setRoleId(String id){
this.roleId = id; this.roleId = id;
} }
@@ -93,5 +98,4 @@ public class WorkflowItemRole {
public Group getGroup() throws SQLException { public Group getGroup() throws SQLException {
return group; return group;
} }
} }

View File

@@ -7,6 +7,7 @@
*/ */
package org.dspace.xmlworkflow.storedcomponents; package org.dspace.xmlworkflow.storedcomponents;
import org.apache.commons.collections.CollectionUtils;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
@@ -15,6 +16,7 @@ import org.dspace.xmlworkflow.storedcomponents.service.WorkflowItemRoleService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -72,7 +74,16 @@ public class WorkflowItemRoleServiceImpl implements WorkflowItemRoleService {
@Override @Override
public void update(Context context, WorkflowItemRole workflowItemRole) throws SQLException, AuthorizeException { public void update(Context context, WorkflowItemRole workflowItemRole) throws SQLException, AuthorizeException {
workflowItemRoleDAO.save(context, workflowItemRole); update(context, Collections.singletonList(workflowItemRole));
}
@Override
public void update(Context context, List<WorkflowItemRole> workflowItemRoles) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(workflowItemRoles)) {
for (WorkflowItemRole workflowItemRole : workflowItemRoles) {
workflowItemRoleDAO.save(context, workflowItemRole);
}
}
} }
@Override @Override

View File

@@ -10,6 +10,7 @@ package org.dspace.xmlworkflow.storedcomponents;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.Item; import org.dspace.content.Item;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.dspace.eperson.EPerson; import org.dspace.eperson.EPerson;
import org.dspace.workflow.WorkflowItem; import org.dspace.workflow.WorkflowItem;
@@ -26,13 +27,13 @@ import java.sql.SQLException;
*/ */
@Entity @Entity
@Table(name="cwf_workflowitem") @Table(name="cwf_workflowitem")
public class XmlWorkflowItem implements WorkflowItem { public class XmlWorkflowItem implements WorkflowItem, ReloadableEntity<Integer> {
@Id @Id
@Column(name="workflowitem_id") @Column(name="workflowitem_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_workflowitem_seq") @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="cwf_workflowitem_seq")
@SequenceGenerator(name="cwf_workflowitem_seq", sequenceName="cwf_workflowitem_seq", allocationSize = 1) @SequenceGenerator(name="cwf_workflowitem_seq", sequenceName="cwf_workflowitem_seq", allocationSize = 1)
private int id; private Integer id;
@ManyToOne(fetch = FetchType.LAZY) @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "collection_id") @JoinColumn(name = "collection_id")
@@ -67,7 +68,7 @@ public class XmlWorkflowItem implements WorkflowItem {
* @return the internal identifier * @return the internal identifier
*/ */
@Override @Override
public int getID() public Integer getID()
{ {
return id; return id;
} }

View File

@@ -21,8 +21,8 @@ CREATE INDEX metadatafieldregistry_idx_element_qualifier on metadatafieldregistr
CREATE INDEX resourcepolicy_idx_rptype on resourcepolicy(rptype); CREATE INDEX resourcepolicy_idx_rptype on resourcepolicy(rptype);
-- Clean up ALTER TABLE resourcepolicy DROP CONSTRAINT ResourcePolicy_dspace_object_fk;
ALTER TABLE ResourcePolicy ADD CONSTRAINT ResourcePolicy_dspace_object_fk FOREIGN KEY (dspace_object) REFERENCES dspaceobject ON DELETE CASCADE;
-- Duplicates of INDEX metadatavalue_field_object (a composite index can also serve as a 'single field' index) ALTER TABLE metadatavalue DROP CONSTRAINT metadatavalue_dspace_object_id_fk;
DROP INDEX metadatavalue_field; ALTER TABLE metadatavalue ADD CONSTRAINT metadatavalue_dspace_object_id_fk FOREIGN KEY (dspace_object_id) REFERENCES dspaceobject ON DELETE CASCADE;
DROP INDEX metadatavalue_field_fk_idx;

View File

@@ -21,8 +21,16 @@ CREATE INDEX metadatafieldregistry_idx_element_qualifier on metadatafieldregistr
CREATE INDEX resourcepolicy_idx_rptype on resourcepolicy(rptype); CREATE INDEX resourcepolicy_idx_rptype on resourcepolicy(rptype);
-- Clean up ALTER TABLE resourcepolicy
DROP CONSTRAINT resourcepolicy_dspace_object_fkey,
ADD CONSTRAINT resourcepolicy_dspace_object_fkey
FOREIGN KEY (dspace_object)
REFERENCES dspaceobject(uuid)
ON DELETE CASCADE;
-- Duplicates of INDEX metadatavalue_field_object (a composite index can also serve as a 'single field' index) ALTER TABLE metadatavalue
DROP INDEX metadatavalue_field; DROP CONSTRAINT metadatavalue_dspace_object_id_fkey,
DROP INDEX metadatavalue_field_fk_idx; ADD CONSTRAINT metadatavalue_dspace_object_id_fkey
FOREIGN KEY (dspace_object)
REFERENCES dspaceobject(uuid)
ON DELETE CASCADE;

View File

@@ -21,8 +21,22 @@ CREATE INDEX metadatafieldregistry_idx_element_qualifier on metadatafieldregistr
CREATE INDEX resourcepolicy_idx_rptype on resourcepolicy(rptype); CREATE INDEX resourcepolicy_idx_rptype on resourcepolicy(rptype);
ALTER TABLE resourcepolicy
DROP CONSTRAINT resourcepolicy_dspace_object_fkey,
ADD CONSTRAINT resourcepolicy_dspace_object_fkey
FOREIGN KEY (dspace_object)
REFERENCES dspaceobject(uuid)
ON DELETE CASCADE;
ALTER TABLE metadatavalue
DROP CONSTRAINT metadatavalue_dspace_object_id_fkey,
ADD CONSTRAINT metadatavalue_dspace_object_id_fkey
FOREIGN KEY (dspace_object)
REFERENCES dspaceobject(uuid)
ON DELETE CASCADE;
-- Clean up -- Clean up
-- Duplicates of INDEX metadatavalue_field_object (a composite index can also serve as a 'single field' index) -- Duplicate of INDEX metadatavalue_field_object (a composite index can also serve as a 'single field' index)
DROP INDEX metadatavalue_field; -- and metadatavalue_field_fk_idx. This index also does not exist for H2 or Oracle.
DROP INDEX metadatavalue_field_fk_idx; DROP INDEX metadatavalue_field;

View File

@@ -7,10 +7,6 @@
*/ */
package org.dspace; package org.dspace;
import static org.junit.Assert.fail;
import java.sql.SQLException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.factory.AuthorizeServiceFactory; import org.dspace.authorize.factory.AuthorizeServiceFactory;
@@ -26,6 +22,10 @@ import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import java.sql.SQLException;
import static org.junit.Assert.fail;
/** /**
@@ -85,7 +85,8 @@ public class AbstractUnitTest extends AbstractDSpaceTest
catch(SQLException se) catch(SQLException se)
{ {
log.error("Error initializing database", se); log.error("Error initializing database", se);
fail("Error initializing database: " + se.getMessage()); fail("Error initializing database: " + se.getMessage()
+ (se.getCause() == null ? "" : ": " + se.getCause().getMessage()));
} }
// Initialize mock indexer (which does nothing, since Solr isn't running) // Initialize mock indexer (which does nothing, since Solr isn't running)

View File

@@ -7,26 +7,28 @@
*/ */
package org.dspace.content; package org.dspace.content;
import mockit.*; import mockit.NonStrictExpectations;
import org.apache.log4j.Logger;
import org.dspace.AbstractUnitTest;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.*; import org.dspace.content.service.*;
import org.dspace.core.Constants; import org.dspace.core.Constants;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.io.FileInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.dspace.AbstractUnitTest; import static org.hamcrest.CoreMatchers.equalTo;
import org.apache.log4j.Logger; import static org.junit.Assert.*;
import org.junit.*;
import static org.junit.Assert.* ;
import static org.hamcrest.CoreMatchers.*;
import org.junit.rules.ExpectedException;
/** /**
@@ -88,6 +90,7 @@ public class InstallItemTest extends AbstractUnitTest
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();
communityService.delete(context, owningCommunity); communityService.delete(context, owningCommunity);
context.restoreAuthSystemState(); context.restoreAuthSystemState();
context.commit();
} catch (SQLException | AuthorizeException | IOException ex) { } catch (SQLException | AuthorizeException | IOException ex) {
log.error("SQL Error in destroy", ex); log.error("SQL Error in destroy", ex);
fail("SQL Error in destroy: " + ex.getMessage()); fail("SQL Error in destroy: " + ex.getMessage());

View File

@@ -8,18 +8,21 @@
package org.dspace.content; package org.dspace.content;
import mockit.NonStrictExpectations; import mockit.NonStrictExpectations;
import java.sql.SQLException;
import java.util.List;
import org.dspace.AbstractUnitTest;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.AbstractUnitTest;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataFieldService; import org.dspace.content.service.MetadataFieldService;
import org.dspace.content.service.MetadataSchemaService; import org.dspace.content.service.MetadataSchemaService;
import org.junit.*; import org.junit.After;
import static org.junit.Assert.* ; import org.junit.Before;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
/** /**
* Unit Tests for class MetadataFieldTest * Unit Tests for class MetadataFieldTest
@@ -136,7 +139,7 @@ public class MetadataFieldTest extends AbstractUnitTest
@Test @Test
public void testGetFieldID() public void testGetFieldID()
{ {
assertTrue("testGetFieldID 0",mf.getFieldID() >= 0); assertTrue("testGetFieldID 0",mf.getID() >= 0);
} }
/** /**
@@ -221,7 +224,7 @@ public class MetadataFieldTest extends AbstractUnitTest
MetadataField m = metadataFieldService.create(context, dcSchema, elem, qual, null); MetadataField m = metadataFieldService.create(context, dcSchema, elem, qual, null);
MetadataField found = metadataFieldService.findByElement(context, dcSchema, elem, qual); MetadataField found = metadataFieldService.findByElement(context, dcSchema, elem, qual);
assertThat("testCreateAuth 0",found.getFieldID(), equalTo(m.getFieldID())); assertThat("testCreateAuth 0",found.getID(), equalTo(m.getID()));
} }
/** /**
@@ -268,7 +271,7 @@ public class MetadataFieldTest extends AbstractUnitTest
{ {
MetadataField found = metadataFieldService.findByElement(context, MetadataSchema.DC_SCHEMA, element, qualifier); MetadataField found = metadataFieldService.findByElement(context, MetadataSchema.DC_SCHEMA, element, qualifier);
assertThat("testFindByElement 0",found, notNullValue()); assertThat("testFindByElement 0",found, notNullValue());
assertThat("testFindByElement 1",found.getFieldID(), equalTo(mf.getFieldID())); assertThat("testFindByElement 1",found.getID(), equalTo(mf.getID()));
assertThat("testFindByElement 2",found.getElement(), equalTo(mf.getElement())); assertThat("testFindByElement 2",found.getElement(), equalTo(mf.getElement()));
assertThat("testFindByElement 3",found.getQualifier(), equalTo(mf.getQualifier())); assertThat("testFindByElement 3",found.getQualifier(), equalTo(mf.getQualifier()));
} }
@@ -334,7 +337,7 @@ public class MetadataFieldTest extends AbstractUnitTest
metadataFieldService.update(context, m); metadataFieldService.update(context, m);
MetadataField found = metadataFieldService.findByElement(context, MetadataSchema.DC_SCHEMA, elem, qual); MetadataField found = metadataFieldService.findByElement(context, MetadataSchema.DC_SCHEMA, elem, qual);
assertThat("testUpdateAuth 0",found.getFieldID(), equalTo(m.getFieldID())); assertThat("testUpdateAuth 0",found.getID(), equalTo(m.getID()));
} }
/** /**
@@ -426,11 +429,11 @@ public class MetadataFieldTest extends AbstractUnitTest
@Test @Test
public void testFind() throws Exception public void testFind() throws Exception
{ {
int id = mf.getFieldID(); int id = mf.getID();
MetadataField found = metadataFieldService.find(context, id); MetadataField found = metadataFieldService.find(context, id);
assertThat("testFind 0",found, notNullValue()); assertThat("testFind 0",found, notNullValue());
assertThat("testFind 1",found.getFieldID(), equalTo(mf.getFieldID())); assertThat("testFind 1",found.getID(), equalTo(mf.getID()));
} }
} }

View File

@@ -7,18 +7,20 @@
*/ */
package org.dspace.content; package org.dspace.content;
import org.dspace.authorize.AuthorizeException;
import mockit.NonStrictExpectations; import mockit.NonStrictExpectations;
import org.apache.log4j.Logger;
import org.dspace.AbstractUnitTest;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataSchemaService;
import org.junit.Before;
import org.junit.Test;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.dspace.AbstractUnitTest;
import org.apache.log4j.Logger;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataSchemaService;
import org.junit.*;
import static org.junit.Assert.* ;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
/** /**
* Unit Tests for class MetadataSchema * Unit Tests for class MetadataSchema
@@ -120,7 +122,7 @@ public class MetadataSchemaTest extends AbstractUnitTest
@Test @Test
public void testGetSchemaID() throws SQLException public void testGetSchemaID() throws SQLException
{ {
assertThat("testGetSchemaID 0",ms.getSchemaID(), equalTo(metadataSchemaService.find(context, MetadataSchema.DC_SCHEMA).getSchemaID())); assertThat("testGetSchemaID 0",ms.getID(), equalTo(metadataSchemaService.find(context, MetadataSchema.DC_SCHEMA).getID()));
} }
/** /**
@@ -188,7 +190,7 @@ public class MetadataSchemaTest extends AbstractUnitTest
log.info(">>"+ms.getNamespace()+" "+ms.getName()); log.info(">>"+ms.getNamespace()+" "+ms.getName());
MetadataSchema found = metadataSchemaService.findByNamespace(context, ms.getNamespace()); MetadataSchema found = metadataSchemaService.findByNamespace(context, ms.getNamespace());
assertThat("testFindByNamespace 0",found, notNullValue()); assertThat("testFindByNamespace 0",found, notNullValue());
assertThat("testFindByNamespace 1",found.getSchemaID(), equalTo(ms.getSchemaID())); assertThat("testFindByNamespace 1",found.getID(), equalTo(ms.getID()));
} }
/** /**
@@ -210,7 +212,7 @@ public class MetadataSchemaTest extends AbstractUnitTest
metadataSchemaService.update(context, metadataSchema); metadataSchemaService.update(context, metadataSchema);
MetadataSchema found = metadataSchemaService.findByNamespace(context, namespace); MetadataSchema found = metadataSchemaService.findByNamespace(context, namespace);
assertThat("testUpdateAuth 0",found.getSchemaID(), equalTo(metadataSchema.getSchemaID())); assertThat("testUpdateAuth 0",found.getID(), equalTo(metadataSchema.getID()));
} }
/** /**
@@ -321,9 +323,9 @@ public class MetadataSchemaTest extends AbstractUnitTest
@Test @Test
public void testFind_Context_int() throws Exception public void testFind_Context_int() throws Exception
{ {
MetadataSchema found = metadataSchemaService.find(context, ms.getSchemaID()); MetadataSchema found = metadataSchemaService.find(context, ms.getID());
assertThat("testFind_Context_int 0",found, notNullValue()); assertThat("testFind_Context_int 0",found, notNullValue());
assertThat("testFind_Context_int 1",found.getSchemaID(), equalTo(ms.getSchemaID())); assertThat("testFind_Context_int 1",found.getID(), equalTo(ms.getID()));
assertThat("testFind_Context_int 2",found.getName(), equalTo(ms.getName())); assertThat("testFind_Context_int 2",found.getName(), equalTo(ms.getName()));
assertThat("testFind_Context_int 3",found.getNamespace(), equalTo(ms.getNamespace())); assertThat("testFind_Context_int 3",found.getNamespace(), equalTo(ms.getNamespace()));
} }
@@ -337,7 +339,7 @@ public class MetadataSchemaTest extends AbstractUnitTest
String shortName = ms.getName(); String shortName = ms.getName();
MetadataSchema found = metadataSchemaService.find(context, shortName); MetadataSchema found = metadataSchemaService.find(context, shortName);
assertThat("testFind_Context_String 0",found, notNullValue()); assertThat("testFind_Context_String 0",found, notNullValue());
assertThat("testFind_Context_String 1",found.getSchemaID(), equalTo(ms.getSchemaID())); assertThat("testFind_Context_String 1",found.getID(), equalTo(ms.getID()));
assertThat("testFind_Context_String 2",found.getName(), equalTo(ms.getName())); assertThat("testFind_Context_String 2",found.getName(), equalTo(ms.getName()));
assertThat("testFind_Context_String 3",found.getNamespace(), equalTo(ms.getNamespace())); assertThat("testFind_Context_String 3",found.getNamespace(), equalTo(ms.getNamespace()));

View File

@@ -7,18 +7,21 @@
*/ */
package org.dspace.content; package org.dspace.content;
import org.apache.log4j.Logger;
import org.dspace.AbstractUnitTest;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException; import java.io.IOException;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import org.dspace.AbstractUnitTest;
import org.apache.log4j.Logger;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.*;
import org.junit.*;
import static org.junit.Assert.* ;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
/** /**
* Unit Tests for class MetadataValue * Unit Tests for class MetadataValue
@@ -132,9 +135,9 @@ public class MetadataValueTest extends AbstractUnitTest
public void testGetFieldId() public void testGetFieldId()
{ {
MetadataValue instance = new MetadataValue(); MetadataValue instance = new MetadataValue();
assertThat("testGetFieldId 0", instance.getValueId(), equalTo(0)); assertThat("testGetFieldId 0", instance.getID(), equalTo(0));
assertThat("testGetFieldId 1", mv.getMetadataField().getFieldID(), equalTo(mf.getFieldID())); assertThat("testGetFieldId 1", mv.getMetadataField().getID(), equalTo(mf.getID()));
} }
/** /**
@@ -192,7 +195,7 @@ public class MetadataValueTest extends AbstractUnitTest
@Test @Test
public void testGetValueId() public void testGetValueId()
{ {
assertThat("testGetValueId 0",mv.getValueId(), notNullValue()); assertThat("testGetValueId 0",mv.getID(), notNullValue());
} }
/** /**
@@ -271,10 +274,10 @@ public class MetadataValueTest extends AbstractUnitTest
public void testFind() throws Exception public void testFind() throws Exception
{ {
metadataValueService.create(context, it, mf); metadataValueService.create(context, it, mf);
int id = mv.getValueId(); int id = mv.getID();
MetadataValue found = metadataValueService.find(context, id); MetadataValue found = metadataValueService.find(context, id);
assertThat("testFind 0",found, notNullValue()); assertThat("testFind 0",found, notNullValue());
assertThat("testFind 1",found.getValueId(), equalTo(id)); assertThat("testFind 1",found.getID(), equalTo(id));
} }
/** /**

View File

@@ -58,4 +58,5 @@ log4j.logger.org.hibernate=INFO
# For detailed Hibernate logging in Unit Tests, you can enable the following # For detailed Hibernate logging in Unit Tests, you can enable the following
# setting which logs all JDBC bind parameter runtime arguments. # setting which logs all JDBC bind parameter runtime arguments.
# This will drastically increase the size of Unit Test logs though. # This will drastically increase the size of Unit Test logs though.
#log4j.logger.org.hibernate.type=TRACE log4j.logger.org.hibernate.SQL=DEBUG, A1
log4j.logger.org.hibernate.type=TRACE, A1

View File

@@ -7,15 +7,6 @@
*/ */
package org.dspace.app.webui.servlet; package org.dspace.app.webui.servlet;
import com.hp.hpl.jena.sparql.vocabulary.DOAP;
import java.io.IOException;
import java.sql.SQLException;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.app.webui.util.JSPManager; import org.dspace.app.webui.util.JSPManager;
import org.dspace.app.webui.util.UIUtil; import org.dspace.app.webui.util.UIUtil;
@@ -33,6 +24,13 @@ import org.dspace.versioning.factory.VersionServiceFactory;
import org.dspace.versioning.service.VersionHistoryService; import org.dspace.versioning.service.VersionHistoryService;
import org.dspace.versioning.service.VersioningService; import org.dspace.versioning.service.VersioningService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.UUID;
/** /**
* Servlet for handling the operations in the version history page * Servlet for handling the operations in the version history page
* *
@@ -98,7 +96,7 @@ public class VersionHistoryServlet extends DSpaceServlet
Version version = versionHistoryService.getVersion(context, history, item); Version version = versionHistoryService.getVersion(context, history, item);
if (version != null) if (version != null)
{ {
versionID = String.valueOf(version.getId()); versionID = String.valueOf(version.getID());
} }
} }
String submit = UIUtil.getSubmitButton(request, "submit"); String submit = UIUtil.getSubmitButton(request, "submit");

View File

@@ -7,27 +7,6 @@
*/ */
package org.dspace.app.webui.servlet.admin; package org.dspace.app.webui.servlet.admin;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.dspace.app.util.AuthorizeUtil; import org.dspace.app.util.AuthorizeUtil;
@@ -37,23 +16,11 @@ import org.dspace.app.webui.util.FileUploadRequest;
import org.dspace.app.webui.util.JSPManager; import org.dspace.app.webui.util.JSPManager;
import org.dspace.app.webui.util.UIUtil; import org.dspace.app.webui.util.UIUtil;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Bitstream; import org.dspace.content.*;
import org.dspace.content.BitstreamFormat;
import org.dspace.content.Bundle;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.content.MetadataField;
import org.dspace.content.MetadataSchema;
import org.dspace.content.authority.Choices; import org.dspace.content.authority.Choices;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.BitstreamFormatService; import org.dspace.content.service.*;
import org.dspace.content.service.BitstreamService;
import org.dspace.content.service.BundleService;
import org.dspace.content.service.CollectionService;
import org.dspace.content.service.ItemService;
import org.dspace.content.service.MetadataFieldService;
import org.dspace.content.service.MetadataSchemaService;
import org.dspace.core.Constants; import org.dspace.core.Constants;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.core.LogManager; import org.dspace.core.LogManager;
@@ -62,6 +29,13 @@ import org.dspace.handle.service.HandleService;
import org.dspace.license.factory.LicenseServiceFactory; import org.dspace.license.factory.LicenseServiceFactory;
import org.dspace.license.service.CreativeCommonsService; import org.dspace.license.service.CreativeCommonsService;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
/** /**
* Servlet for editing and deleting (expunging) items * Servlet for editing and deleting (expunging) items
* *
@@ -479,7 +453,7 @@ public class EditItemServlet extends DSpaceServlet
{ {
String displayName = ""; String displayName = "";
displayName = schemaName + "." + f.getElement() + (f.getQualifier() == null ? "" : "." + f.getQualifier()); displayName = schemaName + "." + f.getElement() + (f.getQualifier() == null ? "" : "." + f.getQualifier());
metadataFields.put(f.getFieldID(), displayName); metadataFields.put(f.getID(), displayName);
} }
} }

View File

@@ -188,7 +188,7 @@
<% if(hasVersionHistory) { %> <% if(hasVersionHistory) { %>
<form method="get" action="<%= request.getContextPath() %>/tools/history"> <form method="get" action="<%= request.getContextPath() %>/tools/history">
<input type="hidden" name="itemID" value="<%= item.getID() %>" /> <input type="hidden" name="itemID" value="<%= item.getID() %>" />
<input type="hidden" name="versionID" value="<%= versionHistoryService.getVersion(context, history, item)!=null?versionHistoryService.getVersion(context, history, item).getId():null %>" /> <input type="hidden" name="versionID" value="<%= versionHistoryService.getVersion(context, history, item)!=null?versionHistoryService.getVersion(context, history, item).getID():null %>" />
<input class="btn btn-info col-md-12" type="submit" name="submit" value="<fmt:message key="jsp.general.version.history.button"/>" /> <input class="btn btn-info col-md-12" type="submit" name="submit" value="<fmt:message key="jsp.general.version.history.button"/>" />
</form> </form>
<% } %> <% } %>

View File

@@ -58,7 +58,7 @@
<%-- <P>This will result in an error if any items have values for this metadata field.</P> --%> <%-- <P>This will result in an error if any items have values for this metadata field.</P> --%>
<p class="alert alert-warning"><fmt:message key="jsp.dspace-admin.confirm-delete-mdfield.warning"/></p> <p class="alert alert-warning"><fmt:message key="jsp.dspace-admin.confirm-delete-mdfield.warning"/></p>
<form method="post" action=""> <form method="post" action="">
<input type="hidden" name="dc_type_id" value="<%= type.getFieldID() %>"> <input type="hidden" name="dc_type_id" value="<%= type.getID() %>">
<div class="btn-group"> <div class="btn-group">
<%-- <input type="submit" name="submit_confirm_delete" value="Delete"> --%> <%-- <input type="submit" name="submit_confirm_delete" value="Delete"> --%>
<input class="btn btn-danger" type="submit" name="submit_confirm_delete" value="<fmt:message key="jsp.dspace-admin.general.delete"/>" /> <input class="btn btn-danger" type="submit" name="submit_confirm_delete" value="<fmt:message key="jsp.dspace-admin.general.delete"/>" />

View File

@@ -48,7 +48,7 @@
<p class="alert alert-warning"><fmt:message key="jsp.dspace-admin.confirm-delete-mdschema.warning"/></p> <p class="alert alert-warning"><fmt:message key="jsp.dspace-admin.confirm-delete-mdschema.warning"/></p>
<form method="post"> <form method="post">
<input type="hidden" name="dc_schema_id" value="<%= schema.getSchemaID() %>"> <input type="hidden" name="dc_schema_id" value="<%= schema.getID() %>">
<div class="btn-group"> <div class="btn-group">
<%-- <input type="submit" name="submit_confirm_delete" value="Delete"> --%> <%-- <input type="submit" name="submit_confirm_delete" value="Delete"> --%>
<input class="btn btn-danger" type="submit" name="submit_confirm_delete" value="<fmt:message key="jsp.dspace-admin.general.delete"/>"> <input class="btn btn-danger" type="submit" name="submit_confirm_delete" value="<fmt:message key="jsp.dspace-admin.general.delete"/>">

View File

@@ -92,7 +92,7 @@ if (error!=null) {
<tr> <tr>
<td> <td>
<form class="form-inline" method="post" action=""> <form class="form-inline" method="post" action="">
<span class="col-md-1"><%= types.get(i).getFieldID() %></span> <span class="col-md-1"><%= types.get(i).getID() %></span>
<div class="form-group"> <div class="form-group">
<label class="sr-only" for="element"><fmt:message key="jsp.dspace-admin.list-metadata-fields.element"/></label> <label class="sr-only" for="element"><fmt:message key="jsp.dspace-admin.list-metadata-fields.element"/></label>
@@ -109,7 +109,7 @@ if (error!=null) {
<div class="btn-group pull-right"> <div class="btn-group pull-right">
<input type="hidden" name="dc_type_id" value="<%= types.get(i).getFieldID() %>"/> <input type="hidden" name="dc_type_id" value="<%= types.get(i).getID() %>"/>
<input class="btn btn-primary" type="submit" name="submit_update" value="<fmt:message key="jsp.dspace-admin.general.update"/>"/> <input class="btn btn-primary" type="submit" name="submit_update" value="<fmt:message key="jsp.dspace-admin.general.update"/>"/>
<input class="btn btn-danger" type="submit" name="submit_delete" value="<fmt:message key="jsp.dspace-admin.general.delete-w-confirm"/>"/> <input class="btn btn-danger" type="submit" name="submit_delete" value="<fmt:message key="jsp.dspace-admin.general.delete-w-confirm"/>"/>
@@ -125,7 +125,7 @@ if (error!=null) {
</table> </table>
<form method="post" action=""> <form method="post" action="">
<input type="hidden" name="dc_schema_id" value="<%= schema.getSchemaID() %>"/> <input type="hidden" name="dc_schema_id" value="<%= schema.getID() %>"/>
<h2><fmt:message key="jsp.dspace-admin.list-metadata-fields.addfield"/></h2> <h2><fmt:message key="jsp.dspace-admin.list-metadata-fields.addfield"/></h2>
<p class="alert alert-info"><fmt:message key="jsp.dspace-admin.list-metadata-fields.addfieldnote"/></p> <p class="alert alert-info"><fmt:message key="jsp.dspace-admin.list-metadata-fields.addfieldnote"/></p>
@@ -157,7 +157,7 @@ if (error!=null) {
for (int i = 0; i < types.size(); i++) for (int i = 0; i < types.size(); i++)
{ {
String qualifier = (types.get(i).getQualifier() == null ? "" : "."+types.get(i).getQualifier()); String qualifier = (types.get(i).getQualifier() == null ? "" : "."+types.get(i).getQualifier());
%> <option value="<%= types.get(i).getFieldID() %>"><%= types.get(i).getElement()+qualifier %></option> %> <option value="<%= types.get(i).getID() %>"><%= types.get(i).getElement()+qualifier %></option>
<% } <% }
%> %>
</select> </select>
@@ -166,9 +166,9 @@ if (error!=null) {
<% <%
for (int i = 0; i < schemas.size(); i++) for (int i = 0; i < schemas.size(); i++)
{ {
if (schemas.get(i).getSchemaID() != schema.getSchemaID()) if (schemas.get(i).getID() != schema.getID())
{ {
%> <option value="<%= schemas.get(i).getSchemaID() %>"><%= schemas.get(i).getNamespace() %></option> %> <option value="<%= schemas.get(i).getID() %>"><%= schemas.get(i).getNamespace() %></option>
<% } <% }
} }
%> %>

View File

@@ -70,18 +70,18 @@ if (error!=null) {
{ {
%> %>
<tr> <tr>
<td class="<%= row %>RowOddCol"><%= schemas.get(i).getSchemaID() %></td> <td class="<%= row %>RowOddCol"><%= schemas.get(i).getID() %></td>
<td class="<%= row %>RowEvenCol"> <td class="<%= row %>RowEvenCol">
<a href="<%=request.getContextPath()%>/dspace-admin/metadata-field-registry?dc_schema_id=<%= schemas.get(i).getSchemaID() %>"><%= schemas.get(i).getNamespace() %></a> <a href="<%=request.getContextPath()%>/dspace-admin/metadata-field-registry?dc_schema_id=<%= schemas.get(i).getID() %>"><%= schemas.get(i).getNamespace() %></a>
</td> </td>
<td class="<%= row %>RowOddCol"> <td class="<%= row %>RowOddCol">
<%= schemas.get(i).getName() %> <%= schemas.get(i).getName() %>
</td> </td>
<td class="<%= row %>RowOddCol"> <td class="<%= row %>RowOddCol">
<% if ( schemas.get(i).getSchemaID() != 1 ) { %> <% if ( schemas.get(i).getID() != 1 ) { %>
<form method="post" action=""> <form method="post" action="">
<input type="hidden" name="dc_schema_id" value="<%= schemas.get(i).getSchemaID() %>"/> <input type="hidden" name="dc_schema_id" value="<%= schemas.get(i).getID() %>"/>
<input class="btn btn-primary" type="button" name="submit_update" value="<fmt:message key="jsp.dspace-admin.general.update"/>" onclick="javascript:document.schema.namespace.value='<%= schemas.get(i).getNamespace() %>';document.schema.short_name.value='<%= schemas.get(i).getName() %>';document.schema.dc_schema_id.value='<%= schemas.get(i).getSchemaID() %>';return null;"/> <input class="btn btn-primary" type="button" name="submit_update" value="<fmt:message key="jsp.dspace-admin.general.update"/>" onclick="javascript:document.schema.namespace.value='<%= schemas.get(i).getNamespace() %>';document.schema.short_name.value='<%= schemas.get(i).getName() %>';document.schema.dc_schema_id.value='<%= schemas.get(i).getID() %>';return null;"/>
<input class="btn btn-danger" type="submit" name="submit_delete" value="<fmt:message key="jsp.dspace-admin.general.delete-w-confirm"/>"/> <input class="btn btn-danger" type="submit" name="submit_delete" value="<fmt:message key="jsp.dspace-admin.general.delete-w-confirm"/>"/>
</form> </form>
<% } %> <% } %>

View File

@@ -83,7 +83,7 @@
<% <%
for (int dc = 0; dc < dcTypes.size(); dc++) for (int dc = 0; dc < dcTypes.size(); dc++)
{ %> { %>
<option value="<%= dcTypes.get(dc).getFieldID() %>"><%= dcTypes.get(dc).getQualifier() == null ? <option value="<%= dcTypes.get(dc).getID() %>"><%= dcTypes.get(dc).getQualifier() == null ?
dcTypes.get(dc).getMetadataSchema().getName() + "." + dcTypes.get(dc).getElement() : dcTypes.get(dc).getMetadataSchema().getName() + "." + dcTypes.get(dc).getElement() + "." + dcTypes.get(dc).getQualifier() %></option> dcTypes.get(dc).getMetadataSchema().getName() + "." + dcTypes.get(dc).getElement() : dcTypes.get(dc).getMetadataSchema().getName() + "." + dcTypes.get(dc).getElement() + "." + dcTypes.get(dc).getQualifier() %></option>
<% } %> <% } %>
</select></td> </select></td>

View File

@@ -486,7 +486,7 @@
<select class="form-control" name="addfield_dctype"> <select class="form-control" name="addfield_dctype">
<% for (int i = 0; i < dcTypes.size(); i++) <% for (int i = 0; i < dcTypes.size(); i++)
{ {
Integer fieldID = new Integer(dcTypes.get(i).getFieldID()); Integer fieldID = new Integer(dcTypes.get(i).getID());
String displayName = (String)metadataFields.get(fieldID); String displayName = (String)metadataFields.get(fieldID);
%> %>
<option value="<%= fieldID.intValue() %>"><%= displayName %></option> <option value="<%= fieldID.intValue() %>"><%= displayName %></option>

View File

@@ -113,14 +113,14 @@ var j = jQuery.noConflict();
%> %>
<tr> <tr>
<td headers="t0"><input type="checkbox" class="remove" name="remove" value="<%=versRow.getId()%>"/></td> <td headers="t0"><input type="checkbox" class="remove" name="remove" value="<%=versRow.getID()%>"/></td>
<td headers="t1" class="oddRowEvenCol"><%= versRow.getVersionNumber() %></td> <td headers="t1" class="oddRowEvenCol"><%= versRow.getVersionNumber() %></td>
<td headers="t2" class="oddRowOddCol"><a href="<%= url %>"><%= identifier %></a><%= item.getID()==versRow.getItem().getID()?"<span class=\"glyphicon glyphicon-asterisk\"></span>":""%></td> <td headers="t2" class="oddRowOddCol"><a href="<%= url %>"><%= identifier %></a><%= item.getID()==versRow.getItem().getID()?"<span class=\"glyphicon glyphicon-asterisk\"></span>":""%></td>
<% if (show_submitter) { %> <% if (show_submitter) { %>
<td headers="t3" class="oddRowEvenCol"><a href="mailto:<%= versRowPerson.getEmail() %>"><%=versRowPerson.getFullName() %></a></td> <td headers="t3" class="oddRowEvenCol"><a href="mailto:<%= versRowPerson.getEmail() %>"><%=versRowPerson.getFullName() %></a></td>
<% } %> <% } %>
<td headers="t4" class="oddRowOddCol"><%= versRow.getVersionDate() %></td> <td headers="t4" class="oddRowOddCol"><%= versRow.getVersionDate() %></td>
<td headers="t5" class="oddRowEvenCol"><%= versRow.getSummary() %><a class="btn btn-default pull-right" href="<%= request.getContextPath() %>/tools/version?itemID=<%= versRow.getItem().getID()%>&versionID=<%= versRow.getId() %>&submit_update_version"><span class="glyphicon glyphicon-pencil"></span>&nbsp;<fmt:message key="jsp.version.history.update"/></a></td> <td headers="t5" class="oddRowEvenCol"><%= versRow.getSummary() %><a class="btn btn-default pull-right" href="<%= request.getContextPath() %>/tools/version?itemID=<%= versRow.getItem().getID()%>&versionID=<%= versRow.getID() %>&submit_update_version"><span class="glyphicon glyphicon-pencil"></span>&nbsp;<fmt:message key="jsp.version.history.update"/></a></td>
</tr> </tr>
<% } %> <% } %>
</table> </table>

View File

@@ -7,15 +7,15 @@
*/ */
package org.dspace.xoai.services.impl; package org.dspace.xoai.services.impl;
import org.dspace.content.MetadataField;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataFieldService;
import org.dspace.core.Context; import org.dspace.core.Context;
import org.dspace.xoai.exceptions.InvalidMetadataFieldException; import org.dspace.xoai.exceptions.InvalidMetadataFieldException;
import org.dspace.xoai.services.api.FieldResolver; import org.dspace.xoai.services.api.FieldResolver;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.dspace.content.MetadataField;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataFieldService;
public class DSpaceFieldResolver implements FieldResolver { public class DSpaceFieldResolver implements FieldResolver {
private MetadataFieldCache metadataFieldCache = null; private MetadataFieldCache metadataFieldCache = null;
@@ -41,7 +41,7 @@ public class DSpaceFieldResolver implements FieldResolver {
MetadataField metadataField = metadataFieldService.findByElement(context, schema, element, qualifier); MetadataField metadataField = metadataFieldService.findByElement(context, schema, element, qualifier);
if (null != metadataField) if (null != metadataField)
{ {
metadataFieldCache.add(field, metadataField.getFieldID()); metadataFieldCache.add(field, metadataField.getID());
} }
else else
throw new InvalidMetadataFieldException(); throw new InvalidMetadataFieldException();

View File

@@ -55,7 +55,7 @@ public class MetadataField {
} }
this.setName(sb.toString()); this.setName(sb.toString());
this.setFieldId(field.getFieldID()); this.setFieldId(field.getID());
this.setElement(field.getElement()); this.setElement(field.getElement());
this.setQualifier(field.getQualifier()); this.setQualifier(field.getQualifier());
this.setDescription(field.getScopeNote()); this.setDescription(field.getScopeNote());

View File

@@ -48,7 +48,7 @@ public class MetadataSchema {
if(expand != null) { if(expand != null) {
expandFields = Arrays.asList(expand.split(",")); expandFields = Arrays.asList(expand.split(","));
} }
this.setSchemaID(schema.getSchemaID()); this.setSchemaID(schema.getID());
this.setPrefix(schema.getName()); this.setPrefix(schema.getName());
this.setNamespace(schema.getNamespace()); this.setNamespace(schema.getNamespace());
if (expandFields.contains("fields") || expandFields.contains("all")) { if (expandFields.contains("fields") || expandFields.contains("all")) {

View File

@@ -338,6 +338,9 @@ public class FlowContainerUtils
*/ */
public static FlowResult processReimportCollection(Context context, UUID collectionID, Request request) throws SQLException, IOException, AuthorizeException, CrosswalkException, ParserConfigurationException, SAXException, TransformerException, BrowseException public static FlowResult processReimportCollection(Context context, UUID collectionID, Request request) throws SQLException, IOException, AuthorizeException, CrosswalkException, ParserConfigurationException, SAXException, TransformerException, BrowseException
{ {
boolean originalMode = context.isBatchModeEnabled();
context.enableBatchMode(true);
Collection collection = collectionService.find(context, collectionID); Collection collection = collectionService.find(context, collectionID);
HarvestedCollection hc = harvestedCollectionService.find(context, collection); HarvestedCollection hc = harvestedCollectionService.find(context, collection);
@@ -357,6 +360,9 @@ public class FlowContainerUtils
collectionService.update(context, collection); collectionService.update(context, collection);
// update the context? // update the context?
//context.dispatchEvent() // not sure if this is required yet.ts(); //context.dispatchEvent() // not sure if this is required yet.ts();
context.enableBatchMode(originalMode);
return processRunCollectionHarvest(context, collectionID, request); return processRunCollectionHarvest(context, collectionID, request);
} }

View File

@@ -7,13 +7,6 @@
*/ */
package org.dspace.app.xmlui.aspect.administrative; package org.dspace.app.xmlui.aspect.administrative;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Request;
import org.dspace.app.xmlui.utils.RequestUtils; import org.dspace.app.xmlui.utils.RequestUtils;
import org.dspace.app.xmlui.utils.UIException; import org.dspace.app.xmlui.utils.UIException;
@@ -30,6 +23,13 @@ import org.dspace.content.service.MetadataSchemaService;
import org.dspace.core.Constants; import org.dspace.core.Constants;
import org.dspace.core.Context; import org.dspace.core.Context;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/** /**
* *
*/ */
@@ -112,7 +112,7 @@ public class FlowRegistryUtils
result.setContinue(true); result.setContinue(true);
result.setOutcome(true); result.setOutcome(true);
result.setMessage(T_add_metadata_schema_success_notice); result.setMessage(T_add_metadata_schema_success_notice);
result.setParameter("schemaID", schema.getSchemaID()); result.setParameter("schemaID", schema.getID());
} }
return result; return result;
@@ -213,7 +213,7 @@ public class FlowRegistryUtils
result.setContinue(true); result.setContinue(true);
result.setOutcome(true); result.setOutcome(true);
result.setMessage(T_add_metadata_field_success_notice); result.setMessage(T_add_metadata_field_success_notice);
result.setParameter("fieldID", field.getFieldID()); result.setParameter("fieldID", field.getID());
} }
catch (NonUniqueMetadataException nume) catch (NonUniqueMetadataException nume)
{ {
@@ -269,7 +269,7 @@ public class FlowRegistryUtils
// Check to make sure the field is unique, sometimes the NonUniqueMetadataException is not thrown. // Check to make sure the field is unique, sometimes the NonUniqueMetadataException is not thrown.
MetadataField possibleDuplicate = metadataFieldService.findByElement(context, metadataSchemaService.find(context, schemaID), element, qualifier); MetadataField possibleDuplicate = metadataFieldService.findByElement(context, metadataSchemaService.find(context, schemaID), element, qualifier);
if (possibleDuplicate != null && possibleDuplicate.getFieldID() != fieldID) if (possibleDuplicate != null && possibleDuplicate.getID() != fieldID)
{ {
result.addError("duplicate_field"); result.addError("duplicate_field");
} }

View File

@@ -7,35 +7,15 @@
*/ */
package org.dspace.app.xmlui.aspect.administrative.item; package org.dspace.app.xmlui.aspect.administrative.item;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collections;
import java.util.Comparator;
import java.util.UUID;
import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Request;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.*;
import org.dspace.app.xmlui.wing.element.Button;
import org.dspace.app.xmlui.wing.element.Cell;
import org.dspace.app.xmlui.wing.element.CheckBox;
import org.dspace.app.xmlui.wing.element.Composite;
import org.dspace.app.xmlui.wing.element.Division;
import org.dspace.app.xmlui.wing.element.List;
import org.dspace.app.xmlui.wing.element.PageMeta;
import org.dspace.app.xmlui.wing.element.Para;
import org.dspace.app.xmlui.wing.element.Params;
import org.dspace.app.xmlui.wing.element.Row;
import org.dspace.app.xmlui.wing.element.Select;
import org.dspace.app.xmlui.wing.element.Table;
import org.dspace.app.xmlui.wing.element.Text;
import org.dspace.app.xmlui.wing.element.TextArea;
import org.dspace.app.xmlui.wing.element.Value;
import org.dspace.content.*; import org.dspace.content.*;
import org.dspace.content.Item;
import org.dspace.content.authority.Choices; import org.dspace.content.authority.Choices;
import org.dspace.content.authority.factory.ContentAuthorityServiceFactory; import org.dspace.content.authority.factory.ContentAuthorityServiceFactory;
import org.dspace.content.authority.service.ChoiceAuthorityService; import org.dspace.content.authority.service.ChoiceAuthorityService;
@@ -45,6 +25,12 @@ import org.dspace.content.service.CollectionService;
import org.dspace.content.service.ItemService; import org.dspace.content.service.ItemService;
import org.dspace.content.service.MetadataFieldService; import org.dspace.content.service.MetadataFieldService;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collections;
import java.util.Comparator;
import java.util.UUID;
/** /**
* Display a list of all metadata available for this item and allow the user to * Display a list of all metadata available for this item and allow the user to
* add, remove, or update it. * add, remove, or update it.
@@ -176,7 +162,7 @@ public class EditItemMetadataForm extends AbstractDSpaceTransformer {
java.util.List<MetadataField> fields = metadataFieldService.findAll(context); java.util.List<MetadataField> fields = metadataFieldService.findAll(context);
for (MetadataField field : fields) for (MetadataField field : fields)
{ {
int fieldID = field.getFieldID(); int fieldID = field.getID();
MetadataSchema schema = field.getMetadataSchema(); MetadataSchema schema = field.getMetadataSchema();
String name = schema.getName() +"."+field.getElement(); String name = schema.getName() +"."+field.getElement();
if (field.getQualifier() != null) if (field.getQualifier() != null)

View File

@@ -7,24 +7,18 @@
*/ */
package org.dspace.app.xmlui.aspect.administrative.registries; package org.dspace.app.xmlui.aspect.administrative.registries;
import java.sql.SQLException;
import java.util.ArrayList;
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.*;
import org.dspace.app.xmlui.wing.element.Division;
import org.dspace.app.xmlui.wing.element.PageMeta;
import org.dspace.app.xmlui.wing.element.Para;
import org.dspace.app.xmlui.wing.element.Row;
import org.dspace.app.xmlui.wing.element.Table;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.MetadataField; import org.dspace.content.MetadataField;
import org.dspace.content.MetadataSchema; import org.dspace.content.MetadataSchema;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataFieldService; import org.dspace.content.service.MetadataFieldService;
import org.dspace.content.service.MetadataSchemaService;
import java.sql.SQLException;
import java.util.ArrayList;
/** /**
* Prompt the user with a list of to-be-deleted metadata fields and * Prompt the user with a list of to-be-deleted metadata fields and
@@ -108,7 +102,7 @@ public class DeleteMetadataFieldsConfirm extends AbstractDSpaceTransformer
continue; continue;
} }
String fieldID = String.valueOf(field.getFieldID()); String fieldID = String.valueOf(field.getID());
String fieldEelement = field.getElement(); String fieldEelement = field.getElement();
String fieldQualifier = field.getQualifier(); String fieldQualifier = field.getQualifier();

View File

@@ -7,23 +7,18 @@
*/ */
package org.dspace.app.xmlui.aspect.administrative.registries; package org.dspace.app.xmlui.aspect.administrative.registries;
import java.sql.SQLException;
import java.util.ArrayList;
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.*;
import org.dspace.app.xmlui.wing.element.Division;
import org.dspace.app.xmlui.wing.element.PageMeta;
import org.dspace.app.xmlui.wing.element.Para;
import org.dspace.app.xmlui.wing.element.Row;
import org.dspace.app.xmlui.wing.element.Table;
import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeException;
import org.dspace.content.MetadataSchema; import org.dspace.content.MetadataSchema;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataSchemaService; import org.dspace.content.service.MetadataSchemaService;
import java.sql.SQLException;
import java.util.ArrayList;
/** /**
* Prompt the user to determin if they really want to delete the displayed schemas. * Prompt the user to determin if they really want to delete the displayed schemas.
* *
@@ -100,7 +95,7 @@ public class DeleteMetadataSchemaConfirm extends AbstractDSpaceTransformer
for (MetadataSchema schema : schemas) for (MetadataSchema schema : schemas)
{ {
Row row = table.addRow(); Row row = table.addRow();
row.addCell().addContent(schema.getSchemaID()); row.addCell().addContent(schema.getID());
row.addCell().addContent(schema.getNamespace()); row.addCell().addContent(schema.getNamespace());
row.addCell().addContent(schema.getName()); row.addCell().addContent(schema.getName());
} }

View File

@@ -7,32 +7,21 @@
*/ */
package org.dspace.app.xmlui.aspect.administrative.registries; package org.dspace.app.xmlui.aspect.administrative.registries;
import java.sql.SQLException;
import java.util.ArrayList;
import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Request;
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.*;
import org.dspace.app.xmlui.wing.element.CheckBox;
import org.dspace.app.xmlui.wing.element.Division;
import org.dspace.app.xmlui.wing.element.Highlight;
import org.dspace.app.xmlui.wing.element.Item;
import org.dspace.app.xmlui.wing.element.List;
import org.dspace.app.xmlui.wing.element.PageMeta;
import org.dspace.app.xmlui.wing.element.Para;
import org.dspace.app.xmlui.wing.element.Row;
import org.dspace.app.xmlui.wing.element.Table;
import org.dspace.app.xmlui.wing.element.Text;
import org.dspace.app.xmlui.wing.element.TextArea;
import org.dspace.content.MetadataField; import org.dspace.content.MetadataField;
import org.dspace.content.MetadataSchema; import org.dspace.content.MetadataSchema;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataFieldService; import org.dspace.content.service.MetadataFieldService;
import org.dspace.content.service.MetadataSchemaService; import org.dspace.content.service.MetadataSchemaService;
import java.sql.SQLException;
import java.util.ArrayList;
/** /**
* Edit a metadata schema by: listing all the existing fields in * Edit a metadata schema by: listing all the existing fields in
* the schema, prompt the user to add a new field. If a current * the schema, prompt the user to add a new field. If a current
@@ -177,7 +166,7 @@ public class EditMetadataSchema extends AbstractDSpaceTransformer
for (MetadataField field : fields) for (MetadataField field : fields)
{ {
String id = String.valueOf(field.getFieldID()); String id = String.valueOf(field.getID());
String fieldElement = field.getElement(); String fieldElement = field.getElement();
String fieldQualifier = field.getQualifier(); String fieldQualifier = field.getQualifier();
@@ -188,7 +177,7 @@ public class EditMetadataSchema extends AbstractDSpaceTransformer
} }
boolean highlight = false; boolean highlight = false;
if (field.getFieldID() == highlightID) if (field.getID() == highlightID)
{ {
highlight = true; highlight = true;
} }
@@ -320,7 +309,7 @@ public class EditMetadataSchema extends AbstractDSpaceTransformer
Division newField = div.addDivision("edit-schema-update-field"); Division newField = div.addDivision("edit-schema-update-field");
newField.setHead(T_head4.parameterize(field.getFieldID())); newField.setHead(T_head4.parameterize(field.getID()));
List form = newField.addList("edit-schema-update-field-form",List.TYPE_FORM); List form = newField.addList("edit-schema-update-field-form",List.TYPE_FORM);

View File

@@ -7,26 +7,19 @@
*/ */
package org.dspace.app.xmlui.aspect.administrative.registries; package org.dspace.app.xmlui.aspect.administrative.registries;
import java.sql.SQLException;
import java.util.ArrayList;
import org.apache.cocoon.environment.ObjectModelHelper; import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Request;
import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer;
import org.dspace.app.xmlui.wing.Message; import org.dspace.app.xmlui.wing.Message;
import org.dspace.app.xmlui.wing.WingException; import org.dspace.app.xmlui.wing.WingException;
import org.dspace.app.xmlui.wing.element.Body; import org.dspace.app.xmlui.wing.element.*;
import org.dspace.app.xmlui.wing.element.CheckBox;
import org.dspace.app.xmlui.wing.element.Division;
import org.dspace.app.xmlui.wing.element.List;
import org.dspace.app.xmlui.wing.element.PageMeta;
import org.dspace.app.xmlui.wing.element.Row;
import org.dspace.app.xmlui.wing.element.Table;
import org.dspace.app.xmlui.wing.element.Text;
import org.dspace.content.MetadataSchema; import org.dspace.content.MetadataSchema;
import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataSchemaService; import org.dspace.content.service.MetadataSchemaService;
import java.sql.SQLException;
import java.util.ArrayList;
/** /**
* This is the main entry point for managing the metadata registry. This transformer * This is the main entry point for managing the metadata registry. This transformer
* shows the list of all current schemas and a form for adding new schema's to the * shows the list of all current schemas and a form for adding new schema's to the
@@ -134,7 +127,7 @@ public class MetadataRegistryMain extends AbstractDSpaceTransformer
for (MetadataSchema schema : schemas) for (MetadataSchema schema : schemas)
{ {
int schemaID = schema.getSchemaID(); int schemaID = schema.getID();
String namespace = schema.getNamespace(); String namespace = schema.getNamespace();
String name = schema.getName(); String name = schema.getName();
String url = contextPath String url = contextPath

Some files were not shown because too many files have changed in this diff Show More