package org.sigmah.server.util;
/*
* #%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%
*/
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.persist.PersistService;
import java.util.Arrays;
import java.util.HashSet;
import javax.persistence.EntityManager;
import org.apache.commons.lang3.StringUtils;
import org.sigmah.server.dao.ProjectDAO;
import org.sigmah.server.domain.Country;
import org.sigmah.server.domain.OrgUnit;
import org.sigmah.server.domain.Organization;
import org.sigmah.server.domain.PhaseModel;
import org.sigmah.server.domain.Project;
import org.sigmah.server.domain.ProjectModel;
import org.sigmah.server.domain.User;
import org.sigmah.server.domain.logframe.LogFrameModel;
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.sigmah.server.servlet.exporter.models.Realizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Mohamed KHADHRAOUI (mohamed.khadhraoui@netapsys.fr)
*/
public class Loader {
/**
* Id of project , project should be in database.
*/
private static Integer projectId = 15472 /*953*/;
/**
* Count of project to be inserted.
*/
private static Integer count = 2;
private static final Logger LOGGER=LoggerFactory.getLogger(Loader.class);
/**
* Load one project from data base and duplicate its multiples times for
* test.
*
* @param args
*/
public static void main(String[] args) {
LOGGER.info("Loader project started.");
final Injector injector = Guice.createInjector(
// Configuration module.
new ConfigurationModule(),
// Persistence module.
new PersistenceModule(),
// Mapper module.
new MapperModule(),
// I18nServer module.
new I18nServerModule());
if(args!=null){
if( args.length>0 && StringUtils.isNumeric(args[0])){
projectId=Integer.valueOf(args[0]);
}
if(args.length>1 && StringUtils.isNumeric(args[1])){
count=Integer.valueOf(args[1]);
}
}
injector.getInstance(PersistService.class).start();
final EntityManager em = injector.getProvider(EntityManager.class).get();
final ProjectDAO projectDAO = injector.getInstance(ProjectDAO.class);
final Project project = projectDAO.findById(projectId);
if(project==null){
LOGGER.info("Project not found .");
return ;
}
LOGGER.info("Duplicating project with id: "+project + " for "+count+" times ");
em.getTransaction().begin();
try {
final Class[] classes = {Organization.class,
ProjectModel.class,
User.class, OrgUnit.class, Country.class, PhaseModel.class, LogFrameModel.class};
for (int i = 0; i < count; i++) {
final Project newProject = Realizer.realize(project, new HashSet<>(Arrays.asList("id")), classes);
newProject.setName("gen-" + i);
newProject.getId();
em.merge(newProject);
}
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("Loader project ended.");
}
}