package fr.openwide.maven.artifact.notifier.core.business.project.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import fr.openwide.core.jpa.business.generic.service.GenericEntityServiceImpl; import fr.openwide.core.jpa.exception.SecurityServiceException; import fr.openwide.core.jpa.exception.ServiceException; import fr.openwide.maven.artifact.notifier.core.business.artifact.model.Artifact; import fr.openwide.maven.artifact.notifier.core.business.artifact.model.ArtifactVersion; import fr.openwide.maven.artifact.notifier.core.business.artifact.service.IArtifactService; import fr.openwide.maven.artifact.notifier.core.business.artifact.service.IArtifactVersionService; import fr.openwide.maven.artifact.notifier.core.business.audit.service.IAuditService; import fr.openwide.maven.artifact.notifier.core.business.project.dao.IProjectDao; import fr.openwide.maven.artifact.notifier.core.business.project.model.Project; import fr.openwide.maven.artifact.notifier.core.business.project.model.ProjectVersion; import fr.openwide.maven.artifact.notifier.core.business.project.model.Project_; @Service("projectService") public class ProjectServiceImpl extends GenericEntityServiceImpl<Long, Project> implements IProjectService { @Autowired private IProjectVersionService projectVersionService; @Autowired private IArtifactService artifactService; @Autowired private IArtifactVersionService artifactVersionService; @Autowired private IAuditService auditService; private IProjectDao projectDao; @Autowired public ProjectServiceImpl(IProjectDao projectDao) { super(projectDao); this.projectDao = projectDao; } @Override protected void createEntity(Project project) throws ServiceException, SecurityServiceException { project.setUri(project.getName()); auditService.refreshAuditSummaryForCreate(project.getAuditSummary()); super.createEntity(project); } @Override protected void updateEntity(Project project) throws ServiceException, SecurityServiceException { project.setUri(project.getName()); auditService.refreshAuditSummaryForUpdate(project.getAuditSummary()); super.updateEntity(project); } @Override public void delete(Project project) throws ServiceException, SecurityServiceException { for (Artifact artifact : project.getArtifacts()) { artifact.setProject(null); for (ArtifactVersion artifactVersion : artifact.getVersions()) { artifactVersion.setProjectVersion(null); } artifactService.update(artifact); } super.delete(project); } @Override public Project getByUri(String uri) { return projectDao.getByField(Project_.uri, uri); } @Override public List<Project> searchAutocomplete(String searchPattern, Integer limit, Integer offset) throws ServiceException { return projectDao.searchAutocomplete(searchPattern, limit, offset); } @Override public List<Project> searchByName(String searchPattern, Integer limit, Integer offset) { return projectDao.searchByName(searchPattern, limit, offset); } @Override public int countSearchByName(String searchTerm) { return projectDao.countSearchByName(searchTerm); } @Override public void createProjectVersion(Project project, ProjectVersion projectVersion) throws ServiceException, SecurityServiceException { projectVersionService.create(projectVersion); project.addVersion(projectVersion); update(project); // We update artifact versions matching the project version projectVersionService.linkWithArtifactVersions(projectVersion); } @Override public void deleteProjectVersion(Project project, ProjectVersion projectVersion) throws ServiceException, SecurityServiceException { project.removeVersion(projectVersion); update(project); projectVersionService.delete(projectVersion); } @Override public void addArtifact(Project project, Artifact artifact) throws ServiceException, SecurityServiceException { project.addArtifact(artifact); update(project); } @Override public void removeArtifact(Project project, Artifact artifact) throws ServiceException, SecurityServiceException { project.removeArtifact(artifact); update(project); } }