package nl.ipo.cds.etl.process;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import nl.idgis.commons.jobexecutor.Job;
import nl.idgis.commons.jobexecutor.JobLogger;
import nl.idgis.commons.jobexecutor.Process;
import nl.ipo.cds.dao.ManagerDao;
import nl.ipo.cds.domain.Thema;
import nl.ipo.cds.domain.TransformJob;
import nl.ipo.cds.etl.Transformer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class TransformProcess implements Process<TransformJob>, ApplicationContextAware {
private static final Log log = LogFactory.getLog(TransformProcess.class);
private ApplicationContext applicationContext;
private final ManagerDao managerDao;
public TransformProcess(ManagerDao managerDao) {
this.managerDao = managerDao;
}
@Override
public boolean process (TransformJob job, final JobLogger logger) throws Exception {
Map<String, Transformer> transformers = applicationContext.getBeansOfType(Transformer.class);
log.debug("# of transformers found: " + transformers.size());
List<String> themeNames = getThemeNamesThatNeedTransformation ();
for(String transformerName : transformers.keySet()) {
Transformer transformer = transformers.get(transformerName);
log.debug("starting transformer: " + transformerName);
transformer.transform(themeNames);
}
log.debug("transformation finished");
return false;
}
private List<String> getThemeNamesThatNeedTransformation () {
final Set<String> themeNames = new LinkedHashSet<String> ();
List<Thema> themas = managerDao.getImportedThemasWithoutSubsequentTransform();
for (Thema thema : themas) {
log.debug("needs transformation (imported): " + thema);
themeNames.add(thema.getNaam());
}
themas = managerDao.getRemovedThemasWithoutSubsequentTransform();
for (Thema thema : themas) {
log.debug("needs transformation (removed): " + thema);
themeNames.add(thema.getNaam());
}
return new ArrayList<String>(themeNames);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Override
public Class<? extends Job> getJobType () {
return TransformJob.class;
}
}