/**
* 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.lookup;
import gr.ekt.bte.core.Record;
import gr.ekt.bte.core.Value;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
import org.dspace.content.Item;
import org.dspace.content.MetadataSchema;
import org.dspace.content.MetadataValue;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.ItemService;
import org.dspace.content.service.MetadataSchemaService;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
/**
* @author Andrea Bollini
* @author Kostas Stamatis
* @author Luigi Andrea Pascarelli
* @author Panagiotis Koutsourakis
*/
public class SubmissionLookupUtils
{
private static Logger log = Logger.getLogger(SubmissionLookupUtils.class);
/** Location of config file */
private static final String configFilePath = ConfigurationManager
.getProperty("dspace.dir")
+ File.separator
+ "config"
+ File.separator + "crosswalks" + File.separator;
// Patter to extract the converter name if any
private static final Pattern converterPattern = Pattern
.compile(".*\\((.*)\\)");
protected static final MetadataSchemaService metadataSchemaService = ContentServiceFactory.getInstance().getMetadataSchemaService();
protected static final ItemService itemService = ContentServiceFactory.getInstance().getItemService();
public static LookupProvidersCheck getProvidersCheck(Context context,
Item item, String dcSchema, String dcElement, String dcQualifier)
{
try
{
LookupProvidersCheck check = new LookupProvidersCheck();
List<MetadataSchema> schemas = metadataSchemaService.findAll(context);
List<MetadataValue> values = itemService.getMetadata(item, dcSchema, dcElement,
dcQualifier, Item.ANY);
for (MetadataSchema schema : schemas)
{
boolean error = false;
if (schema.getNamespace().startsWith(
SubmissionLookupService.SL_NAMESPACE_PREFIX))
{
List<MetadataValue> slCache = itemService.getMetadata(item, schema.getName(),
dcElement, dcQualifier, Item.ANY);
if (slCache.size() == 0)
continue;
if (slCache.size() != values.size())
{
error = true;
}
else
{
for (int idx = 0; idx < values.size(); idx++)
{
MetadataValue v = values.get(idx);
MetadataValue sl = slCache.get(idx);
// FIXME gestire authority e possibilita' multiple:
// match non sicuri, affiliation, etc.
if (!v.getValue().equals(sl.getValue()))
{
error = true;
break;
}
}
}
if (error)
{
check.getProvidersErr().add(schema.getName());
}
else
{
check.getProvidersOk().add(schema.getName());
}
}
}
return check;
}
catch (Exception e)
{
log.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage(), e);
}
}
public static String normalizeDOI(String doi)
{
if (doi != null)
{
return doi.trim().replaceAll("^http://dx.doi.org/", "")
.replaceAll("^doi:", "");
}
return null;
}
public static String getFirstValue(Record rec, String field)
{
List<Value> values = rec.getValues(field);
String value = null;
if (values != null && values.size() > 0)
{
value = values.get(0).getAsString();
}
return value;
}
public static List<String> getValues(Record rec, String field)
{
List<String> result = new ArrayList<String>();
List<Value> values = rec.getValues(field);
if (values != null && values.size() > 0)
{
for (Value value : values)
{
result.add(value.getAsString());
}
}
return result;
}
public static String getPrintableString(Record record)
{
StringBuilder result = new StringBuilder();
result.append("\nPublication {\n");
for (String field : record.getFields())
{
result.append("--" + field + ":\n");
List<Value> values = record.getValues(field);
for (Value value : values)
{
result.append("\t" + value.getAsString() + "\n");
}
}
result.append("}\n");
return result.toString();
}
}