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.lethe.data.analysis.values;
18  
19  import io.github.tonywasher.joceanus.oceanus.decimal.OceanusMoney;
20  import io.github.tonywasher.joceanus.oceanus.decimal.OceanusUnits;
21  import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.base.MoneyWiseAnalysisValues;
22  
23  import java.util.Currency;
24  
25  /**
26   * SecurityValues class.
27   */
28  public final class MoneyWiseAnalysisSecurityValues
29          extends MoneyWiseAnalysisValues<MoneyWiseAnalysisSecurityValues, MoneyWiseAnalysisSecurityAttr> {
30      /**
31       * Constructor.
32       *
33       * @param pCurrency the account currency
34       */
35      public MoneyWiseAnalysisSecurityValues(final Currency pCurrency) {
36          /* Initialise class */
37          super(MoneyWiseAnalysisSecurityAttr.class);
38  
39          /* Initialise units etc. to zero */
40          super.setValue(MoneyWiseAnalysisSecurityAttr.UNITS, new OceanusUnits());
41          super.setValue(MoneyWiseAnalysisSecurityAttr.RESIDUALCOST, new OceanusMoney(pCurrency));
42          super.setValue(MoneyWiseAnalysisSecurityAttr.INVESTED, new OceanusMoney(pCurrency));
43          super.setValue(MoneyWiseAnalysisSecurityAttr.REALISEDGAINS, new OceanusMoney(pCurrency));
44          super.setValue(MoneyWiseAnalysisSecurityAttr.GROWTHADJUST, new OceanusMoney(pCurrency));
45          super.setValue(MoneyWiseAnalysisSecurityAttr.DIVIDEND, new OceanusMoney(pCurrency));
46      }
47  
48      /**
49       * Constructor.
50       *
51       * @param pCurrency          the account currency
52       * @param pReportingCurrency the reporting currency
53       */
54      public MoneyWiseAnalysisSecurityValues(final Currency pCurrency,
55                                             final Currency pReportingCurrency) {
56          /* Initialise class */
57          this(pReportingCurrency);
58  
59          /* Initialise additional values to zero */
60          super.setValue(MoneyWiseAnalysisSecurityAttr.FOREIGNINVESTED, new OceanusMoney(pCurrency));
61      }
62  
63      /**
64       * Constructor.
65       *
66       * @param pSource       the source map.
67       * @param pCountersOnly only copy counters
68       */
69      public MoneyWiseAnalysisSecurityValues(final MoneyWiseAnalysisSecurityValues pSource,
70                                             final boolean pCountersOnly) {
71          /* Initialise class */
72          super(pSource, pCountersOnly);
73      }
74  
75      @Override
76      protected MoneyWiseAnalysisSecurityValues getCounterSnapShot() {
77          return new MoneyWiseAnalysisSecurityValues(this, true);
78      }
79  
80      @Override
81      protected MoneyWiseAnalysisSecurityValues getFullSnapShot() {
82          return new MoneyWiseAnalysisSecurityValues(this, false);
83      }
84  
85      /**
86       * Is this a foreign security?
87       *
88       * @return true/false
89       */
90      private boolean isForeignSecurity() {
91          return getValue(MoneyWiseAnalysisSecurityAttr.FOREIGNINVESTED) != null;
92      }
93  
94      @Override
95      public void adjustToBaseValues(final MoneyWiseAnalysisSecurityValues pBase) {
96          /* Adjust invested/gains values */
97          adjustMoneyToBase(pBase, MoneyWiseAnalysisSecurityAttr.INVESTED);
98          adjustMoneyToBase(pBase, MoneyWiseAnalysisSecurityAttr.REALISEDGAINS);
99          adjustMoneyToBase(pBase, MoneyWiseAnalysisSecurityAttr.GROWTHADJUST);
100         adjustMoneyToBase(pBase, MoneyWiseAnalysisSecurityAttr.DIVIDEND);
101 
102         /* If we are a foreign security */
103         if (isForeignSecurity()) {
104             adjustMoneyToBase(pBase, MoneyWiseAnalysisSecurityAttr.FOREIGNINVESTED);
105         }
106     }
107 
108     @Override
109     public void resetBaseValues() {
110         /* Create a zero value in the correct currency */
111         OceanusMoney myValue = getMoneyValue(MoneyWiseAnalysisSecurityAttr.RESIDUALCOST);
112         myValue = new OceanusMoney(myValue);
113         myValue.setZero();
114 
115         /* Reset Growth Adjust values */
116         super.setValue(MoneyWiseAnalysisSecurityAttr.GROWTHADJUST, myValue);
117         super.setValue(MoneyWiseAnalysisSecurityAttr.INVESTED, new OceanusMoney(myValue));
118         super.setValue(MoneyWiseAnalysisSecurityAttr.REALISEDGAINS, new OceanusMoney(myValue));
119         super.setValue(MoneyWiseAnalysisSecurityAttr.DIVIDEND, new OceanusMoney(myValue));
120 
121         /* If we are a foreign security */
122         if (isForeignSecurity()) {
123             /* Create a zero value in the correct currency */
124             myValue = getMoneyValue(MoneyWiseAnalysisSecurityAttr.FOREIGNINVESTED);
125             myValue = new OceanusMoney(myValue);
126             myValue.setZero();
127 
128             /* Reset Invested values */
129             super.setValue(MoneyWiseAnalysisSecurityAttr.FOREIGNINVESTED, myValue);
130         }
131     }
132 
133     /**
134      * Are the values active?
135      *
136      * @return true/false
137      */
138     public boolean isActive() {
139         final OceanusUnits myUnits = getUnitsValue(MoneyWiseAnalysisSecurityAttr.UNITS);
140         return myUnits != null && myUnits.isNonZero();
141     }
142 }
143 
144