package eu.dnetlib.goldoa.service;

import eu.dnetlib.goldoa.domain.Journal;
import eu.dnetlib.goldoa.domain.Vocabulary;
import eu.dnetlib.goldoa.service.dao.JournalDAO;
import eu.dnetlib.goldoa.service.dao.PublisherDAO;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by antleb on 3/11/15.
 */
@Transactional
public class JournalManagerImpl implements JournalManager {

	@Autowired
	private JournalDAO journalDAO;
	@Autowired
	private PublisherDAO publisherDAO;

	@Override
	public List<Vocabulary> search(String term) {
		return journalDAO.search(term);
	}

	@Override
	public Journal getJournal(String journalId) {
		Journal journal = journalDAO.getJournal(journalId);

		if (journal.getPublisher() != null)
			journal.setPublisher(publisherDAO.getPublisher(journal.getPublisher().getId()));

		return journal;
	}

	@Override
	public Journal getJournalByTitle(String title) {
		try {
			Journal journal = journalDAO.getJournalByTitle(title);

			if (journal.getPublisher() != null)
				journal.setPublisher(publisherDAO.getPublisher(journal.getPublisher().getId()));

			return journal;
		} catch (EmptyResultDataAccessException e) {

		}

		return null;
	}

	@Override
	public Journal saveJournal(Journal journal) {
		if (journal.getId() == null) {
			journal.setId("portal::" + DigestUtils.md5Hex(journal.getTitle()));
			journal.setSource("portal");
		}

		return journalDAO.saveJournal(journal);
	}

	public JournalDAO getJournalDAO() {
		return journalDAO;
	}

	public void setJournalDAO(JournalDAO journalDAO) {
		this.journalDAO = journalDAO;
	}

	public PublisherDAO getPublisherDAO() {
		return publisherDAO;
	}

	public void setPublisherDAO(PublisherDAO publisherDAO) {
		this.publisherDAO = publisherDAO;
	}
}
