//////////////////////////////////////////////////////////////////////// // // Copyright (c) 2009-2013 Denim Group, Ltd. // // The contents of this file are subject to the Mozilla Public License // Version 2.0 (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // http://www.mozilla.org/MPL/ // // Software distributed under the License is distributed on an "AS IS" // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the // License for the specific language governing rights and limitations // under the License. // // The Original Code is ThreadFix. // // The Initial Developer of the Original Code is Denim Group, Ltd. // Portions created by Denim Group, Ltd. are Copyright (C) // Denim Group, Ltd. All Rights Reserved. // // Contributor(s): Denim Group, Ltd. // //////////////////////////////////////////////////////////////////////// package com.denimgroup.threadfix.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import com.denimgroup.threadfix.data.dao.DefectDao; import com.denimgroup.threadfix.data.dao.DefectTrackerDao; import com.denimgroup.threadfix.data.dao.DefectTrackerTypeDao; import com.denimgroup.threadfix.data.entities.Application; import com.denimgroup.threadfix.data.entities.DefectTracker; import com.denimgroup.threadfix.data.entities.DefectTrackerType; import com.denimgroup.threadfix.service.defects.AbstractDefectTracker; import com.denimgroup.threadfix.service.defects.DefectTrackerFactory; @Service @Transactional(readOnly = true) public class DefectTrackerServiceImpl implements DefectTrackerService { private DefectTrackerDao defectTrackerDao = null; private DefectTrackerTypeDao defectTrackerTypeDao = null; private DefectDao defectDao = null; private final SanitizedLogger log = new SanitizedLogger("DefectTrackerService"); @Autowired public DefectTrackerServiceImpl(DefectTrackerDao defectTrackerDao, DefectTrackerTypeDao defectTrackerTypeDao, DefectDao defectDao) { this.defectTrackerDao = defectTrackerDao; this.defectTrackerTypeDao = defectTrackerTypeDao; this.defectDao = defectDao; } @Override public List<DefectTracker> loadAllDefectTrackers() { return defectTrackerDao.retrieveAll(); } @Override public DefectTracker loadDefectTracker(int defectId) { return defectTrackerDao.retrieveById(defectId); } @Override public DefectTracker loadDefectTracker(String name) { return defectTrackerDao.retrieveByName(name); } @Override @Transactional(readOnly = false) public void storeDefectTracker(DefectTracker defectTracker) { defectTrackerDao.saveOrUpdate(defectTracker); } @Override @Transactional(readOnly = false) public void deleteById(int defectTrackerId) { log.info("Deleting Defect tracker with ID " + defectTrackerId); defectDao.deleteByDefectTrackerId(defectTrackerId); DefectTracker tracker = defectTrackerDao.retrieveById(defectTrackerId); tracker.setActive(false); if (tracker.getApplications() != null && tracker.getApplications().size() > 0) { for (Application app : tracker.getApplications()) { log.info("Removing defect tracker and project credentials from " + "application with ID " + app.getId()); app.setDefectTracker(null); app.setUserName(null); app.setPassword(null); app.setProjectId(null); app.setProjectName(null); } } tracker.setApplications(null); defectTrackerDao.saveOrUpdate(tracker); } @Override public List<DefectTrackerType> loadAllDefectTrackerTypes() { return defectTrackerTypeDao.retrieveAll(); } @Override public DefectTrackerType loadDefectTrackerType(int defectId) { return defectTrackerTypeDao.retrieveById(defectId); } @Override public DefectTrackerType loadDefectTrackerType(String name) { return defectTrackerTypeDao.retrieveByName(name); } @Override @Transactional(readOnly = false) public void storeDefectTrackerType(DefectTrackerType defectTrackerType) { defectTrackerTypeDao.saveOrUpdate(defectTrackerType); } @Override public boolean checkUrl(DefectTracker defectTracker, BindingResult result) { if (defectTracker != null && defectTracker.getDefectTrackerType() != null && defectTracker.getUrl() != null) { AbstractDefectTracker tracker = DefectTrackerFactory.getTracker( defectTrackerTypeDao.retrieveById(defectTracker.getDefectTrackerType().getId())); if (tracker != null) { tracker.setUrl(defectTracker.getUrl()); if (tracker.hasValidUrl()) { return true; } else if (tracker.getLastError() != null) { result.rejectValue("url", null, null, tracker.getLastError()); return false; } } } return false; } }