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.metis.data.MetisDataType;
20  import io.github.tonywasher.joceanus.moneywise.lethe.data.analysis.base.MoneyWiseAnalysisAttribute;
21  import io.github.tonywasher.joceanus.oceanus.resource.OceanusBundleId;
22  
23  /**
24   * SecurityAttribute enumeration.
25   */
26  public enum MoneyWiseAnalysisSecurityAttr implements MoneyWiseAnalysisAttribute {
27      /**
28       * Units.
29       */
30      UNITS,
31  
32      /**
33       * Valuation.
34       */
35      VALUATION,
36  
37      /**
38       * Foreign Valuation.
39       */
40      FOREIGNVALUE,
41  
42      /**
43       * Valuation Delta.
44       */
45      VALUEDELTA,
46  
47      /**
48       * Foreign Valuation Delta.
49       */
50      FOREIGNVALUEDELTA,
51  
52      /**
53       * Exchange Rate.
54       */
55      EXCHANGERATE,
56  
57      /**
58       * Residual Cost.
59       */
60      RESIDUALCOST,
61  
62      /**
63       * Realised Gains.
64       */
65      REALISEDGAINS,
66  
67      /**
68       * GrowthAdjust.
69       */
70      GROWTHADJUST,
71  
72      /**
73       * Invested.
74       */
75      INVESTED,
76  
77      /**
78       * Foreign Invested Amount.
79       */
80      FOREIGNINVESTED,
81  
82      /**
83       * Dividend.
84       */
85      DIVIDEND,
86  
87      /**
88       * MarketGrowth.
89       */
90      MARKETGROWTH,
91  
92      /**
93       * ForeignMarketGrowth.
94       */
95      FOREIGNMARKETGROWTH,
96  
97      /**
98       * LocalMarketGrowth.
99       */
100     LOCALMARKETGROWTH,
101 
102     /**
103      * Currency Fluctuation.
104      */
105     CURRENCYFLUCT,
106 
107     /**
108      * Profit.
109      */
110     PROFIT,
111 
112     /**
113      * Profit.
114      */
115     MARKETPROFIT,
116 
117     /**
118      * CashInvested.
119      */
120     CASHINVESTED,
121 
122     /**
123      * Consideration.
124      */
125     CONSIDERATION,
126 
127     /**
128      * CashConsideration (returned cash).
129      */
130     RETURNEDCASH,
131 
132     /**
133      * StockConsideration (transferred value).
134      */
135     XFERREDVALUE,
136 
137     /**
138      * CostDilution.
139      */
140     COSTDILUTION,
141 
142     /**
143      * Capital Gain.
144      */
145     CAPITALGAIN,
146 
147     /**
148      * AllowedCost.
149      */
150     ALLOWEDCOST,
151 
152     /**
153      * XferredCost.
154      */
155     XFERREDCOST,
156 
157     /**
158      * Price.
159      */
160     PRICE,
161 
162     /**
163      * CashType.
164      */
165     CASHTYPE;
166 
167     /**
168      * The String name.
169      */
170     private String theName;
171 
172     @Override
173     public String toString() {
174         /* If we have not yet loaded the name */
175         if (theName == null) {
176             /* Load the name */
177             theName = bundleIdForSecurityAttr(this).getValue();
178         }
179 
180         /* return the name */
181         return theName;
182     }
183 
184     @Override
185     public boolean isCounter() {
186         return switch (this) {
187             case UNITS, RESIDUALCOST, REALISEDGAINS, GROWTHADJUST, DIVIDEND, INVESTED, FOREIGNINVESTED -> true;
188             default -> false;
189         };
190     }
191 
192     @Override
193     public MetisDataType getDataType() {
194         return switch (this) {
195             case UNITS -> MetisDataType.UNITS;
196             case PRICE -> MetisDataType.PRICE;
197             case EXCHANGERATE, COSTDILUTION -> MetisDataType.RATIO;
198             case CASHTYPE -> MetisDataType.ENUM;
199             default -> MetisDataType.MONEY;
200         };
201     }
202 
203     /**
204      * Obtain the resource bundleId for the attribute.
205      *
206      * @param pAttr the attribute
207      * @return the resource bundleId
208      */
209     private static OceanusBundleId bundleIdForSecurityAttr(final MoneyWiseAnalysisSecurityAttr pAttr) {
210         /* Create the map and return it */
211         return switch (pAttr) {
212             case VALUATION -> MoneyWiseAnalysisValuesResource.ACCOUNTATTR_VALUATION;
213             case FOREIGNVALUE -> MoneyWiseAnalysisValuesResource.ACCOUNTATTR_FOREIGNVALUE;
214             case VALUEDELTA -> MoneyWiseAnalysisValuesResource.ACCOUNTATTR_VALUEDELTA;
215             case FOREIGNVALUEDELTA -> MoneyWiseAnalysisValuesResource.SECURITYATTR_FOREIGNVALUEDELTA;
216             case EXCHANGERATE -> MoneyWiseAnalysisValuesResource.ACCOUNTATTR_EXCHANGERATE;
217             case UNITS -> MoneyWiseAnalysisValuesResource.SECURITYATTR_UNITS;
218             case RESIDUALCOST -> MoneyWiseAnalysisValuesResource.SECURITYATTR_RESIDUALCOST;
219             case REALISEDGAINS -> MoneyWiseAnalysisValuesResource.SECURITYATTR_REALISEDGAINS;
220             case GROWTHADJUST -> MoneyWiseAnalysisValuesResource.SECURITYATTR_GROWTHADJUST;
221             case INVESTED -> MoneyWiseAnalysisValuesResource.SECURITYATTR_INVESTED;
222             case FOREIGNINVESTED -> MoneyWiseAnalysisValuesResource.SECURITYATTR_FOREIGNINVESTED;
223             case DIVIDEND -> MoneyWiseAnalysisValuesResource.SECURITYATTR_DIVIDEND;
224             case MARKETGROWTH -> MoneyWiseAnalysisValuesResource.SECURITYATTR_MARKETGROWTH;
225             case FOREIGNMARKETGROWTH -> MoneyWiseAnalysisValuesResource.SECURITYATTR_FOREIGNMARKETGROWTH;
226             case LOCALMARKETGROWTH -> MoneyWiseAnalysisValuesResource.SECURITYATTR_LOCALMARKETGROWTH;
227             case CURRENCYFLUCT -> MoneyWiseAnalysisValuesResource.ACCOUNTATTR_CURRENCYFLUCT;
228             case MARKETPROFIT -> MoneyWiseAnalysisValuesResource.SECURITYATTR_MARKETPROFIT;
229             case PROFIT -> MoneyWiseAnalysisValuesResource.SECURITYATTR_PROFIT;
230             case CONSIDERATION -> MoneyWiseAnalysisValuesResource.SECURITYATTR_CONSIDER;
231             case RETURNEDCASH -> MoneyWiseAnalysisValuesResource.SECURITYATTR_RETURNEDCASH;
232             case XFERREDVALUE -> MoneyWiseAnalysisValuesResource.SECURITYATTR_XFERREDVALUE;
233             case XFERREDCOST -> MoneyWiseAnalysisValuesResource.SECURITYATTR_XFERREDCOST;
234             case COSTDILUTION -> MoneyWiseAnalysisValuesResource.SECURITYATTR_COSTDILUTION;
235             case CASHINVESTED -> MoneyWiseAnalysisValuesResource.SECURITYATTR_CASHINVESTED;
236             case CAPITALGAIN -> MoneyWiseAnalysisValuesResource.SECURITYATTR_CAPITALGAIN;
237             case ALLOWEDCOST -> MoneyWiseAnalysisValuesResource.SECURITYATTR_ALLOWEDCOST;
238             case PRICE -> MoneyWiseAnalysisValuesResource.SECURITYATTR_PRICE;
239             case CASHTYPE -> MoneyWiseAnalysisValuesResource.SECURITYATTR_CASHTYPE;
240             default -> throw new IllegalArgumentException();
241         };
242     }
243 }