MoneyWiseUIResource.java

/*
 * MoneyWise: Finance Application
 * Copyright 2012-2026. Tony Washer
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License.  You may obtain a copy
 * of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package io.github.tonywasher.joceanus.moneywise.ui;

import io.github.tonywasher.joceanus.oceanus.resource.OceanusBundleId;
import io.github.tonywasher.joceanus.oceanus.resource.OceanusBundleLoader;
import io.github.tonywasher.joceanus.metis.data.MetisDataItem.MetisDataFieldId;

import java.util.EnumMap;
import java.util.Map;
import java.util.ResourceBundle;

/**
 * Resource IDs for MoneyWise UI Fields.
 */
public enum MoneyWiseUIResource
        implements OceanusBundleId, MetisDataFieldId {
    /**
     * Frozen ToolTip.
     */
    ICON_FROZEN("icons.Tip.Frozen"),

    /**
     * Reconcile ToolTip.
     */
    ICON_RECONCILE("icons.Tip.Reconcile"),

    /**
     * Release ToolTip.
     */
    ICON_RELEASE("icons.Tip.Release"),

    /**
     * Locked ToolTip.
     */
    ICON_LOCKED("icons.Tip.Locked"),

    /**
     * Lock ToolTip.
     */
    ICON_LOCK("icons.Tip.Lock"),

    /**
     * UnLock ToolTip.
     */
    ICON_UNLOCK("icons.Tip.UnLock"),

    /**
     * DirectionTo ToolTip.
     */
    ICON_DIRTO("icons.Tip.DirectionTo"),

    /**
     * DirectionFrom ToolTip.
     */
    ICON_DIRFROM("icons.Tip.DirectionFrom"),

    /**
     * Report Prompt.
     */
    REPORT_PROMPT("report.Prompt.Select"),

    /**
     * Report Prompt.
     */
    REPORT_TITLE("report.Title.Select"),

    /**
     * ShowCLosed Prompt.
     */
    UI_PROMPT_SHOWCLOSED("Prompt.ShowClosed"),

    /**
     * SpotPrice Date Prompt.
     */
    SPOTEVENT_DATE("spotEvent.Prompt.Date"),

    /**
     * SpotPrice Next Button.
     */
    SPOTPRICE_NEXT("spotPrice.ToolTip.Next"),

    /**
     * SpotPrice Previous Button.
     */
    SPOTPRICE_PREV("spotPrice.ToolTip.Prev"),

    /**
     * SpotPrice Title.
     */
    SPOTPRICE_TITLE("spotPrice.Title.Select"),

    /**
     * SpotRate Currency Prompt.
     */
    SPOTRATE_PROMPT_CURR("spotRate.Prompt.Currency"),

    /**
     * SpotRate Next Button.
     */
    SPOTRATE_NEXT("spotRate.ToolTip.Next"),

    /**
     * SpotRate Previous Button.
     */
    SPOTRATE_PREV("spotRate.ToolTip.Prev"),

    /**
     * SpotPrice Title.
     */
    SPOTRATE_TITLE("spotRate.Title.Select"),

    /**
     * AnalysisSelect Title.
     */
    ANALYSIS_TITLE("analysisSelect.Title.Analysis"),

    /**
     * AnalysisSelect Filter Title.
     */
    ANALYSIS_FILTER_TITLE("analysisSelect.Title.Filter"),

    /**
     * AnalysisSelect DateRange Prompt.
     */
    ANALYSIS_PROMPT_RANGE("analysisSelect.Prompt.DateRange"),

    /**
     * AnalysisSelect Filter Prompt.
     */
    ANALYSIS_PROMPT_FILTER("analysisSelect.Prompt.Filter"),

    /**
     * AnalysisSelect FilterType Prompt.
     */
    ANALYSIS_PROMPT_FILTERTYPE("analysisSelect.Prompt.FilterType"),

    /**
     * AnalysisSelect Bucket Prompt.
     */
    ANALYSIS_PROMPT_BUCKET("analysisSelect.Prompt.Bucket"),

    /**
     * AnalysisSelect ColumnSet Prompt.
     */
    ANALYSIS_PROMPT_COLUMNSET("analysisSelect.Prompt.ColumnSet"),

    /**
     * AnalysisSelect Bucket Prompt.
     */
    ANALYSIS_BUCKET_NONE("analysisSelect.Bucket.None"),

    /**
     * Action Column.
     */
    COLUMN_ACTION("Column.Action"),

    /**
     * DepositRates Tab.
     */
    DEPOSITPANEL_TAB_RATES("DepositPanel.Tab.Rates"),

    /**
     * OptionVests Tab.
     */
    OPTIONPANEL_TAB_VESTS("OptionPanel.Tab.Vests"),

    /**
     * SecurityPrices Tab.
     */
    SECURITYPANEL_TAB_PRICES("SecurityPanel.Tab.Prices"),

    /**
     * Transaction Info Tab.
     */
    TRANSPANEL_TAB_INFO("TransPanel.Tab.Info"),

    /**
     * Transaction Taxes Tab.
     */
    TRANSPANEL_TAB_TAXES("TransPanel.Tab.Taxes"),

    /**
     * Transaction Securities Tab.
     */
    TRANSPANEL_TAB_SECURITIES("TransPanel.Tab.Securities"),

    /**
     * Transaction Returned Tab.
     */
    TRANSPANEL_TAB_RETURNED("TransPanel.Tab.Returned"),

    /**
     * Balance ColumnSet.
     */
    COLUMNSET_BALANCE("analysisColumnSet.Balance"),

    /**
     * Standard ColumnSet.
     */
    COLUMNSET_STANDARD("analysisColumnSet.Standard"),

    /**
     * Salary ColumnSet.
     */
    COLUMNSET_SALARY("analysisColumnSet.Salary"),

    /**
     * Interest ColumnSet.
     */
    COLUMNSET_INTEREST("analysisColumnSet.Interest"),

    /**
     * Dividend ColumnSet.
     */
    COLUMNSET_DIVIDEND("analysisColumnSet.Dividend"),

    /**
     * Security ColumnSet.
     */
    COLUMNSET_SECURITY("analysisColumnSet.Security"),

    /**
     * All ColumnSet.
     */
    COLUMNSET_ALL("analysisColumnSet.All"),

    /**
     * Latest Activity Column Title.
     */
    ASSET_COLUMN_LATEST("Asset.Column.LastTran"),

    /**
     * Asset DataEntry.
     */
    ASSET_DATAENTRY("Asset.DataEntry"),

    /**
     * Asset Selection Title.
     */
    ASSET_TITLE_SELECT("Asset.Title.Select"),

    /**
     * Asset Selection Prompt.
     */
    ASSET_PROMPT_SELECT("Asset.Prompt.Select"),

    /**
     * Category DataEntry.
     */
    CATEGORY_DATAENTRY("Category.DataEntry"),

    /**
     * Category Selection Title.
     */
    CATEGORY_TITLE_SELECT("Category.Title.Select"),

    /**
     * Category Selection Prompt.
     */
    CATEGORY_PROMPT_SELECT("Category.Prompt.Select"),

    /**
     * Category Full Name Column Title.
     */
    CATEGORY_COLUMN_FULLNAME("Category.Column.FullName"),

    /**
     * Category Filter Prompt.
     */
    CATEGORY_PROMPT_FILTER("Category.Prompt.Filter"),

    /**
     * Category Filter Parents Text.
     */
    CATEGORY_FILTER_PARENT("Category.Filter.Parent"),

    /**
     * Category Filter ShowAll Text.
     */
    CATEGORY_FILTER_SHOWALL("Category.Filter.All"),

    /**
     * Report DataEntry.
     */
    REPORT_DATAENTRY("Report.DataEntry"),

    /**
     * SpotPrices DataEntry.
     */
    PRICES_DATAENTRY("SpotPrices.DataEntry"),

    /**
     * SpotRates DataEntry.
     */
    RATES_DATAENTRY("SpotRates.DataEntry"),

    /**
     * Register DataEntry.
     */
    REGISTER_DATAENTRY("Register.DataEntry"),

    /**
     * Filter DataEntry.
     */
    FILTER_DATAENTRY("Filter.DataEntry"),

    /**
     * Transaction DataEntry.
     */
    TRANSACTION_DATAENTRY("Transactions.DataEntry"),

    /**
     * Statement Column Direction.
     */
    STATEMENT_COLUMN_DIRECTION("Statement.Column.Direction"),

    /**
     * Statement Column Debit.
     */
    STATEMENT_COLUMN_DEBIT("Statement.Column.Debit"),

    /**
     * Statement Column Credit.
     */
    STATEMENT_COLUMN_CREDIT("Statement.Column.Credit"),

    /**
     * Statement Column Balance.
     */
    STATEMENT_COLUMN_BALANCE("Statement.Column.Balance"),

    /**
     * Statement Column Reconciled.
     */
    STATEMENT_COLUMN_RECONCILED("Statement.Column.Reconciled"),

    /**
     * Statement Column Years.
     */
    STATEMENT_COLUMN_YEARS("Statement.Column.Years"),

    /**
     * Statement Opening Balance Text.
     */
    STATEMENT_OPENINGBALANCE("Statement.Text.OpeningBalance"),

    /**
     * SpotRate Column Symbol.
     */
    SPOTRATE_COLUMN_SYMBOL("spotRate.Column.Symbol"),

    /**
     * Maintenance Account Tab.
     */
    MAINTENANCE_ACCOUNT("Maintenance.Tab.Account"),

    /**
     * Maintenance Category Tab.
     */
    MAINTENANCE_CATEGORY("Maintenance.Tab.Category"),

    /**
     * Maintenance Static Tab.
     */
    MAINTENANCE_STATIC("Maintenance.Tab.Static"),

    /**
     * Maintenance Settings Tab.
     */
    MAINTENANCE_SETTINGS("Maintenance.Tab.Preference"),

    /**
     * Main Register Tab.
     */
    MAIN_REGISTER("Main.Tab.Register"),

    /**
     * Main Report Tab.
     */
    MAIN_REPORT("Main.Tab.Report"),

    /**
     * Main Market Tab.
     */
    MAIN_MARKET("Main.Tab.Market"),

    /**
     * Main Maintenance Tab.
     */
    MAIN_MAINTENANCE("Main.Tab.Maint"),

    /**
     * Main Log Tab.
     */
    MAIN_LOG("Main.Tab.Log"),

    /**
     * Market Prices Tab.
     */
    MARKET_PRICES("Market.Tab.Prices"),

    /**
     * Market Rates Tab.
     */
    MARKET_RATES("Market.Tab.Rates"),

    /**
     * Main Menu Backup SVN.
     */
    MAIN_MENU_BACKUPSVN("Main.Menu.BackupSVN"),

    /**
     * Main Menu Restore SVN.
     */
    MAIN_MENU_RESTORESVN("Main.Menu.RestoreSVN"),

    /**
     * Main Menu Load Archive.
     */
    MAIN_MENU_LOADARCHIVE("Main.Menu.Archive"),

    /**
     * Main Menu CreateQIF.
     */
    MAIN_MENU_CREATEQIF("Main.Menu.CreateQIF"),

    /**
     * StaticData ShowDisabled.
     */
    STATICDATA_DISABLED("StaticData.Disabled"),

    /**
     * StaticData Selection.
     */
    STATICDATA_SELECTION("StaticData.Selection"),

    /**
     * StaticData Select.
     */
    STATICDATA_SELECT("StaticData.Select"),

    /**
     * StaticData Active.
     */
    STATICDATA_ACTIVE("StaticData.Active");

    /**
     * The ColumnSet Map.
     */
    private static final Map<MoneyWiseAnalysisColumnSet, OceanusBundleId> COLUMN_MAP = buildColumnMap();

    /**
     * The Resource Loader.
     */
    private static final OceanusBundleLoader LOADER = OceanusBundleLoader.getLoader(MoneyWiseUIResource.class.getCanonicalName(),
            ResourceBundle::getBundle);

    /**
     * The Id.
     */
    private final String theKeyName;

    /**
     * The Value.
     */
    private String theValue;

    /**
     * Constructor.
     *
     * @param pKeyName the key name
     */
    MoneyWiseUIResource(final String pKeyName) {
        theKeyName = pKeyName;
    }

    @Override
    public String getKeyName() {
        return theKeyName;
    }

    @Override
    public String getNameSpace() {
        return "MoneyWise.ui";
    }

    @Override
    public String getValue() {
        /* If we have not initialised the value */
        if (theValue == null) {
            /* Derive the value */
            theValue = LOADER.getValue(this);
        }

        /* return the value */
        return theValue;
    }

    @Override
    public String getId() {
        return getValue();
    }

    /**
     * Build column map.
     *
     * @return the map
     */
    private static Map<MoneyWiseAnalysisColumnSet, OceanusBundleId> buildColumnMap() {
        /* Create the map and return it */
        final Map<MoneyWiseAnalysisColumnSet, OceanusBundleId> myMap = new EnumMap<>(MoneyWiseAnalysisColumnSet.class);
        myMap.put(MoneyWiseAnalysisColumnSet.BALANCE, COLUMNSET_BALANCE);
        myMap.put(MoneyWiseAnalysisColumnSet.STANDARD, COLUMNSET_STANDARD);
        myMap.put(MoneyWiseAnalysisColumnSet.SALARY, COLUMNSET_SALARY);
        myMap.put(MoneyWiseAnalysisColumnSet.INTEREST, COLUMNSET_INTEREST);
        myMap.put(MoneyWiseAnalysisColumnSet.DIVIDEND, COLUMNSET_DIVIDEND);
        myMap.put(MoneyWiseAnalysisColumnSet.SECURITY, COLUMNSET_SECURITY);
        myMap.put(MoneyWiseAnalysisColumnSet.ALL, COLUMNSET_ALL);
        return myMap;
    }

    /**
     * Obtain key for columnSet.
     *
     * @param pValue the Value
     * @return the resource key
     */
    static OceanusBundleId getKeyForColumnSet(final MoneyWiseAnalysisColumnSet pValue) {
        return OceanusBundleLoader.getKeyForEnum(COLUMN_MAP, pValue);
    }
}