/** * 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.content; import org.apache.commons.lang.builder.HashCodeBuilder; import org.dspace.core.Context; import org.dspace.core.ReloadableEntity; import org.dspace.eperson.EPerson; import org.dspace.eperson.Group; import org.dspace.workflow.WorkflowItem; import org.hibernate.proxy.HibernateProxyHelper; 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 * * @author Robert Tansley * @version $Revision$ */ @Entity @Table(name = "workspaceitem") public class WorkspaceItem implements InProgressSubmission, Serializable, ReloadableEntity<Integer> { @Id @Column(name = "workspace_item_id", unique = true, nullable = false) @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="workspaceitem_seq") @SequenceGenerator(name="workspaceitem_seq", sequenceName="workspaceitem_seq", allocationSize = 1) private Integer workspaceItemId; /** The item this workspace object pertains to */ @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "item_id") private Item item; /** The collection the item is being submitted to */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "collection_id") private Collection collection; @Column(name = "multiple_titles") private boolean multipleTitles = false; @Column(name = "published_before") private boolean publishedBefore = false; @Column(name = "multiple_files") private boolean multipleFiles = false; @Column(name = "stage_reached") private Integer stageReached = -1; @Column(name = "page_reached") private Integer pageReached = -1; @ManyToMany(fetch = FetchType.LAZY) @JoinTable( name = "epersongroup2workspaceitem", joinColumns = {@JoinColumn(name = "workspace_item_id") }, inverseJoinColumns = {@JoinColumn(name = "eperson_group_id") } ) private final List<Group> supervisorGroups = new ArrayList<>(); /** * Protected constructor, create object using: * {@link org.dspace.content.service.WorkspaceItemService#create(Context, Collection, boolean)} * or * {@link org.dspace.content.service.WorkspaceItemService#create(Context, WorkflowItem)} * */ protected WorkspaceItem() { } /** * Get the internal ID of this workspace item * * @return the internal identifier */ @Override public Integer getID() { return workspaceItemId; } /** * Get the value of the stage reached column * * @return the value of the stage reached column */ public int getStageReached() { return stageReached; } /** * Set the value of the stage reached column * * @param v * the value of the stage reached column */ public void setStageReached(int v) { stageReached = v; } /** * Get the value of the page reached column (which represents the page * reached within a stage/step) * * @return the value of the page reached column */ public int getPageReached() { return pageReached; } /** * Set the value of the page reached column (which represents the page * reached within a stage/step) * * @param v * the value of the page reached column */ public void setPageReached(int v) { pageReached = v; } /** * Decide if this WorkspaceItem is equal to another * * @param o The other workspace item to compare to * @return If they are equal or not */ @Override public boolean equals(Object o) { if (this == o) { return true; } Class<?> objClass = HibernateProxyHelper.getClassWithoutInitializingProxy(o); if (getClass() != objClass) { return false; } final WorkspaceItem that = (WorkspaceItem)o; if (this.getID() != that.getID()) { return false; } return true; } @Override public int hashCode() { return new HashCodeBuilder().append(getID()).toHashCode(); } // InProgressSubmission methods @Override public Item getItem() { return item; } void setItem(Item item) { this.item = item; } @Override public Collection getCollection() { return collection; } void setCollection(Collection collection) { this.collection = collection; } @Override public EPerson getSubmitter() throws SQLException { return item.getSubmitter(); } @Override public boolean hasMultipleFiles() { return multipleFiles; } @Override public void setMultipleFiles(boolean b) { multipleFiles = b; } @Override public boolean hasMultipleTitles() { return multipleTitles; } @Override public void setMultipleTitles(boolean b) { multipleTitles = b; } @Override public boolean isPublishedBefore() { return publishedBefore; } @Override public void setPublishedBefore(boolean b) { publishedBefore = b; } public List<Group> getSupervisorGroups() { return supervisorGroups; } void removeSupervisorGroup(Group group) { supervisorGroups.remove(group); } void addSupervisorGroup(Group group) { supervisorGroups.add(group); } }