MoneyWiseMaps.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.views;
import io.github.tonywasher.joceanus.metis.list.MetisListKey;
import io.github.tonywasher.joceanus.metis.viewer.MetisViewerEntry;
import io.github.tonywasher.joceanus.metis.viewer.MetisViewerManager;
import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicDataType;
import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseBasicResource;
import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePayee;
import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWisePortfolio;
import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurity;
import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseSecurityHolding;
import io.github.tonywasher.joceanus.moneywise.data.basic.MoneyWiseTransCategory;
import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseAccountInfoClass;
import io.github.tonywasher.joceanus.moneywise.data.statics.MoneyWiseStaticDataType;
import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataItem;
import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataResource;
import io.github.tonywasher.joceanus.prometheus.data.PrometheusDataSet;
import io.github.tonywasher.joceanus.prometheus.maps.PrometheusMapsCtl;
import io.github.tonywasher.joceanus.prometheus.views.PrometheusEditSet;
import io.github.tonywasher.joceanus.prometheus.views.PrometheusViewerEntryId;
import java.util.ArrayList;
import java.util.List;
/**
* MoneyWise Maps.
*/
public class MoneyWiseMaps {
/**
* The Map control.
*/
private final PrometheusMapsCtl theMaps;
/**
* Constructor.
*
* @param pView the view
*/
MoneyWiseMaps(final MoneyWiseView pView) {
/* Create the control */
theMaps = new PrometheusMapsCtl(MoneyWiseMaps::deconstructPair);
/* Build the maps */
buildMaps();
/* Create the top level viewer entry for this view */
final MetisViewerManager myViewer = pView.getViewerManager();
final MetisViewerEntry mySection = pView.getViewerEntry(PrometheusViewerEntryId.ANALYSIS);
final MetisViewerEntry myEntry = myViewer.newEntry(mySection, "NewMaps");
myEntry.setObject(theMaps);
}
/**
* Adjust for DataSet.
*
* @param pDataSet the dataSet
*/
public void adjustForDataSet(final PrometheusDataSet pDataSet) {
theMaps.resetMaps();
theMaps.adjustForDataSet(pDataSet);
}
/**
* Adjust for EditSet.
*
* @param pEditSet the editSet
*/
public void adjustForEditSet(final PrometheusEditSet pEditSet) {
theMaps.resetMaps();
theMaps.adjustForEditSet(pEditSet);
}
/**
* Build the maps.
*/
private void buildMaps() {
/* Build static maps */
buildStaticMaps(MoneyWiseStaticDataType.DEPOSITTYPE);
buildStaticMaps(MoneyWiseStaticDataType.CASHTYPE);
buildStaticMaps(MoneyWiseStaticDataType.LOANTYPE);
buildStaticMaps(MoneyWiseStaticDataType.PAYEETYPE);
buildStaticMaps(MoneyWiseStaticDataType.SECURITYTYPE);
buildStaticMaps(MoneyWiseStaticDataType.PORTFOLIOTYPE);
buildStaticMaps(MoneyWiseStaticDataType.TRANSTYPE);
buildStaticMaps(MoneyWiseStaticDataType.CURRENCY);
buildStaticMaps(MoneyWiseStaticDataType.TAXBASIS);
buildStaticMaps(MoneyWiseStaticDataType.ACCOUNTINFOTYPE);
buildStaticMaps(MoneyWiseStaticDataType.TRANSINFOTYPE);
/* Build transTag and region maps */
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.TRANSTAG, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.REGION, PrometheusDataResource.DATAITEM_FIELD_NAME);
/* Build category maps */
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.DEPOSITCATEGORY, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.CASHCATEGORY, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.LOANCATEGORY, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.TRANSCATEGORY, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.TRANSCATEGORY, MoneyWiseStaticDataType.TRANSTYPE,
t -> ((MoneyWiseTransCategory) t).getCategoryType().getCategoryClass().isSingular());
/* Build asset maps */
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.PAYEE, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.PAYEE, MoneyWiseBasicResource.CATEGORY_NAME,
t -> ((MoneyWisePayee) t).getCategoryClass().isSingular());
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.DEPOSIT, PrometheusDataResource.DATAITEM_FIELD_NAME, MoneyWiseBasicDataType.PAYEE);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.CASH, PrometheusDataResource.DATAITEM_FIELD_NAME, MoneyWiseBasicDataType.PAYEE);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.LOAN, PrometheusDataResource.DATAITEM_FIELD_NAME, MoneyWiseBasicDataType.PAYEE);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.PORTFOLIO, PrometheusDataResource.DATAITEM_FIELD_NAME, MoneyWiseBasicDataType.PAYEE);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.PORTFOLIO, MoneyWiseBasicResource.CATEGORY_NAME,
t -> ((MoneyWisePortfolio) t).getCategoryClass().isSingular());
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.SECURITY, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.SECURITY, MoneyWiseBasicResource.CATEGORY_NAME,
t -> ((MoneyWiseSecurity) t).getCategoryClass().isSingular());
theMaps.declareFieldIdMap(MoneyWiseBasicDataType.SECURITY, MoneyWiseAccountInfoClass.SYMBOL,
t -> ((MoneyWiseSecurity) t).getCategoryClass().needsSymbol());
/* Build date maps */
theMaps.declareDateIdMap(MoneyWiseBasicDataType.EXCHANGERATE, MoneyWiseBasicResource.XCHGRATE_TO,
MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
theMaps.declareDateIdMap(MoneyWiseBasicDataType.SECURITYPRICE, MoneyWiseBasicDataType.SECURITY,
MoneyWiseBasicResource.MONEYWISEDATA_FIELD_DATE);
theMaps.declareDateIdMap(MoneyWiseBasicDataType.DEPOSITRATE, MoneyWiseBasicDataType.DEPOSIT,
MoneyWiseBasicResource.DEPOSITRATE_ENDDATE, true);
}
/**
* Build the static map.
*
* @param pKey the key
*/
private void buildStaticMaps(final MetisListKey pKey) {
theMaps.declareFieldIdMap(pKey, PrometheusDataResource.DATAITEM_FIELD_NAME);
theMaps.declareFieldIdMap(pKey, PrometheusDataResource.STATICDATA_SORT);
}
/**
* Deconstruct linkedPair.
*
* @param pPair the linked pair
* @return the deconstructed items
*/
private static List<PrometheusDataItem> deconstructPair(final Object pPair) {
final List<PrometheusDataItem> myList = new ArrayList<>();
if (pPair instanceof MoneyWiseSecurityHolding myHolding) {
myList.add(myHolding.getPortfolio());
myList.add(myHolding.getSecurity());
}
return myList;
}
}