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