public DataProvider (Context context, Repository repository) { this.repository = repository; this.dateProvider = new UTCDateProvider(); this.identifyHandler = new IdentifyHandler(context, repository); this.listSetsHandler = new ListSetsHandler(context, repository); this.listMetadataFormatsHandler = new ListMetadataFormatsHandler(context, repository); this.listRecordsHandler = new ListRecordsHandler(context, repository); this.listIdentifiersHandler = new ListIdentifiersHandler(context, repository); this.getRecordHandler = new GetRecordHandler(context, repository); this.errorsHandler = new ErrorHandler(); }
public XdataProvider (Context context, Repository repository) { this.repository = repository; this.dateProvider = new UTCDateProvider(); this.identifyHandler = new IdentifyHandler(context, repository); this.listSetsHandler = new ListSetsHandler(context, repository); this.listMetadataFormatsHandler = new ListMetadataFormatsHandler(context, repository); this.listRecordsHandler = new XlistRecordsHandler(context, repository); this.listIdentifiersHandler = new ListIdentifiersHandler(context, repository); //this.getRecordHandler = new GetRecordHandler(context, repository); this.getRecordHandler = new XgetRecordHandler(context, repository); this.errorsHandler = new ErrorHandler(); }
public ListSetsHandler(Context context, Repository repository) { super(context, repository); this.setRepositoryHelper = new SetRepositoryHelper(getRepository().getSetRepository()); }
response.withVerb(identifyHandler.handle(parameters)); break; case ListSets: response.withVerb(listSetsHandler.handle(parameters)); break; case ListMetadataFormats: response.withVerb(listMetadataFormatsHandler.handle(parameters)); break; case GetRecord: response.withVerb(getRecordHandler.handle(parameters)); break; case ListIdentifiers: response.withVerb(listIdentifiersHandler.handle(parameters)); break; case ListRecords: response.withVerb(listRecordsHandler.handle(parameters)); break; response.withError(errorsHandler.handle(e));
response.withVerb(identifyHandler.handle(parameters)); break; case ListSets: response.withVerb(listSetsHandler.handle(parameters)); break; case ListMetadataFormats: response.withVerb(listMetadataFormatsHandler.handle(parameters)); break; case GetRecord: break; case ListIdentifiers: response.withVerb(listIdentifiersHandler.handle(parameters)); break; case ListRecords: response.withError(errorsHandler.handle(e));
if (parameters.hasSet() && !getRepository().getSetRepository().supportSets()) throw new DoesNotSupportSetsException(); int length = getRepository().getConfiguration().getMaxListIdentifiers(); int offset = getOffset(parameters); ListItemIdentifiersResult listItemIdentifiersResult; if (!parameters.hasSet()) { if (parameters.hasFrom() && !parameters.hasUntil()) listItemIdentifiersResult = itemRepositoryHelper.getItemIdentifiers(getContext(), offset, length, parameters.getMetadataPrefix(), parameters.getFrom()); else if (!parameters.hasFrom() && parameters.hasUntil()) listItemIdentifiersResult = itemRepositoryHelper.getItemIdentifiersUntil(getContext(), offset, length, parameters.getMetadataPrefix(), parameters.getUntil()); else if (parameters.hasFrom() && parameters.hasUntil()) listItemIdentifiersResult = itemRepositoryHelper.getItemIdentifiers(getContext(), offset, length, parameters.getMetadataPrefix(), parameters.getFrom(), parameters.getUntil()); else listItemIdentifiersResult = itemRepositoryHelper.getItemIdentifiers(getContext(), offset, length, parameters.getMetadataPrefix()); } else { if (!getRepository().getSetRepository().exists(parameters.getSet()) && !getContext().hasSet(parameters.getSet())) throw new NoMatchesException(); listItemIdentifiersResult = itemRepositoryHelper.getItemIdentifiers(getContext(), offset, length, parameters.getMetadataPrefix(), parameters.getSet(), parameters.getFrom()); else if (!parameters.hasFrom() && parameters.hasUntil()) listItemIdentifiersResult = itemRepositoryHelper.getItemIdentifiersUntil(getContext(), offset, length,
@Override public ListSets handle(OAICompiledRequest parameters) throws OAIException, HandlerException { ListSets result = new ListSets(); if (!getRepository().getSetRepository().supportSets()) throw new DoesNotSupportSetsException(); int length = getRepository().getConfiguration().getMaxListSets(); ListSetsResult listSetsResult = setRepositoryHelper.getSets(getContext(), getOffset(parameters), length); List<Set> sets = listSetsResult.getResults(); if (sets.isEmpty() && parameters.getResumptionToken().isEmpty()) throw new NoMatchesException(); if (sets.size() > length) sets = sets.subList(0, length); for (Set set : sets) { result.getSets().add(set.toOAIPMH()); } ResumptionToken.Value currentResumptionToken = new ResumptionToken.Value(); if (parameters.hasResumptionToken()) { currentResumptionToken = parameters.getResumptionToken(); } else if (listSetsResult.hasMore()) { currentResumptionToken = parameters.extractResumptionToken(); } ResumptionTokenHelper resumptionTokenHelper = new ResumptionTokenHelper(currentResumptionToken, getRepository().getConfiguration().getMaxListSets()); result.withResumptionToken(resumptionTokenHelper.resolve(listSetsResult.hasMore())); return result; }
private Record createRecord(OAICompiledRequest parameters, Item item) throws BadArgumentException, CannotDisseminateRecordException, OAIException, NoMetadataFormatsException, CannotDisseminateFormatException { MetadataFormat format = getContext().formatForPrefix(parameters.getMetadataPrefix()); Header header = new Header(); Record record = new Record().withHeader(header); header.withIdentifier(item.getIdentifier()); ItemHelper itemHelperWrap = new ItemHelper(item); for (Set set : itemHelperWrap.getSets(getContext(), getRepository().getFilterResolver())) header.withSetSpec(set.getSpec()); if (item.isDeleted()) Metadata metadata = null; try { if (getContext().hasTransformer()) { metadata = new Metadata(toPipeline(item) .apply(getContext().getTransformer()) .apply(format.getTransformer()) .process()); } else { metadata = new Metadata(toPipeline(item) .apply(format.getTransformer()) .process());
public ListRecordsHandler(Context context, Repository repository) { super(context, repository); this.itemRepositoryHelper = new ItemRepositoryHelper(getRepository().getItemRepository()); this.setRepositoryHelper = new SetRepositoryHelper(getRepository().getSetRepository()); }
public ListMetadataFormatsHandler(Context context, Repository repository) { super(context, repository); itemRepositoryHelper = new ItemRepositoryHelper(repository.getItemRepository()); // Static validation if (getContext().getMetadataFormats() == null || getContext().getMetadataFormats().isEmpty()) throw new InternalOAIException("The context must expose at least one metadata format"); }
@Override public Identify handle(OAICompiledRequest params) throws OAIException, HandlerException { Identify identify = new Identify(); RepositoryConfiguration configuration = getRepository().getConfiguration(); identify.withBaseURL(configuration.getBaseUrl()); identify.withRepositoryName(configuration.getRepositoryName()); if (descriptions == null) { try { identify.withDescription(new Description(XmlWriter.toString(new XOAIDescription().withValue(XOAI_DESC)))); } catch (XmlWriteException e) { log.warn("Description not added", e);
@Override public ListMetadataFormats handle(OAICompiledRequest params) throws OAIException, HandlerException { ListMetadataFormats result = new ListMetadataFormats(); if (params.hasIdentifier()) { Item item = itemRepositoryHelper.getItem(params.getIdentifier()); List<MetadataFormat> metadataFormats = getContext().formatFor(getRepository().getFilterResolver(), item); if (metadataFormats.isEmpty()) throw new NoMetadataFormatsException(); for (MetadataFormat metadataFormat : metadataFormats) { com.lyncode.xoai.model.oaipmh.MetadataFormat format = new com.lyncode.xoai.model.oaipmh.MetadataFormat() .withMetadataPrefix(metadataFormat.getPrefix()) .withMetadataNamespace(metadataFormat.getNamespace()) .withSchema(metadataFormat.getSchemaLocation()); result.withMetadataFormat(format); } } else { for (MetadataFormat metadataFormat : getContext().getMetadataFormats()) { com.lyncode.xoai.model.oaipmh.MetadataFormat format = new com.lyncode.xoai.model.oaipmh.MetadataFormat() .withMetadataPrefix(metadataFormat.getPrefix()) .withMetadataNamespace(metadataFormat.getNamespace()) .withSchema(metadataFormat.getSchemaLocation()); result.withMetadataFormat(format); } } return result; }
private Header createHeader(OAICompiledRequest parameters, ItemIdentifier itemIdentifier) throws BadArgumentException, OAIException, NoMetadataFormatsException { MetadataFormat format = getContext().formatForPrefix(parameters .getMetadataPrefix()); if (!itemIdentifier.isDeleted() && !canDisseminate(itemIdentifier, format)) throw new InternalOAIException("The item repository is currently providing items which cannot be disseminated with format "+format.getPrefix()); Header header = new Header(); header.withDatestamp(itemIdentifier.getDatestamp()); header.withIdentifier(itemIdentifier.getIdentifier()); if (itemIdentifier.isDeleted()) header.withStatus(Header.Status.DELETED); for (Set set : getContext().getSets()) if (set.getCondition().getFilter(getRepository().getFilterResolver()).isItemShown(itemIdentifier)) header.withSetSpec(set.getSpec()); for (Set set : itemIdentifier.getSets()) header.withSetSpec(set.getSpec()); return header; }
GetRecord result = new GetRecord(record); MetadataFormat format = getContext().formatForPrefix(parameters.getMetadataPrefix()); Item item = getRepository().getItemRepository().getItem(parameters.getIdentifier()); if (getContext().hasCondition() && !getContext().getCondition().getFilter(getRepository().getFilterResolver()).isItemShown(item)) throw new IdDoesNotExistException("This context does not include this item"); !format.getCondition().getFilter(getRepository().getFilterResolver()).isItemShown(item)) throw new CannotDisseminateRecordException("Format not applicable to this item"); for (Set set : getContext().getSets()) if (set.getCondition().getFilter(getRepository().getFilterResolver()).isItemShown(item)) header.withSetSpec(set.getSpec()); Metadata metadata = null; try { if (getContext().hasTransformer()) { metadata = new Metadata(toPipeline(item) .apply(getContext().getTransformer()) .apply(format.getTransformer()) .process()); } else { metadata = new Metadata(toPipeline(item) .apply(format.getTransformer()) .process());
public T handle (OAIRequestParametersBuilder parameters) throws OAIException, HandlerException, InvalidResumptionTokenException { return handle(parameters.build()); }
private boolean canDisseminate(ItemIdentifier itemIdentifier, MetadataFormat format) { return !format.hasCondition() || format.getCondition().getFilter(getRepository().getFilterResolver()).isItemShown(itemIdentifier); } }
public IdentifyHandler(Context context, Repository repository) { super(context, repository); // Static validation RepositoryConfiguration configuration = getRepository().getConfiguration(); if (configuration == null) throw new InternalOAIException("No repository configuration provided"); if (configuration.getMaxListSets() <= 0) throw new InternalOAIException("The repository configuration must return maxListSets greater then 0"); if (configuration.getMaxListIdentifiers() <= 0) throw new InternalOAIException("The repository configuration must return maxListIdentifiers greater then 0"); if (configuration.getMaxListRecords() <= 0) throw new InternalOAIException("The repository configuration must return maxListRecords greater then 0"); if (configuration.getAdminEmails() == null || configuration.getAdminEmails().isEmpty()) throw new InternalOAIException("The repository configuration must return at least one admin email"); try { if (configuration.getBaseUrl() == null) throw new InternalOAIException("The repository configuration must return a valid base url (absolute)"); new URL(configuration.getBaseUrl()); } catch (MalformedURLException e) { throw new InternalOAIException("The repository configuration must return a valid base url (absolute)", e); } if (configuration.getDeleteMethod() == null) throw new InternalOAIException("The repository configuration must return a valid delete method"); if (configuration.getEarliestDate() == null) throw new InternalOAIException("The repository configuration must return a valid earliest date. That's the date of the first inserted item"); if (configuration.getRepositoryName() == null) throw new InternalOAIException("The repository configuration must return a valid repository name"); }
public T handle (OAIRequest parameters) throws HandlerException, InvalidResumptionTokenException, OAIException { return handle(parameters.compile()); }
public abstract T handle(OAICompiledRequest params) throws OAIException, HandlerException; }