package org.sigmah.server.util;
import java.util.Calendar;
import java.util.Date;
import org.sigmah.server.domain.calendar.PersonalEvent;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.persist.PersistService;
import javax.persistence.EntityManager;
import org.apache.commons.lang3.StringUtils;
import org.sigmah.server.dao.ProjectDAO;
import org.sigmah.server.domain.Project;
import org.sigmah.server.inject.ConfigurationModule;
import org.sigmah.server.inject.I18nServerModule;
import org.sigmah.server.inject.MapperModule;
import org.sigmah.server.inject.PersistenceModule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
/**
*
* @author Mohamed KHADHRAOUI (mohamed.khadhraoui@netapsys.fr)
*/
public class PersonnalEventLoader {
private static final Logger LOGGER = LoggerFactory.getLogger(PersonnalEventLoader.class);
public static void main(String[] args) {
LOGGER.info("PersonnalEventLoader started");
Integer projectId;
Integer count;
final Injector injector = Guice.createInjector(
// Configuration module.
new ConfigurationModule(),
// Persistence module.
new PersistenceModule(),
// Mapper module.
new MapperModule(),
// I18nServer module.
new I18nServerModule());
if (args != null && args.length > 1 && StringUtils.isNumeric(args[0]) && StringUtils.isNumeric(args[1])) {
count = Integer.valueOf(args[1]);
projectId = Integer.valueOf(args[0]);
} else {
LOGGER.error("Parameters are not correct");
LOGGER.info("PersonnalEventLoader ended with errors");
return;
}
injector.getInstance(PersistService.class).start();
final ProjectDAO projectDAO = injector.getInstance(ProjectDAO.class);
final Project project = projectDAO.findById(projectId);
if (project != null) {
final EntityManager em = injector.getProvider(EntityManager.class).get();
em.getTransaction().begin();
LOGGER.info("Creating" + count + " PersonalEvent");
try {
final Calendar cal = count < 365 ? initCalendar(2016) : initCalendar(2015);
for (int i = 0; i < count; i++) {
cal.add(Calendar.DAY_OF_MONTH, 1);
PersonalEvent personEvent = personalEventFactory(cal.getTime(), project.getCalendarId(), i);
em.merge(personEvent);
}
em.getTransaction().commit();
} catch (Exception e) {
LOGGER.error("An error occured while duplicating projects.", e);
em.getTransaction().rollback();
} finally {
injector.getInstance(PersistService.class).stop();
}
LOGGER.info("PersonnalEventLoader ended with success");
} else {
LOGGER.error("Project with id = " + projectId + " not found.");
injector.getInstance(PersistService.class).stop();
LOGGER.info("PersonnalEventLoader ended with errors");
}
}
/**
* Instanciate and initialize PersonalEvent.
*
* @param startDate
* @param parentCalendarId
* @param i
* @return
*/
public static PersonalEvent personalEventFactory(Date startDate, Integer parentCalendarId, int i) {
final PersonalEvent personalEvent = new PersonalEvent();
personalEvent.setDateCreated(new Date());
personalEvent.setDescription("Gen personal event " + i);
personalEvent.setSummary("gen personal event summary " + i);
personalEvent.setStartDate(startDate);
final Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY + 1);
personalEvent.setEndDate(cal.getTime());
personalEvent.setCalendarId(parentCalendarId);
return personalEvent;
}
/**
* init calendar.
*
* @param year
* @return
*/
private static Calendar initCalendar(int year) {
final Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal;
}
}