/**
* 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.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.proxy.HibernateProxyHelper;
import javax.persistence.*;
/**
* DSpace object that represents a metadata field, which is
* defined by a combination of schema, element, and qualifier. Every
* metadata element belongs in a field.
*
* @author Martin Hald
* @version $Revision$
* @see org.dspace.content.MetadataValue
* @see org.dspace.content.MetadataSchema
*/
@Entity
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name="metadatafieldregistry")
public class MetadataField implements ReloadableEntity<Integer> {
@Id
@Column(name="metadata_field_id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="metadatafieldregistry_seq")
@SequenceGenerator(name="metadatafieldregistry_seq", sequenceName="metadatafieldregistry_seq", allocationSize = 1, initialValue = 1)
private Integer id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "metadata_schema_id",nullable = false)
private MetadataSchema metadataSchema;
@Column(name = "element", length = 64)
private String element;
@Column(name = "qualifier", length = 64)
private String qualifier = null;
// @Column(name = "scope_note")
// @Lob
@Column(name="scope_note", columnDefinition = "text")
private String scopeNote;
/**
* Protected constructor, create object using:
* {@link org.dspace.content.service.MetadataFieldService#create(Context, MetadataSchema, String, String, String)}
*
*/
protected MetadataField()
{
}
/**
* Get the metadata field id.
*
* @return metadata field id
*/
public Integer getID()
{
return id;
}
/**
* Get the element name.
*
* @return element name
*/
public String getElement()
{
return element;
}
/**
* Set the element name.
*
* @param element new value for element
*/
public void setElement(String element)
{
this.element = element;
}
/**
* Get the qualifier.
*
* @return qualifier
*/
public String getQualifier()
{
return qualifier;
}
/**
* Set the qualifier.
*
* @param qualifier new value for qualifier
*/
public void setQualifier(String qualifier)
{
this.qualifier = qualifier;
}
/**
* Get the scope note.
*
* @return scope note
*/
public String getScopeNote()
{
return scopeNote;
}
/**
* Set the scope note.
*
* @param scopeNote new value for scope note
*/
public void setScopeNote(String scopeNote)
{
this.scopeNote = scopeNote;
}
/**
* Get the schema .
*
* @return schema record
*/
public MetadataSchema getMetadataSchema() {
return metadataSchema;
}
/**
* Set the schema record key.
*
* @param metadataSchema new value for key
*/
public void setMetadataSchema(MetadataSchema metadataSchema) {
this.metadataSchema = metadataSchema;
}
/**
* Return <code>true</code> if <code>other</code> is the same MetadataField
* as this object, <code>false</code> otherwise
*
* @param obj
* object to compare to
*
* @return <code>true</code> if object passed in represents the same
* MetadataField 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 MetadataField other = (MetadataField) obj;
if (this.getID() != other.getID())
{
return false;
}
if (!getMetadataSchema().equals(other.getMetadataSchema()))
{
return false;
}
return true;
}
@Override
public int hashCode()
{
int hash = 7;
hash = 47 * hash + getID();
hash = 47 * hash + getMetadataSchema().getID();
return hash;
}
public String toString(char separator) {
if (qualifier == null)
{
return getMetadataSchema().getName() + separator + element;
}
else
{
return getMetadataSchema().getName() + separator + element + separator + qualifier;
}
}
@Override
public String toString() {
return toString('_');
}
}