/**
* 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.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.hibernate.annotations.Type;
import org.hibernate.proxy.HibernateProxyHelper;
import javax.persistence.*;
/**
* Database access class representing a Dublin Core metadata value.
* It represents a value of a given <code>MetadataField</code> on an Item.
* (The Item can have many values of the same field.) It contains element, qualifier, value and language.
* the field (which names the schema, element, and qualifier), language,
* and a value.
*
* @author Martin Hald
* @see org.dspace.content.MetadataSchema
* @see org.dspace.content.MetadataField
*/
@Entity
@Table(name="metadatavalue")
public class MetadataValue implements ReloadableEntity<Integer>
{
/** The reference to the metadata field */
@Id
@Column(name="metadata_value_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadatavalue_seq")
@SequenceGenerator(name="metadatavalue_seq", sequenceName="metadatavalue_seq", allocationSize = 1)
private Integer id;
/** The primary key for the metadata value */
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "metadata_field_id")
private MetadataField metadataField = null;
/** The value of the field */
@Lob
@Type(type="org.hibernate.type.MaterializedClobType")
@Column(name="text_value")
private String value;
/** The language of the field, may be <code>null</code> */
@Column(name = "text_lang", length = 24)
private String language;
/** The position of the record. */
@Column(name = "place")
private int place = 1;
/** Authority key, if any */
@Column(name = "authority", length = 100)
private String authority = null;
/** Authority confidence value -- see Choices class for values */
@Column(name = "confidence")
private int confidence = -1;
@ManyToOne(fetch = FetchType.LAZY, cascade={CascadeType.PERSIST})
@JoinColumn(name="dspace_object_id")
protected DSpaceObject dSpaceObject;
/**
* Protected constructor, create object using:
* {@link org.dspace.content.service.MetadataValueService#create(Context, DSpaceObject, MetadataField)}
*
*/
protected MetadataValue()
{
id = 0;
}
/**
* Get the field ID the metadata value represents.
*
* @return metadata value ID
*/
public Integer getID()
{
return id;
}
/**
* Get the dspaceObject
*
* @return dspaceObject
*/
public DSpaceObject getDSpaceObject()
{
return dSpaceObject;
}
/**
* Set the dspaceObject ID.
*
* @param dso new dspaceObject ID
*/
public void setDSpaceObject(DSpaceObject dso)
{
this.dSpaceObject = dso;
}
/**
* Get the language (e.g. "en").
*
* @return language
*/
public String getLanguage()
{
return language;
}
/**
* Set the language (e.g. "en").
*
* @param language new language
*/
public void setLanguage(String language)
{
this.language = language;
}
/**
* Get the place ordering.
*
* @return place ordering
*/
public int getPlace()
{
return place;
}
/**
* Set the place ordering.
*
* @param place new place (relative order in series of values)
*/
public void setPlace(int place)
{
this.place = place;
}
public MetadataField getMetadataField() {
return metadataField;
}
public void setMetadataField(MetadataField metadataField) {
this.metadataField = metadataField;
}
/**
* Get the metadata value.
*
* @return metadata value
*/
public String getValue()
{
return value;
}
/**
* Set the metadata value
*
* @param value new metadata value
*/
public void setValue(String value)
{
this.value = value;
}
/**
* Get the metadata authority
*
* @return metadata authority
*/
public String getAuthority ()
{
return authority ;
}
/**
* Set the metadata authority
*
* @param value new metadata authority
*/
public void setAuthority (String value)
{
this.authority = value;
}
/**
* Get the metadata confidence
*
* @return metadata confidence
*/
public int getConfidence()
{
return confidence;
}
/**
* Set the metadata confidence
*
* @param value new metadata confidence
*/
public void setConfidence(int value)
{
this.confidence = value;
}
/**
* Return <code>true</code> if <code>other</code> is the same MetadataValue
* as this object, <code>false</code> otherwise
*
* @param obj
* object to compare to
*
* @return <code>true</code> if object passed in represents the same
* MetadataValue as this object
*/
@Override
public boolean equals(Object obj)
{
if (obj == null)
{
return false;
}
Class<?> objClass = HibernateProxyHelper.getClassWithoutInitializingProxy(obj);
if (getClass() != objClass)
{
return false;
}
final MetadataValue other = (MetadataValue) obj;
if (this.id != other.id)
{
return false;
}
if (this.getID() != other.getID())
{
return false;
}
if (this.getDSpaceObject().getID() != other.getDSpaceObject().getID())
{
return false;
}
return true;
}
@Override
public int hashCode()
{
int hash = 7;
hash = 47 * hash + this.id;
hash = 47 * hash + this.getID();
hash = 47 * hash + this.getDSpaceObject().getID().hashCode();
return hash;
}
}