org.dspace.authority.AuthorityValue Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dspace-api Show documentation
Show all versions of dspace-api Show documentation
DSpace core data model and service APIs.
/**
* 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.authority;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrInputDocument;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Item;
import org.dspace.content.MetadataValue;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.core.Context;
import org.dspace.util.SolrUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
/**
* @author Antoine Snyers (antoine at atmire.com)
* @author Kevin Van de Velde (kevin at atmire dot com)
* @author Ben Bosman (ben at atmire dot com)
* @author Mark Diggory (markd at atmire dot com)
*/
public class AuthorityValue {
/**
* The id of the record in solr
*/
private String id;
/**
* The metadata field that this authority value is for
*/
private String field;
/**
* The text value of this authority
*/
private String value;
/**
* When this authority record has been created
*/
private Date creationDate;
/**
* If this authority has been removed
*/
private boolean deleted;
/**
* represents the last time that DSpace got updated information from its external source
*/
private Date lastModified;
public AuthorityValue() {
}
public AuthorityValue(SolrDocument document) {
setValues(document);
}
public String getId() {
return id;
}
public String getField() {
return field;
}
public String getValue() {
return value;
}
public void setId(String id) {
this.id = id;
}
public void setField(String field) {
this.field = field;
}
public void setValue(String value) {
this.value = value;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public void setCreationDate(String creationDate) {
this.creationDate = stringToDate(creationDate);
}
public Date getLastModified() {
return lastModified;
}
public void setLastModified(String lastModified) {
this.lastModified = stringToDate(lastModified);
}
public void setLastModified(Date lastModified) {
this.lastModified = lastModified;
}
public boolean isDeleted() {
return deleted;
}
public void setDeleted(boolean deleted) {
this.deleted = deleted;
}
protected void updateLastModifiedDate() {
this.lastModified = new Date();
}
public void update() {
updateLastModifiedDate();
}
public void delete() {
setDeleted(true);
updateLastModifiedDate();
}
/**
* Generate a solr record from this instance
*
* @return SolrInputDocument
*/
public SolrInputDocument getSolrInputDocument() {
SolrInputDocument doc = new SolrInputDocument();
DateFormat solrDateFormatter = SolrUtils.getDateFormatter();
doc.addField("id", getId());
doc.addField("field", getField());
doc.addField("value", getValue());
doc.addField("deleted", isDeleted());
doc.addField("creation_date", solrDateFormatter.format(getCreationDate()));
doc.addField("last_modified_date", solrDateFormatter.format(getLastModified()));
doc.addField("authority_type", getAuthorityType());
return doc;
}
/**
* Initialize this instance based on a solr record
*
* @param document SolrDocument
*/
public void setValues(SolrDocument document) {
this.id = String.valueOf(document.getFieldValue("id"));
this.field = String.valueOf(document.getFieldValue("field"));
this.value = String.valueOf(document.getFieldValue("value"));
this.deleted = (Boolean) document.getFieldValue("deleted");
this.creationDate = (Date) document.getFieldValue("creation_date");
this.lastModified = (Date) document.getFieldValue("last_modified_date");
}
/**
* Replace an item's DCValue with this authority
*
* @param context context
* @param value metadata value
* @param currentItem item
* @throws SQLException if database error
* @throws AuthorizeException if authorization error
*/
public void updateItem(Context context, Item currentItem, MetadataValue value)
throws SQLException, AuthorizeException {
value.setValue(getValue());
value.setAuthority(getId());
ContentServiceFactory.getInstance().getMetadataValueService().update(context, value, true);
}
/**
* Information that can be used the choice ui
*
* @return map
*/
public Map choiceSelectMap() {
return new HashMap<>();
}
public List getDateFormatters() {
List list = new ArrayList<>();
list.add(ISODateTimeFormat.dateTime());
list.add(ISODateTimeFormat.dateTimeNoMillis());
return list;
}
public Date stringToDate(String date) {
Date result = null;
if (StringUtils.isNotBlank(date)) {
List dateFormatters = getDateFormatters();
boolean converted = false;
int formatter = 0;
while (!converted) {
try {
DateTimeFormatter dateTimeFormatter = dateFormatters.get(formatter);
DateTime dateTime = dateTimeFormatter.parseDateTime(date);
result = dateTime.toDate();
converted = true;
} catch (IllegalArgumentException e) {
formatter++;
if (formatter > dateFormatters.size()) {
converted = true;
}
log.error("Could not find a valid date format for: \"" + date + "\"", e);
}
}
}
return result;
}
/**
* log4j logger
*/
private static Logger log = org.apache.logging.log4j.LogManager.getLogger(AuthorityValue.class);
@Override
public String toString() {
return "AuthorityValue{" +
"id='" + id + '\'' +
", field='" + field + '\'' +
", value='" + value + '\'' +
", creationDate=" + creationDate +
", deleted=" + deleted +
", lastModified=" + lastModified +
'}';
}
/**
* Provides a string that will allow this AuthorityType to be recognized and
* provides information to create a new instance to be created using {@link #newInstance(String)}.
* See the implementation of
* {@link org.dspace.authority.AuthorityValueServiceImpl#generateRaw(java.lang.String, java.lang.String,
* java.lang.String)} for more details.
*
* @return see {@link org.dspace.authority.service.AuthorityValueService#GENERATE AuthorityValueService.GENERATE}
*/
public String generateString() {
return AuthorityValueServiceImpl.GENERATE;
}
/**
* Makes an instance of the AuthorityValue with the given information.
*
* @param info string info
* @return AuthorityValue
*/
public AuthorityValue newInstance(String info) {
return new AuthorityValue();
}
public String getAuthorityType() {
return "internal";
}
/**
* The regular equals() only checks if both AuthorityValues describe the same authority.
* This method checks if the AuthorityValues have different information
* E.g. it is used to decide when lastModified should be updated.
*
* @param o object
* @return true or false
*/
public boolean hasTheSameInformationAs(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
AuthorityValue that = (AuthorityValue) o;
if (deleted != that.deleted) {
return false;
}
if (field != null ? !field.equals(that.field) : that.field != null) {
return false;
}
if (id != null ? !id.equals(that.id) : that.id != null) {
return false;
}
if (value != null ? !value.equals(that.value) : that.value != null) {
return false;
}
return true;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy