/**
* 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.importer.external.datamodel;
import org.dspace.importer.external.metadatamapping.MetadatumDTO;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* This class contains all MetadatumDTO objects from an imported item
*
* @author Roeland Dillen (roeland at atmire dot com)
*/
public class ImportRecord {
private List<MetadatumDTO> valueList = null;
/**
* Retrieve an unmodifiableList of MetadatumDTO
*
* @return List of MetadatumDTO
*/
public List<MetadatumDTO> getValueList() {
return Collections.unmodifiableList(valueList);
}
/**
* Create an ImportRecord instance initialized with a List of MetadatumDTO objects
*
* @param valueList
* list of metadata values
*/
public ImportRecord(List<MetadatumDTO> valueList) {
//don't want to alter the original list. Also now I can control the type of list
this.valueList = new LinkedList<>(valueList);
}
/**
* Build a string based on the values in the valueList object
* The syntax will be
* Record{valueList={"schema"; "element" ; "qualifier"; "value"}}
*
* @return a concatenated string containing all values of the MetadatumDTO objects in valueList
*/
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("Record");
sb.append("{valueList=");
for (MetadatumDTO val:valueList) {
sb.append("{");
sb.append(val.getSchema());
sb.append("; ");
sb.append(val.getElement());
sb.append("; ");
sb.append(val.getQualifier());
sb.append("; ");
sb.append(val.getValue());
sb.append("; ");
sb.append("}\n");
}
sb.append("}\n");
return sb.toString();
}
/**
* Return the MetadatumDTO's that are related to a given schema/element/qualifier pair/triplet
* @param schema metadata field schema
* @param element metadata field element
* @param qualifier metadata field qualifier
* @return the MetadatumDTO's that are related to a given schema/element/qualifier pair/triplet
*/
public Collection<MetadatumDTO> getValue(String schema, String element, String qualifier) {
List<MetadatumDTO> values = new LinkedList<MetadatumDTO>();
for (MetadatumDTO value:valueList) {
if (value.getSchema().equals(schema)&&value.getElement().equals(element)) {
if (qualifier==null && value.getQualifier() == null) {
values.add(value);
} else if (value.getQualifier() != null && value.getQualifier().equals(qualifier)) {
values.add(value);
}
}
}
return values;
}
/**
* Add a value to the valueList
* @param value The MetadatumDTO to add to the valueList
*/
public void addValue(MetadatumDTO value) {
this.valueList.add(value);
}
}