/** * 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.database; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.dspace.core.Context; import org.dspace.storage.rdbms.DatabaseManager; import org.dspace.storage.rdbms.TableRowIterator; import org.dspace.xoai.exceptions.InvalidMetadataFieldException; import org.dspace.xoai.services.api.database.EarliestDateResolver; import org.dspace.xoai.services.api.database.FieldResolver; import org.dspace.xoai.util.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import java.sql.SQLException; import java.util.Date; public class DSpaceEarliestDateResolver implements EarliestDateResolver { private static final Logger log = LogManager.getLogger(DSpaceEarliestDateResolver.class); @Autowired private FieldResolver fieldResolver; @Override public Date getEarliestDate(Context context) throws InvalidMetadataFieldException, SQLException { String query = "SELECT MIN(text_value) as value FROM metadatavalue WHERE metadata_field_id = ?"; boolean postgres = ! DatabaseManager.isOracle(); if (!postgres) { query = "SELECT MIN(TO_CHAR(text_value)) as value FROM metadatavalue WHERE metadata_field_id = ?"; } TableRowIterator iterator = DatabaseManager .query(context, query, fieldResolver.getFieldID(context, "dc.date.available")); if (iterator.hasNext()) { String str = iterator.next().getStringColumn("value"); try { Date d = DateUtils.parse(str); if (d != null) return d; } catch (Exception e) { log.error(e.getMessage(), e); } } return new Date(); } }