All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jlot.mailing.cron.TranslatorNotificationMailJob Maven / Gradle / Ivy

There is a newer version: 1.2
Show newest version
package org.jlot.mailing.cron;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import javax.inject.Inject;

import org.jlot.core.cron.AbstractDailyNightlyCronJob;
import org.jlot.core.dto.LocalizationDTO;
import org.jlot.core.dto.RatioCollection;
import org.jlot.core.dto.UserDTO;
import org.jlot.core.dto.VersionDTO;
import org.jlot.core.service.api.LocalizationPermissionService;
import org.jlot.core.service.api.LocalizationService;
import org.jlot.core.service.api.ProjectPermissionService;
import org.jlot.core.service.api.TranslationRatioService;
import org.jlot.core.service.api.VersionService;
import org.jlot.mailing.service.TranslatorNotificationMailingService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(readOnly = true)
public class TranslatorNotificationMailJob extends AbstractDailyNightlyCronJob
{
	@Inject
	private TranslatorNotificationMailingService	translatorNotificationMailingService;
	@Inject
	private LocalizationService						localizationService;
	@Inject
	private TranslationRatioService					translationRatioService;
	@Inject
	private VersionService							versionService;
	@Inject
	private ProjectPermissionService				projectPermissionService;
	@Inject
	private LocalizationPermissionService			localizationPermissionService;

	@Override
	protected void runJob ( String projectName ) throws Exception
	{
		Set setDevelopers = projectPermissionService.getUser(projectName);
		List listLocalizationDTOs = localizationService.getLocalizations(projectName);
		VersionDTO versionDTO = versionService.getCurrentVersion(projectName);
		Map map = translationRatioService.getRatioCollectionsByLocaleMap(projectName, versionDTO.getName());
		for (LocalizationDTO localizationDTO : listLocalizationDTOs)
		{
			Set setUsers = localizationPermissionService.getUser(localizationDTO.getId());
			for (UserDTO userDTO : setUsers)
			{
				if (setDevelopers.contains(userDTO) == false)
				{
					sendNotification(projectName, userDTO, localizationDTO.getLocale(), map);
				}
			}
		}
	}

	/**
	 * When a translator hasn't finished his work and the last time he worked on
	 * Jlot is more than three days ago, the system sends him a notification
	 * Mail
	 *
	 * @param projectName
	 * @param translator
	 * @param translatorLocale
	 * @param map
	 *
	 * @author vlstr
	 */
	public void sendNotification ( String projectName, UserDTO translator, Locale translatorLocale, Map map )
	{

		LocalizationDTO localizationDTO = localizationService.getLocalization(projectName, translatorLocale);
		RatioCollection ratioCollection = map.get(translatorLocale);

		Date lastChangesUpdate = localizationDTO.getLastChangesDate();
		int reviewPercentage = (int) Math.floor(ratioCollection.getReviewRatio().getPercentage());
		int translatePercentage = (int) Math.floor(ratioCollection.getTranslateRatio().getPercentage());

		Calendar nowCalendar = Calendar.getInstance();
		nowCalendar.add(Calendar.DAY_OF_WEEK, -3);
		Date threeDaysAgoDate = nowCalendar.getTime();

		if (reviewPercentage < 100 && translatePercentage < 100 && lastChangesUpdate.before(threeDaysAgoDate))
		{
			translatorNotificationMailingService.executeNotificationJob(projectName, translator);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy