PaintingDao.java
/*******************************************************************************
* Copyright (c) 2021 Eclipse RDF4J contributors.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*******************************************************************************/
package org.eclipse.rdf4j.spring.demo.dao;
import static org.eclipse.rdf4j.sparqlbuilder.rdf.Rdf.iri;
import static org.eclipse.rdf4j.spring.demo.model.Painting.PAINTING_ARTIST_ID;
import static org.eclipse.rdf4j.spring.demo.model.Painting.PAINTING_ID;
import static org.eclipse.rdf4j.spring.demo.model.Painting.PAINTING_LABEL;
import static org.eclipse.rdf4j.spring.demo.model.Painting.PAINTING_TECHNIQUE;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.vocabulary.RDFS;
import org.eclipse.rdf4j.query.BindingSet;
import org.eclipse.rdf4j.sparqlbuilder.core.query.Queries;
import org.eclipse.rdf4j.spring.dao.RDF4JDao;
import org.eclipse.rdf4j.spring.dao.SimpleRDF4JCRUDDao;
import org.eclipse.rdf4j.spring.dao.support.bindingsBuilder.MutableBindings;
import org.eclipse.rdf4j.spring.dao.support.sparql.NamedSparqlSupplier;
import org.eclipse.rdf4j.spring.demo.model.EX;
import org.eclipse.rdf4j.spring.demo.model.Painting;
import org.eclipse.rdf4j.spring.support.RDF4JTemplate;
import org.eclipse.rdf4j.spring.util.QueryResultUtils;
import org.springframework.stereotype.Component;
/**
* Class responsible for repository access for managing {@link Painting} entities.
* <p>
* The class extends the {@link SimpleRDF4JCRUDDao}, providing capabilities for inserting and reading entities.
*
* @author Florian Kleedorfer
* @since 4.0.0
*/
@Component
public class PaintingDao extends SimpleRDF4JCRUDDao<Painting, IRI> {
public PaintingDao(RDF4JTemplate rdf4JTemplate) {
super(rdf4JTemplate);
}
@Override
protected void populateIdBindings(MutableBindings bindingsBuilder, IRI iri) {
bindingsBuilder.add(PAINTING_ID, iri);
}
@Override
protected RDF4JDao.NamedSparqlSupplierPreparer prepareNamedSparqlSuppliers(NamedSparqlSupplierPreparer preparer) {
return null;
}
@Override
protected Painting mapSolution(BindingSet querySolution) {
Painting painting = new Painting();
painting.setId(QueryResultUtils.getIRI(querySolution, PAINTING_ID));
painting.setTechnique(QueryResultUtils.getString(querySolution, PAINTING_TECHNIQUE));
painting.setTitle(QueryResultUtils.getString(querySolution, PAINTING_LABEL));
painting.setArtistId(QueryResultUtils.getIRI(querySolution, PAINTING_ARTIST_ID));
return painting;
}
@Override
protected String getReadQuery() {
return Queries.SELECT(PAINTING_ID, PAINTING_LABEL, PAINTING_TECHNIQUE, PAINTING_ARTIST_ID)
.where(
PAINTING_ID.isA(iri(EX.Painting))
.andHas(iri(EX.technique), PAINTING_TECHNIQUE)
.andHas(iri(RDFS.LABEL), PAINTING_LABEL),
PAINTING_ARTIST_ID.has(iri(EX.creatorOf), PAINTING_ID))
.getQueryString();
}
@Override
protected NamedSparqlSupplier getInsertSparql(Painting painting) {
return NamedSparqlSupplier.of("insert", () -> Queries.INSERT(
PAINTING_ID.isA(iri(EX.Painting))
.andHas(iri(EX.technique), PAINTING_TECHNIQUE)
.andHas(iri(RDFS.LABEL), PAINTING_LABEL),
PAINTING_ARTIST_ID.has(iri(EX.creatorOf), PAINTING_ID))
.getQueryString());
}
@Override
protected void populateBindingsForUpdate(MutableBindings bindingsBuilder, Painting painting) {
bindingsBuilder
.add(PAINTING_LABEL, painting.getTitle())
.add(PAINTING_TECHNIQUE, painting.getTechnique())
.add(PAINTING_ARTIST_ID, painting.getArtistId());
}
@Override
protected IRI getInputId(Painting painting) {
if (painting.getId() == null) {
return getRdf4JTemplate().getNewUUID();
}
return painting.getId();
}
}