=== modified file 'dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/export/individual/manager/DefaultSelectedStateManager.java' --- dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/export/individual/manager/DefaultSelectedStateManager.java 2009-10-30 09:50:25 +0000 +++ dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/export/individual/manager/DefaultSelectedStateManager.java 2009-10-31 04:23:29 +0000 @@ -53,200 +53,188 @@ * @modifier Dang Duy Hieu * @since 2009-10-14 */ -public class DefaultSelectedStateManager - implements SelectedStateManager -{ - private static final Log LOG = LogFactory.getLog( DefaultSelectedStateManager.class ); - - public static final String SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_TYPE_NAME = "_individual_selected_period_type_name"; - - public static final String SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX = "_individual_selected_period_index"; - - public static final String SESSION_INDIVIDUAL_KEY_BASE_PERIOD = "_individual_base_period"; - - // ------------------------------------------------------------------------- - // Dependencies - // ------------------------------------------------------------------------- - - private SelectionManager selectionManager; - - public void setSelectionManager( SelectionManager selectionManager ) - { - this.selectionManager = selectionManager; - } - - private PeriodService periodService; - - public void setPeriodService( PeriodService periodService ) - { - this.periodService = periodService; - } - - // ------------------------------------------------------------------------- - // Cache - // ------------------------------------------------------------------------- - - private ThreadLocal> generatedPeriodsCache = new ThreadLocal>(); - - // ------------------------------------------------------------------------- - // SelectedStateManager implementation - // ------------------------------------------------------------------------- - - @SuppressWarnings( "unchecked" ) - public void setSelectedPeriodIndex( Integer index ) - { - getSession().put( SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX, index ); - } - - public Integer getSelectedPeriodIndex() - { - return (Integer) getSession().get( SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX ); - } - - @SuppressWarnings( "unchecked" ) - public void setSelectedPeriodTypeName( String periodTypeName ) - { - getSession().put( SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_TYPE_NAME, periodTypeName ); - } - - public String getSelectedPeriodTypeName() - { - return (String) getSession().get( SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_TYPE_NAME ); - } - - public Period getSelectedPeriod() - { - Integer index = getSelectedPeriodIndex(); - - if ( index == null ) - { - return null; - } - - List periods = getPeriodList(); - - if ( index >= 0 && index < periods.size() ) - { - Period selectedPeriod = periods.get( index ); - - Period period = null; - - for ( Period p : periodService.getAllPeriods() ) - { - if ( selectedPeriod.equals( p ) ) - { - period = p; - - return period; - } - } - } - - return null; - } - - public void clearSelectedPeriod() - { - getSession().remove( SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX ); - } - - public List getPeriodList() - { - List periods = generatedPeriodsCache.get(); - - Period basePeriod = getBasePeriod(); - - if ( periods == null || periods.size() == 0 - || !periods.get( 0 ).getPeriodType().equals( basePeriod.getPeriodType() ) || !periods.contains( basePeriod ) ) - { - CalendarPeriodType periodType = (CalendarPeriodType) getPeriodType(); - - LOG.debug( "Generated periods cache invalid, generating new periods based on " + basePeriod ); - - periods = periodType.generatePeriods( basePeriod ); - - generatedPeriodsCache.set( periods ); - } - - Collection persistedPeriods = periodService.getPeriodsByPeriodType( getPeriodType() ); - - // get the period elements which exist in Collection - persistedPeriods.retainAll( periods ); - Collections.sort( (ArrayList) persistedPeriods, new PeriodComparator() ); - - // return periods; - return (ArrayList) persistedPeriods; - } - - @SuppressWarnings( "unchecked" ) - public void nextPeriodSpan() - { - List periods = getPeriodList(); - CalendarPeriodType periodType = (CalendarPeriodType) getPeriodType(); - - Period basePeriod = periods.get( periods.size() - 1 ); - Period newBasePeriod = periodType.getNextPeriod( basePeriod ); - - // Future periods not allowed - if ( newBasePeriod.getStartDate().before( new Date() ) ) - { - getSession().put( SESSION_INDIVIDUAL_KEY_BASE_PERIOD, newBasePeriod ); - } - generatedPeriodsCache.remove(); - - } - - @SuppressWarnings( "unchecked" ) - public void previousPeriodSpan() - { - List periods = getPeriodList(); - CalendarPeriodType periodType = (CalendarPeriodType) getPeriodType(); - - Period basePeriod = periods.get( 0 ); - Period newBasePeriod = periodType.getPreviousPeriod( basePeriod ); - - getSession().put( SESSION_INDIVIDUAL_KEY_BASE_PERIOD, newBasePeriod ); - - generatedPeriodsCache.remove(); - } - - // ------------------------------------------------------------------------- - // Support methods - // ------------------------------------------------------------------------- - private PeriodType getPeriodType() - { - return periodService.getPeriodTypeByName( getSelectedPeriodTypeName() ); - } - - @SuppressWarnings( "unchecked" ) - private Period getBasePeriod() - { - Period basePeriod = (Period) getSession().get( SESSION_INDIVIDUAL_KEY_BASE_PERIOD ); - PeriodType periodType = getPeriodType(); - - if ( basePeriod == null ) - { - LOG.debug( "getBasePeriod(): Base period is null, creating new." ); - - basePeriod = periodType.createPeriod(); - getSession().put( SESSION_INDIVIDUAL_KEY_BASE_PERIOD, basePeriod ); - - selectionManager.setSeletedYear( DateUtils.getCurrentYear() ); - } - else if ( selectionManager.getSelectedYear() > 0 ) - { - Date firstDayOfYear = DateUtils.getFirstDayOfYear( selectionManager.getSelectedYear() ); - - basePeriod = periodType.createPeriod( firstDayOfYear ); - } - - return basePeriod; - } - - @SuppressWarnings( "unchecked" ) - private static final Map getSession() - { - return ActionContext.getContext().getSession(); - } +public class DefaultSelectedStateManager implements SelectedStateManager { + private static final Log LOG = LogFactory + .getLog(DefaultSelectedStateManager.class); + + public static final String SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_TYPE_NAME = "_individual_selected_period_type_name"; + + public static final String SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX = "_individual_selected_period_index"; + + public static final String SESSION_INDIVIDUAL_KEY_BASE_PERIOD = "_individual_base_period"; + + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + + private SelectionManager selectionManager; + + public void setSelectionManager(SelectionManager selectionManager) { + this.selectionManager = selectionManager; + } + + private PeriodService periodService; + + public void setPeriodService(PeriodService periodService) { + this.periodService = periodService; + } + + // ------------------------------------------------------------------------- + // Cache + // ------------------------------------------------------------------------- + + private ThreadLocal> generatedPeriodsCache = new ThreadLocal>(); + + // ------------------------------------------------------------------------- + // SelectedStateManager implementation + // ------------------------------------------------------------------------- + + @SuppressWarnings("unchecked") + public void setSelectedPeriodIndex(Integer index) { + getSession().put(SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX, index); + } + + public Integer getSelectedPeriodIndex() { + return (Integer) getSession().get( + SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX); + } + + @SuppressWarnings("unchecked") + public void setSelectedPeriodTypeName(String periodTypeName) { + getSession().put(SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_TYPE_NAME, + periodTypeName); + } + + public String getSelectedPeriodTypeName() { + return (String) getSession().get( + SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_TYPE_NAME); + } + + public Period getSelectedPeriod() { + Integer index = getSelectedPeriodIndex(); + + if (index == null) { + return null; + } + + List periods = getPeriodList(); + + if (index >= 0 && index < periods.size()) { + Period selectedPeriod = periods.get(index); + + Period period = null; + + for (Period p : periodService.getAllPeriods()) { + if (selectedPeriod.equals(p)) { + period = p; + + return period; + } + } + } + + return null; + } + + public void clearSelectedPeriod() { + getSession().remove(SESSION_INDIVIDUAL_KEY_SELECTED_PERIOD_INDEX); + } + + public List getPeriodList() { + List periods = generatedPeriodsCache.get(); + + Period basePeriod = getBasePeriod(); + + if (periods == null + || periods.size() == 0 + || !periods.get(0).getPeriodType().equals( + basePeriod.getPeriodType()) + || !periods.contains(basePeriod)) { + CalendarPeriodType periodType = (CalendarPeriodType) getPeriodType(); + + LOG + .debug("Generated periods cache invalid, generating new periods based on " + + basePeriod); + + periods = periodType.generatePeriods(basePeriod); + + generatedPeriodsCache.set(periods); + } + + Collection persistedPeriods = periodService + .getPeriodsByPeriodType(getPeriodType()); + + // get the period elements which exist in Collection + persistedPeriods.retainAll(periods); + Collections.sort((ArrayList) persistedPeriods, + new PeriodComparator()); + + // return periods; + return (ArrayList) persistedPeriods; + } + + @SuppressWarnings("unchecked") + public void nextPeriodSpan() { + List periods = getPeriodList(); + CalendarPeriodType periodType = (CalendarPeriodType) getPeriodType(); + + Period basePeriod = periods.get(periods.size() - 1); + Period newBasePeriod = periodType.getNextPeriod(basePeriod); + + // Future periods not allowed + if (newBasePeriod.getStartDate().before(new Date())) { + getSession().put(SESSION_INDIVIDUAL_KEY_BASE_PERIOD, newBasePeriod); + } + generatedPeriodsCache.remove(); + + } + + @SuppressWarnings("unchecked") + public void previousPeriodSpan() { + List periods = getPeriodList(); + CalendarPeriodType periodType = (CalendarPeriodType) getPeriodType(); + + Period basePeriod = periods.get(0); + Period newBasePeriod = periodType.getPreviousPeriod(basePeriod); + + getSession().put(SESSION_INDIVIDUAL_KEY_BASE_PERIOD, newBasePeriod); + + generatedPeriodsCache.remove(); + } + + // ------------------------------------------------------------------------- + // Support methods + // ------------------------------------------------------------------------- + private PeriodType getPeriodType() { + return periodService.getPeriodTypeByName(getSelectedPeriodTypeName()); + } + + @SuppressWarnings("unchecked") + private Period getBasePeriod() { + Period basePeriod = (Period) getSession().get( + SESSION_INDIVIDUAL_KEY_BASE_PERIOD); + PeriodType periodType = getPeriodType(); + + if (basePeriod == null) { + LOG.debug("getBasePeriod(): Base period is null, creating new."); + + basePeriod = periodType.createPeriod(); + getSession().put(SESSION_INDIVIDUAL_KEY_BASE_PERIOD, basePeriod); + + selectionManager.setSeletedYear(DateUtils.getCurrentYear()); + } else if (selectionManager.getSelectedYear() > 0) { + Date firstDayOfYear = DateUtils.getFirstDayOfYear(selectionManager + .getSelectedYear()); + + basePeriod = periodType.createPeriod(firstDayOfYear); + } + + return basePeriod; + } + + @SuppressWarnings("unchecked") + private static final Map getSession() { + return ActionContext.getContext().getSession(); + } }