Java tutorial
/* * /******************************************************************************* * * Copyright (c) 2016 Cognitiva Brasil - Tecnologias educacionais. * * All rights reserved. This program and the accompanying materials * * are made available either under the terms of the GNU Public License v3 * * which accompanies this distribution, and is available at * * http://www.gnu.org/licenses/gpl.html or for any other uses contact * * contato@cognitivabrasil.com.br for information. * ******************************************************************************/ package com.cognitivabrasil.repositorio.services; import ORG.oclc.oai.server.catalog.OaiDocumentService; import com.cognitivabrasil.repositorio.data.entities.Document; import com.cognitivabrasil.repositorio.data.entities.Files; import com.cognitivabrasil.repositorio.data.entities.Subject; import com.cognitivabrasil.repositorio.data.repositories.DocumentRepository; import com.cognitivabrasil.repositorio.util.Config; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; /** * The Class DocumentServiceImpl. * * @author Marcos Freitas Nunes <marcos@cognitivabrasil.com.br> * @author Paulo Schreiner <paulo@cognitivabrasil.com.br> */ @Service public class DocumentServiceImpl implements DocumentService, OaiDocumentService { @Autowired private DocumentRepository docRep; private static final Logger LOG = Logger.getLogger(DocumentServiceImpl.class); @Override public Document get(String e) { return docRep.findByObaaEntry(e); } @Override public Document get(int i) { return docRep.findOne(i); } @Override public List<Document> getAll() { return docRep.findByDeletedIsFalseAndObaaXmlNotNullOrderByCreatedDesc(); } @Override public Page<Document> getPage(Pageable pageable) { return docRep.findByDeletedIsFalseAndObaaXmlNotNullOrderByCreatedDesc(pageable); } @Override public List<Document> getBySubject(Subject s) { return docRep.findBySubjectAndDeletedIsFalseAndObaaXmlNotNullOrderByCreatedDesc(s); } @Override public Page<Document> getPageBySubject(Subject s, Pageable pageable) { return docRep.findBySubjectAndDeletedIsFalseAndObaaXmlNotNullOrderByCreatedDesc(s, pageable); } @Override public void delete(Document d) throws IOException { try { FileUtils.forceDelete(new File(Config.FILE_PATH + d.getId())); } catch (IOException io) { LOG.warn("Nao foi possivel deletar os arquivos do documento: " + d.getId() + "." + "Mas o documento sera removido da base! " + io.getMessage()); throw io; } finally { d.getFiles().clear(); d.setObaaXml(null); d.setCreated(new DateTime()); d.setDeleted(true); docRep.save(d); } } @Override public void deleteAll() { for (Document d : docRep.findAll()) { for (Files f : d.getFiles()) { try { f.deleteFile(); } catch (IOException e) { LOG.error("Could not delete file", e); } } docRep.delete(d); } } @Override public void deleteFromDatabase(Document d) { docRep.delete(d); } /* * (non-Javadoc) * * @see modelos.DocumentosDAO#save(OBAA.OBAA, metadata.Header) */ @Override public void save(Document d) throws IllegalStateException { //para garantir que todas alteraes feitas no obaa sero salvar no xml. if (!d.getMetadata().isEmpty()) { d.setObaaXml(d.getMetadata().toXml()); } docRep.save(d); } @Override public void deleteEmpty() { DateTime d = DateTime.now(); List<Document> docs = docRep.findByCreatedLessThanAndActiveIsFalse(d.minusHours(3)); for (Document doc : docs) { deleteFromDatabase(doc); } } @Override public Iterator find(Date from, Date until, int oldCount, int maxListSize) { PageRequest pr = new PageRequest(oldCount / maxListSize, maxListSize, Sort.Direction.ASC, "created"); if (from != null && until != null) { return docRep.betweenInclusive(new DateTime(from), add1Second(new DateTime(until)), pr).iterator(); } else if (from != null && until == null) { return docRep.from(new DateTime(from), pr).iterator(); } else if (from == null && until != null) { return docRep.until(add1Second(new DateTime(until)), pr).iterator(); } else { return docRep.all(pr).iterator(); } } @Override public int count(Date from, Date until) { if (from != null && until != null) { return docRep.countBetweenInclusive(new DateTime(from), add1Second(new DateTime(until))); } else if (from != null && until == null) { return docRep.countFrom(new DateTime(from)); } else if (from == null && until != null) { return docRep.countUntil(add1Second(new DateTime(until))); } else { return docRep.countActiveTrue(); } } private DateTime add1Second(DateTime dateTime) { return dateTime.plusSeconds(1); } @Override public long count() { return docRep.countActiveTrueDeletedFalse(); } }