/** * 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.xoai.services.impl; import org.dspace.content.MetadataField; import org.dspace.content.factory.ContentServiceFactory; import org.dspace.content.service.MetadataFieldService; import org.dspace.core.Context; import org.dspace.xoai.exceptions.InvalidMetadataFieldException; import org.dspace.xoai.services.api.FieldResolver; import java.sql.SQLException; import java.util.regex.Pattern; public class DSpaceFieldResolver implements FieldResolver { private MetadataFieldCache metadataFieldCache = null; private static final MetadataFieldService metadataFieldService = ContentServiceFactory.getInstance().getMetadataFieldService(); @Override public int getFieldID(Context context, String field) throws InvalidMetadataFieldException, SQLException { if (metadataFieldCache == null) metadataFieldCache = new MetadataFieldCache(); if (!metadataFieldCache.hasField(field)) { String[] pieces = field.split(Pattern.quote(".")); if (pieces.length > 1) { String schema = pieces[0]; String element = pieces[1]; String qualifier = null; if (pieces.length > 2) qualifier = pieces[2]; MetadataField metadataField = metadataFieldService.findByElement(context, schema, element, qualifier); if (null != metadataField) { metadataFieldCache.add(field, metadataField.getID()); } else throw new InvalidMetadataFieldException(); } else throw new InvalidMetadataFieldException(); } return metadataFieldCache.getField(field); } }