ArtService.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.service;

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toSet;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.spring.demo.dao.ArtistDao;
import org.eclipse.rdf4j.spring.demo.dao.PaintingDao;
import org.eclipse.rdf4j.spring.demo.model.Artist;
import org.eclipse.rdf4j.spring.demo.model.Painting;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/**
 * Uses {@link ArtistDao} and {@link PaintingDao} to query and manipulate the repository.
 *
 * @author Florian Kleedorfer
 * @since 4.0.0
 */
@Component
public class ArtService {
	@Autowired
	private ArtistDao artistDao;

	@Autowired
	private PaintingDao paintingDao;

	@Transactional
	public Artist createArtist(String firstName, String lastName) {
		Artist artist = new Artist();
		artist.setFirstName(firstName);
		artist.setLastName(lastName);
		return artistDao.save(artist);
	}

	@Transactional
	public Painting createPainting(String title, String technique, IRI artist) {
		Painting painting = new Painting();
		painting.setTitle(title);
		painting.setTechnique(technique);
		painting.setArtistId(artist);
		return paintingDao.save(painting);
	}

	@Transactional
	public List<Painting> getPaintings() {
		return paintingDao.list();
	}

	@Transactional
	public List<Artist> getArtists() {
		return artistDao.list();
	}

	@Transactional
	public Set<Artist> getArtistsWithoutPaintings() {
		return artistDao.getArtistsWithoutPaintings();
	}

	@Transactional
	public Map<Artist, Set<Painting>> getPaintingsGroupedByArtist() {
		List<Painting> paintings = paintingDao.list();
		return paintings
				.stream()
				.collect(groupingBy(
						p -> artistDao.getById(p.getArtistId()),
						toSet()));
	}

	@Transactional
	public IRI addArtist(Artist artist) {
		return artistDao.saveAndReturnId(artist);
	}

	@Transactional
	public IRI addPainting(Painting painting) {
		return paintingDao.saveAndReturnId(painting);
	}

}