/**
* 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.submit.util;
import gr.ekt.bte.core.DataLoader;
import gr.ekt.bte.core.MutableRecord;
import gr.ekt.bte.core.Record;
import gr.ekt.bte.core.Value;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.dspace.submit.lookup.SubmissionLookupDataLoader;
import org.dspace.submit.lookup.SubmissionLookupService;
/**
* @author Andrea Bollini
* @author Kostas Stamatis
* @author Luigi Andrea Pascarelli
* @author Panagiotis Koutsourakis
*/
public class ItemSubmissionLookupDTO implements Serializable
{
private static final long serialVersionUID = 1;
private static final String MERGED_PUBLICATION_PROVIDER = "merged";
private static final String UNKNOWN_PROVIDER_STRING = "UNKNOWN-PROVIDER";
private List<Record> publications;
private String uuid;
public ItemSubmissionLookupDTO(List<Record> publications)
{
this.uuid = UUID.randomUUID().toString();
this.publications = publications;
}
public List<Record> getPublications()
{
return publications;
}
public Set<String> getProviders()
{
Set<String> orderedProviders = new LinkedHashSet<String>();
for (Record p : publications)
{
orderedProviders.add(SubmissionLookupService.getProviderName(p));
}
return orderedProviders;
}
public String getUUID()
{
return uuid;
}
public Record getTotalPublication(List<DataLoader> providers)
{
if (publications == null)
{
return null;
}
else if (publications.size() == 1)
{
return publications.get(0);
}
else
{
MutableRecord pub = new SubmissionLookupPublication(
MERGED_PUBLICATION_PROVIDER);
// for (SubmissionLookupProvider prov : providers)
// {
for (Record p : publications)
{
// if
// (!SubmissionLookupService.getProviderName(p).equals(prov.getShortName()))
// {
// continue;
// }
for (String field : p.getFields())
{
List<Value> values = p.getValues(field);
if (values != null && values.size() > 0)
{
if (!pub.getFields().contains(field))
{
for (Value v : values)
{
pub.addValue(field, v);
}
}
}
}
}
// }
return pub;
}
}
}