/**
* 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.MutableRecord;
import gr.ekt.bte.core.StringValue;
import gr.ekt.bte.core.Value;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.dspace.submit.lookup.SubmissionLookupDataLoader;
/**
* @author Andrea Bollini
* @author Kostas Stamatis
* @author Luigi Andrea Pascarelli
* @author Panagiotis Koutsourakis
*/
public class SubmissionLookupPublication implements MutableRecord, Serializable
{
private String providerName;
private Map<String, List<String>> storage = new HashMap<String, List<String>>();
public SubmissionLookupPublication(String providerName)
{
this.providerName = providerName;
}
// needed to serialize it with JSON
public Map<String, List<String>> getStorage()
{
return storage;
}
@Override
public Set<String> getFields()
{
return storage.keySet();
}
public List<String> remove(String md)
{
return storage.remove(md);
}
public void add(String md, String nValue)
{
if (StringUtils.isNotBlank(nValue))
{
List<String> tmp = storage.get(md);
if (tmp == null)
{
tmp = new ArrayList<String>();
storage.put(md, tmp);
}
tmp.add(nValue);
}
}
public String getFirstValue(String md)
{
List<String> tmp = storage.get(md);
if (tmp == null || tmp.size() == 0)
{
return null;
}
return tmp.get(0);
}
public String getProviderName()
{
return providerName;
}
public String getType()
{
return getFirstValue(SubmissionLookupDataLoader.TYPE);
}
// BTE Record interface methods
@Override
public boolean hasField(String md)
{
return storage.containsKey(md);
}
@Override
public List<Value> getValues(String md)
{
List<String> stringValues = storage.get(md);
if (stringValues == null)
{
return null;
}
List<Value> values = new ArrayList<Value>();
for (String value : stringValues)
{
values.add(new StringValue(value));
}
return values;
}
@Override
public boolean isMutable()
{
return true;
}
@Override
public MutableRecord makeMutable()
{
return this;
}
@Override
public boolean addField(String md, List<Value> values)
{
if (storage.containsKey(md))
{
List<String> stringValues = storage.get(md);
if (values != null)
{
for (Value value : values)
{
stringValues.add(value.getAsString());
}
}
}
else
{
List<String> tmp = new ArrayList<String>();
if (values != null)
{
for (Value value : values)
{
tmp.add(value.getAsString());
}
}
storage.put(md, tmp);
}
return true;
}
@Override
public boolean addValue(String md, Value value)
{
if (storage.containsKey(md))
{
List<String> stringValues = storage.get(md);
stringValues.add(value.getAsString());
}
else
{
List<String> tmp = new ArrayList<String>();
tmp.add(value.getAsString());
storage.put(md, tmp);
}
return true;
}
@Override
public boolean removeField(String md)
{
if (storage.containsKey(md))
{
storage.remove(md);
}
return false;
}
@Override
public boolean removeValue(String md, Value value)
{
if (storage.containsKey(md))
{
List<String> stringValues = storage.get(md);
stringValues.remove(value.getAsString());
}
return true;
}
@Override
public boolean updateField(String md, List<Value> values)
{
List<String> stringValues = new ArrayList<String>();
for (Value value : values)
{
stringValues.add(value.getAsString());
}
storage.put(md, stringValues);
return true;
}
@Override
public boolean updateValue(String md, Value valueOld, Value valueNew)
{
if (storage.containsKey(md))
{
List<String> stringValues = storage.get(md);
List<String> newStringValues = storage.get(md);
for (String s : stringValues)
{
if (s.equals(valueOld.getAsString()))
{
newStringValues.add(valueNew.getAsString());
}
else
{
newStringValues.add(s);
}
}
storage.put(md, newStringValues);
}
return true;
}
}