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.atlas.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.atlas.data.analysis.base.MoneyWiseXAnalysisValues;
22  
23  import java.util.Currency;
24  
25  /**
26   * SecurityValues class.
27   */
28  public final class MoneyWiseXAnalysisSecurityValues
29          extends MoneyWiseXAnalysisValues<MoneyWiseXAnalysisSecurityValues, MoneyWiseXAnalysisSecurityAttr> {
30      /**
31       * Constructor.
32       *
33       * @param pCurrency the account currency
34       */
35      public MoneyWiseXAnalysisSecurityValues(final Currency pCurrency) {
36          this(pCurrency, pCurrency);
37      }
38  
39      /**
40       * Constructor.
41       *
42       * @param pCurrency          the account currency
43       * @param pReportingCurrency the reporting currency
44       */
45      public MoneyWiseXAnalysisSecurityValues(final Currency pCurrency,
46                                              final Currency pReportingCurrency) {
47          /* Initialise class */
48          super(MoneyWiseXAnalysisSecurityAttr.class);
49  
50          /* Initialise units etc. to zero */
51          setValue(MoneyWiseXAnalysisSecurityAttr.UNITS, new OceanusUnits());
52          setValue(MoneyWiseXAnalysisSecurityAttr.VALUE, new OceanusMoney(pCurrency));
53          setValue(MoneyWiseXAnalysisSecurityAttr.VALUATION, new OceanusMoney(pReportingCurrency));
54          setValue(MoneyWiseXAnalysisSecurityAttr.RESIDUALCOST, new OceanusMoney(pReportingCurrency));
55          setValue(MoneyWiseXAnalysisSecurityAttr.REALISEDGAINS, new OceanusMoney(pReportingCurrency));
56          setValue(MoneyWiseXAnalysisSecurityAttr.UNREALISEDGAINS, new OceanusMoney(pReportingCurrency));
57          setValue(MoneyWiseXAnalysisSecurityAttr.GAINSADJUST, new OceanusMoney(pReportingCurrency));
58          setValue(MoneyWiseXAnalysisSecurityAttr.DIVIDEND, new OceanusMoney(pReportingCurrency));
59          setValue(MoneyWiseXAnalysisSecurityAttr.FUNDED, new OceanusMoney(pReportingCurrency));
60      }
61  
62      /**
63       * Constructor.
64       *
65       * @param pSource the source map.
66       */
67      public MoneyWiseXAnalysisSecurityValues(final MoneyWiseXAnalysisSecurityValues pSource) {
68          /* Initialise class */
69          super(pSource);
70      }
71  
72      @Override
73      protected MoneyWiseXAnalysisSecurityValues newSnapShot() {
74          return new MoneyWiseXAnalysisSecurityValues(this);
75      }
76  
77      @Override
78      public void adjustToBaseValues(final MoneyWiseXAnalysisSecurityValues pBase) {
79          /* Adjust invested/gains values */
80          adjustMoneyToBase(pBase, MoneyWiseXAnalysisSecurityAttr.REALISEDGAINS);
81          adjustMoneyToBase(pBase, MoneyWiseXAnalysisSecurityAttr.UNREALISEDGAINS);
82          adjustMoneyToBase(pBase, MoneyWiseXAnalysisSecurityAttr.DIVIDEND);
83      }
84  
85      @Override
86      public void resetBaseValues() {
87          /* Create a zero value in the correct currency */
88          OceanusMoney myValue = getMoneyValue(MoneyWiseXAnalysisSecurityAttr.RESIDUALCOST);
89          myValue = new OceanusMoney(myValue);
90          myValue.setZero();
91  
92          /* Reset Growth Adjust values */
93          setValue(MoneyWiseXAnalysisSecurityAttr.UNREALISEDGAINS, myValue);
94          setValue(MoneyWiseXAnalysisSecurityAttr.REALISEDGAINS, new OceanusMoney(myValue));
95          setValue(MoneyWiseXAnalysisSecurityAttr.DIVIDEND, new OceanusMoney(myValue));
96      }
97  
98      /**
99       * Set zero money.
100      *
101      * @param pAttr the attribute
102      */
103     public void setZeroMoney(final MoneyWiseXAnalysisSecurityAttr pAttr) {
104         OceanusMoney myValue = getMoneyValue(pAttr);
105         myValue = new OceanusMoney(myValue);
106         myValue.setZero();
107         setValue(pAttr, myValue);
108     }
109 
110     /**
111      * Set zero money.
112      *
113      * @param pAttr the attribute
114      */
115     public void setZeroUnits(final MoneyWiseXAnalysisSecurityAttr pAttr) {
116         setValue(pAttr, new OceanusUnits());
117     }
118 
119     /**
120      * Are the values active?
121      *
122      * @return true/false
123      */
124     public boolean isActive() {
125         final OceanusUnits myUnits = getUnitsValue(MoneyWiseXAnalysisSecurityAttr.UNITS);
126         return myUnits != null && myUnits.isNonZero();
127     }
128 }