package pt.utl.ist.scripts.runOnce; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Set; import net.sourceforge.fenixedu.domain.log.requests.ErrorLog; import net.sourceforge.fenixedu.domain.log.requests.ExceptionType; import net.sourceforge.fenixedu.domain.log.requests.RequestLog; import net.sourceforge.fenixedu.domain.log.requests.RequestLogDay; import net.sourceforge.fenixedu.domain.log.requests.RequestLogMonth; import net.sourceforge.fenixedu.domain.log.requests.RequestLogYear; import org.joda.time.DateTime; import pt.ist.bennu.core.domain.Bennu; import pt.ist.fenixframework.Atomic; import pt.utl.ist.scripts.commons.AtomicScript; public class UpdateRequestLogToYMDTree extends AtomicScript { private RequestLogDay last; public static void main(String[] args) { process(new UpdateRequestLogToYMDTree()); System.exit(0); } private void addRequestLogToYMD(RequestLog requestLog) { DateTime requestTime = requestLog.getRequestTime(); int year = requestTime.getYear(); int month = requestTime.getMonthOfYear(); int day = requestTime.getDayOfMonth(); for (RequestLogYear requestLogYear : Bennu.getInstance().getRequestLogYearsSet()) { if (requestLogYear.getYear().equals(year)) { for (RequestLogMonth requestLogMonth : requestLogYear.getMonths()) { if (requestLogMonth.getMonthOfYear().equals(month)) { for (RequestLogDay requestLogDay : requestLogMonth.getDays()) { if (requestLogDay.getDayOfMonth().equals(day)) { requestLogDay.addLogs(requestLog); return; } } RequestLogDay requestLogDay = new RequestLogDay(); requestLogDay.setDayOfMonth(day); requestLogMonth.addDays(requestLogDay); requestLogDay.addLogs(requestLog); return; } } RequestLogMonth requestLogMonth = new RequestLogMonth(); requestLogMonth.setMonthOfYear(month); requestLogYear.addMonths(requestLogMonth); RequestLogDay requestLogDay = new RequestLogDay(); requestLogDay.setDayOfMonth(day); requestLogMonth.addDays(requestLogDay); requestLogDay.addLogs(requestLog); return; } } RequestLogYear requestLogYear = new RequestLogYear(); requestLogYear.setYear(year); RequestLogMonth requestLogMonth = new RequestLogMonth(); requestLogMonth.setMonthOfYear(month); requestLogYear.addMonths(requestLogMonth); RequestLogDay requestLogDay = new RequestLogDay(); requestLogDay.setDayOfMonth(day); requestLogMonth.addDays(requestLogDay); requestLogDay.addLogs(requestLog); return; } private RequestLogDay createNextList(Set requestLogDays, RequestLogDay first) { final ArrayList days = new ArrayList(); days.addAll(requestLogDays); Collections.sort(days, new Comparator() { @Override public int compare(RequestLogDay o1, RequestLogDay o2) { return o1.getDayOfMonth().compareTo(o2.getDayOfMonth()); } }); last = first; for (final RequestLogDay requestLogDay : days) { requestLogDay.setPrevious(last); last = requestLogDay; } return last; } @Override @Atomic(flattenNested = false, mode = Atomic.TxMode.WRITE) protected void run() throws Exception { for (RequestLogYear requestLogYear : Bennu.getInstance().getRequestLogYearsSet()) { for (RequestLogMonth requestLogMonth : requestLogYear.getMonths()) { for (RequestLogDay requestLogDay : requestLogMonth.getDays()) { requestLogDay.delele(); } requestLogMonth.delete(); } requestLogYear.delete(); } for (ExceptionType exceptionType : Bennu.getInstance().getExceptionTypesSet()) { for (ErrorLog error : exceptionType.getErrorLogs()) { for (final RequestLog requestLog : error.getRequestLogs()) { addRequestLogToYMD(requestLog); } } } RequestLogDay linking = null; ArrayList years = new ArrayList(); years.addAll(Bennu.getInstance().getRequestLogYearsSet()); Collections.sort(years, new Comparator() { @Override public int compare(RequestLogYear o1, RequestLogYear o2) { return o1.getYear().compareTo(o2.getYear()); } }); for (RequestLogYear requestLogYear : years) { for (RequestLogMonth requestLogMonth : requestLogYear.getMonths()) { linking = createNextList(requestLogMonth.getDays(), linking); } } Bennu.getInstance().setMostRecentRequestLogDay(linking); } }