package edu.harvard.med.screensaver.io.screens; import org.apache.commons.cli.OptionBuilder; import org.apache.log4j.Logger; import edu.harvard.med.screensaver.db.DAOTransaction; import edu.harvard.med.screensaver.db.GenericEntityDAO; import edu.harvard.med.screensaver.io.CommandLineApplication; import edu.harvard.med.screensaver.model.screens.Screen; import edu.harvard.med.screensaver.service.screens.ScreenDerivedPropertiesUpdater; public class ScreeningStatisticsUpdater extends CommandLineApplication { private static final Logger log = Logger.getLogger(ScreeningStatisticsUpdater.class); public static void main(String[] args) { new ScreeningStatisticsUpdater(args); } private int nModified = 0; private int nProcessed = 0; private ScreeningStatisticsUpdater(String[] args) { super(args); addCommandLineOption(OptionBuilder.hasArg(false).withDescription("do not modify database; report modified counts only").withLongOpt("no-updates").create("n")); processOptions(true, false); final boolean noUpdates = isCommandLineFlagSet("n"); final GenericEntityDAO dao = getSpringBean("genericEntityDao", GenericEntityDAO.class); final ScreenDerivedPropertiesUpdater screenDerivedPropertiesUpdater = getSpringBean("screenDerivedPropertiesUpdater", ScreenDerivedPropertiesUpdater.class); for (final Screen screenIn : dao.findAllEntitiesOfType(Screen.class)) { if (screenIn.isStudyOnly()) { continue; } dao.doInTransaction(new DAOTransaction() { @Override public void runTransaction() { log.info("processing screen " + screenIn.getFacilityId()); Screen screenOut = screenDerivedPropertiesUpdater.updateScreeningStatistics(screenIn); if (!noUpdates) { dao.flush(); } dao.clear(); if (!screenIn.isEquivalent(screenOut)) { log.info("modified screen " + screenIn.getFacilityId()); ++nModified; } ++nProcessed; } }); } log.info((noUpdates ? "would have " : "") + "modified " + nModified + " of " + nProcessed + " screen(s)"); } }