View Javadoc
1   /*
2    * MoneyWise: Finance Application
3    * Copyright 2012-2026. Tony Washer
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6    * use this file except in compliance with the License.  You may obtain a copy
7    * of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
14   * License for the specific language governing permissions and limitations under
15   * the License.
16   */
17  package io.github.tonywasher.joceanus.moneywise.tax.uk;
18  
19  import io.github.tonywasher.joceanus.oceanus.date.OceanusDate;
20  import io.github.tonywasher.joceanus.oceanus.date.OceanusDateRange;
21  import io.github.tonywasher.joceanus.oceanus.date.OceanusFiscalYear;
22  import io.github.tonywasher.joceanus.oceanus.format.OceanusDataFormatter;
23  import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataMap;
24  import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataObjectFormat;
25  import io.github.tonywasher.joceanus.moneywise.tax.MoneyWiseTaxYearCache;
26  
27  import java.util.LinkedHashMap;
28  import java.util.Map;
29  
30  /**
31   * UK Tax Year cache.
32   */
33  public class MoneyWiseUKTaxYearCache
34          extends MoneyWiseTaxYearCache
35          implements MetisDataMap<OceanusDate, MoneyWiseUKTaxYear>, MetisDataObjectFormat {
36      /**
37       * The cache.
38       */
39      private final Map<OceanusDate, MoneyWiseUKTaxYear> theCache;
40  
41      /**
42       * The date range.
43       */
44      private final OceanusDateRange theDateRange;
45  
46      /**
47       * Constructor.
48       */
49      public MoneyWiseUKTaxYearCache() {
50          /* Initialise underlying class */
51          super(OceanusFiscalYear.UK);
52  
53          /* Create the map */
54          theCache = new LinkedHashMap<>();
55  
56          /* Build the map */
57          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1981);
58          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1982);
59          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1983);
60          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1984);
61          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1985);
62          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1986);
63          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1987);
64          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1988);
65          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1989);
66          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1990);
67          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1991);
68          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1992);
69          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1993);
70          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1994);
71          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1995);
72          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1996);
73          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1997);
74          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1998);
75          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_1999);
76          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2000);
77          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2001);
78          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2002);
79          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2003);
80          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2004);
81          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2005);
82          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2006);
83          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2007);
84          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2008);
85          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2009);
86          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2010);
87          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2011);
88          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2012);
89          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2013);
90          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2014);
91          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2015);
92          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2016);
93          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2017);
94          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2018);
95          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2019);
96          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2020);
97          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2021);
98          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2022);
99          setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2023);
100         setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2024);
101         setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2025);
102         setTaxYearInCache(MoneyWiseUKTaxYearFactory.YEAR_2026);
103 
104         /* Determine the dateRange */
105         final OceanusDate myEnd = MoneyWiseUKTaxYearFactory.YEAR_2026.getYearEnd();
106         OceanusDate myStart = MoneyWiseUKTaxYearFactory.YEAR_1981.getYearEnd();
107         myStart = new OceanusDate(myStart);
108         myStart.adjustDay(1);
109         myStart.adjustYear(-1);
110         theDateRange = new OceanusDateRange(myStart, myEnd);
111     }
112 
113     /**
114      * Set into cache.
115      *
116      * @param pTaxYear the taxYear
117      */
118     private void setTaxYearInCache(final MoneyWiseUKTaxYear pTaxYear) {
119         theCache.put(pTaxYear.getYearEnd(), pTaxYear);
120     }
121 
122     @Override
123     public OceanusDateRange getDateRange() {
124         return theDateRange;
125     }
126 
127     @Override
128     public MoneyWiseUKTaxYear findTaxYearForRange(final OceanusDateRange pRange) {
129         return checkTaxYearRange(pRange)
130                 ? findTaxYearForDate(pRange.getEnd())
131                 : null;
132     }
133 
134     @Override
135     public MoneyWiseUKTaxYear findTaxYearForDate(final OceanusDate pDate) {
136         final OceanusDate myDate = getTaxYearDate(pDate);
137         return theCache.get(myDate);
138     }
139 
140     @Override
141     public Map<OceanusDate, MoneyWiseUKTaxYear> getUnderlyingMap() {
142         return theCache;
143     }
144 
145     @Override
146     public String toString() {
147         return MoneyWiseUKTaxYearCache.class.getSimpleName();
148     }
149 
150     @Override
151     public String formatObject(final OceanusDataFormatter pFormatter) {
152         return toString();
153     }
154 }