Full Code of ccavanaugh/jgnash for AI

master e812bb777244 cached
921 files
5.4 MB
1.5M tokens
4840 symbols
1 requests
Download .txt
Showing preview only (5,857K chars total). Download the full file or copy to clipboard to get everything.
Repository: ccavanaugh/jgnash
Branch: master
Commit: e812bb777244
Files: 921
Total size: 5.4 MB

Directory structure:
gitextract_1exs9n_q/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   └── workflows/
│       ├── ci-linux.yml
│       ├── ci-macOS.yml
│       ├── ci-windows.yml
│       └── gradle-wrapper-validation.yml
├── .gitignore
├── .travis.yml
├── COPYING
├── README.adoc
├── README.html
├── README.md
├── build.gradle.kts
├── changelog.adoc
├── deployfx/
│   └── gnome-money.icns
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── jGnash
├── jgnash-bayes/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── bayes/
│                       └── BayesClassifier.java
├── jgnash-convert/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── java/
│           │   └── jgnash/
│           │       └── convert/
│           │           ├── common/
│           │           │   └── OfxTags.java
│           │           ├── exportantur/
│           │           │   ├── csv/
│           │           │   │   └── CsvExport.java
│           │           │   └── ofx/
│           │           │       └── OfxExport.java
│           │           └── importat/
│           │               ├── BayesImportClassifier.java
│           │               ├── DateFormat.java
│           │               ├── GenericImport.java
│           │               ├── ImportBank.java
│           │               ├── ImportFilter.java
│           │               ├── ImportSecurity.java
│           │               ├── ImportState.java
│           │               ├── ImportTransaction.java
│           │               ├── ImportUtils.java
│           │               ├── ofx/
│           │               │   ├── OfxBank.java
│           │               │   ├── OfxImport.java
│           │               │   ├── OfxV1ToV2.java
│           │               │   ├── OfxV2Parser.java
│           │               │   └── Sanitize.java
│           │               └── qif/
│           │                   ├── QifAccount.java
│           │                   ├── QifCategory.java
│           │                   ├── QifImport.java
│           │                   ├── QifParser.java
│           │                   ├── QifReader.java
│           │                   ├── QifSplitTransaction.java
│           │                   ├── QifTransaction.java
│           │                   └── QifUtils.java
│           └── resources/
│               └── jgnash/
│                   └── convert/
│                       └── scripts/
│                           └── tidy.js
├── jgnash-core/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── java/
│           │   └── jgnash/
│           │       ├── engine/
│           │       │   ├── AbstractInvestmentTransactionEntry.java
│           │       │   ├── Account.java
│           │       │   ├── AccountGroup.java
│           │       │   ├── AccountProxy.java
│           │       │   ├── AccountTreeXMLFactory.java
│           │       │   ├── AccountType.java
│           │       │   ├── AccountUtils.java
│           │       │   ├── AmortizeObject.java
│           │       │   ├── AttachmentUtils.java
│           │       │   ├── CashFlow.java
│           │       │   ├── CommodityNode.java
│           │       │   ├── Comparators.java
│           │       │   ├── Config.java
│           │       │   ├── CurrencyNode.java
│           │       │   ├── DataStore.java
│           │       │   ├── DataStoreType.java
│           │       │   ├── DefaultCurrencies.java
│           │       │   ├── Engine.java
│           │       │   ├── EngineException.java
│           │       │   ├── EngineFactory.java
│           │       │   ├── ExchangeRate.java
│           │       │   ├── ExchangeRateDAO.java
│           │       │   ├── ExchangeRateHistoryNode.java
│           │       │   ├── InvestmentAccountProxy.java
│           │       │   ├── InvestmentPerformanceSummary.java
│           │       │   ├── InvestmentTransaction.java
│           │       │   ├── MathConstants.java
│           │       │   ├── QuoteSource.java
│           │       │   ├── RecTransaction.java
│           │       │   ├── ReconcileManager.java
│           │       │   ├── ReconciledState.java
│           │       │   ├── RootAccount.java
│           │       │   ├── SecurityHistoryEvent.java
│           │       │   ├── SecurityHistoryEventType.java
│           │       │   ├── SecurityHistoryNode.java
│           │       │   ├── SecurityNode.java
│           │       │   ├── StoredObject.java
│           │       │   ├── StoredObjectComparator.java
│           │       │   ├── Tag.java
│           │       │   ├── Transaction.java
│           │       │   ├── TransactionEntry.java
│           │       │   ├── TransactionEntryAbstractIncrease.java
│           │       │   ├── TransactionEntryAddX.java
│           │       │   ├── TransactionEntryBuyX.java
│           │       │   ├── TransactionEntryDividendX.java
│           │       │   ├── TransactionEntryMergeX.java
│           │       │   ├── TransactionEntryReinvestDivX.java
│           │       │   ├── TransactionEntryRemoveX.java
│           │       │   ├── TransactionEntryRocX.java
│           │       │   ├── TransactionEntrySellX.java
│           │       │   ├── TransactionEntrySplitX.java
│           │       │   ├── TransactionFactory.java
│           │       │   ├── TransactionTag.java
│           │       │   ├── TransactionType.java
│           │       │   ├── TrashObject.java
│           │       │   ├── attachment/
│           │       │   │   ├── AttachmentManager.java
│           │       │   │   ├── AttachmentTransferClient.java
│           │       │   │   ├── AttachmentTransferServer.java
│           │       │   │   ├── DistributedAttachmentManager.java
│           │       │   │   ├── LocalAttachmentManager.java
│           │       │   │   └── NettyTransferHandler.java
│           │       │   ├── budget/
│           │       │   │   ├── Budget.java
│           │       │   │   ├── BudgetFactory.java
│           │       │   │   ├── BudgetGoal.java
│           │       │   │   ├── BudgetPeriodDescriptor.java
│           │       │   │   ├── BudgetPeriodDescriptorFactory.java
│           │       │   │   ├── BudgetPeriodResults.java
│           │       │   │   ├── BudgetResultsModel.java
│           │       │   │   └── Pattern.java
│           │       │   ├── concurrent/
│           │       │   │   ├── DistributedLockManager.java
│           │       │   │   ├── DistributedLockServer.java
│           │       │   │   ├── LocalLockManager.java
│           │       │   │   ├── LockManager.java
│           │       │   │   ├── Priority.java
│           │       │   │   └── PriorityThreadPoolExecutor.java
│           │       │   ├── dao/
│           │       │   │   ├── AbstractDAO.java
│           │       │   │   ├── AccountDAO.java
│           │       │   │   ├── BudgetDAO.java
│           │       │   │   ├── CommodityDAO.java
│           │       │   │   ├── ConfigDAO.java
│           │       │   │   ├── DAO.java
│           │       │   │   ├── EngineDAO.java
│           │       │   │   ├── RecurringDAO.java
│           │       │   │   ├── TagDAO.java
│           │       │   │   ├── TransactionDAO.java
│           │       │   │   └── TrashDAO.java
│           │       │   ├── jpa/
│           │       │   │   ├── AbstractJpaDAO.java
│           │       │   │   ├── AbstractJpaDataStore.java
│           │       │   │   ├── JpaAccountDAO.java
│           │       │   │   ├── JpaBudgetDAO.java
│           │       │   │   ├── JpaCommodityDAO.java
│           │       │   │   ├── JpaConfigDAO.java
│           │       │   │   ├── JpaConfiguration.java
│           │       │   │   ├── JpaEngineDAO.java
│           │       │   │   ├── JpaH2DataStore.java
│           │       │   │   ├── JpaH2MvDataStore.java
│           │       │   │   ├── JpaHsqlDataStore.java
│           │       │   │   ├── JpaNetworkServer.java
│           │       │   │   ├── JpaRecurringDAO.java
│           │       │   │   ├── JpaTagDAO.java
│           │       │   │   ├── JpaTransactionDAO.java
│           │       │   │   ├── JpaTrashDAO.java
│           │       │   │   ├── JpaTrashEntity.java
│           │       │   │   └── SqlUtils.java
│           │       │   ├── message/
│           │       │   │   ├── ChannelEvent.java
│           │       │   │   ├── LocalServerListener.java
│           │       │   │   ├── Message.java
│           │       │   │   ├── MessageBus.java
│           │       │   │   ├── MessageBusClient.java
│           │       │   │   ├── MessageBusServer.java
│           │       │   │   ├── MessageChannel.java
│           │       │   │   ├── MessageListener.java
│           │       │   │   ├── MessageProperty.java
│           │       │   │   ├── MessageProxy.java
│           │       │   │   └── XStreamFactory.java
│           │       │   ├── recurring/
│           │       │   │   ├── DailyReminder.java
│           │       │   │   ├── MonthlyReminder.java
│           │       │   │   ├── OneTimeReminder.java
│           │       │   │   ├── PendingReminder.java
│           │       │   │   ├── RecurringIterator.java
│           │       │   │   ├── Reminder.java
│           │       │   │   ├── ReminderType.java
│           │       │   │   ├── WeeklyReminder.java
│           │       │   │   └── YearlyReminder.java
│           │       │   └── xstream/
│           │       │       ├── AbstractXStreamContainer.java
│           │       │       ├── AbstractXStreamDAO.java
│           │       │       ├── BinaryContainer.java
│           │       │       ├── BinaryXStreamDataStore.java
│           │       │       ├── StoredObjectReflectionProvider.java
│           │       │       ├── XMLContainer.java
│           │       │       ├── XMLDataStore.java
│           │       │       ├── XStreamAccountDAO.java
│           │       │       ├── XStreamBudgetDAO.java
│           │       │       ├── XStreamCommodityDAO.java
│           │       │       ├── XStreamConfigDAO.java
│           │       │       ├── XStreamEngineDAO.java
│           │       │       ├── XStreamJVM9.java
│           │       │       ├── XStreamRecurringDAO.java
│           │       │       ├── XStreamTagDAO.java
│           │       │       ├── XStreamTransactionDAO.java
│           │       │       └── XStreamTrashDAO.java
│           │       ├── net/
│           │       │   ├── AbstractAuthenticator.java
│           │       │   ├── ConnectionFactory.java
│           │       │   ├── YahooCrumbManager.java
│           │       │   ├── currency/
│           │       │   │   ├── CurrencyConverterParser.java
│           │       │   │   ├── CurrencyParser.java
│           │       │   │   └── CurrencyUpdateFactory.java
│           │       │   └── security/
│           │       │       ├── NullParser.java
│           │       │       ├── SecurityParser.java
│           │       │       ├── UpdateFactory.java
│           │       │       ├── YahooEventParser.java
│           │       │       └── iex/
│           │       │           └── IEXParser.java
│           │       ├── report/
│           │       │   ├── BalanceByMonthCSVReport.java
│           │       │   ├── ProfitLossTextReport.java
│           │       │   ├── ReportPeriod.java
│           │       │   └── ReportPeriodUtils.java
│           │       ├── text/
│           │       │   └── NumericFormats.java
│           │       ├── time/
│           │       │   ├── DateUtils.java
│           │       │   └── Period.java
│           │       └── util/
│           │           ├── CollectionUtils.java
│           │           ├── DefaultDaemonThreadFactory.java
│           │           ├── EncodeDecode.java
│           │           ├── EncryptionManager.java
│           │           ├── FileLocker.java
│           │           ├── FileMagic.java
│           │           ├── FileUtils.java
│           │           ├── LocaleObject.java
│           │           ├── LockedCommodityNode.java
│           │           ├── LogUtil.java
│           │           ├── MathEval.java
│           │           ├── MultiHashMap.java
│           │           ├── NewFileUtility.java
│           │           ├── NotNull.java
│           │           ├── Nullable.java
│           │           ├── SearchUtils.java
│           │           ├── function/
│           │           │   ├── MemoPredicate.java
│           │           │   ├── ParentAccountPredicate.java
│           │           │   ├── PayeePredicate.java
│           │           │   ├── ReconciledPredicate.java
│           │           │   ├── TagPredicate.java
│           │           │   └── TransactionAgePredicate.java
│           │           └── prefs/
│           │               ├── MapBasedPreferences.java
│           │               ├── MapPreferencesFactory.java
│           │               └── PortablePreferences.java
│           └── resources/
│               ├── META-INF/
│               │   └── persistence.xml
│               └── logging.properties
├── jgnash-fx/
│   ├── build.gradle.kts
│   ├── scripts/
│   │   ├── clean-security-history.js
│   │   └── helloworld.js
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jgnash/
│       │   │       ├── app/
│       │   │       │   ├── jGnash.java
│       │   │       │   └── jGnashFx.java
│       │   │       ├── bootloader/
│       │   │       │   ├── BootLoader.java
│       │   │       │   └── BootLoaderDialog.java
│       │   │       └── uifx/
│       │   │           ├── Options.java
│       │   │           ├── StaticUIMethods.java
│       │   │           ├── about/
│       │   │           │   └── AboutDialogController.java
│       │   │           ├── actions/
│       │   │           │   ├── DatabasePathAction.java
│       │   │           │   ├── DefaultCurrencyAction.java
│       │   │           │   ├── DefaultLocaleAction.java
│       │   │           │   ├── ExecuteJavaScriptAction.java
│       │   │           │   ├── ExportAccountsAction.java
│       │   │           │   ├── ImportAccountsAction.java
│       │   │           │   ├── ImportOfxAction.java
│       │   │           │   └── ImportQifAction.java
│       │   │           ├── control/
│       │   │           │   ├── AbstractAccountTreeController.java
│       │   │           │   ├── AccountComboBox.java
│       │   │           │   ├── Alert.java
│       │   │           │   ├── AutoCompleteTextField.java
│       │   │           │   ├── BigDecimalTableCell.java
│       │   │           │   ├── BusyPane.java
│       │   │           │   ├── CheckComboBox.java
│       │   │           │   ├── CheckListView.java
│       │   │           │   ├── ChoiceDialog.java
│       │   │           │   ├── CurrencyComboBox.java
│       │   │           │   ├── DataStoreTypeComboBox.java
│       │   │           │   ├── DatePickerEx.java
│       │   │           │   ├── DateRangeDialogController.java
│       │   │           │   ├── DecimalTextField.java
│       │   │           │   ├── DetailedDecimalTextField.java
│       │   │           │   ├── DoughnutChart.java
│       │   │           │   ├── ExceptionDialog.java
│       │   │           │   ├── ImageDialog.java
│       │   │           │   ├── IntegerTextField.java
│       │   │           │   ├── IntegerTreeTableCell.java
│       │   │           │   ├── LockedCommodityListCell.java
│       │   │           │   ├── NullTableViewSelectionModel.java
│       │   │           │   ├── PopOverButton.java
│       │   │           │   ├── QuoteSourceComboBox.java
│       │   │           │   ├── SecurityComboBox.java
│       │   │           │   ├── SecurityHistoryEventTypeComboBox.java
│       │   │           │   ├── SecurityNodeAreaChart.java
│       │   │           │   ├── ShortDateTableCell.java
│       │   │           │   ├── StatusBar.java
│       │   │           │   ├── TabViewPane.java
│       │   │           │   ├── TableViewEx.java
│       │   │           │   ├── TextFieldEx.java
│       │   │           │   ├── TextInputDialog.java
│       │   │           │   ├── TimePeriodComboBox.java
│       │   │           │   ├── TransactionNumberComboBox.java
│       │   │           │   ├── autocomplete/
│       │   │           │   │   ├── AutoCompleteFactory.java
│       │   │           │   │   ├── AutoCompleteModel.java
│       │   │           │   │   └── DefaultAutoCompleteModel.java
│       │   │           │   └── wizard/
│       │   │           │       ├── AbstractWizardPaneController.java
│       │   │           │       ├── WizardDescriptor.java
│       │   │           │       ├── WizardDialogController.java
│       │   │           │       └── WizardPaneController.java
│       │   │           ├── dialog/
│       │   │           │   ├── ChangeDatabasePasswordDialogController.java
│       │   │           │   ├── ImportScriptsDialogController.java
│       │   │           │   ├── PackDatabaseDialogController.java
│       │   │           │   ├── RemoteConnectionDialogController.java
│       │   │           │   ├── TagManagerDialogController.java
│       │   │           │   ├── currency/
│       │   │           │   │   ├── AddRemoveCurrencyController.java
│       │   │           │   │   ├── EditExchangeRatesController.java
│       │   │           │   │   └── ModifyCurrencyController.java
│       │   │           │   ├── options/
│       │   │           │   │   ├── AccountTabController.java
│       │   │           │   │   ├── DataProviderTabController.java
│       │   │           │   │   ├── FormatsTabController.java
│       │   │           │   │   ├── GeneralTabController.java
│       │   │           │   │   ├── NetworkTabController.java
│       │   │           │   │   ├── OptionDialogController.java
│       │   │           │   │   ├── RegisterTabController.java
│       │   │           │   │   ├── RemindersTabController.java
│       │   │           │   │   ├── ReportTabController.java
│       │   │           │   │   ├── StartupShutdownTabController.java
│       │   │           │   │   └── TransactionNumberDialogController.java
│       │   │           │   └── security/
│       │   │           │       ├── CreateModifySecuritiesController.java
│       │   │           │       ├── HistoricalImportController.java
│       │   │           │       └── SecurityHistoryController.java
│       │   │           ├── net/
│       │   │           │   └── NetworkAuthenticator.java
│       │   │           ├── report/
│       │   │           │   ├── AbstractSumByTypeReport.java
│       │   │           │   ├── AccountBalanceChartController.java
│       │   │           │   ├── AccountRegisterReport.java
│       │   │           │   ├── AccountRegisterReportController.java
│       │   │           │   ├── BalanceByMonthOptionsDialogController.java
│       │   │           │   ├── BalanceSheetReport.java
│       │   │           │   ├── BalanceSheetReportController.java
│       │   │           │   ├── ChartUtilities.java
│       │   │           │   ├── IncomeExpenseBarChartDialogController.java
│       │   │           │   ├── IncomeExpensePayeePieChartDialogController.java
│       │   │           │   ├── IncomeExpensePieChartDialogController.java
│       │   │           │   ├── ListOfAccountsReport.java
│       │   │           │   ├── ListOfAccountsReportController.java
│       │   │           │   ├── NetWorthReport.java
│       │   │           │   ├── NetWorthReportController.java
│       │   │           │   ├── PortfolioReport.java
│       │   │           │   ├── PortfolioReportController.java
│       │   │           │   ├── ProfitLossReport.java
│       │   │           │   ├── ProfitLossReportController.java
│       │   │           │   ├── ReportActions.java
│       │   │           │   ├── TransactionTagPieChartDialogController.java
│       │   │           │   └── pdf/
│       │   │           │       ├── PageFormatDialogController.java
│       │   │           │       ├── ReportController.java
│       │   │           │       └── ReportViewerDialogController.java
│       │   │           ├── resource/
│       │   │           │   ├── cursor/
│       │   │           │   │   └── CustomCursor.java
│       │   │           │   └── font/
│       │   │           │       └── MaterialDesignLabel.java
│       │   │           ├── skin/
│       │   │           │   ├── BaseColorDialogController.java
│       │   │           │   ├── FontSizeDialogController.java
│       │   │           │   ├── StyleClass.java
│       │   │           │   └── ThemeManager.java
│       │   │           ├── tasks/
│       │   │           │   ├── BootEngineTask.java
│       │   │           │   ├── CloseFileTask.java
│       │   │           │   ├── PackDatabaseTask.java
│       │   │           │   └── SaveAsTask.java
│       │   │           ├── util/
│       │   │           │   ├── AccountTypeFilter.java
│       │   │           │   ├── FXMLUtils.java
│       │   │           │   ├── FileChooserFactory.java
│       │   │           │   ├── InjectFXML.java
│       │   │           │   ├── JavaFXUtils.java
│       │   │           │   ├── StageUtils.java
│       │   │           │   ├── TableViewManager.java
│       │   │           │   └── TreeSearch.java
│       │   │           ├── views/
│       │   │           │   ├── AccountBalanceDisplayManager.java
│       │   │           │   ├── AccountBalanceDisplayMode.java
│       │   │           │   ├── accounts/
│       │   │           │   │   ├── AccountCommodityFormatTreeTableCell.java
│       │   │           │   │   ├── AccountPropertiesController.java
│       │   │           │   │   ├── AccountTypeFilterFormController.java
│       │   │           │   │   ├── AccountsViewController.java
│       │   │           │   │   ├── SelectAccountController.java
│       │   │           │   │   ├── SelectAccountSecuritiesDialog.java
│       │   │           │   │   └── StaticAccountsMethods.java
│       │   │           │   ├── budget/
│       │   │           │   │   ├── BudgetGoalsDialogController.java
│       │   │           │   │   ├── BudgetManagerDialogController.java
│       │   │           │   │   ├── BudgetPropertiesDialogController.java
│       │   │           │   │   ├── BudgetSparkLine.java
│       │   │           │   │   ├── BudgetTableController.java
│       │   │           │   │   ├── BudgetViewController.java
│       │   │           │   │   └── HistoricalBudgetDialogController.java
│       │   │           │   ├── main/
│       │   │           │   │   ├── ConsoleDialogController.java
│       │   │           │   │   ├── MainToolBarController.java
│       │   │           │   │   ├── MainView.java
│       │   │           │   │   ├── MenuBarController.java
│       │   │           │   │   └── OpenDatabaseController.java
│       │   │           │   ├── recurring/
│       │   │           │   │   ├── AbstractTabController.java
│       │   │           │   │   ├── DayTabController.java
│       │   │           │   │   ├── MonthTabController.java
│       │   │           │   │   ├── NoneTabController.java
│       │   │           │   │   ├── NotificationDialog.java
│       │   │           │   │   ├── RecurringDialogController.java
│       │   │           │   │   ├── RecurringEntryDialog.java
│       │   │           │   │   ├── RecurringPropertiesController.java
│       │   │           │   │   ├── RecurringTabController.java
│       │   │           │   │   ├── RecurringViewController.java
│       │   │           │   │   ├── WeekTabController.java
│       │   │           │   │   └── YearTabController.java
│       │   │           │   └── register/
│       │   │           │       ├── AbstractInvIncomeSlipController.java
│       │   │           │       ├── AbstractInvSlipController.java
│       │   │           │       ├── AbstractPriceQtyInvSlipController.java
│       │   │           │       ├── AbstractSlipController.java
│       │   │           │       ├── AbstractTransactionEntryDialog.java
│       │   │           │       ├── AbstractTransactionEntrySlipController.java
│       │   │           │       ├── AbstractTransactionTableCell.java
│       │   │           │       ├── AccountExchangePane.java
│       │   │           │       ├── AccountPropertyWrapper.java
│       │   │           │       ├── AdjustSharesSlipController.java
│       │   │           │       ├── AdjustmentSlipController.java
│       │   │           │       ├── AmortizeSetupDialogController.java
│       │   │           │       ├── AttachmentPane.java
│       │   │           │       ├── BankRegisterPaneController.java
│       │   │           │       ├── BaseSlip.java
│       │   │           │       ├── BasicRegisterTableController.java
│       │   │           │       ├── BuyShareSlipController.java
│       │   │           │       ├── DateTransNumberDialogController.java
│       │   │           │       ├── DecreaseAmountProperty.java
│       │   │           │       ├── DividendSlipController.java
│       │   │           │       ├── FeeDialog.java
│       │   │           │       ├── FeePane.java
│       │   │           │       ├── FeeTransactionEntrySlipController.java
│       │   │           │       ├── GainLossDialog.java
│       │   │           │       ├── GainLossPane.java
│       │   │           │       ├── GainLossTransactionEntrySlipController.java
│       │   │           │       ├── IncreaseAmountProperty.java
│       │   │           │       ├── InvestmentRegisterPaneController.java
│       │   │           │       ├── InvestmentRegisterTableController.java
│       │   │           │       ├── InvestmentSlipManager.java
│       │   │           │       ├── InvestmentTransactionDialog.java
│       │   │           │       ├── InvestmentTransactionQuantityTableCell.java
│       │   │           │       ├── LiabilityRegisterPaneController.java
│       │   │           │       ├── LockedBasicRegisterPaneController.java
│       │   │           │       ├── LockedInvestmentRegisterPaneController.java
│       │   │           │       ├── RegisterActions.java
│       │   │           │       ├── RegisterFactory.java
│       │   │           │       ├── RegisterPaneController.java
│       │   │           │       ├── RegisterStage.java
│       │   │           │       ├── RegisterTableController.java
│       │   │           │       ├── RegisterViewController.java
│       │   │           │       ├── ReinvestDividendSlipController.java
│       │   │           │       ├── ReturnOfCapitalSlipController.java
│       │   │           │       ├── SellShareSlipController.java
│       │   │           │       ├── Slip.java
│       │   │           │       ├── SlipController.java
│       │   │           │       ├── SlipControllerContainer.java
│       │   │           │       ├── SlipType.java
│       │   │           │       ├── SplitMergeSharesSlipController.java
│       │   │           │       ├── SplitTransactionDialog.java
│       │   │           │       ├── SplitTransactionSlipController.java
│       │   │           │       ├── TransactionCommodityFormatTableCell.java
│       │   │           │       ├── TransactionDateTableCell.java
│       │   │           │       ├── TransactionDateTimeTableCell.java
│       │   │           │       ├── TransactionDialog.java
│       │   │           │       ├── TransactionEntryCommodityFormatTableCell.java
│       │   │           │       ├── TransactionStringTableCell.java
│       │   │           │       ├── TransactionTagDialogController.java
│       │   │           │       ├── TransactionTagPane.java
│       │   │           │       ├── TransferSlipController.java
│       │   │           │       └── reconcile/
│       │   │           │           ├── ReconcileDialogController.java
│       │   │           │           └── ReconcileSettingsDialogController.java
│       │   │           └── wizard/
│       │   │               ├── file/
│       │   │               │   ├── NewFileFourController.java
│       │   │               │   ├── NewFileOneController.java
│       │   │               │   ├── NewFileSummaryController.java
│       │   │               │   ├── NewFileThreeController.java
│       │   │               │   ├── NewFileTwoController.java
│       │   │               │   └── NewFileWizard.java
│       │   │               └── imports/
│       │   │                   ├── ImportPageOneController.java
│       │   │                   ├── ImportPageThreeController.java
│       │   │                   ├── ImportPageTwoController.java
│       │   │                   └── ImportWizard.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── MANIFEST.MF
│       │       └── jgnash/
│       │           ├── skin/
│       │           │   ├── default.css
│       │           │   ├── tableHideHorizontalScrollBar.css
│       │           │   └── tableHideVerticalScrollBar.css
│       │           └── uifx/
│       │               ├── about/
│       │               │   └── AboutDialog.fxml
│       │               ├── control/
│       │               │   ├── AlertDialog.fxml
│       │               │   ├── ChoiceDialog.fxml
│       │               │   ├── DateRangeDialog.fxml
│       │               │   ├── DetailedDecimalTextField.fxml
│       │               │   ├── ExceptionDialog.fxml
│       │               │   ├── TabViewPane.fxml
│       │               │   ├── TextInputDialog.fxml
│       │               │   └── wizard/
│       │               │       └── WizardDialog.fxml
│       │               ├── dialog/
│       │               │   ├── ChangePasswordDialog.fxml
│       │               │   ├── ImportScriptsDialog.fxml
│       │               │   ├── PackDatabaseDialog.fxml
│       │               │   ├── RemoteConnectionDialog.fxml
│       │               │   ├── TagManagerDialog.fxml
│       │               │   ├── currency/
│       │               │   │   ├── AddRemoveCurrency.fxml
│       │               │   │   ├── EditExchangeRates.fxml
│       │               │   │   └── ModifyCurrency.fxml
│       │               │   ├── options/
│       │               │   │   ├── AccountTab.fxml
│       │               │   │   ├── DataProviderTab.fxml
│       │               │   │   ├── FormatsTab.fxml
│       │               │   │   ├── GeneralTab.fxml
│       │               │   │   ├── NetworkTab.fxml
│       │               │   │   ├── OptionDialog.fxml
│       │               │   │   ├── RegisterTab.fxml
│       │               │   │   ├── RemindersTab.fxml
│       │               │   │   ├── ReportTab.fxml
│       │               │   │   ├── StartupShutdownTab.fxml
│       │               │   │   └── TransactionNumberDialog.fxml
│       │               │   └── security/
│       │               │       ├── CreateModifySecurities.fxml
│       │               │       ├── HistoricalImport.fxml
│       │               │       └── SecurityHistory.fxml
│       │               ├── report/
│       │               │   ├── AccountBalanceChart.fxml
│       │               │   ├── AccountRegisterReport.fxml
│       │               │   ├── BalanceByMonthOptionsDialog.fxml
│       │               │   ├── BalanceSheetReport.fxml
│       │               │   ├── IncomeExpenseBarChartDialog.fxml
│       │               │   ├── IncomeExpensePayeePieChartDialog.fxml
│       │               │   ├── IncomeExpensePieChartDialog.fxml
│       │               │   ├── ListOfAccountsReport.fxml
│       │               │   ├── NetWorthReport.fxml
│       │               │   ├── PortfolioReport.fxml
│       │               │   ├── ProfitLossReport.fxml
│       │               │   ├── TransactionTagPieChartDialog.fxml
│       │               │   └── pdf/
│       │               │       ├── PageFormatDialog.fxml
│       │               │       └── ReportViewerDialog.fxml
│       │               ├── skin/
│       │               │   ├── BaseColorDialog.fxml
│       │               │   └── FontSizeDialog.fxml
│       │               ├── views/
│       │               │   ├── accounts/
│       │               │   │   ├── AccountProperties.fxml
│       │               │   │   ├── AccountTypeFilterForm.fxml
│       │               │   │   ├── AccountsView.fxml
│       │               │   │   └── SelectAccountForm.fxml
│       │               │   ├── budget/
│       │               │   │   ├── BudgetGoalsDialog.fxml
│       │               │   │   ├── BudgetManagerDialog.fxml
│       │               │   │   ├── BudgetPropertiesDialog.fxml
│       │               │   │   ├── BudgetTable.fxml
│       │               │   │   ├── BudgetView.fxml
│       │               │   │   └── HistoricalBudgetDialog.fxml
│       │               │   ├── main/
│       │               │   │   ├── ConsoleDialog.fxml
│       │               │   │   ├── MainMenuBar.fxml
│       │               │   │   ├── MainToolBar.fxml
│       │               │   │   └── OpenDatabaseForm.fxml
│       │               │   ├── recurring/
│       │               │   │   ├── DayTab.fxml
│       │               │   │   ├── MonthTab.fxml
│       │               │   │   ├── NoneTab.fxml
│       │               │   │   ├── NotificationDialog.fxml
│       │               │   │   ├── RecurringDialog.fxml
│       │               │   │   ├── RecurringProperties.fxml
│       │               │   │   ├── RecurringView.fxml
│       │               │   │   ├── WeekTab.fxml
│       │               │   │   └── YearTab.fxml
│       │               │   └── register/
│       │               │       ├── AccountExchangePane.fxml
│       │               │       ├── AdjustSharesSlip.fxml
│       │               │       ├── AdjustmentSlip.fxml
│       │               │       ├── AmortizeSetupDialog.fxml
│       │               │       ├── AttachmentPane.fxml
│       │               │       ├── BankSlip.fxml
│       │               │       ├── BasicRegisterPane.fxml
│       │               │       ├── BasicRegisterTable.fxml
│       │               │       ├── BuyShareSlip.fxml
│       │               │       ├── DateTransNumberDialog.fxml
│       │               │       ├── DividendSlip.fxml
│       │               │       ├── FeeDialog.fxml
│       │               │       ├── FeeTransactionEntrySlip.fxml
│       │               │       ├── GainLossDialog.fxml
│       │               │       ├── GainLossTransactionEntrySlip.fxml
│       │               │       ├── InvestmentRegisterPane.fxml
│       │               │       ├── InvestmentRegisterTable.fxml
│       │               │       ├── InvestmentTransactionDialog.fxml
│       │               │       ├── InvestmentTransactionPane.fxml
│       │               │       ├── LiabilityRegisterPane.fxml
│       │               │       ├── LockedBasicRegisterPane.fxml
│       │               │       ├── LockedInvestmentRegisterPane.fxml
│       │               │       ├── RegisterView.fxml
│       │               │       ├── ReinvestDividendSlip.fxml
│       │               │       ├── ReturnOfCapitalSlip.fxml
│       │               │       ├── SellShareSlip.fxml
│       │               │       ├── SplitMergeSharesSlip.fxml
│       │               │       ├── SplitTransactionDialog.fxml
│       │               │       ├── SplitTransactionSlip.fxml
│       │               │       ├── TransactionDialog.fxml
│       │               │       ├── TransactionTagDialog.fxml
│       │               │       ├── TransactionTagPane.fxml
│       │               │       ├── TransferSlip.fxml
│       │               │       └── reconcile/
│       │               │           ├── ReconcileDialog.fxml
│       │               │           └── ReconcileSettingsDialog.fxml
│       │               └── wizard/
│       │                   ├── file/
│       │                   │   ├── NewFileFour.fxml
│       │                   │   ├── NewFileOne.fxml
│       │                   │   ├── NewFileSummary.fxml
│       │                   │   ├── NewFileThree.fxml
│       │                   │   └── NewFileTwo.fxml
│       │                   └── imports/
│       │                       ├── ImportPageOne.fxml
│       │                       ├── ImportPageThree.fxml
│       │                       └── ImportPageTwo.fxml
│       └── test/
│           └── java/
│               └── jgnash/
│                   └── uifx/
│                       ├── ControlsTest.java
│                       └── control/
│                           └── autocomplete/
│                               └── AutoCompleteModelTest.java
├── jgnash-fx-test-plugin/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── uifx/
│                       └── plugin/
│                           └── TestFxPlugin.java
├── jgnash-manual/
│   ├── readme.md
│   ├── sample.bxds
│   └── src/
│       ├── Manual.tex
│       ├── fdl-1.3.tex
│       └── gpl-3.0.tex
├── jgnash-plugin/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── plugin/
│                       ├── FxPlugin.java
│                       ├── Plugin.java
│                       └── PluginFactory.java
├── jgnash-report-core/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── report/
│                       ├── pdf/
│                       │   ├── Constants.java
│                       │   ├── FontRegistry.java
│                       │   ├── PageSize.java
│                       │   ├── Report.java
│                       │   └── ReportFactory.java
│                       ├── poi/
│                       │   ├── BudgetResultsExport.java
│                       │   ├── StyleFactory.java
│                       │   └── Workbook.java
│                       ├── table/
│                       │   ├── AbstractReportTableModel.java
│                       │   ├── ColumnStyle.java
│                       │   ├── GroupInfo.java
│                       │   ├── Row.java
│                       │   └── SortOrder.java
│                       └── ui/
│                           └── ReportPrintFactory.java
├── jgnash-resources/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── java/
│           │   └── jgnash/
│           │       └── resource/
│           │           └── util/
│           │               ├── ClassPathUtils.java
│           │               ├── HTMLResource.java
│           │               ├── MonthName.java
│           │               ├── OS.java
│           │               ├── ResourceUtils.java
│           │               ├── TextResource.java
│           │               └── Version.java
│           └── resources/
│               └── jgnash/
│                   └── resource/
│                       ├── account/
│                       │   ├── cs/
│                       │   │   ├── common.xml
│                       │   │   ├── set.txt
│                       │   │   └── spouse.xml
│                       │   ├── de/
│                       │   │   ├── set.txt
│                       │   │   ├── spouse.xml
│                       │   │   └── standard.xml
│                       │   ├── en/
│                       │   │   ├── common.xml
│                       │   │   ├── set.txt
│                       │   │   └── spouse.xml
│                       │   ├── pt/
│                       │   │   ├── common.xml
│                       │   │   ├── set.txt
│                       │   │   └── spouse.xml
│                       │   └── zh/
│                       │       ├── common.xml
│                       │       ├── set.txt
│                       │       └── spouse.xml
│                       ├── constants.properties
│                       ├── html/
│                       │   └── en/
│                       │       ├── apache-license.html
│                       │       ├── credits.html
│                       │       ├── gpl-license.html
│                       │       ├── jgnash-license.html
│                       │       ├── lgpl.html
│                       │       ├── notice.html
│                       │       └── xstream-license.html
│                       ├── resource.properties
│                       ├── resource_cs.properties
│                       ├── resource_de.properties
│                       ├── resource_en.properties
│                       ├── resource_en_GB.properties
│                       ├── resource_es.properties
│                       ├── resource_fr.properties
│                       ├── resource_it.properties
│                       ├── resource_iw.properties
│                       ├── resource_lt.properties
│                       ├── resource_nl.properties
│                       ├── resource_pl.properties
│                       ├── resource_pt.properties
│                       ├── resource_ru.properties
│                       ├── resource_uk.properties
│                       ├── resource_zh.properties
│                       ├── resource_zh_TW.properties
│                       └── text/
│                           ├── cs/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── de/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewBudgetOne.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── en/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewBudgetOne.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── es/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── fr/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── it/
│                           │   ├── CreateNewFile.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── lt/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── nl/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── pl/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewBudgetOne.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── pt/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── ru/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── uk/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           └── zh/
│                               ├── ArchiveDate.txt
│                               ├── ArchiveEquity.txt
│                               ├── ArchiveFile.txt
│                               ├── CreateNewFile.txt
│                               ├── DupeTransImport.txt
│                               ├── FileNotSaved.txt
│                               ├── ImportFileZero.txt
│                               ├── ImportOne.txt
│                               ├── ImportTwo.txt
│                               ├── NewBudgetOne.txt
│                               ├── NewFileFour.txt
│                               ├── NewFileOne.txt
│                               ├── NewFileThree.txt
│                               ├── NewFileTwo.txt
│                               ├── QifOne.txt
│                               └── QifTwo.txt
├── jgnash-tests/
│   ├── build.gradle.kts
│   └── src/
│       └── test/
│           ├── java/
│           │   ├── ApiTest.java
│           │   └── jgnash/
│           │       ├── ClassPathTest.java
│           │       ├── JavascriptTest.js
│           │       ├── PDFBoxTableTest.java
│           │       ├── VersionTest.java
│           │       ├── bayes/
│           │       │   └── BayesClassifierTest.java
│           │       ├── convert/
│           │       │   └── importat/
│           │       │       ├── FilterTest.java
│           │       │       ├── ofx/
│           │       │       │   ├── Ofx2Test.java
│           │       │       │   ├── OfxConvertTest.java
│           │       │       │   └── OfxExportText.java
│           │       │       └── qif/
│           │       │           └── QifUtilsTest.java
│           │       ├── engine/
│           │       │   ├── AbstractEngineTest.java
│           │       │   ├── AccountTreeDepthTest.java
│           │       │   ├── BinaryXStreamEngineTest.java
│           │       │   ├── CashFlowTest.java
│           │       │   ├── ConfigTest.java
│           │       │   ├── DataStoreTest.java
│           │       │   ├── DistributedLockTest.java
│           │       │   ├── EncryptedDistributedLockTest.java
│           │       │   ├── EngineTest.java
│           │       │   ├── FileTransferTest.java
│           │       │   ├── InvestmentHistoryExchangeTest.java
│           │       │   ├── InvestmentPerformanceTest.java
│           │       │   ├── InvestmentTransactionTest.java
│           │       │   ├── JpaH2EngineTest.java
│           │       │   ├── JpaH2MvEngineTest.java
│           │       │   ├── JpaHsqlEngineTest.java
│           │       │   ├── PriorityThreadTest.java
│           │       │   ├── TransactionTest.java
│           │       │   ├── XMLEngineTest.java
│           │       │   ├── net/
│           │       │   │   └── security/
│           │       │   │       ├── IEXParserTest.java
│           │       │   │       └── YahooEventParserTest.java
│           │       │   └── recurring/
│           │       │       ├── DailyReminderTest.java
│           │       │       ├── MonthlyReminderTest.java
│           │       │       ├── WeeklyReminderTest.java
│           │       │       └── YearlyReminderTest.java
│           │       ├── report/
│           │       │   └── poi/
│           │       │       └── BudgetResultsExportTest.java
│           │       ├── text/
│           │       │   └── NumericFormatsTests.java
│           │       └── util/
│           │           ├── BinaryXStreamTest.java
│           │           ├── DateFormatTest.java
│           │           ├── DateTest.java
│           │           ├── EncodeDecodeTest.java
│           │           ├── EncryptionManagerTest.java
│           │           ├── FileMagicTest.java
│           │           └── FileUtilsTest.java
│           └── resources/
│               ├── 401k-header.xml
│               ├── 401k.xml
│               ├── File_with_Accents.ofx
│               ├── IEX-IBM-1y.csv
│               ├── IEX-IBM-1y.json
│               ├── Sample.ofx
│               ├── activity.ofx
│               ├── bank1-commas.ofx
│               ├── bank1-indent.ofx
│               ├── bank1.ofx
│               ├── bank1.qif
│               ├── bank2.ofx
│               ├── budgetTest.xml
│               ├── checking1.ofx
│               ├── chequing.ofx
│               ├── comptes.ofx
│               ├── demobank.ofx
│               ├── invest.xml
│               ├── invest2.xml
│               ├── ofx_spec160_stmtrs_example.sgml
│               ├── ofx_spec201_stmtrs_example.xml
│               ├── test_fails.ofx
│               └── uglyFormat.ofx
├── mt940/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── net/
│       │           └── bzzt/
│       │               └── swift/
│       │                   └── mt940/
│       │                       ├── ImportMt940FxAction.java
│       │                       ├── Mt940Entry.java
│       │                       ├── Mt940File.java
│       │                       ├── Mt940Plugin.java
│       │                       ├── Mt940Record.java
│       │                       ├── exporter/
│       │                       │   └── Mt940Exporter.java
│       │                       └── parser/
│       │                           └── Mt940Parser.java
│       └── test/
│           ├── java/
│           │   └── net/
│           │       └── bzzt/
│           │           └── swift/
│           │               └── mt940/
│           │                   └── Mt940Test.java
│           └── resources/
│               ├── bank1.STA
│               ├── multiaccounts.sta
│               └── rabobank.swi
├── rhino-scripts/
│   ├── README.adoc
│   ├── clear-budget-goal.js
│   ├── create-random-transaction.js
│   └── load-budget-goal.js
├── rust-launcher/
│   ├── Cargo.toml
│   ├── README.adoc
│   ├── build.rs
│   └── src/
│       └── main.rs
├── settings.gradle.kts
├── spelling.dic
└── windows 10 Java reg fix.reg

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
## Expected Behavior


## Actual Behavior


## Steps to Reproduce the Problem

  1.
  2.
  3.

## Specifications

  - jGnash Version:
  - Operating System:
  - Java Version


================================================
FILE: .github/workflows/ci-linux.yml
================================================
name: 'CI Test Linux'

on: [push]

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master

      - uses: actions/cache@master
        with:
          path: ~/.gradle/caches
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
          restore-keys: |
            ${{ runner.os }}-gradle-

      - uses: actions/setup-java@master
        with:
          java-version: '11'
          architecture: 'x64'

      - run: ./gradlew test


================================================
FILE: .github/workflows/ci-macOS.yml
================================================
name: 'CI Test macOS'

on: [push]

jobs:
  test:

    runs-on: macOS-latest

    steps:
      - uses: actions/checkout@master

      - uses: actions/setup-java@master
        with:
          java-version: '11'
          architecture: 'x64'

      - run: ./gradlew test


================================================
FILE: .github/workflows/ci-windows.yml
================================================
name: 'CI Test Windows'

on: [push]

jobs:
  test:

    runs-on: windows-latest

    steps:
      - uses: actions/checkout@master

      - uses: actions/setup-java@master
        with:
          java-version: '11'
          architecture: 'x64'

      - run: ./gradlew.bat test


================================================
FILE: .github/workflows/gradle-wrapper-validation.yml
================================================
name: "Validate Gradle Wrapper"
on: [push, pull_request]

jobs:
  validation:
    name: "Validation"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gradle/wrapper-validation-action@v1


================================================
FILE: .gitignore
================================================
**/target/
**/build/
**/out/
**/bin/
.svn/
*.directory
.settings/
.project
.classpath
.idea/
*.iml
*.log
nb-configuration.xml
*.backup
/pref.xml
/gradle-app.setting
/*.zip
.gradle/
lib/
*.aux
*.toc
*.gz
*.fls
*.fdb*
*.out

# keep the exe file for easy dist build on non Windows platfroms
!rust-launcher/target/release/jGnash.exe

================================================
FILE: .travis.yml
================================================
language: java

sudo: required

before_install:
  - sudo apt-get update -q
  - sudo apt-get install lib32z1 lib32ncurses5 -y

before_script:
  - if [ "${TRAVIS_OS_NAME}" == "linux" ]; then export DISPLAY=:99.0 && /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16; fi

jdk:
    - openjdk11
    #- oraclejdk11

before_cache:
  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
  - rm -f  $HOME/.gradle/caches/*/fileHashes/fileHashes.bin
  - rm -f  $HOME/.gradle/caches/*/fileHashes/fileHashes.lock

cache:
  directories:
    - $HOME/.gradle/caches/
    - $HOME/.gradle/wrapper/
    - $HOME/.m2


================================================
FILE: COPYING
================================================
 jGnash, a personal finance application
 Copyright (C) 2001-2020 Craig Cavanaugh

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.

================================================
FILE: README.adoc
================================================
image:https://jgnash.github.io/img/jgnash-logo.png[jGnash Logo]

== jGnash README

https://sourceforge.net/projects/jgnash/[jGnash] is a free (no strings attached!) personal finance manager with many
of the same features as commercially-available software. It was created in order to make tracking personal finances
easy, but also provides the functionality needed by advanced users. jGnash is cross-platform and will run on
any operating system that has a current Java Runtime Environment (e.g., Linux, Mac OS X, and Microsoft Windows).

* jGnash requires *Java 11* or newer and is compatible with the open source OpenJDK Platform, and the Oracle JVM as well.

See the <<Requirements>> section below for more details.

=== Contents:
* <<About, About jGnash>>
   - <<Features>>
* <<Donations>>
* <<Support, Support>>
* <<Requirements>>
   - <<Reqs-Java, Java>>
   - <<Reqs-OS, Supported Operating System versions>>
* <<Download>>
* <<Install, Installation>>
* <<Running, Running jGnash>>
* <<Development, Building and Development>>

[[About]]
== About jGnash

[[Features]]
=== jGnash Features

- Operates on any operating system with Java 11 or newer installed
- Double Entry Accounting with reconciliation tools
- OFX, QFX, mt940, and QIF import capabilities
- Investment Accounts and automatic import of Stocks, Bond, and Funds price history
- Nestable accounts with automatic rollup of totals and intelligent handling of mixed currencies
- Reminders with automatic transaction entry
- Intelligent handling of multiple currencies and exchange rates with automatic online exchange rate updates
- Printable reports with PDF and spreadsheet export capability
- XML, Binary, and multiple relational database file formats
- Supports concurrent multiple users over a network

To learn more about the features of jGnash, visit the https://sourceforge.net/projects/jgnash/[jGnash Website].

The jGnash download includes a user manual to help get you started with the basics if you are new to tracking finances.
It also covers some of the more subtle features, command line options, and shortcuts that are not immediately obvious.

The latest version of jGnash uses *OpenJFX* for the user interface. This replaces the old version that used Java Swing
for the user interface.  Experienced jGnash users will notice interface improvements.  For example, try using the
vertical and horizontal scroll wheels in a date picker, and the collapsible transaction forms.

[[Donations]]
== Donations

Donations are always welcome and appreciated.  This helps to defer the cost of computer hardware and internet access.

https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=TYN4QECUL5C44[image:https://img.shields.io/badge/Donate-PayPal-green.svg[PayPal]]

[[Support]]
== Support
The *https://groups.google.com/forum/#!forum/jgnash-user[jGnash Help Group]* is
always a good source if you need help and *is the prefered method of contact.*
Your first post to the group will be moderated to filter spam.

Please use the search tool to check for similar questions.

The preferred method of reporting bugs is to use the https://github.com/ccavanaugh/jgnash/issues[Github Issue tracker].

[[Requirements]]
== Requirements

[[Reqs-Java]]
=== 1. Java

Java 11 or newer is required to run jGnash.  Unless you have a specific need
for a newer version, Java 11 is currently recommended.

Use of a prebuilt installer is recommended.

  - https://www.azul.com/downloads/zulu/[Azul OpenJDK 11] is a branded release that will be easiest to install for most users and is free to use.
  - https://adoptopenjdk.net/index.html?variant=openjdk11&jvmVariant=hotspot[AdoptOpenJDK] will require manual installation but allows more flexibility and is free to use.
  - https://jdk.java.net/11/[https://jdk.java.net/11 (OpenJDK)/] will require manual installation and is free to use.
  - https://www.oracle.com/technetwork/java/javase/downloads/index.html[Oracle Java SE 11] will require manual installation and licensing is required.

[NOTE]
When performing a manual installation of Java, The *JAVA_HOME* Environment
Variable must be set. Also, the Java bin directory must be added to the execution path.

[NOTE]
If you have multiple versions of Java installed on your system, The *JAVA_HOME* Environment
Variable must be set to Java 11 or newer and the related Java bin directory must be the only version
in the execution path. Mixing JVM and JDK versions will confuse the bootloader.

*_Use of an OpenJDK package is recommended over use of Oracle JDK due to licensing requirements_*

=== 2. OpenJFX
jGnash uses OpenJFX for the user interface, but will automatically download
and place the needed components within the lib directly of the jGnash installation.
Portions of the OpenJFX components are OS specific and cannot be shared between
different operating systems.


[[Reqs-OS]]
=== 3. Supported Operating Systems: Windows, Linux, or Mac OS X.

==== Microsoft Windows

*  any Windows release that can run the required version of Java

==== Linux

* any Linux distribution that can run the required version of Java

[NOTE]
jGnash is _not compatible_ with GCJ pre-installed on older Linux distributions.
You will need to install *OpenJDK 11* for jGnash to operate correctly.

==== Mac OS X

* Mac OS X 10.8.3 or later
* can run the required version of Java

_Be sure to read <<Install-MacOSX, the section about installing on Mac OS X>> to create the startup script._


[[Download]]
== Download jGnash

You can download jGnash from the https://sourceforge.net/projects/jgnash/files/Active%20Stable%202.x/[jGnash Download Page].   image:https://img.shields.io/sourceforge/dt/jgnash.svg["Download button", link="https://sourceforge.net/projects/jgnash/files/latest/download"]

[[Install]]
== To Install jGnash

. Install the latest version of *Java 11*  if you don't already have it installed.
_jGnash has been tested and is know to work on Java 12 through 14._

** Developers will want the complete Java Development Kit (see build instructions below.)
. Unzip all files into a directory of your choice leaving the directory structure unchanged.

[[Install-Windows]]
=== Windows Installation:

Some Windows users with restricted rights may experience write access issues *(Access is denied exception)* with jGnash
downloading the JavaFX dependencies.

Unzipping and placing jGnash into `%AppData%\jGnash` will ensure the users has proper write access.

[[Install-MacOSX]]
=== Mac OS X Installation:

. Copy the jGnash folder to `/Applications` and remove the version extension so that the final path looks like `/Applications/jGnash`.
. Create an AppleScript that will run the application:
.. Open the AppleScript Editor.

.. Create the following script:


    try
        do shell script "/Applications/jGnash/jGnash"
    end try


.. Save it as an Application called `jGnash.app` in `/Applications/jGnash`

. Instead of step 2,
 you can set the `/Applications/jGnash/jGnash` file to _Open with..._ `Terminal.app` (the Terminal application).


[[Running]]
== To Run:

Executable files are provided for Windows and UN*X users at the root of the installation directory. (These are `.exe`
and `bash shell` files, respectively). Mac OS X users will have created application launch files per
the <<Install-MacOSX, Mac installation instructions.>>

[NOTE]
jGnash will need to be restarted after the first launch of a new version.
Operating System specific files are download and a restart is required for
correct operation.

* Windows: Simply double-click on the jGnash.exe file.

* UN*X / MacOS:  Start jGnash with the provided *jGnash* Bash script.  If jGnash fails to launch, check your file
permissions and make sure they are set to be executable or use an unzip tool that preserves file permissions.

An example for UN*X users is shown below assuming you have changed to the installation directory:

[source]
----
./jGnash
----

*Mac OS X:*  Run the application file you created per the <<Install-MacOSX, Mac installation instructions.>>


[[Development]]
== Building and Development

Travis-CI Build Status image:https://travis-ci.org/ccavanaugh/jgnash.svg?branch=master["Build Status", link="https://travis-ci.org/ccavanaugh/jgnash"]

=== Development List

The https://groups.google.com/forum/#!forum/jgnash-devel[Google Groups jGnash Developer list] is the best
place to start if you have questions or ideas.  Initial posts will are moderated to prevent spam.

=== Development Tools

The IDE used for the development of jGnash is IntelliJ IDEA, but any IDE that supports a Gradle build environment should work.

image:https://github.com/jGnash/jgnash.github.io/blob/master/img/logo_IntelliJIDEA.png["IntelliJIDEA Logo", height=90, link="https://www.jetbrains.com/idea/"]


=== Building jGnash:

*Gradle* is used as the primary build system for jGnash.  The Gradle Wrapper is included (`gradlew` shell and .bat files) so that you do not need to
install Gradle.  The Wrapper will automatically download the necessary dependencies.

[NOTE]
Depending on your OS (almost always Windows and OSX) the JCE Unlimited Strength Jurisdiction Policy Files for Java
are needed for the unit tests to complete correctly.  If you do not want to install these files or are
restricted by your locale, modify the test build or disable tests.  jGnash uses encryption for client / server
communication and unit tests are performed to prevent regressions.

To build jGnash you'll need the following software installed and correctly configured on your system:

OpenJDK 11 or later.

_If you are building with a recent 64bit Linux system, you may need to enable Multilib/32 Bit support capabilities.
Otherwise, the Gradle build may fail when building the windows executables._

To create the distribution zip file, start at the main directory and run the gradle task to clean and create the distribution:

*Building on Windows:*

[source]
----
gradlew clean distZip
----

*Building on UN*X or Mac OS X:*

[source]
----
./gradlew clean distZip
----


This will run the Gradle tasks necessary to execute core tests and create the distribution file.  The distributable zip
file will be produced at the root of the build directory called jGnash-_version_-bin.zip.


================================================
FILE: README.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
<title>jGnash README</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
<style>
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
</style>
</head>
<body class="article">
<div id="header">
</div>
<div id="content">
<div class="paragraph">
<p><span class="image"><img src="https://jgnash.github.io/img/jgnash-logo.png" alt="jGnash Logo"></span></p>
</div>
<div class="sect1">
<h2 id="_jgnash_readme">jGnash README</h2>
<div class="sectionbody">
<div class="paragraph">
<p><a href="https://sourceforge.net/projects/jgnash/">jGnash</a> is a free (no strings attached!) personal finance manager with many
of the same features as commercially-available software. It was created in order to make tracking personal finances
easy, but also provides the functionality needed by advanced users. jGnash is cross-platform and will run on
any operating system that has a current Java Runtime Environment (e.g., Linux, Mac OS X, and Microsoft Windows).</p>
</div>
<div class="ulist">
<ul>
<li>
<p>jGnash requires <strong>Java 11</strong> or newer and is compatible with the open source OpenJDK Platform, and the Oracle JVM as well.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>See the <a href="#Requirements">Requirements</a> section below for more details.</p>
</div>
<div class="sect2">
<h3 id="_contents">Contents:</h3>
<div class="ulist">
<ul>
<li>
<p><a href="#About">About jGnash</a></p>
<div class="ulist">
<ul>
<li>
<p><a href="#Features">jGnash Features</a></p>
</li>
</ul>
</div>
</li>
<li>
<p><a href="#Donations">Donations</a></p>
</li>
<li>
<p><a href="#Support">Support</a></p>
</li>
<li>
<p><a href="#Requirements">Requirements</a></p>
<div class="ulist">
<ul>
<li>
<p><a href="#Reqs-Java">Java</a></p>
</li>
<li>
<p><a href="#Reqs-OS">Supported Operating System versions</a></p>
</li>
</ul>
</div>
</li>
<li>
<p><a href="#Download">Download jGnash</a></p>
</li>
<li>
<p><a href="#Install">Installation</a></p>
</li>
<li>
<p><a href="#Running">Running jGnash</a></p>
</li>
<li>
<p><a href="#Development">Building and Development</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="About">About jGnash</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="Features">jGnash Features</h3>
<div class="ulist">
<ul>
<li>
<p>Operates on any operating system with Java 11 or newer installed</p>
</li>
<li>
<p>Double Entry Accounting with reconciliation tools</p>
</li>
<li>
<p>OFX, QFX, mt940, and QIF import capabilities</p>
</li>
<li>
<p>Investment Accounts and automatic import of Stocks, Bond, and Funds price history</p>
</li>
<li>
<p>Nestable accounts with automatic rollup of totals and intelligent handling of mixed currencies</p>
</li>
<li>
<p>Reminders with automatic transaction entry</p>
</li>
<li>
<p>Intelligent handling of multiple currencies and exchange rates with automatic online exchange rate updates</p>
</li>
<li>
<p>Printable reports with PDF and spreadsheet export capability</p>
</li>
<li>
<p>XML, Binary, and multiple relational database file formats</p>
</li>
<li>
<p>Supports concurrent multiple users over a network</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>To learn more about the features of jGnash, visit the <a href="https://sourceforge.net/projects/jgnash/">jGnash Website</a>.</p>
</div>
<div class="paragraph">
<p>The jGnash download includes a user manual to help get you started with the basics if you are new to tracking finances.
It also covers some of the more subtle features, command line options, and shortcuts that are not immediately obvious.</p>
</div>
<div class="paragraph">
<p>The latest version of jGnash uses <strong>OpenJFX</strong> for the user interface. This replaces the old version that used Java Swing
for the user interface.  Experienced jGnash users will notice interface improvements.  For example, try using the
vertical and horizontal scroll wheels in a date picker, and the collapsible transaction forms.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="Donations">Donations</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Donations are always welcome and appreciated.  This helps to defer the cost of computer hardware and internet access.</p>
</div>
<div class="paragraph">
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=TYN4QECUL5C44"><span class="image"><img src="https://img.shields.io/badge/Donate-PayPal-green.svg" alt="PayPal"></span></a></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="Support">Support</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The <strong><a href="https://groups.google.com/forum/#!forum/jgnash-user">jGnash Help Group</a></strong> is
always a good source if you need help and <strong>is the prefered method of contact.</strong>
Your first post to the group will be moderated to filter spam.</p>
</div>
<div class="paragraph">
<p>Please use the search tool to check for similar questions.</p>
</div>
<div class="paragraph">
<p>The preferred method of reporting bugs is to use the <a href="https://github.com/ccavanaugh/jgnash/issues">Github Issue tracker</a>.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="Requirements">Requirements</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="Reqs-Java">1. Java</h3>
<div class="paragraph">
<p>Java 11 or newer is required to run jGnash.  Unless you have a specific need
for a newer version, Java 11 is currently recommended.</p>
</div>
<div class="paragraph">
<p>Use of a prebuilt installer is recommended.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://www.azul.com/downloads/zulu/">Azul OpenJDK 11</a> is a branded release that will be easiest to install for most users and is free to use.</p>
</li>
<li>
<p><a href="https://adoptopenjdk.net/index.html?variant=openjdk11&amp;jvmVariant=hotspot">AdoptOpenJDK</a> will require manual installation but allows more flexibility and is free to use.</p>
</li>
<li>
<p><a href="https://jdk.java.net/11/">https://jdk.java.net/11 (OpenJDK)/</a> will require manual installation and is free to use.</p>
</li>
<li>
<p><a href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">Oracle Java SE 11</a> will require manual installation and licensing is required.</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
When performing a manual installation of Java, The <strong>JAVA_HOME</strong> Environment
Variable must be set. Also, the Java bin directory must be added to the execution path.
</td>
</tr>
</table>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
If you have multiple versions of Java installed on your system, The <strong>JAVA_HOME</strong> Environment
Variable must be set to Java 11 or newer and the related Java bin directory must be the only version
in the execution path. Mixing JVM and JDK versions will confuse the bootloader.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p><strong><em>Use of an OpenJDK package is recommended over use of Oracle JDK due to licensing requirements</em></strong></p>
</div>
</div>
<div class="sect2">
<h3 id="_2_openjfx">2. OpenJFX</h3>
<div class="paragraph">
<p>jGnash uses OpenJFX for the user interface, but will automatically download
and place the needed components within the lib directly of the jGnash installation.
Portions of the OpenJFX components are OS specific and cannot be shared between
different operating systems.</p>
</div>
</div>
<div class="sect2">
<h3 id="Reqs-OS">3. Supported Operating Systems: Windows, Linux, or Mac OS X.</h3>
<div class="sect3">
<h4 id="_microsoft_windows">Microsoft Windows</h4>
<div class="ulist">
<ul>
<li>
<p>any Windows release that can run the required version of Java</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_linux">Linux</h4>
<div class="ulist">
<ul>
<li>
<p>any Linux distribution that can run the required version of Java</p>
</li>
</ul>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
jGnash is <em>not compatible</em> with GCJ pre-installed on older Linux distributions.
You will need to install <strong>OpenJDK 11</strong> for jGnash to operate correctly.
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h4 id="_mac_os_x">Mac OS X</h4>
<div class="ulist">
<ul>
<li>
<p>Mac OS X 10.8.3 or later</p>
</li>
<li>
<p>can run the required version of Java</p>
</li>
</ul>
</div>
<div class="paragraph">
<p><em>Be sure to read <a href="#Install-MacOSX">the section about installing on Mac OS X</a> to create the startup script.</em></p>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="Download">Download jGnash</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You can download jGnash from the <a href="https://sourceforge.net/projects/jgnash/files/Active%20Stable%202.x/">jGnash Download Page</a>.   <span class="image"><a class="image" href="https://sourceforge.net/projects/jgnash/files/latest/download"><img src="https://img.shields.io/sourceforge/dt/jgnash.svg" alt="Download button"></a></span></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="Install">To Install jGnash</h2>
<div class="sectionbody">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Install the latest version of <strong>Java 11</strong>  if you don&#8217;t already have it installed.
<em>jGnash has been tested and is know to work on Java 12 through 14.</em></p>
<div class="ulist">
<ul>
<li>
<p>Developers will want the complete Java Development Kit (see build instructions below.)</p>
</li>
</ul>
</div>
</li>
<li>
<p>Unzip all files into a directory of your choice leaving the directory structure unchanged.</p>
</li>
</ol>
</div>
<div class="sect2">
<h3 id="Install-Windows">Windows Installation:</h3>
<div class="paragraph">
<p>Some Windows users with restricted rights may experience write access issues <strong>(Access is denied exception)</strong> with jGnash
downloading the JavaFX dependencies.</p>
</div>
<div class="paragraph">
<p>Unzipping and placing jGnash into <code>%AppData%\jGnash</code> will ensure the users has proper write access.</p>
</div>
</div>
<div class="sect2">
<h3 id="Install-MacOSX">Mac OS X Installation:</h3>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Copy the jGnash folder to <code>/Applications</code> and remove the version extension so that the final path looks like <code>/Applications/jGnash</code>.</p>
</li>
<li>
<p>Create an AppleScript that will run the application:</p>
<div class="olist loweralpha">
<ol class="loweralpha" type="a">
<li>
<p>Open the AppleScript Editor.</p>
</li>
<li>
<p>Create the following script:</p>
<div class="literalblock">
<div class="content">
<pre>try
    do shell script "/Applications/jGnash/jGnash"
end try</pre>
</div>
</div>
</li>
<li>
<p>Save it as an Application called <code>jGnash.app</code> in <code>/Applications/jGnash</code></p>
</li>
</ol>
</div>
</li>
<li>
<p>Instead of step 2,
you can set the <code>/Applications/jGnash/jGnash</code> file to <em>Open with&#8230;&#8203;</em> <code>Terminal.app</code> (the Terminal application).</p>
</li>
</ol>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="Running">To Run:</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Executable files are provided for Windows and UN*X users at the root of the installation directory. (These are <code>.exe</code>
and <code>bash shell</code> files, respectively). Mac OS X users will have created application launch files per
the <a href="#Install-MacOSX">Mac installation instructions.</a></p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
jGnash will need to be restarted after the first launch of a new version.
Operating System specific files are download and a restart is required for
correct operation.
</td>
</tr>
</table>
</div>
<div class="ulist">
<ul>
<li>
<p>Windows: Simply double-click on the jGnash.exe file.</p>
</li>
<li>
<p>UN*X / MacOS:  Start jGnash with the provided <strong>jGnash</strong> Bash script.  If jGnash fails to launch, check your file
permissions and make sure they are set to be executable or use an unzip tool that preserves file permissions.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>An example for UN*X users is shown below assuming you have changed to the installation directory:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code>./jGnash</code></pre>
</div>
</div>
<div class="paragraph">
<p><strong>Mac OS X:</strong>  Run the application file you created per the <a href="#Install-MacOSX">Mac installation instructions.</a></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="Development">Building and Development</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Travis-CI Build Status <span class="image"><a class="image" href="https://travis-ci.org/ccavanaugh/jgnash"><img src="https://travis-ci.org/ccavanaugh/jgnash.svg?branch=master" alt="Build Status"></a></span></p>
</div>
<div class="sect2">
<h3 id="_development_list">Development List</h3>
<div class="paragraph">
<p>The <a href="https://groups.google.com/forum/#!forum/jgnash-devel">Google Groups jGnash Developer list</a> is the best
place to start if you have questions or ideas.  Initial posts will are moderated to prevent spam.</p>
</div>
</div>
<div class="sect2">
<h3 id="_development_tools">Development Tools</h3>
<div class="paragraph">
<p>The IDE used for the development of jGnash is IntelliJ IDEA, but any IDE that supports a Gradle build environment should work.</p>
</div>
<div class="paragraph">
<p><span class="image"><a class="image" href="https://www.jetbrains.com/idea/"><img src="https://github.com/jGnash/jgnash.github.io/blob/master/img/logo_IntelliJIDEA.png" alt="IntelliJIDEA Logo" height="90"></a></span></p>
</div>
</div>
<div class="sect2">
<h3 id="_building_jgnash">Building jGnash:</h3>
<div class="paragraph">
<p><strong>Gradle</strong> is used as the primary build system for jGnash.  The Gradle Wrapper is included (<code>gradlew</code> shell and .bat files) so that you do not need to
install Gradle.  The Wrapper will automatically download the necessary dependencies.</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Depending on your OS (almost always Windows and OSX) the JCE Unlimited Strength Jurisdiction Policy Files for Java
are needed for the unit tests to complete correctly.  If you do not want to install these files or are
restricted by your locale, modify the test build or disable tests.  jGnash uses encryption for client / server
communication and unit tests are performed to prevent regressions.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>To build jGnash you&#8217;ll need the following software installed and correctly configured on your system:</p>
</div>
<div class="paragraph">
<p>OpenJDK 11 or later.</p>
</div>
<div class="paragraph">
<p><em>If you are building with a recent 64bit Linux system, you may need to enable Multilib/32 Bit support capabilities.
Otherwise, the Gradle build may fail when building the windows executables.</em></p>
</div>
<div class="paragraph">
<p>To create the distribution zip file, start at the main directory and run the gradle task to clean and create the distribution:</p>
</div>
<div class="paragraph">
<p><strong>Building on Windows:</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code>gradlew clean distZip</code></pre>
</div>
</div>
<div class="paragraph">
<p><strong>Building on UN*X or Mac OS X:</strong></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code>./gradlew clean distZip</code></pre>
</div>
</div>
<div class="paragraph">
<p>This will run the Gradle tasks necessary to execute core tests and create the distribution file.  The distributable zip
file will be produced at the root of the build directory called jGnash-<em>version</em>-bin.zip.</p>
</div>
</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2020-03-24 06:00:42 -0400
</div>
</div>
</body>
</html>

================================================
FILE: README.md
================================================
<span class="image">![jGnash Logo](https://jgnash.github.io/img/jgnash-logo.png)</span>

## jGnash README

[jGnash](https://sourceforge.net/projects/jgnash/) is a free (no strings attached!) personal finance manager with many of the same features as commercially-available software. It was created in order to make tracking personal finances easy, but also provides the functionality needed by advanced users. jGnash is cross-platform and will run on any operating system that has a current Java Runtime Environment (e.g., Linux, Mac OS X, and Microsoft Windows).

-   jGnash requires **Java 11** or newer and is compatible with the open source OpenJDK Platform, and the Oracle JVM as well.

See the [Requirements](#Requirements) section below for more details.

### Contents:

-   [About jGnash](#About)

    -   [jGnash Features](#Features)

-   [Donations](#Donations)

-   [Support](#Support)

-   [Requirements](#Requirements)

    -   [Java](#Reqs-Java)

    -   [Supported Operating System versions](#Reqs-OS)

-   [Download jGnash](#Download)

-   [Installation](#Install)

-   [Running jGnash](#Running)

-   [Building and Development](#Development)

## About jGnash

### jGnash Features

-   Operates on any operating system with Java 11 or newer installed

-   Double Entry Accounting with reconciliation tools

-   OFX, QFX, mt940, and QIF import capabilities

-   Investment Accounts and automatic import of Stocks, Bond, and Funds price history

-   Nestable accounts with automatic rollup of totals and intelligent handling of mixed currencies

-   Reminders with automatic transaction entry

-   Intelligent handling of multiple currencies and exchange rates with automatic online exchange rate updates

-   Printable reports with PDF and spreadsheet export capability

-   XML, Binary, and multiple relational database file formats

-   Supports concurrent multiple users over a network

To learn more about the features of jGnash, visit the [jGnash Website](https://sourceforge.net/projects/jgnash/).

The jGnash download includes a user manual to help get you started with the basics if you are new to tracking finances. It also covers some of the more subtle features, command line options, and shortcuts that are not immediately obvious.

The latest version of jGnash uses **OpenJFX** for the user interface. This replaces the old version that used Java Swing for the user interface. Experienced jGnash users will notice interface improvements. For example, try using the vertical and horizontal scroll wheels in a date picker, and the collapsible transaction forms.

## Donations

Donations are always welcome and appreciated. This helps to defer the cost of computer hardware and internet access.

[<span class="image">![PayPal](https://img.shields.io/badge/Donate-PayPal-green.svg)</span>](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=TYN4QECUL5C44)

## Support

The **[jGnash Help Group](https://groups.google.com/forum/#!forum/jgnash-user)** is always a good source if you need help and **is the prefered method of contact.** Your first post to the group will be moderated to filter spam.

Please use the search tool to check for similar questions.

The preferred method of reporting bugs is to use the [Github Issue tracker](https://github.com/ccavanaugh/jgnash/issues).

## Requirements

### 1. Java

Java 11 or newer is required to run jGnash. Unless you have a specific need for a newer version, Java 11 is currently recommended.

Use of a prebuilt installer is recommended.

-   [Azul OpenJDK 11](https://www.azul.com/downloads/zulu/) is a branded release that will be easiest to install for most users and is free to use.

-   [AdoptOpenJDK](https://adoptopenjdk.net/index.html?variant=openjdk11&jvmVariant=hotspot) will require manual installation but allows more flexibility and is free to use.

-   [https://jdk.java.net/11 (OpenJDK)/](https://jdk.java.net/11/) will require manual installation and is free to use.

-   [Oracle Java SE 11](https://www.oracle.com/technetwork/java/javase/downloads/index.html) will require manual installation and licensing is required.

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td class="icon"><div class="title">
Note
</div></td>
<td class="content">When performing a manual installation of Java, The <strong>JAVA_HOME</strong> Environment Variable must be set. Also, the Java bin directory must be added to the execution path.</td>
</tr>
</tbody>
</table>

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td class="icon"><div class="title">
Note
</div></td>
<td class="content">If you have multiple versions of Java installed on your system, The <strong>JAVA_HOME</strong> Environment Variable must be set to Java 11 or newer and the related Java bin directory must be the only version in the execution path. Mixing JVM and JDK versions will confuse the bootloader.</td>
</tr>
</tbody>
</table>

***Use of an OpenJDK package is recommended over use of Oracle JDK due to licensing requirements***

### 2. OpenJFX

jGnash uses OpenJFX for the user interface, but will automatically download and place the needed components within the lib directly of the jGnash installation. Portions of the OpenJFX components are OS specific and cannot be shared between different operating systems.

### 3. Supported Operating Systems: Windows, Linux, or Mac OS X.

#### Microsoft Windows

-   any Windows release that can run the required version of Java

#### Linux

-   any Linux distribution that can run the required version of Java

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td class="icon"><div class="title">
Note
</div></td>
<td class="content">jGnash is <em>not compatible</em> with GCJ pre-installed on older Linux distributions. You will need to install <strong>OpenJDK 11</strong> for jGnash to operate correctly.</td>
</tr>
</tbody>
</table>

#### Mac OS X

-   Mac OS X 10.8.3 or later

-   can run the required version of Java

*Be sure to read [the section about installing on Mac OS X](#Install-MacOSX) to create the startup script.*

## Download jGnash

You can download jGnash from the [jGnash Download Page](https://sourceforge.net/projects/jgnash/files/Active%20Stable%202.x/). <span class="image"><a href="https://sourceforge.net/projects/jgnash/files/latest/download" class="image"><img src="https://img.shields.io/sourceforge/dt/jgnash.svg" alt="Download button" /></a></span>

## To Install jGnash

1.  Install the latest version of **Java 11** if you don’t already have it installed. *jGnash has been tested and is know to work on Java 12 through 14.*

    -   Developers will want the complete Java Development Kit (see build instructions below.)

2.  Unzip all files into a directory of your choice leaving the directory structure unchanged.

### Windows Installation:

Some Windows users with restricted rights may experience write access issues **(Access is denied exception)** with jGnash downloading the JavaFX dependencies.

Unzipping and placing jGnash into `%AppData%\jGnash` will ensure the users has proper write access.

### Mac OS X Installation:

1.  Copy the jGnash folder to `/Applications` and remove the version extension so that the final path looks like `/Applications/jGnash`.

2.  Create an AppleScript that will run the application:

    1.  Open the AppleScript Editor.

    2.  Create the following script:

            try
                do shell script "/Applications/jGnash/jGnash"
            end try

    3.  Save it as an Application called `jGnash.app` in `/Applications/jGnash`

3.  Instead of step 2, you can set the `/Applications/jGnash/jGnash` file to *Open with…​* `Terminal.app` (the Terminal application).

## To Run:

Executable files are provided for Windows and UN\*X users at the root of the installation directory. (These are `.exe` and `bash shell` files, respectively). Mac OS X users will have created application launch files per the [Mac installation instructions.](#Install-MacOSX)

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td class="icon"><div class="title">
Note
</div></td>
<td class="content">jGnash will need to be restarted after the first launch of a new version. Operating System specific files are download and a restart is required for correct operation.</td>
</tr>
</tbody>
</table>

-   Windows: Simply double-click on the jGnash.exe file.

-   UN\*X / MacOS: Start jGnash with the provided **jGnash** Bash script. If jGnash fails to launch, check your file permissions and make sure they are set to be executable or use an unzip tool that preserves file permissions.

An example for UN\*X users is shown below assuming you have changed to the installation directory:

``` CodeRay
./jGnash
```

**Mac OS X:** Run the application file you created per the [Mac installation instructions.](#Install-MacOSX)

## Building and Development

Travis-CI Build Status <span class="image"><a href="https://travis-ci.org/ccavanaugh/jgnash" class="image"><img src="https://travis-ci.org/ccavanaugh/jgnash.svg?branch=master" alt="Build Status" /></a></span>

### Development List

The [Google Groups jGnash Developer list](https://groups.google.com/forum/#!forum/jgnash-devel) is the best place to start if you have questions or ideas. Initial posts will are moderated to prevent spam.

### Development Tools

The IDE used for the development of jGnash is IntelliJ IDEA, but any IDE that supports a Gradle build environment should work.

<span class="image"><a href="https://www.jetbrains.com/idea/" class="image"><img src="https://github.com/jGnash/jgnash.github.io/blob/master/img/logo_IntelliJIDEA.png" height="90" alt="IntelliJIDEA Logo" /></a></span>

### Building jGnash:

**Gradle** is used as the primary build system for jGnash. The Gradle Wrapper is included (`gradlew` shell and .bat files) so that you do not need to install Gradle. The Wrapper will automatically download the necessary dependencies.

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td class="icon"><div class="title">
Note
</div></td>
<td class="content">Depending on your OS (almost always Windows and OSX) the JCE Unlimited Strength Jurisdiction Policy Files for Java are needed for the unit tests to complete correctly. If you do not want to install these files or are restricted by your locale, modify the test build or disable tests. jGnash uses encryption for client / server communication and unit tests are performed to prevent regressions.</td>
</tr>
</tbody>
</table>

To build jGnash you’ll need the following software installed and correctly configured on your system:

OpenJDK 11 or later.

*If you are building with a recent 64bit Linux system, you may need to enable Multilib/32 Bit support capabilities. Otherwise, the Gradle build may fail when building the windows executables.*

To create the distribution zip file, start at the main directory and run the gradle task to clean and create the distribution:

**Building on Windows:**

``` CodeRay
gradlew clean distZip
```

**Building on UN\*X or Mac OS X:**

``` CodeRay
./gradlew clean distZip
```

This will run the Gradle tasks necessary to execute core tests and create the distribution file. The distributable zip file will be produced at the root of the build directory called jGnash-*version*-bin.zip.

Last updated 2020-03-24 06:00:42 -0400

================================================
FILE: build.gradle.kts
================================================
plugins {
    id("com.github.ben-manes.versions")
}

allprojects {
    repositories {
        mavenCentral()
        jcenter()
        mavenLocal()
    }

    apply(plugin = "java")
}

subprojects {
    group = "jgnash"
    version = "3.6.0"
}

================================================
FILE: changelog.adoc
================================================
== WANTS
* Support for Derby database
* CSV Import
* OFX export
* VAT/GST UI
* Command Line interface/Class for loading accounts and transactions
* Mass selection of destination accounts for imported transactions.
* Info icon in a sell investment panel that calculate the estimated gains/loss for selling a transaction
* FIFO, and Lot performance calculations for securities. (http://groups.google.com/group/jgnash-user/browse_thread/thread/fe124ecf806857f3?hl=en)
* Moving option for a Transaction from one Register to other Register.
* Hyperlink option from the results in the Reports and Graphs to the concerned Transactions of the Registers.
* Drill down of split entries in Split Transactions by right clicking on ledger view.
** Flag budget exceptions?
* Direct Transaction entry option in the Ledger to avoid Transaction form.
* Formal Trial Balance report
* Budgeting
** annotation, similar to transaction annotation, so the user can reference the reason for an exception in any given period.
* Reinstate archive capability
* Open zipped backups instead of manually unzipping.

== Release 3.6.0 __(File format change)__
* 02/21/2021 Fixed an issue with the JVM returning a negative scale for some locales (GitHub Pull Request #95) _[t-pa]_
* 02/21/2021 Updated to the latest dependencies.
* 04/06/2020 Corrected a minor jdbc and Hibernate warning.
* 03/21/2020 Yahoo financial historical event download format changed.
* 03/15/2020 Updated to the JavaFX 14 release.
* 03/07/2020 Waiting for lock files to be removed is now more efficient.
* 03/01/2020 The numeric format for register balance summaries was not updating with format changes automatically.
* 03/01/2020 Protect against a divide by zero error for the Tag report.
* 03/01/2020 Internal cleanup and optimization of application thread management.
* 02/29/2020 Don't hide the resize columns button when automatic sizing is enabled.
* 02/29/2020 A race condition would cause Jump actions to fail.
* 02/29/2020 Zoomed and Jumped register windows were not using the jGnash icon.
* 02/26/2020 The Tag Manger now filters out application specific tags to make selection less cluttered.
* 02/25/2020 Expanded Tags to support a much larger icon set.
* 02/25/2020 Switched icon set from FontAwesome to Material Design.
* 02/23/2020 Corrected broken Print Icon.

== Release 3.5.1
* 02/20/2020 Corrected a bug with jGnash.exe causing a failure to launch on Windows Platforms.
* 02/20/2020 Fixed a bug that was causing icons to no longer work on Windows Platforms.

== Release 3.5.0 __(File format change)__
* 02/03/2020 Updated to the latest Hibernate, Poi, and Commons CSV dependencies.
* 02/11/2020 jGnash will now restart automatically for Linux and OSX users after downloading the JavaFX dependencies.
* 02/10/2020 Restructured main classes to a package to make future development with jpackage cleaner (GitHub Pull Request #88) _[msgilligan]_
* 02/08/2020 Build system cleanup and consolidated the bootloader.
* 02/08/2020 Fix RuntimeException when the currency of a locale is unknown. (GitHub Pull Request #92) _[t-pa]_
* 02/08/2020 Updated to JavaFx 14-ea+8.
* 02/05/2020 The location for JavaFX dependency downloads has changed.  HTTPS is now used.
* 02/03/2020 Updated to the latest Picocli, Hikari, PDFBox and Netty dependencies.
* 01/19/2020 Correctly handle a change to the Yahoo finance cookie expiration date.
* 01/01/2020 Transactions may now be tagged and filtered with user managed Tags.
* 12/28/2019 Fixed poor transaction form behavior caused by opening a splits dialog and closing before adding entries.
* 12/27/2019 Reduced overhead for icon management.
* 12/26/2019 FontAwesome icons were updated resulting in some icon changes.
* 12/15/2019 Reworked the Engine API for advanced transaction tags.
* 12/14/2019 The Windows exe wrapper will now look in the registry if JAVA_HOME has not been set.

== Release 3.4.0
* 12/14/2019 jGnash now uses a Rust based exe launcher for Windows users that replaces Launch4j.
* 12/14/2019 Updated to the latest Picocli and Hibernate dependencies.
* 12/01/2019 Switching the recommended Windows JVM to AdoptOpenJDK.
* 12/01/2019 Removed old jGnash 2.35.1 workaround for bad UUID values.
* 12/01/2019 Added a List of Accounts report.
* 11/30/2019 Added an Export function for the account tree.
* 11/30/2019 The headers in the CSV export of an account are now localized.
* 11/30/2019 Changed the internal delimiter for transaction tags to allow use of commas (currently not user accessible).
* 11/29/2019 Added a Securities chapter to the Manual.
* 11/29/2019 Prevent a NPE when changing the Symbol of a Security shortly after viewing it's chart.
* 11/27/2019 Added support for IEXCloud as a data provider for Securities history.
* 11/16/2019 Switched to a public API introduced in JavaFX 9 to prevent table column reordering in the Budget View.
* 11/04/2019 Errors and warnings from a failed QIF import were not being displayed.
* 11/03/2019 Mt940 import now correctly handles files not encoded using ISO_8859_1.
* 11/03/2019 QIF import now correctly handles files not encoded using UTF8.
* 10/27/2019 Improved the behavior of the Report dialog when manually changing the scale.  The auto fit size toggles
             will be cleared automatically.
* 10/24/2019 Internal cleanup to improve handling of Client/Server network failures.
* 10/23/2019 Fixed a regression that prevented caching of hash codes.
* 10/19/2019 Updated to the latest H2 dependency.
* 10/01/2019 The majority of the build system was migrated to the Kotlin DSL.

== Release 3.3.0
* 09/21/2019 Updated to the latest Hibernate, HikariCP and PDFBox dependencies.
* 09/18/2019 The displayed columns for the Portfolio report can now be changed.
* 09/16/2019 Don't display an exception if tabular report generation is interrupted.
* 09/15/2019 The Date range of a Portfolio report can now be changed.
* 09/14/2019 Prevent a rare NPE that would occur when deleting an account shortly after closure of a tabular report.
* 09/14/2019 Updated to the latest Picocli and Commons Text dependencies.
* 09/12/2019 Updated to JavaFX 13 dependency.
* 09/08/2019 Custom style sheets can now be applied to theme the UI.
* 09/07/2019 Made changes to prevent a very rare ConcurrentModificationException when using a relational database.
* 09/01/2019 Fixed a source code encoding issue that caused issues when compiling and testing under Windows.
* 09/01/2019 Updated to the latest Netty dependency.
* 08/26/2019 The selected file type was ignored when exporting a register and the extension was not specified within
             the filename.
* 08/25/2019 Properly restore the configured page size of a report if it's not a custom size.
* 08/25/2019 Expanded the auto-completion API to improve unit testing robustness.
* 08/25/2019 Fixed a regression that was causing a failure to load .h2.db files.
* 08/25/2019 Added a new option to save/restore prior report dates and added a Reset button.  The default start date
             is now the 1st day of the month.
* 08/12/2019 Backup files are no longer created unless the data file/database has been changed during a session.
* 08/11/2019 Consolidated CSS to make customization easier.
* 08/11/2019 Prevent a transaction form null pointer exception at shutdown when working with a multi-currency files.

== Release 3.2.1
* 08/10/2019 Updated to JavaFX 13-ea+11 dependency.
* 08/04/2019 Corrected the column sizing behavior of tabular reports with long values.
* 08/03/2019 Changed H2 relation databases to use Asynchronous access instead of NIO for safer file access.
* 08/03/2019 Fixed a bug that was causing File > Save As to force files to a .bxds file if a period existed within the
             file name's path other than the file extension.
* 08/03/2019 Internal deduplication and cleanup of relational database code.
* 08/03/2019 Update to the latest Hibernate dependency.
* 07/30/2019 Reduced console messages about ignored use of font Layout tables when creating tabular reports.
* 07/27/2019 Updated to the latest Commons Lang, Commons Text, Commons Collections, Commons CSV, Netty
             and Picocli dependencies.
* 07/23/2019 The Create / Modify Security form was not validating the reported Currency had been set.
* 07/21/2019 Fixed a very old UI bug that would prevent table column width restoration for locales that use a comma
             for a decimal separator.  It would also trigger unit test failures for the same locales.
* 07/09/2019 Fixed an issue that was preventing the jGnash.exe file from detecting Java on some systems.
* 07/09/2019 Improved bootloader behavior when determining "lib" location. (GitHub Issue #84) _[Raven Kopelman]_
* 07/07/2019 Selected tabular rows may now be copied to the clipboard using CTRL-C.

== Release 3.2.0
* 07/05/2019 Fixed a bug that was preventing entry of investment transaction gains or losses without using the detailed
             entry form and specifying a gains and loss account.
* 07/05/2019 Fixed a bug that was causing backup files and database conversions to save in the wrong location or
             fail completely if a period existed within the file name's path other than the file extension.
* 07/05/2019 The style of selected odd rows of TreeTables were not consistent with even rows.
* 06/30/2019 Updated to the latest Netty and PDFBox dependencies.
* 06/30/2019 The manual was missing from the distribution.
* 06/30/2019 Converted the manual to Latex and moved to manual process to improve build performance.
* 06/15/2019 Improved the speed of detecting a non converging IRR calculation.
* 06/15/2019 Protect against Reminders without descriptions.
* 06/14/2019 Tabular reports may now be exported to a spreadsheet.
* 06/01/2019 Updated to the latest Hibernate dependency.
* 05/26/2019 The current budget period is now highlighted for easier identification.
* 05/26/2019 Selected table rows were not using the user configured focus color.
* 05/22/2019 Added a context menu to copy selected transactions to the clipboard.

== Release 3.1.0 __(File format change)__
* 05/19/2019 Added a Today button to the Budget toolbar for easy refocus of the current period.
* 05/18/2019 The starting month for Budgets is now configurable.
* 05/04/2019 Correction for reports with running totals between periods incorrectly hiding accounts when the
             'hide zero balance accounts' box is selected.
* 05/03/2019 Improved the size behavior for Alert dialogs on 4K displays (GitHub Issue #82)
* 05/02/2019 Updated to the latest Netty dependency.
* 04/28/2019 Cleaned up selection focus visual issues in the Budget view caused by poor JavaFX behavior.
* 04/28/2019 Protect against unwanted Budget column reordering.
* 04/28/2019 The account column width may now be changed in the Budget view.
* 04/28/2019 Updated to JavaFX 12.0.1 dependency
* 04/27/2019 The rounding mode and scale for Budgets is now configurable.
* 04/24/2019 A JavaFX exception was being thrown during underlying changes to a budget.

== Release 3.0.4
* 04/15/2019 The jGnash launch script now works correctly when double clicked in MacOS. (GitHub Pull Request #80) _[Pranay Kumar]_
* 04/14/2019 Disable the Portfolio report if there are not any investment accounts.
* 04/14/2019 A NPE could occur if the last investment account was deleted after showing the Portfolio report.
* 04/13/2019 Eliminated zero width spaces from the export of a register to a xls/xlsx file.
* 04/13/2019 Updated to latest POI and PDFBox dependencies.
* 04/07/2019 A Reminders chapter was added to the manual.
* 04/09/2019 Made the Enabled check box of the New Reminder dialog enabled by default.
* 04/07/2019 Improved shutdown speed if background events are occurring.
* 04/05/2019 Made internal changes to prevent race conditions during a shutdown.
* 04/05/2019 Calculate opening balance if user changes reconcile date. (GitHub Pull Request #79) _[Pranay Kumar]_
* 04/04/2019 Prevent an NPE caused by a race condition between recurring transactions being processed and an
             application shutdown in process. (GitHub Issue #78)
* 04/04/2019 Prevent accumulation of stale internal listeners that would result in wasted system memory and a slowdown
             during a long running session.

== Release 3.0.3
* 04/01/2019 Enhanced error handling for relational database to make identification of errors easier.
* 04/01/2019 Correct validation of numeric input when using a comma as a decimal separator. (GitHub Issue #77)

== Release 3.0.2
* 03/31/2019 Closing a register window with CTRL-F4 was not working.
* 03/31/2019 Added a command line option to bypass the bootloader.
* 03/31/2019 The wrong version information was being reported on the console when requested.
* 03/30/2019 Automatic column widths will now update correctly if numeric or date formats change.
* 03/30/2019 Use a full commodity format for the Total column in the investment register.
* 03/30/2019 Changes to preferred date and numeric formats will now trigger an immediate update of the active register.
* 03/29/2019 Improved detection and handling of invalid decimal input.
* 03/29/2019 Removed direct print support from the report dialog.  The user can use save the PDF and print it.
* 03/28/2019 Reimplemented the page format dialog for reports to address OSX issues and to allow custom paper sizes.
* 03/28/2019 Prevent an NPE from a race condition between a background security price update and an application shutdown.
* 03/27/2019 Prevent an NPE from occurring when closing after a report has been shown and GC is slow.
* 03/26/2019 Improved the update behavior when performing a Save As and when packing databases.
* 03/26/2019 The pack database action was not listing .mv.db files.
* 03/24/2019 Cleanup of language files to make translation and updates easier.

== Release 3.0.1
* 03/22/2019 Corrected a very rare concurrency exception when retrieving investment accounts using a relational database.
* 03/23/2019 Updated to the latest Hibernate dependency.
* 03/22/2019 Updated Russian translation. _[pchurzin]_
* 03/22/2019 Reporting would fail if Java encountered a font file it did not like.
* 03/21/2019 Fixed wrong currency symbol in Debit/Credit Columns if using a full format. (GitHub Issue #75)
* 03/19/2019 Do a better job of reporting bootloader network errors.
* 03/19/2019 Disabled Ctl-C shortcut for closing a file (Conflicts with a paste command).
* 03/18/2019 Prevent an exception from occurring if a default directory does not exist.
* 03/16/2019 Changed the download link in the Windows launcher to use a correct JDK.

== Release 3.0.0
* 03/14/2019 Updated to the latest H2 and Netty dependencies.
* 03/13/2019 Control of report resolution was added to the Balance Sheet and Net Worth reports.
* 03/12/2019 Corrected localization issues with the Default Currency and Locale selection dialogs.
* 03/12/2019 Updated to JavaFX 12 (Java 11 Compatible).
* 03/10/2019 Made the Options dialog accessible without a file loaded.
* 03/10/2019 Number formats can now be chosen using the Options dialog and are more consistent.  This allows full
             control of the display of register values and provides a work around for a known JDK 11 bug.
* 03/10/2019 Date format selection was moved to the Formats Tab in the Options dialog for UI consistency.
* 03/08/2019 Disabled generation of the faulty -fx.bat file in the distribution.
* 03/07/2019 Decimal fields now use an internal math interpreter instead of the Javascript interpreter.
* 03/05/2019 Updated to latest h2, Apache Poi, and sl4j dependencies.
* 03/05/2019 Minor internal changes to take advantage of Java 11 APIs.

== Release 3.0.0-b1
* 02/27/2019 jGnash is designed to operate with Java 11 and newer.
* 02/27/2019 Removed support for old Swing UI.
* 02/27/2019 Jasper is no longer used for report generation.  jGnash now uses it's own internal reporting API.

== Release 2.36.2
* 02/17/2019 Fixed an issue preventing the old Swing UI from running with Java 11 (Swing).
* 02/10/2019 Prevent an exception when importing odd OFX files using an XML declaration. (GitHub Issue #72)
* 02/10/2019 Update to the latest Hibernate, Netty, and HikariCP dependencies.  This improves compatibility with Java 9+.
* 01/14/2019 jGnash would not start on a early access version of Java 8 (Swing, Fx, GitHub Issue #71)
* 01/11/2019 Corrected an exception when the date picker was cleared and focus was lost (Fx, GitHub PR #70) _[pchurzin]_
* 12/24/2018 Updated Polish translation (Swing, Fx) _[Sławomir Szarkowicz]_
* 12/24/2018 Fixed several localization issues reported by Sławomir Szarkowicz.
* 12/24/2018 Corrected a Runtime exception when trying to create a new file for locales without a country specified (JavaFx, Bug #65) _[valnaumov]_

== Release 2.36.1
* 11/06/2018 Updated to the latest Commons CSV dependency.
* 11/05/2018 Potential fix for a ConcurrentModificationException when changing budget properties (Swing, Bug #64)
* 11/04/2018 Updated to the latest Hibernate, Netty, XStream, and JUnit dependencies.
* 11/01/2018 Adjust width of the date column to match entry format and font scale. (Fx, GitHub Issue #63)
* 10/07/2018 Improved handling of OFXv2 files with incorrectly escaped XML characters. (Swing, Fx, GitHub Issue #61)
* 10/01/2018 Currency exchange rate is working again.  Yahoo continues to lock down their API. (Swing, Fx) _[Pranay Kumar]_
* 10/01/2018 Updated German translation. (Swing, Fx) _[Alex Werz]_
* 09/30/2018 Fixed an NPE when an ISIN was not specified for a security. (Swing, Fx) _[Pranay Kumar]_
* 09/16/2018 The new file wizard would not behave correctly if the task list was used instead of stepping sequentially
             using the Next button. This also impacted the Import Wizard. (Fx)

== Release 2.36.0
* 09/13/2018 Enhanced the MT940 parser to allow for an optional currency designator in decimal values. (Swing, Fx) _[Alex Werz]_
* 09/13/2018 Reinstated check and correct for data files with multiple root accounts and config objects. (Swing, Fx)
* 09/13/2018 The Fx interface now uses picocli for command line processing. (Fx)
* 09/13/2018 The old Swing interface no longer supports command line processing. (Swing)
* 09/10/2018 Fixed a bug that was preventing initialization of a new user specified portable preference file. (Fx)
* 09/09/2018 Fixed a random stability issue with client / server operation discovered during unit testing. (Swing, Fx)
* 09/09/2018 Updated to the latest Apache POI dependency.
* 09/09/2018 Updated manual with proper use of escape characters on the command line for file names.
* 09/06/2018 Dropped use of log4j as it is no longer a needed dependency.

== Release 2.35.1
* 08/26/2018 Updated to the latest Netty dependency.
* 08/25/2018 Fixed a bug when loading files using a very old UUID format. (Swing, Fx)
* 08/24/2018 Fixed several large memory leaks in the jGnashFx user interface. (Fx)
* 08/18/2018 Tightened up API for adding and removing securities to accounts to prevent corruption.
* 08/17/2018 Updated to the latest Hibernate dependency.

== Release 2.35.0 __(File format change)__
=== Notes:
Relational databases will need to be saved to a .xml or .bxds file format in the prior release of jGnash.  They may
be saved back to a relational database format afterwards.

* 08/12/2018 Fixed a layout bug that was preventing the Investment Transaction dialog from showing the full form.  (Fx)
* 08/12/2018 Improved the layout behavior of the Transaction dialog.  (Fx)
* 08/12/2018 Fixed a bug that was causing decimal artifacts to occur in empty rows of the reminders table when using
             Java 10. (Fx)
* 08/12/2018 Prevent an "illegal reflective access operation" from occurring on Java 9 and newer.
* 08/10/2018 Reimplemented the detailed gains and loss control to support use in Java 10. (Fx)
* 07/29/2018 Changes were made to make migration to Java 10+ easier.
* 07/29/2018 Use Stax instead of kxml to make migration to Java 10+ easier.
* 07/28/2018 Migrated test system to JUnit 5.
* 07/28/2018 Updated to the latest Netty dependency.
* 07/06/2018 Reduced memory usage and improved performance for relational database users.
* 07/01/2018 Removed support for handling old XML file formats from 2017 and detection of 1.x files.
* 07/01/2018 Removed Dump Heap button from Console Dialog because API use is restricted in Java 9 and newer. (Swing)
* 06/24/2018 Replaced c3p0 with HikariCP for reduced application size and improved performance.
* 06/24/2018 Updated to the latest Hibernate dependency.  This breaks schema compatibility with older relational
             database files.
* 06/24/2018 Dropped support for the old jgnash Hibernate persistence unit / schema.

== Release 2.34.1
* 06/07/18 Updated Russian translation. (Swing, Fx) _[pchurzin]_
* 06/07/18 Updated to the latest Hibernate, Netty, Hsqldb, and DynamicJasper dependencies.
* 06/06/18 Remove stale relational database lock files if a crash had occurred.
* 03/28/18 Updated to the latest H2 dependency.
* 02/06/18 Improved snooze behavior for reminders. (Fx) _[leeboardtools]_
* 02/05/18 Corrected a race condition in the transaction register that would cause a rare sorting issue and IndexOutOfBoundsExceptions. (Fx)
* 02/03/18 Updated to the latest Netty dependency.
* 02/02/18 Corrected an IllegalStateException when manually reconciling transactions. (Fx)
* 01/12/18 Nested Investment accounts were summing with small fractional errors depending on Market price. (Swing, Fx)

== Release 2.34.0
* 01/06/18 Significant update to the Polish translation _[Sławomir Szarkowicz]_
* 01/06/18 Updated to latest Netty dependency.
* 12/10/17 Another significant update for the zh-ch locale translation. (Swing, Fx) _[kevinzhwl]_
* 12/02/17 The Portfolio report now calculates Internal Rate of Return. (Swing, Fx) _[t-pa]_
* 11/28/17 Improve MT940 import to handle Kontobezeichung (Swing, Fx) _[laeubi and sschuberth]_
* 11/22/17 Prevent a deadlock due to a poor or corrupt printer configuration at the OS level. (Swing, Fx)
* 11/22/17 Fixed a Platform thread exception on exit when the application was closed soon after closing a Reminder dialog. (Fx)
* 11/19/17 Expanded the import filter script interface to allow advanced manipulation of ImportTransactions. (Fx)
* 11/18/17 Switched from Opencsv to Apache Commons CSV for exports to reduce distribution size and dependencies. (Swing, Fx)

== Release 2.33.2
* 11/12/17 The opening Reconcile dialog now has a button to calculate ending balance based on the closing date. (Fx) _[Pranay Kumar]_
* 11/11/17 The Reminders dialog would not close properly if dismissed with a button. (Fx)
* 11/11/17 The Reminders dialog was not correctly restoring the last used snooze period. (Fx)
* 11/11/17 Corrected a Hibernate configure error for Account objects that may have been causing subtle bugs. (Swing, Fx)
* 11/08/17 New workaround for Yahoo discontinuing a portion of their Securites history API. (Swing, Fx)
* 11/06/17 Correct handling of special characters when importing OFX files. (Swing, Fx, GitHub Issue #35)
* 11/06/17 Ignore cash transfers for dividends in realized gains calculations. (Swing, Fx) _[t-pa]_
* 11/06/17 Significant update for the zh-ch locale translation. (Swing, Fx) _[kevinzhwl]_
* 10/22/17 Updated to latest Hibernate and Netty dependencies.
* 08/19/17 Switched from a MD5 to SHA-256 hash function for encrypted client / server operation. (Swing, Fx)
* 08/19/17 Protect against the import of an OFX file with malicious content. (Swing, Fx)

== Release 2.33.1
* 08/18/17 Corrected an issue with optimal Date storage in xml and bxds files caused by a regression introduced in 2.33.0
* 08/16/17 The OFX export will now generate required information for transfer between accounts. (Swing, Fx)
* 08/15/17 Simple use of portable preferences was failing with use of -p or --portable. (Swing, Fx)
* 08/15/17 Display a console message with the successful uninstallation of application preferences. (Swing, Fx)
* 08/15/17 The command line help system was not being displayed on the console correctly. (Swing, Fx)
* 08/14/17 OFX import now supports transfers between accounts. (Fx)
* 08/13/17 The open dialog was incorrectly allowing selection of a file when a remote connection was selected. (Fx)
* 08/13/17 Internal were changes made to allow operation with Java 9 with the addition of the command line option
           `--add-modules java.xml.bind`. (Swing, Fx)

== Release 2.33.0
* 08/11/17 Updated to the latest Netty dependency.
* 08/09/17 Implemented amortized payments for the Fx interface. (Fx)
* 07/31/17 Build system has been converted to Gradle.  Unix executable shell scripts are now provided.
* 07/31/17 Updated to the latest jopt-simple dependency.
* 07/09/17 Updated to the latest DynamicJasper and JasperReports dependencies.
* 07/09/17 Updated to the latest Apache POI dependency.
* 07/02/17 Further improvements to handling Yahoo Fiance API errors.
* 07/02/17 Potential fix for a Budget Exception occurring when OSX users are using a relational database.
* 06/19/17 Added a command button to execute a Reminder on demand. (Fx)
* 06/16/17 Updated to the latest Netty dependency.
* 06/16/17 Updated to the latest XStream dependency.
* 06/16/17 Updated to the latest H2 database dependency.

== Release 2.32.0
* 06/13/17 Updated to the new Yahoo Finance API for retrieving historical stock price information.
* 06/12/17 The security history chart would incorrectly show a prior chart if no data existed. (Fx)
* 06/11/17 Updated to the new Yahoo Finance API for retrieving dividend and stock split information.
* 06/03/17 Expanded the manual content for importing transactions.
* 06/03/17 Fixed a regression that was preventing the selection of the transaction's account when importing. (Fx)
* 05/30/17 Added the ability to pre-process imported transaction memos and payees using user supplied JavaScript. (Fx)
* 05/28/17 Minor improvements to the button behavior when editing the transaction number list. (Fx)
* 05/22/17 Updated to the latest Netty dependency.
* 05/14/17 Minor internal changes to remove the dependency on ControlsFX. (Fx)
* 05/14/17 The Enter button should be disabled if the form is not valid for investment transactions and split entries. (Fx)
* 05/13/17 Reworked exchange rate popup because display quality was inconsistent when first shown. (Fx)
* 05/11/17 Fixed missing icons for the currency exchange rate dialog. (Fx)

== Release 2.31.0
* 05/10/17 Added a General configuration option to allow full manual control of table column widths. (Fx)
* 05/10/17 The Options dialog now remembers the last tab that was used. (Fx)
* 05/08/17 Corrected handling of OFX files written with a windows-1252 character set. (Swing, Fx)
* 05/08/17 Prevent ghosting horizontal scrollbars when resizing the main window. (Fx)
* 05/07/17 Table Column sizes (register & reconcile) are now correctly remembered, restored, and scaled. (Fx)
* 05/06/17 Updated to the latest Netty dependency.
* 05/06/17 The reminder dialog now closes itself automatically if it was shown in the background while a file close was
           started concurrently. (Fx)
* 04/28/17 Dependency on FontAwesomeFx is no longer needed. (Fx)
* 04/24/17 Updated to the latest H2 database dependency.
* 04/17/17 Yahoo Security Download now requires use of HTTPS for downloads. (Swing, Fx)
* 04/17/17 Improved sizing of the open dialog for the Fx interface (Fx, GitHub Issue #25) _[Pranay Kumar]_
* 04/17/17 Cleaned up build system.  JGoodies dependencies now come from Maven Central
* 04/15/17 Updated to the latest Hibernate and HSQLDB dependencies.
* 04/10/17 Corrected an IndexOutOfBoundsException occurring during Transaction import (OFX, QIF) of a quantity not large
           enough to fill the table. (Fx)
* 04/09/17 Entry of date separators is now more flexible and allows use of ',' '.' '/' and '\' characters for all locales. (Fx)
* 04/09/17 Relaxed date entry requirements.  Single digit months may be now be typed in. (Swing, Fx)
* 04/09/17 The Account Register report was not reporting split entries correctly and consistent with the UI. (Fx)

== Release 2.30.0
* 04/09/17 Fixed a bug that was causing Buy and Sell transactions not using the cash balance of the investment account
           to generate an incorrect cash account amount. (Fx)
* 04/06/17 Fixed an issue with importing OFX 1.x files with ugly white space formatting. (Swing, Fx)
* 03/30/17 Added support for the H2 MVStore database file format.
* 03/30/17 Updated to the latest H2 database dependency
* 03/26/17 Updated to the latest Hibernate dependency.
* 03/25/17 The payee for Reinvested Dividends was not being generated correctly. (Swing, Fx)
* 03/24/17 OFX import of investment transactions is supported for Buys, Sells, Dividends, and Reinvested Dividends.
* 03/22/17 Corrected a random IllegalStateException occurring during transaction edits. (Fx)
* 03/11/17 Updated to the latest Netty dependency.

== Release 2.29.0
* 02/25/17 Improved UI performance when performing large batch updates of transactions. (Fx, GitHub Issue #23)
* 02/24/17 Updated to the latest Hibernate dependency.
* 02/22/17 Backup files were not being preserved correctly in some instances depending on the pattern of the file names
           in the same directory and if they contained a '-' character. (Swing, Fx)
* 02/13/17 jGnashFx Users are required to use Java 8 Update 71 or newer due to critical Java bugs. (Fx)
* 02/11/17 Clicking on an Income or Expense bar within the Income Expense Bar Chart will show the details for the
           period within a pie chart. (Fx) _[Pranay Kumar]_
* 02/07/17 Improved UI behavior when performing a large batch delete of transactions. (Fx)
* 02/06/17 An OFX import now prevents initial assignment to the wrong account type. (Fx)
* 02/03/17 Updated to the latest Netty and JOpt Simple dependencies.
* 02/01/17 Fixed a StringIndexOutOfBoundsException that was occurring when escaping out of a text field on MacOS. (Fx)
* 01/30/17 Fixed a NPE that was occurring when importing transactions. (Fx)
* 01/30/17 Corrected an OFX import regression that reduced effectiveness of detecting a duplicate import. (Swing, Fx)
* 01/29/17 Entity trash was being checked too frequently. (Swing, Fx, GitHub Issue #21)

== Release 2.28.4
* 01/26/17 Fixed an OFX import bug.  File header was in an unanticipated format that prevented correct identification.

== Release 2.28.3
* 01/23/17 Manual was expanded with specifics of transaction entry
* 01/20/17 Updated to the latest Hibernate and HSQLDB dependencies.
* 01/18/17 Corrected a performance regression loading and saving bxds and zip files introduced in 2.28.0.
* 01/17/17 Updates and  corrections to translations.  Parts of text for some languages were corrupt due to an editor bug.
* 01/15/17 More stability improvements when under heavy background loads and using a relational database.

== Release 2.28.2
* 01/14/17 Corrected a bug with file locking on Windows OS.
* 01/14/17 Added the Account and Amount columns to the Reminders table. (Fx)
* 01/14/17 Corrected errors with the Polish translation. (Sławomir Szarkowicz)
* 01/14/17 Fixed a regression that removed the Ticker/Investment column from the Investment account register. (Fx)

== Release 2.28.1
* 01/14/17 Corrected issues with inconsistent behavior of the reported memos of split transactions. (Swing, Fx)
* 01/14/17 Updated to the latest Netty dependency.
* 01/08/17 The Investment Register was not sizing the Quantity column correctly. (Fx)
* 01/08/17 Fixed an IllegalArgumentException that was occurring if the option "Next time jGnash starts" was used when
           dismissing the Reminders dialog. (Fx)
* 01/08/17 jGnash now uses a priority based model for the handling of internal tasks to prevent deadlocks from
           background operations.  This corrects some reported bugs with random freezing and hanging of the UI. (Swing, Fx)
* 01/07/17 Updated to the latest Hibernate dependency.
* 12/01/16 Corrected an NPE that was occurring during import of a OFX/QFX files. (Fx)
* 11/30/16 Improved the behavior of background removal of securities history.

== Release 2.28.0
* 11/27/16 Added the transaction timestamp to the CSV export. (Swing, Fx)
* 11/27/16 The xls and xlsx Account exports were broken by the addition of timestamps in Release 2.27.0. (Swing, Fx)
* 11/27/16 Updated to the latest Hibernate, DynamicJasper, JasperReports and OpenCSV dependencies.
* 11/26/16 The Account Register report was broken by the addition of timestamps in Release 2.27.0. (Fx)
* 11/26/16 An exception was occurring if Budgeting was being used and the window was too small to display data. (Fx)
* 11/26/16 Corrected sizing issues in the Budget interface if the screen was very wide and the budget was configured to
           use a small number of periods. (Fx)
* 11/26/16 Column widths are preserved so automatic column width resizing is less notable. (Fx)
* 11/26/16 Fixed a NPE triggered by a file load while a file is already being loaded. (Fx)
* 11/24/16 Columns were not resize correctly when adding or removing transactions. (Fx)
* 11/24/16 Delay the upgrade notification a bit more for a cleaner startup for some users. (Fx)
* 11/23/16 Added capability to cull down unneeded securities history as a background operation. This can reduce file
           size and improve overall performance. (Fx)
* 11/23/16 Improved performance when using a relational database and updating securities history. (Swing, Fx)
* 11/20/16 jGnash would stall and appear to be hung if a large group of transactions or security history was being
           removed when using a relational database. (Swing, Fx)
* 11/14/16 Corrected a rare ConcurrentModificationException on systems under heavy loads. (Swing, Fx)
* 11/08/16 Account ComboBox selection can be made using the first letter of the account. (Fx) _[Pranay Kumar]_
* 11/08/16 Up and Down arrows can be used for selection within the Transaction number box
* 11/05/16 Improved visual feedback for placeholder accounts and sums in the Budget interface. (Fx) (Feature Request 116)

== Release 2.27.0
* 11/05/16 Improved window positioning behavior on multi-monitor systems. (Fx)
* 11/05/16 The Budget Goals dialog had the wrong title and layout behavior was poor. (Fx)
* 11/03/16 Budgets results may now be display as running totals instead of per period values. (Fx)
* 10/26/16 Improved the density and layout stability of the budget view. (Fx)
* 10/24/16 Added selection buttons to the Reminders notification dialog to reduce required effort. (Fx)
* 10/24/16 The Periodic Account Balance chart was improved with more selectable periods and better button names. (Fx)
* 10/24/16 The Income and Expense bar chart was freezing due to an infinite loop. (Fx) _[Pranay Kumar]_
* 10/24/16 Improved stability of test and build for slow or virtualized systems.
* 10/23/16 The focus and accent colors for the Fx UI can now be changed. (Fx)
* 10/22/16 Corrected some font scaling issues within the UI. (Fx)
* 10/22/16 Improved column layout behavior when changing the default font scale. (Fx)
* 10/18/16 Transaction timestamps are now strictly controlled.  Alternation of a transaction including reconciliation
           will alter the timestamp.
* 10/18/16 A transaction entry timestamp column has been added to the register.  It is hidden by default. (Fx)
* 10/17/16 Prevent an IllegalArgumentException from occurring if a default or prior directory is missing when attempting
           to select a file. (Fx)
* 10/16/16 Added an option to control how Bayesian model matches transactions to accounts when importing. (Fx)
* 10/16/16 Make the last selected transaction account sticky for the OFX/QIF/MT940 Import wizard. (Fx)
* 10/14/16 The OFX/QIF/MT940 Import wizard was not displaying consistent precision for transaction amounts. (Fx)

== Release 2.26.1
* 10/13/16 Binary and XML files were not loading in the Fx interface. (Fx)

== Release 2.26.0 __(File format change)__
=== Notes:
H2 databases will be upgraded automatically.

HyperSql (*.script) databases will need to be saved to another file format in the prior release of jGnash.  They may
be saved back to a HyperSql database afterwards.

* 10/12/16 Added an option to invert the sign of Credit, Liability, Equity, and Income accounts for the Periodic
           Account Balance chart.
* 10/10/16 Fixed another transaction and security history concurrency bug for relational databases. (Swing, Fx)
* 10/09/16 The initial check for recurring transactions / reminders was taking too long. (Fx)
* 10/04/16 Add utility method to pack and upgrade older databases. (Fx)
* 09/07/16 Added work around for JavaFx bug JDK-8132897. Using a ComboBox was causing an application crash when running
           on the Windows platform. (Fx)
* 09/03/16 Improved predictability of the sort order of transactions with the same date without an assigned transaction
           number. (Swing, Fx)
* 08/29/16 Internal cleanup, removal of duplicated code.
* 08/28/16 The Open dialog was not behaving correctly if a remote connection was used for the prior session. (Fx)
* 08/21/16 Updated to the latest Hibernate dependency.  HyperSql (*.script) users will need to save to a different file
           format before updating to this release.  You may revert back to HyperSql after the upgrade.
* 08/21/16 Removed support for corrections to older file formats (Prior to release 2.22.0).  Existing files must have
           been loaded with jGnash release 2.22 - 2.25 prior to using with this release.

== Release 2.25.0
* 08/20/16 JavaFx interface is now considered stable for daily use.  Remove -ea suffix off executables. (Fx)
* 08/16/16 Fixed a rare transaction and security history concurrency bug for relational databases. (Swing, Fx)
* 08/11/16 Running totals for Spit transaction forms were not updating correctly. (Fx)
* 07/10/16 Command line options have changed, they now use '--' instead of '-'. See the manual for details. (Swing)
* 07/05/16 Integrated help has been removed from the Swing interface.  Help is provided with the supplied Manual.pdf.
         The old help system was limiting the type and quality of documentation that could be generated. (Swing)
* 07/05/16 The Check Designer Dialog button texts were not displayed correctly. (Swing)
* 07/04/16 The mt940 import now works with the Fx interface. (Fx)
* 07/04/16 Plugin API has been changed to allow a plugin to support the Swing and Fx interface. (Swing, Fx)
* 07/02/16 Plugin API implemented for the Fx interface. (Fx)
* 06/30/16 Plugins may now be placed in $HOME/.jgnash/plugins for *nix based OS's or
         C:\Users\user\AppData\Local\jgnash\plugins for Windows users. This makes upgrades easier for custom plugins.
* 06/26/16 Plugins were not being loaded from the correct location.  This prevented the mt940 plugin from loading. (Swing)
* 06/26/16 Added print capability and a status bar to the transaction attachment viewer. (Fx)

== Release 2.24.0
* 06/23/16 Improved performance for loading large files, working with large accounts and reports. (Swing, Fx)
* 06/22/16 Fixed some bugs related to editing of split transactions. (Fx)
* 06/22/16 Enable use of concatenated memos within the Swing interface. (Swing)
* 06/19/16 Improve handling of JDBC connection errors. (Swing, Fx)
* 06/19/16 The Fx UI would not completely shut down in some rare instances. (Fx)
* 06/18/16 Shutdown of server was not working correctly. (Fx)
* 06/17/16 Implemented use of command line options for the Fx interface.  (Fx)
* 06/09/16 Implemented the Payee Pie chart for the Fx interface.  (Fx)
* 06/02/16 The Income and Expense Pie chart now uses a DoughnutChart variation. (Fx)
* 05/27/16 Update to the latest Netty and include only the needed dependencies. (Swing, Fx)
* 05/26/16 Improved the name of the application in the OSX and Gnome global menu. (Fx)

== Release 2.23.0
* 05/14/16 Added the Periodic Account Balance report. (Fx)
* 05/04/16 Implemented the Reminders dialog for the FX interface. (Fx)
* 05/03/16 Implemented the "Shutdown Server" command for the FX interface. (Fx)
* 05/03/16 Added access to the Budget Manager from the Tools Menu. (Fx)
* 05/02/16 Implemented "File | Save As" capability for the FX interface. (Fx)
* 05/02/16 Implemented Password Change capability for relational databases. (Fx)
* 05/01/16 Modified transactions were not refreshing consistently in the register table. (Fx)
* 04/26/16 Fixed import of an account tree when using a relational database. (Swing, Fx)
* 04/25/16 Added Account structure import and export capability. (Fx)
* 04/24/16 Display a wait indicator when a generating a large report. (Fx)
* 04/24/16 Added the Account Register Report. (Fx)
* 04/24/16 Added a Memo specific column to the investment register table and separated the Investment column (Fx)
* 04/17/16 Added an option to the split entry dialog to automatically concatenate the memos of split transactions.
         This will reduce file size if used and reduces split transaction entry effort. (Fx)
* 04/15/16 Display a message at startup when a newer version is available for download. (Swing, Fx)
* 04/10/16 Language files now use UTF-8 file encoding. (Swing, Fx)

== Release 2.22.1
* 04/03/16 Fix for Fx UI font scaling issues for locales that use a comma for the decimal separator. (t-pa)
* 03/29/16 Preserve the tree structure in budget exports. (t-pa)
* 03/28/16 Fixed random deadlocks when loading budgets in the Swing interface. (t-pa)
* 03/28/16 Corrected budget calculations for mixed child account types. (t-pa)
* 03/28/16 Added Polish translation (Sławomir Szarkowicz)
* 03/22/16 Fixed broken OFX export.
* 03/09/16 Correct issues with table column widths sizing themselves incorrectly. (Fx)
* 03/07/16 Budgets were not calculating net period amounts correctly for income and expense accounts. (Bug #216) (Swing, Fx)
* 02/28/16 Enable automatic load of the last file for the Fx interface. (Fx)
* 02/28/16 Force the Fx interface on Windows to use 95% font scaling for work around potential Hi-DPI display bugs. (Fx)
* 02/28/16 NPE was occurring when editing transactions with an empty payee or memo's. (Fx)
* 02/28/16 OFX/QFX files with a capitalised file extension were not visible for import. (Fx)

== Release 2.22.0 __(File format change)__
* 02/20/16 Fixed behavior of manual date input.  It would sometimes reposition the caret and ignore input. (Fx)
* 02/18/16 Fixed a bug that was preventing removal of stale data from the relational database file formats.
* 02/14/16 Changed storage format for Budgets
* 02/09/16 Enable Menu mnemonics for platforms that support it (Fx, Windows).  Changed mnemonics design so it is easier
         for translation and works for both Swing and Fx interfaces.
* 02/08/16 Added the Net Worth Report. (Fx)
* 02/06/16 Added the Balance Sheet Report. (Fx)
* 02/05/16 Added the Profit Loss Report. (Fx)
* 01/29/16 Added the Portfolio Report. (Fx)
* 01/29/16 The running balance in the register was not updating correctly with transaction changes. (Fx)
* 01/25/16 The transaction number ComboBox would not always capture a manually entered value. (Fx)
* 01/18/16 Incorrect accounts were available for selection in the account ComboBox. (Fx)
* 01/10/16 Added the Monthly Account Balance CSV export report to the jGnashFx UI. (Fx)

== Release 2.21.0
* 01/09/16 Fixed a bug that was causing Investment Accounts to loose Securities resulting in exceptions.  It was triggered
         when a Security was added to more than one Investment Account and only users of a relational database would be
         impacted. Files will be repaired automatically (Swing, Fx)
* 01/06/16 Fixed a regression that was preventing creation of new Reminders. (Fx)
* 01/06/16 The Reminder table was not updating correctly after a new recurring event had occurred. (Fx)
* 01/04/16 The Account type was being corrupted for top level accounts when editing properties. (Fx)
* 01/04/16 The default account type was not the same as the parent when creating a new account. (Fx)
* 12/27/15 Set an explicit and stable sort order for budget account groups. (Swing, Fx)
* 12/14/15 Added an Income / Expense Bar Chart report to the jGnashFx UI. (Fx)
* 12/13/15 Month labels for tabular reports were off by one. (Swing)
* 12/13/15 Added the Profit and Loss text report to the jGnashFx UI. (Fx)
* 12/12/15 Added an Income / Expense Pie Chart report to the jGnashFx UI. (Fx)
* 12/12/15 The Profit and Loss text report was failing to execute. (Swing)
* 12/08/15 An option to remember the last used transaction tab has been added. (Fx)
* 12/07/15 An option to change button order has been added if you do not like the OS default. (Fx)
* 11/27/15 The budget view will automatically focus the current period when first displayed. (Fx)
* 11/27/15 Fixed an IndexOutOfBounds exception when reducing the displayed period count for a budget. (Fx)
* 11/27/15 Improved column sizing for the account summary table within the budget view. (Fx)
* 11/26/15 Improved general dialog sizing and positioning behavior. (Fx)
* 11/24/15 The transaction register may now be filtered/searched by date, reconciled state, memo, and payee. (Fx only)

== Release 2.20.0
* 11/22/15 Fixed several potential locale specific bugs.
* 11/17/15 Added a context menu to the account tree table. (Fx)
* 11/16/15 Right aligned decimal values in the account tree table. (Fx)
* 11/16/15 Fixed the account code editing behavior from within the account tree table. (Fx)
* 11/16/15 Completed implementation of Budgeting for the jGnashFx UI.
* 11/15/15 Reduced distribution size by excluding compile time dependencies.
* 11/11/15 Budgeting now uses the ISO 8601 standard for handling weekly periods for consistency. (Swing)
* 11/11/15 Fixed several budgeting bugs related to 53 week years. (Swing)
* 11/10/15 Fixed an error that would occur when creating a new file and the given filename extension did not match the selected file type. (Fx)
* 11/10/15 Duplicate tabs were being created and an exception thrown when creating a new file. (Fx)
* 11/05/15 Added the ability to change the default date format to something other than the locale default. (Swing, Fx)
* 10/31/15 Fixed a file version check bug that was causing asset and liability accounts to lose their budget visibility.
* 10/31/15 Internal test framework should not leave files lying around anymore.
* 10/28/15 Fixed a bug with account combos not retaining their initial value. (Fx)
* 10/27/15 Improved font appearance by forcing smoothing type to gray. (Fx)
* 10/25/15 The last used tab of the primary interface is now restored at startup. (Fx)
* 10/24/15 Windows were not saving their size and location because of a race condition. (Fx)
* 10/24/15 Transaction number combo box was not working correctly. (Java Bug JDK-8136838 Fx)
* 10/18/15 Improved the column packing speed of the transaction register. (Fx)
* 10/17/15 The base font size will need to be reset after some code cleanup. (Fx)
* 10/17/15 Avoid extraneous automatic securities price updates during the weekend if at least one has occurred.
* 10/14/15 Fixed a race condition in the account ComboBox resulting in NPE when creating a new account. (Bug #212) (Fx)
* 10/14/15 Increase the darkness of the alternating tabular data row color from 2% to 6%. (Fx)
* 10/11/15 Added keyboard accelerators. (Fx)

== Release 2.19.0
* 10/10/15 Cleaned up Transaction Import API.  External import plugins will need to be updated.
* 10/09/15 Updated to latest Netty release
* 10/08/15 Improved layout behavior for investment transaction forms. (Fx)
* 10/07/15 Fixed a transaction entry bug when selecting the next available check number. (Fx)
* 10/05/15 Improved register layout. (Fx)
* 10/05/15 The reconcile button in the accounts list was not working. (Fx)
* 10/04/15 Fixed an NPE that could occur when creating a new account. (Fx)
* 10/04/15 Icons behave better when the base color and font size is changed. (Fx)
* 10/04/15 Implemented QIF import for the jGnashFx UI.
* 09/25/15 The QIF import utility has been improved to make a better determination of the date format automatically.
* 09/25/15 Some QIF imports would fail because of a date parsing regression in 2.17.0.
* 09/20/15 Fixed an OFX and QIF bug that was preventing matches of previous and manually entered transactions. (Swing, Fx)
* 09/20/15 Fixed an exception if an attempt was made to import an OFX or QIF file with a previously imported transaction. (Swing, Fx)
* 09/20/15 Implemented OFX import for the jGnashFx UI.
* 09/15/15 Fixed an exception when opening the Transaction Number configuration Dialog (Fx)
* 09/15/15 Added XLS, and XLSX files to the existing export capability of the transaction register (Swing)
* 09/15/15 Added CSV, OFX, XLS, and XLSX file export capability to the transaction register (Fx)
* 09/14/15 Fixed ellipse mark that made it into the Open toolbar button (Swing)

== Release 2.18.0
* 09/13/15 jGnashFx Early Access is now included with the distribution.
* 09/08/15 The NetWorth and BalanceSheet reports were not including Simple Investment account types.
* 09/06/15 Fixed QIF date parsing import bug introduced by 2.17.0
* 09/01/15 (FX) DatePicker now increments and decrements with use of vertical and horizontal scroll input
* 08/29/15 Remove support for importing jGnash 1.x files

== Release 2.17.1
* 09/01/15 Fix for a one day shift when converting Dates to LocalDates for XML and BXDS file formats.

== Release 2.17.0 __(File format change)__
* 08/28/15 Automatic backup preferences are now stored within the data file.  This is better for users working off of
         portable storage and multiple computers.  You will need to update your preferences with this release.
* 08/24/15 Securities historical charts now factor in stock splits and reverse splits.
* 08/23/15 The JavaFx UI for Securities history allows manual edits of split and dividend history.
* 08/16/15 File formats have changed and will not be backwards compatible with prior releases.
* 08/16/15 Added framework for handling historical information for stock splits and dividends. (File format change)
* 08/15/15 Migrated to use of the new Java 8 LocalDate classes.  This improves the overall application performance. (File format change)
* 08/12/15 Added RTF, and DOCX export capability for tabular reports.
* 08/12/15 Updated to the latest DynamicJasper.
* 08/11/15 Removed unused dependencies from the distribution files and build system.
* 08/02/15 Dependencies updates.
* 08/02/15 Temporally disable SSL jdbc connections until some bugs are sorted out.
* 08/02/15 Encrypt client/server communications if a password is specified without requiring explicit enabling of encryption.
* 07/31/15 Fixed a bug that would cause transfers of attachments in client/server mode to fail under Windows OS
* 07/26/15 The exchange rate dialog was not showing the close button and the clear button was in the wrong location.
* 07/22/15 Fixed a rare concurrency issue when updating securities history
* 07/20/15 Fixed an issue with historical investment downloads timing out when using a relational database.
* 07/11/15 Fixed issues when exporting an account structure when using a relational database.
* 07/10/15 Removed the days past due field in recurring form.  It's not needed because we have a Due date column now.
* 07/09/15 Add Last Posted date and Due date columns to the reminder table for easy reference
* 07/09/15 Add new capability to create a new recurring transaction from an existing transaction (context menu in the register)

== Release 2.16.0 __(Java 8)__
* 07/03/15 Dependencies updates, fixes for some Hsqldb database issues and minor performance improvements.
* 06/26/15 General cleanup and internal changes to support the new FX user interface in development.
* 05/31/15 An exception would occur if a Security was removed immediately after it was created and loaded with history (Bug #208)
* 05/31/15 Changed the reconcile checkbox to support three states for not-reconciled, cleared, and reconciled.
* 05/25/15 Return of Capital transactions were not being shown in the register table correctly.
* 05/14/15 Autocomplete now makes better choices for debit and credit transactions.
* 03/14/15 Ensure directory has been created first before trying to write a file.
* 03/14/15 Historical import dialog for securities did not correctly preset the prior month as intended.
* 03/14/15 Java 8 is now required for 2.16.0 and newer


== Release 2.15.2
* 02/12/15 Add tooltip to the investment gains and fees details buttons
* 02/09/15 SecurityHistoryNodes are now immutable to prevent database corruption
* 02/08/15 Insure resource cleanup if an SQL error is thrown
* 01/31/15 Fix for potential resource leak when exporting budgets to a spreadsheet
* 01/24/15 Fix sorting issues with securities and currency history dialogs
* 01/23/15 Initial sort order for security history was incorrect for XML and BXDS file formats
* 01/22/15 Dependencies updates, fix for some H2 database and Hibernate warnings

== Release 2.15.1
* 12/24/14 Fixed import of an exported account tree
* 12/24/14 Fixed security price import from Yahoo UK

== Release 2.15.0 __(File format change)__
* 12/07/14 Display a warning dialog if loan amortization is not configured instead of logging to the status bar.
* 12/03/14 Correct database at load if a transaction was incorrectly marked as orphaned and removable.
* 11/26/14 The simple investment account type was moved to it's own group to improve program logic
* 11/23/14 Active Account Securities were not marked to prevent removal in the Account Properties dialog.
* 11/22/14 Updated Spanish translation (Marcelo Abeldaño)
* 11/21/14 Reminder transactions were being incorrectly identified as orphaned.
* 11/12/14 Improved sort capability.  Accounts are now sorted by an account code and then by name.
* 11/11/14 Added a Code property to Accounts. Codes can be change to suit users needs. (Changes file format)
* 11/09/14 Improved reconciliation behavior.  Reconcile Settings are remembered from prior sessions and are intelligently updated.
* 11/09/14 Add sorting capability to the reconcile dialog tables.
* 11/08/14 A dialog will now be displayed when the file has been automatically upgraded and a backup of the old version made.
* 11/08/14 Relational database files will be altered automatically to address Hibernate Bug #HHH_9389
* 11/06/14 Settings for background updates of exchange rates and securities were moved into the data file (Changes file format)
* 11/06/14 Reconcile settings were moved into the data file for consistent behavior when the file is shared on multiple
         systems (Changes file format)

== Release 2.14.1
* 10/31/14 Fixed a bug that was preventing Securities history from being deleted if added within the same jGnash session
         for relational databases.
* 10/31/14 Updated to latest Hibernate 4.3.7 release
* 10/28/14 Minor translation improvements
* 10/26/14 After exporting a budget to XLS, you can left align a numeric column to see indents.
* 10/26/14 Fixed a bug with an empty account being changed into a placeholder account and retaining invalid budget goal
         information.  Placeholder accounts should only roll-up child account goals.
* 10/26/14 Bug fix for placeholder accounts not recalculating balances correctly if their currency is changed.
* 10/24/14 Improve shutdown behavior when interrupting background updates.
* 10/22/14 Fixed another race condition that could freeze the UI at startup
* 10/21/14 Fix for incorrect totals for register reports with split details shown.  The sum of the split was being
         calculated twice.  Correct behavior is to not show the sum of the splits.
* 10/21/14 Updated to the latest dependencies for report generation and XLS file exports.

== Release 2.14.0
* 10/19/14 PDF version of the integrated help is now packaged with the zip distribution.
* 10/14/14 When using the reconcile Wizard, Finish Later will now mark the transaction as Cleared and not Reconciled.
* 10/12/14 Redesigned the reconcile behavior to use the statement end date. Public and internal API's have changed for
         reconciliation and may break plugins.
* 10/12/14 Committing reconcile changes can take a long time when working remotely or using a relational database.
         Improve the UI behavior by showing a wait message instead of freezing the display.
* 10/12/14 Changing the reconciled state of a transaction using the context menu was not following the rules of the
         selected register option.
* 10/05/14 Bug fix for potential return of an incorrect closest by date market price for a security
* 10/05/14 Bug fix for potential erroneous removal of the prior days security history during a market price update
* 10/04/14 Bug fix for difficult to trigger Concurrent Modification error when updating stock prices
* 09/26/14 Bug fix for false positives identifying duplicate transactions when importing QIF files.
* 09/25/14 Handle non-standard OFX files that use commas as a decimal separator for amounts

== Release 2.13.6
* 09/21/14 Updated to latest Insubstantial release.  This fixes the Substance look and feel compatibility with Java 8
* 09/20/14 Updated to the latest JGoodies dependencies.  This should improve font appearance on Windows systems in some instances
* 09/20/14 Fixed the build process for the mt940 plugin so it always stays current
* 09/07/14 Internal cleanup, improve relational database load behaviors
* 07/29/14 Fixed a race condition that would cause a random NPE when loading security histories from a relational database
* 04/28/14 Force eager load of budget goals to prevent a random NPE at file load when using a relational database
* 04/28/14 Updated to the latest Netty
* 04/17/14 Updated to latest H2 database release
* 04/17/14 Updated to latest Hibernate 4.2.x release

== Release 2.13.5
* 02/23/14 Fixed an NPE when cleaning out orphaned transactions from a prior jGnash bug
* 02/22/14 Update to the latest HSQLDB database release
* 02/22/14 Update to the latest H2 database release
* 02/22/14 Update to latest XStream, security vulnerability CVE-2013-7285, an arbitrary execution of commands when unmarshalling
* 02/09/14 Minor API changes to allow operation using Java 8
* 01/25/14 Fixed a rare ConcurrentModificationException that would occur when updating stock prices.
* 01/12/14 Fixed another race condition that could freeze the UI at startup if loading a very large file.
* 01/12/14 Any newly added or modified transactions will be highlighted in the register table for easy identification.
* 01/11/14 Fixed a race condition that was preventing newly duplicated transactions from gaining focus in the register.
* 01/11/14 When an account register was open in it's own window, window focus could be lost when deleting and duplicating
         transactions.

== Release 2.13.4
* 01/01/14 Accounts appearing in the budget model now respect the budget visibility of the ancestor accounts.
* 01/01/14 Fixed a bug with encrypted file attachment transfers
* 12/31/13 Fixed a race condition that could hang the UI at startup when loading a large file.
* 12/31/13 In some cases, a file would not reopen if a relational database was not closed cleanly.
* 12/27/13 Update to the latest XStream
* 12/26/13 Improve font appearance when running under KDE
* 12/21/13 Correct Budget UI exceptions that were occurring when performing SaveAs operations.
* 12/15/13 Show full currency formatting in the Budget display, otherwise, currency of the account is not obvious.
* 12/15/13 A Java bug was preventing new files from being created if a default currency was not determinable.
* 12/12/13 Changed the name of the Budget Column from "Change" to "Actual" to clarify intent.

== Release 2.13.3
* 12/05/13 Client/Server communications are now fully encrypted if enabled from command line for supported locales.
* 11/29/13 Allow loading of a file with duplicate Config objects.  The file will be corrected at load time.

== Release 2.13.2
* 11/17/13 A caching bug was causing the first transaction added to an account after restart of jGnash to show up twice.
         After restart the duplicate transaction would go away.

== Release 2.13.1
* 11/12/13 Update to latest Netty, H2, and Hibernate dependencies.  Users using H2 database may notice more consistent
         shutdown times.
* 10/29/13 Fix a race condition that was causing an ArrayIndexOutOfBoundsException in the GUI when
         adding a new transaction.

== Release 2.13.0
* 10/15/13 Correctly report and handle an attempt to open a wrong file type. (Bug #206)
* 10/15/13 Correctly report an attempt to open a directory instead of a file. (Bug #205)
* 10/02/13 Excess UI updates could occur when updating a budget goal and create performance issues.
* 10/02/13 Fixed an exception that would occur when filling in a bi-weekly budget.
* 08/13/13 Improved UI performance of the busy indicator on slower machines (Klemen Zagar)
* 08/11/13 When saving a compressed backup on exit, use the OS's temporary directory to play nice with cloud services (Patch #55, Klemen Zagar)
* 07/10/13 Update to the latest JFreeChart
* 06/29/13 Added a new feature; Transactions may now have image attachments.
* 06/20/13 New client server architecture based on Hibernate/JPA2 with H2 or HSQLDB SQL database.  db4o support
         has been purged from the code base.
* 06/10/13 Improve dialog positioning when using multiple monitors and when using fewer monitors than the last run.
* 04/23/13 Use Netty instead of Mina for performance and for improved protocol support
* 04/21/13 Added a Money Market account type.
* 04/20/13 New Engine and account api for setting and accessing custom text based account properties.
* 04/20/13 File schema changes to support external links to files and custom tags for transaction entries.
* 04/04/13 Discover and remove orphaned transactions left behind when Reminders were removed.
* 04/03/13 Improve the shutdown experience if a file is not open.
* 03/30/13 Added a new command line option to enable the xrender pipeline for X11 based systems.
* 03/28/13 Prevent background updates from running during a shutdown if performed right after startup.
* 03/25/13 Create a versioned backup of the old file automatically if the file format has been changed.
* 03/21/13 Changed binary and xml file structure for amortization objects.

== Release 2.12.0
* 03/03/13 When importing transactions, display a tooltip for payee and memo fields to make transaction determination easier. (Feature Request #107)
* 03/02/13 Automatically update the exchange rate tables when a multi-currency transaction is entered for a given date if one has not been set.
* 03/01/13 Updated to DynamicJasper 4.0.3.
* 02/24/13 Corrections made to the Portuguese translation. (Fernando Ribeiro da Silva)
* 02/14/13 Updated the jGoodies libraries.
* 02/12/13 Updated to XStream 1.4.4.
* 02/12/13 Updated to SwingX 1.6.5.
* 02/12/13 Updated to Apache POI 3.9.
* 02/10/13 Changed the exit process so that the final file write and closure is complete before the UI disappears instead of afterwards.
* 01/30/13 Improved the natural sort order of investment transaction for improved consistency (Date, Type, Memo, Security, Modification Date, Internal Id)
* 01/20/13 Fix for IllegalArgumentException caused by reordering table columns
* 12/09/12 Added register option to restore the last used transaction tab
* 12/09/12 When modifying an existing account, the current account currency would not be set in the dialog correctly.
* 12/02/12 Update to latest Substance L&F
* 11/25/12 Make confirmation on transaction deletion the default.
* 11/24/12 Added basic OFX export of accounts (Investment accounts are still a work in progress)
* 11/23/12 Warn if you are using a db4o (jdb) and recommend that you save as another format
* 11/10/12 Added CSV export direct from the transaction register.
* 11/10/12 Backup files were not being created in the same directory as the data file.
* 11/04/12 Update to Mina 2.0.7

== Release 2.11.0
* 10/24/12 Tabular style reports will start with a better default page size the first time the report is run.
* 10/23/12 Reminder dates were not correct if it was modified after being executed.
* 10/21/12 Display a message if an error occurs during a budget export (Read only file, etc)
* 10/20/12 Reworked the Balance Sheet report.  Results are displayed by period instead of a running balance and retained
         income / expense is calculated.         
* 10/14/12 Added a new Simple Investment account type.  This can be used for Annuities or Guaranteed Retirement accounts
         that you cannot actively manage. 
* 10/14/12 Added a utility script that can be run to remove weekend security history.
* 10/14/12 Update to the latest Insubstantial/Substance L&F release.
* 10/13/12 Improve security price import from Yahoo.  Dates returned from Yahoo are now used.  This prevents
         history entries on weekends and financial holidays.
* 10/13/12 Corrections to the reporting in the Income and Expense by Payee pie chart report as well as GUI
         behavior improvements.  It now has a chart for debit and credits. (Pranay Kumar)
* 10/13/12 Updated DynamicJasper to the latest release.
* 10/11/12 Updated XStream and Mina dependencies to the latest releases.
* 10/08/12 Add new controls to the historical security import dialog to make selection of securities faster and easier.
* 10/07/12 The Income and Expense pie chart now displays the default currency in addition to the account
         currency when multiple currencies are being used. (Pranay Kumar)  
* 10/06/12 Added an option for matching to the last similar entry when entering transactions. (Pranay Kumar)
* 10/03/12 Updated the Spanish Translation. (Marcelo Abeldaño)
* 09/03/12 A exception would occur when trying to generate a loan payment with a zero percent interest rate.

== Release 2.10.0
* 09/02/12 The Jump button would not work from a register in a separate window (Bug #3563951)
* 09/02/12 Do not preload report fonts to reduce startup time and reduce memory usage if reports are not being generated.
* 08/28/12 Changed busy indicator for significant memory usage reduction.
* 07/17/12 Fix for printing checks on Windows printers.
* 07/12/12 Dividends were not showing a correct value in the register total column (Bug #3526172)
* 07/12/12 Code migrated to fully utilize Java 7 try-with-resources.
* 07/07/12 Fixed a memory leak that was occurring when loading plugins
* 05/27/12 Added workarounds for JVM bugs when using Gnome 3 and Cinnamon. Mouse behavior was not correct when the jGnash
         window was maximized.
* 05/18/12 Imported transactions are automatically assigned an account using a Naive Bayes classifier.
* 05/17/12 Improved imported transaction match against manually entered transactions

== Release 2.9.0
* 05/03/12 Check for Java 7 or newer before executing
* 05/02/12 Added an alternating pattern fill option to the budget goal entry dialog
* 04/26/12 Strip extra white space when importing OFX files
* 04/24/12 Warn if an attempt is made to modify a transaction with a locked account
* 04/24/12 Correctly handle the modification of a transaction against a hidden account
* 04/24/12 Mark newly imported QIF transactions so they can be considered for account matching (no change to file format)
* 04/24/12 The account tree would not display correctly after a new file was created until open and closed.
* 04/24/12 Make the new binary format the default for new files.
* 04/23/12 A new file would not be created if the specified directory did not exist.  jGnash will now create the
         directory tree automatically.
* 04/09/12 Added new fast and compact binary file format
* 04/07/12 Added a Smart fill panel to the budget goal entry dialog for historical entry and fill all
* 03/18/12 Fixed the import of Citibank QFX and OFX credit card exports.
* 03/17/12 Modularized jGnash into several Maven modules and separated the UI code from the core engine code
* 03/17/12 jGnash was causing Java 7 JRE to seg-fault on close.

== Release 2.8.0
* 03/10/12 Help build system no longer requires OS level installed dependencies
* 03/05/12 Update to Insubstantial 7.1 and the latest JGoodies dependencies
* 03/05/12 Fixed an NPE that would randomly occur at startup
* 03/05/12 Corrected budget UI controls state when adding a budget for the first time and deleting the last budget
* 03/04/12 Mavenized the help build system
* 02/15/12 Printable reports can now be saved as xls files
* 02/15/12 Improved mt940 import (Patch #3487030, Arnout Engelen)
* 02/14/12 Fixed issue with large budget values being clipped in the budget UI
* 02/13/12 Working xls and xlsx export of budget results
* 02/12/12 Improve handling of multiple currencies in the budget UI

== Release 2.7.0
* 02/08/12 Added functionality to sort the Profit and Loss report by Account balance and percentiles (Patch #3154343, Klemen Zagar)
* 02/06/12 Removed duplicate code in budget results UI
* 02/05/12 Fixed formatting of the creation date on printed and pdf reports
* 02/05/12 Updated to latest DynamicJasper and associated dependencies
* 02/05/12 Reduced complexity of the budget results UI code and eliminated redundant listeners
* 02/04/12 Rewrote the budget results calculation code
* 02/02/12 Updated Dutch translation (Patch #3482860, hellemans)
* 02/01/12 Transactions may now be modified through arrow key selection inside the register (Patch #3481312, hellemans)
* 01/29/12 Reworked the summary information for the budget view including the addition of a row footer and options
         to display the summary information

== Release 2.6.2
* 01/21/12 Set the jGnash file filter as the default when choosing a file
* 01/21/12 Improve budget UI performance when transaction event and budget changes occur
* 01/19/12 Budget results would randomly show 0 if the CPU was heavily loaded
* 01/15/12 Fix generation of weekly and bi-weekly budget dates for non-US locales; Do not assume Sunday is
         the first day of the week.
* 01/11/12 Budget totals were calculated incorrectly after a budget's properties/period were modified

== Release 2.6.1
* 01/08/12 A default user and password is now set if not specified when using client / server functionality
* 01/08/12 Add a Yearly period option for Budgets
* 01/08/12 Add a command line option to help detect UI code that hangs the EDT
* 01/07/12 Corrected some UI update and threading and performance issues with the Budget interface
* 01/03/12 Reinvested dividends were not showing a correct value in the register total column (Bug #3467513)
* 01/02/12 Close any open windows first when closing a file
* 01/01/12 Switched build system over to Maven and Ant hybrid
* 12/28/11 Expand budgeting help for budget properties
* 12/28/11 Add functionality to control account types for a budget (income, expense, asset, liability)
* 12/28/11 Selected budget year was not be used when editing goals and switching between budgets
* 12/26/11 Update to the latest, JGoodies, XStream, Mina, JFreeChart external dependencies
* 12/25/11 Update to the latest args4j external dependencies

== Release 2.6.0
* 12/24/11 Add help content for the new budget feature
* 12/14/11 Additional fixes for hierarchical display of the budget
* 12/13/11 Improved performance when working files with large account structure and many transactions.
* 12/11/11 The Budget account structure was not consistently updating when accounts were added, remove, or changed.
* 12/04/11 The total remaining for budgets periods was not calculated correctly (Chris Bunney)
* 12/03/11 Add ability to break budgets and goals down to daily entry if desired
* 12/01/11 Improve editing and focus behavior when changing budget goals
* 12/01/11 Fix for NPE occurring with Metal look and feels
* 11/26/11 Minor internal cleanup
* 11/22/11 Use the meta key instead of the control key on OSX systems
* 11/20/11 Completed fully functional hierarchical display for budgets
* 11/12/11 Minor improvements for behavior and appearance when running on OSX
* 10/25/11 Sum of transactions shown in the tooltip was not correct if the register was sorted.
* 10/17/11 Investment transaction total values were not displayed correctly in the register Total column (Bug #3408123)
* 10/15/11 Yahoo UK historical download address changed (Bug #3423566)
* 10/15/11 Improved behavior of auto completion. Added an option to control the case sensitivity of the match. Don't replace
         the memo or amount and account selection if entered before the payee field is matched. (Bug #3407399, #3407400)
* 10/07/11 Balance reversal selection was not being restored correctly in the option dialog (Bug #3417960)
* 10/04/11 Fixed OpenJDK specific bugs
* 09/15/11 Second period of the displayed budget was missing
* 09/14/11 Fix bug with exceptions occurring in the budget interface when the account structure changed
* 09/07/11 Improved overall UI layout for the new budget interface
* 09/06/11 Internal code cleanup, PMD, etc.
* 09/05/11 Menu items for Substance look and feels were not being selected when active (Bug #3404037)
* 09/04/11 Fix for enabled symbol when a substance look and feel is used (Bug #3403710)
* 09/04/11 Improve the behavior of the help dialog (Feature Request #3174487)
* 09/04/11 Add a double click listener for modifying reminders (Feature Request #3403673)
* 09/04/11 Add a delete key listener for reminders (Feature Request #3403736)
* 09/03/11 Add Sparklines to the budget display
* 09/01/11 Update default Portuguese accounts (Pietro A R CERCHIARI)
* 08/29/11 Update Italian translation (Davide)
* 08/26/11 Added a property to accounts to exclude them from budgets
* 08/26/11 Added a field to the account properties dialog for a long hidden bank id property
* 08/17/11 Fix a bug with UI actions not working when running from a jar file
* 08/14/11 Add a summary footer to the budget view
* 08/07/11 Remove locale specific information from CurrencyNode.  db4o cannot persist Java 7 Locale correctly and
         the Locale specific information has not adding value.
* 08/05/11 Fix Comparator so it plays nice with Java 7 (Exception: Comparison method violates its general contract!)
* 08/03/11 Make the current period visible by default in the budget view
* 08/02/11 Do not show hidden or locked accounts in the budget view
* 08/02/11 Do not show hidden accounts in the account selection combo boxes (Feature Request #3384937)
* 08/02/11 Show a tooltip in the budget views account header with the full account path
* 07/31/11 Added function to create a new budget based on historical data.
* 07/21/11 Fundamentals of a budgeting system are working.
* 07/21/11 Fixed a bug with the mt940 import plugin that was causing an exception if a file was not open instead of
         disabling the plugin until a file is loaded.
* 07/14/11 Fix for OFX import when preceding spaces are in the transaction amount
* 06/19/11 Update to latest JGoodies libraries
* 02/16/11 Check for multiple root accounts and correct if needed at startup.
* 02/15/11 Fixed a bug where an account would show twice in reports in very rare circumstances.
* 02/13/11 Minor selection and expansion performance improvement for the account view.
* 01/22/11 Corrected layout issues in the investment transaction entry forms
* 01/18/11 Mnemonics for menu items were not being shown
* 01/16/11 Base API for Budgets added to the engine
* 01/16/11 Use Annotations to reduce amount of managed code for UI actions

== Release 2.5.1
* 01/02/11 Added new option to change the font size of the Nimbus Look and Feel
* 01/02/11 Reorganized the Options Dialog to reduce the required space for small displays
* 01/02/11 Added option to control network connection timeouts
* 12/31/10 Add new variation of the Monthly Account Balance report (Patch #3087286, Pranay Kumar)
* 12/31/10 Dumped the jGnash.app OSX launcher... sometimes it works, and sometimes it does not depending on the
         age of the system.  Will now leave it up to the end user to sort it out. (Bug #3148438, Peter B. West)
* 12/31/10 Improve behavior of split entry dialog (Bug #3132102, Chris B)
* 12/31/10 jGnash 1.x import fixes and performance improvements (Bug #3147017, Klemen Zagar)
* 12/30/10 Code cleanup efforts
* 12/30/10 Protect against a null locale when importing jGnash 1.x file (Bug #3147015, Klemen Zagar)
* 12/30/10 Protect against an invalid file entry (Bug #3147013, Klemen Zagar)
* 12/30/10 Protect against NPE (Bug #3147012, Klemen Zagar)
* 12/05/10 Improve the performance of the Accounts list for large account structures and play nice with db4o 7+
* 12/05/10 Ensure XML background write thread is complete before another write can occur or jGnash can close (Bug #3071371)
* 11/28/10 Don't freeze the UI when duplicating a transaction on slow systems.
* 11/28/10 Update to SwingX 1.6.2
* 11/16/10 Fix poor button layout for wizard dialogs
* 10/18/10 Fix handling of the exchange rates for the pie chart report (Patch #3089661)
* 10/17/10 Protect against incomplete XML file writes
* 09/26/10 Enable selection of an account in the accounts tree by pressing the first letter of the account name

== Release 2.5.0
* 09/19/10 Added additional integrated help content.
* 09/18/10 Improved error handling when the selected font size for a report is too large.
* 09/12/10 Added new options to reverse the display of account balances (Patch #2935203, Peter Vida)
* 09/12/10 When opening an income account, select the income tab by default (Feature Request #2889091)
* 09/08/10 Cleaned up a console warning when displaying reports.
* 09/06/10 Reinvested dividend transaction fees were not being handled correctly. (Bug #2924555)
* 09/02/10 The exchanged amount in a multi-currency transaction would not be correct if a change in
         field focus had not occurred (Bug #3045847)
* 09/01/10 A Stack overflow was occurring when adding a new loan payment (Bug #3053384)
* 09/01/10 Accounts were not always visible when choosing from a dialog
* 08/31/10 UI components would not display correctly on OSX after integration of the Substance Look and Feel
* 08/29/10 Mt940 import converted to a jGnash Plugin
* 08/29/10 Finalized new Plugin API
* 08/27/10 Pieces of the Portuguese translation were missing
* 08/21/10 Update to Substance 6.1
* 08/21/10 Reports would not show if a default font was not available (Bug #3050057)
* 08/11/10 The color for reconciled balance in the account list view was not always correct (Bug #3040309)

== Release 2.4.1
* 07/21/10 Added CTRL-F4 shortcut to close the active register window (Feature Request #2889093)
* 07/21/10 Added an option to disable the Substance Look and Feel animations
* 07/21/10 The report print button would not work when using the Substance Look and Feel
* 07/21/10 Updated to the latest DynamicJasper and JasperReports

== Release 2.4.0
* 07/18/10 Add functionality to adjust the global font size when using the Substance look and feel
* 07/18/10 Add Startup option to control automatic load of the last open file (Feature Request #2933793)
* 07/18/10 Improve duplicate transaction functionality (Feature Request #1683578)
* 07/15/10 Fix for a random NPE occurring at startup (Bug #3020688)
* 07/12/10 Update to SwingX 1.6.1
* 07/12/10 Reworked the validation framework to use JXLayer
* 07/11/10 Integrate JXLayer into the UI to improve effects and behavior
* 07/09/10 A Portfolio report column name was not being displayed correctly
* 07/07/10 The expansion state of the account list view is now restored on start
* 07/02/10 Reimplement the account list view so the appearance is correct for certain look and feels
* 06/27/10 Add Substance Look and Feel to the main distribution

== Release 2.3.5
* 05/20/10 Removed percent gains and unrealized gains from portfolio report because they cannot
         be accurately calculated
* 05/08/10 Added Czech localization (Patch #2981896 & 2991446, Luboš Hilgert)
* 05/08/10 Update Portuguese localization (Patch #2996097, Marco A L Barbosa)
* 04/04/10 Do not allow the portfolio report to run if there are not any investment accounts present.
* 04/03/10 Fix typos (Patch #2981190, Nathan McCrina)
* 03/27/10 Prevent duplicate transaction dialog from resizing too small
* 03/17/10 Fix typos (Patch #2971980, Adrian A)
* 03/14/10 Portfolio cost basis was not being calculated correctly
* 03/14/10 The market value of investment accounts was not reported consistently (Bug #2822512)
* 03/13/10 Add a simple chart to the Security History dialog
* 03/10/10 Security price Table was sorting alphabetically instead of numerically (Bug #2940278)
* 03/09/10 Report unrealized gains correctly in the portfolio report.
* 03/06/10 Cleaned up internal exchange rate API.
* 02/24/10 Add context sensitive help capability.
* 02/24/10 Income tab names were reversed when using accounting terms.

== Release 2.3.4
* 02/21/10 Expanded help content
* 02/03/10 Add Ukrainian translation (Vitaliy Aksyonov)
* 01/20/10 Update to latest JGoodies Forms and Looks to improve layout on OSX and L&F issues on Windows 7
* 01/19/10 Improve report name consistency for Report/Exports (Patch #2935268, Peter Vida)
* 01/19/10 Reorganize the Profit Loss Text report into the Report/Exports menu (Patch #2935208, Peter Vida)
* 01/19/10 Use the scale value specified for Securities in the transaction register table (Peter Vida)
* 01/18/10 Add cost basis columns to the portfolio report
* 01/18/10 Add options to the Running and End-of-Month account chart reports to filter placeholder
         and locked accounts (Patch #2931574, Peter Vida)
* 01/17/10 XML file corruption could occur for fast parallel jGnash starts (Bug #2929425)
* 01/17/10 Improved detection of correct OFX encoding when importing (Bug #2929581)
* 01/16/10 Date selection field was no always displayed correctly (Bug #2931561, Peter Vida)
* 01/15/10 Fix distribution build so it works on all platforms (Bug #2929859)
* 01/10/10 Add filtering capability to the account register report (Pranay Kumar)
* 01/10/10 Allow double clicking a date in the dialog to automatically select and close (Patch #2929289, Peter Vida)
* 01/10/10 Exchange rates not saved to XML files. (Bug# 2928985, Peter Vida)
* 01/01/10 Improper amount of cash is transferred from e.g. a bank account to an investment
		 account when more than one fee is assigned to the sell share transaction. (Bug #2924554, Peter Vida)
* 12/26/09 Fixed a formatting problem affecting the Portfolio Report
* 12/26/09 Style the report footer text
* 12/26/09 Update to DynamicJasper 3.0.14

== Release 2.3.3
* 12/25/09 Reconcile columns were not labeled correctly in the dialog (Bug #2902064)
* 12/24/09 The latest memorized transaction would not always be recalled
* 12/17/09 The remote sever now performs periodic XML backups for long running periods if changes have been made
* 12/09/09 The Profit and Loss Text report was not including the start date as part of the reported balance (Bug #2909000)
* 12/07/09 Changes made to support operation as a webstart application (Patch #2908944)
* 11/09/09 Improve formatting of Quantities in the portfolio report (Bug #2892985)
* 11/08/09 Disable multiple selection of Reminders (Bug #2894147)
* 11/07/09 Exchange rate of modified transactions was being set to the current rate instead of the prior rate (Pranay Kumar)
* 11/06/09 Improve UI layout for small screens (netbooks)
* 11/03/09 Correctly show modifications to currencies without a restart
* 11/03/09 File import actions should be enabled only if a file is open (Bugs #2890420, #2890422, #2890426)
* 11/03/09 Update to SwingX 1.6

== Release 2.3.2
11/02/09 Reports with totals were broken in the 2.3.1 release (Bug #2890310)

== Release 2.3.1
* 10/30/09 Reports would hang if certain characters were in currency prefix or suffixes (Bug #2884085)
* 10/23/09 Transaction tab names were reversed when using accounting terms for credit and liability accounts (Bug #2770638)
* 10/19/09 Reminders with no last date would default to current date when using the XML file format (Bug #2860259)
* 10/18/09 Update to latest JGoodies look and feel
* 10/18/09 Use a temporary swap file when generating large reports
* 10/18/09 Add a group label to the reports to help improve readability
* 10/15/09 Update to latest DynamicJasper and JasperReports dependencies
* 10/15/09 Updated German translation (Adrian Gygax)
* 09/23/09 Fix for Bug #2863303, Improve UI behavior for duplicate transaction behavior (L2K)
* 07/31/09 Add Yahoo Australia as Quote Source (Rob Hills)
* 07/09/09 Lazily create the help broker and fail gracefully if an exception occurs instead of
         preventing the application from starting.
* 07/07/09 Show the sum of the selected transactions in the register using a tooltip
* 07/07/09 Liability register was missing the Jump button

== Release 2.3.0
* 06/26/09 Detect and correct accounts with self parenting
* 06/20/09 Prevent a user from assigning an account's parent as itself.
* 06/18/09 Begin migration to MigLayout to replace Forms Layout
* 06/07/09 Use JXColorSelectionButton to select register colors.
* 06/05/09 Add network activity indicator when updating security prices and exchange rates in the background.
* 06/04/09 Update to JasperReports 3.1.4
* 06/04/09 Add ellipsis symbol to truncated text in reports
* 06/04/09 Update to DynamicJasper 3.0.6
* 06/03/09 Correctly handle file encoding of OFX V1 files.
* 06/01/09 Add a new option to automatically select text when a field receives focus
* 05/31/09 New report to show income and expense by payee (Pranay Kumar)
* 05/29/09 Updated Portuguese translation (Pietro Augusto)
* 05/25/09 Improved handling of validation errors
* 05/04/09 Integrate the SwingX libraries for improved usability
* 04/22/09 Fix for Bug #2500229, Display a warning if a Security is not selected when creating an
         investment transaction.
* 04/22/09 Correctly handle an attempt to open a zero length file.
* 04/20/09 Fix for Bug #2734778, Default currency was not accessible immediately after creating a new XML file.
* 04/10/09 Add an escape key listener to most all dialogs and add additional bounds listening to dialogs that
         did not already have it.

== Release 2.2.0
* 03/31/09 Correct identification of OFX 2.0 files that are now starting to show up in the wild.
* 03/26/09 Fixed report of multiple currencies for the Monthly and End-of-Month account balance charts.
* 03/26/09 Switched to DocBook for creating content for the JavaHelp system.
* 03/26/09 Add menu commands to perform background updates on security prices and exchange rates.
* 03/25/09 Fix for bug #2690988, poor form layout behavior for recurring entry creation in OSX.
* 03/25/09 Various updates to the Spanish translation (Marcelo Abeldaño).
* 03/25/09 Transaction reconcile was not occurring per the selected options.
* 03/25/09 Reconciled state of the opposite side of a transaction was not preserved when modifying.
* 03/24/09 Fix for bug #2691568 (Andrey Bondarenko).
* 03/07/09 Much improved account tree UI behavior when security prices change.
* 03/05/09 Remove unused fields from the Create/Modify Security Dialog.
* 03/05/09 Improve amortization UI behavior.
* 03/04/09 Reporting has been reworked.  Report preferences are persistent; Font size is configurable;
         CSV export has been improved; Consistent appearance for all reports; Now uses Jasper and
         DynamicJasper report APIs.
* 02/15/09 Render investment quantities with a fixed decimal to improve appearance.

== Release 2.1.0
* 02/01/09 Fixed issues with multiple network clients not communicating with each other.
* 01/14/09 Fixed a problem with duplicate default currencies when creating a new default account set.
* 01/12/09 Investment account balance was not calculated correctly if the last transaction was a dividend
         and a security price for same date or after was not established.
* 01/04/09 Added an integrated help system.
* 12/30/08 Added -portable command line options to save jGnash preferences to an external location for
         users who want to run jGnash from a USB drive.

== Release 2.0.3
* 12/30/08 Checks would print with test border.
* 12/30/08 Feature Request #2474667, If an invalid file extension is provided during File |  Save As,
         default to the db4o file type and extension.
* 12/30/08 Fix for Bug #2474820, Performing File | Save As over the current file would result in an
         empty file and loss of data.
* 12/30/08 Update to XStream 1.3.1.  Update should improve XML performance.
* 12/30/08 Fix new file account structure and import regression.
* 12/30/08 Patch #2477090, MT940 import fix from Miroslav Holubec.
* 12/14/08 Add a shutdown option to automatically control the number of backup files.
* 12/05/08 The automatic Security price download would not work correctly if more than two Securities were configured
         with no download source.
* 12/04/08 jGnash can now import Ofx version 1 and 2 credit card account files.
* 12/03/08 jGnash can now import Ofx version 1 and 2 bank account files.
* 12/03/08 Fix problem with null account numbers

== Release 2.0.2
* 11/28/08 Set the default selected account for buy and sell transactions to the base investment account.
* 11/28/08 Fixed an incorrect warning to the console when modifying and reinvested dividend transaction.
* 11/28/08 Improved the appearance of the investment transaction entry panels when using the Nimbus look and feel.
* 11/26/08 Investment account balances were not always reflecting the latest security price.
* 11/23/08 Disable db4o defragment.  The defragment function is not stable and could cause corruption.
* 11/23/08 Fix for Bug #2334048, Available Securities dialog was pushing the parent frame to the back.
* 11/23/08 Fix for Bug #2332586, Modifying an investment transaction from a bank account register was not working.
* 11/23/08 Fix for Bug #2332540, Loss of focus on an empty numeric field in OSX was throwing an exception. (Fix from Petey)
* 11/23/08 Internal code cleanup
* 11/18/08 Dropped Beanshell support because it is no longer supported and does not work well with OSX
* 11/17/08 Converted the MonthBalanceCSV text report from a Beanshell script to a compiled report.
* 11/16/08 Converted the ProfitLoss text report from a Beanshell script to a compiled report.

== Release 2.0.1
* 11/16/08 Update to the latest Pentaho reporting jars.
* 11/15/08 Prevent the removal of a currency assigned to a security node.
* 11/10/08 Currency exchange rate was not factored in for investment transaction reconciliation.
* 11/10/08 Extend default security / exchange download to 30 seconds.  It was 10 seconds.
* 11/09/08 Fix for Bug #2246569, Date dialog was pushing the parent dialog to the back
* 11/09/08 Fix for Bug #2222143, Multiple RootAccounts were being created and making import
         look like it failed.

== Release 2.0.0
* 11/02/08 The reconciled market balance was not factoring in the exchange rate of currencies
* 11/02/08 Update to latest JGoodies Looks
* 10/29/08 Improve appearance of the date selector for modern look and feels (Nimbus and JGoodies)
* 10/27/08 Fix problem with Reminder modification resulting in a duplicate when
         using the XML file format
* 10/17/08 Reconciliation from transaction forms was not working correctly
* 10/17/08 Automatic reconciliation of income and expense accounts was not working correctly.
* 10/17/08 Transfer panel was missing the reconcile button
* 10/16/08 Recurring transaction reminders were not working unless a file was reloaded
         without UI restart
* 10/12/08 Fix Portfolio report summary row value
* 10/10/08 Updated Spanish translation (Marcelo Abeldaño)

== Release 2.0.0-RC4
* 10/05/08 Typing a 'T' or 't' inside a date field changes it to the current date.
* 10/05/08 Prevent an exception from occurring if the overall length of a date field is
         shortened when a shortcut key is used.
* 10/05/08 Update to the latest JGoodies Forms and Looks jars.
* 10/05/08 Fix problem with lost views when UI is restarted because of look and feel update
* 10/04/08 The enabled state of the recurring transaction panel was not correct
* 10/04/08 Fix the UI layout for the Account Register and Portfolio Reports
* 10/04/08 Remove unused jar dependency

== Release 2.0.0-RC3
* 10/01/08 Yahoo UK has reverted to the security symbol instead of the ISIN number for
         downloading data
* 10/01/08 Fix for Bug #1991337.  The portfolio report should use the account currency
         instead of the default currency, and it was not factoring in the exchange rate
         for securities with different reported currencies.
* 10/01/08 Change how UI elements are handled when a file is loaded and unload.  This
         circumvents Java Bug #6472844 which was causing a memory leak.
* 09/25/08 Yahoo security download info occasionally contains extra white space.  Protect
         against a NumberFormatException when parsing
* 09/23/08 Prevent incorrect moving of an account
* 09/23/08 Update to latest JFreeChart jar
* 09/23/08 Update to latest db40 6.4 jar
* 09/22/08 Fix for Bug #2080742.  The direction of the currency conversion was not correct
* 09/21/08 Correctly set the enabled state of the Reports menu when a file is not loaded
* 09/20/08 Prevent the import of a MT940 file if a jGnash file is not loaded
* 09/20/08 Fix for Bug #2098347.  Prevent the import of an OFX file if a jGnash file is not loaded
* 09/19/08 Fix the enabled state of the reminder panel buttons and prevent an NPE if
         a file is not loaded.
* 09/17/08 Fix the investment account reconciliation process
* 09/09/08 Fix the reported reconciled amount for investment accounts
* 08/27/08 Fix for Bug #2068074. Reminder modifications were not handled correctly
* 08/20/08 Localization fixes
* 08/18/08 Update to latest Pentaho reporting jar

== Release 2.0.0-RC2
* 08/18/08 Add sort capability to currency exchange table
* 08/17/08 Add Copy to Clipboard button to Console and Exception dialogs
* 08/17/08 HTTP connections were left open when downloading security history
* 08/17/08 Change sort order of the accounts for reports
* 08/17/08 Restart the UI when the L&F is changed to prevent Exceptions
* 08/15/08 Spanish translation fixes (Marcelo Abeldaño)
* 08/14/08 Correctly handle a filename passed by Windows if associated with jGnash
* 08/14/08 Fix NPE in recurring transactions
* 08/13/08 Fixed 1.x import and behavior of BuyX and SellX transactions
* 07/31/08 Change EDT check to used a command line option
* 07/30/08 The reconciled balance was not always rendered in the correct color
* 07/29/08 Use the default sort icons for the table header in the transaction register
* 07/28/08 Fix the appearance of the table header in the transaction register for newer
         look and feels
* 07/28/08 The duplicate function for transactions was not working for split transactions
* 07/27/08 Allow sorting of the security history table
* 07/27/08 Yahoo UK parser was not using the ISIN number
* 07/27/08 Fix more EDT issues

== Release 2.0.0-RC1
* 07/27/08 The lookup mechanism for default account sets when creating a new file did not work
         when jGnash was run from a jar or exe.
* 07/26/08 Currency Exchange history dialog was not always showing the correct conversion direction
* 07/23/08 Fix some initial display issues with SecurityHighLowChart
* 07/22/08 The XML storage container would not remove objects as expected
* 07/22/08 Add UI option to export timestamped and compressed file on exit
* 07/21/08 Update to JFreeChart 1.0.10.  Fixes some quirks with the income/expense pie chart
* 07/21/08 Create all UI elements on the EDT
* 07/19/08 Fix a NPE if the RootAccount AccountGroup is requested
* 07/19/08 Fix a potential problem with stray account properties being left in the object database
         upon account removal
* 07/18/08 Fix Profit and Loss text report and Monthly Balance export scripts
* 07/16/08 Save a time-stamped and compressed file on exit if enabled
* 07/14/08 Implement full Save As functionality.  It is now possible to switch between file formats.

== Release 2.0.0 - Beta 3
* 07/12/08 Lock XML file at OS level to prevent overwrite from multiple instances of jGnash
* 07/07/08 New icons to update UI appearance
* 07/06/08 Add a reconciled balance column to the accounts overview
* 07/06/08 XML Datastore is now working
* 06/30/08 Reinstate the 1.x status bar
* 06/29/08 Fixed a validation problem that prevented 0 scale currencies from being added to the database
* 06/28/08 Enable full support of client / server connection from the command line
* 06/21/08 AmortizeObject does not have to extend StoredObject
* 06/21/08 Enable option to load a file from the command line
* 06/20/08 TransactionEntry does not have to extend StoredObject
* 06/18/08 Balance Sheet report was not pulling all account types correctly
* 06/17/08 Fix bad validation code for jGnash 1.x import.  Depends on update release of Java 6.

== Release 2.0.0 - Beta 2
* 06/16/08 Preselect default transaction form tab based on account type
* 06/15/08 Dump GnuCash import support
* 06/15/08 SecurityNode and TransactionEntry db schema change.  db4o does not handle changes to enums well
* 06/14/08 Add "Checking" account type
* 06/14/08 Account db schema change.  db4o does not handle changes to enums well
* 06/13/08 If a transaction is dated for the future, italicize the font in the register table
* 06/13/08 Soft null check Workaround for a weird JVM bug for null assert checks on non-null Strings with international characters.
* 06/12/08 Autocomplete was occurring when text was being set vs typed causing mysterious changes to fields.
* 06/11/08 Add missing top level memo for transactions
* 06/11/08 Fix enabled state of the account combo for split transaction entry
* 06/09/08 Fix the display of split details for the account register report

== Release 2.0.0 - Beta 1
* 06/08/08 Reduce XML export file size by 45%
* 06/06/08 Dumped some unused legacy methods from TransactionEntry and subclasses
* 06/05/08 Fix transaction generation for basic double entry panel
* 06/05/08 Do not allow the currency of an account to be changed to it already contains transactions.
* 06/04/08 Overhauled the register tree panel code to fix column resize behavior and fix some bugs
* 06/03/08 Fix last known data corruption bug (Was not cloning TransactionEntries in the FeesPanel)
* 05/31/08 Reworked UI and API for reinvested transactions
* 05/26/08 Use new exchange rate UI for bank and transfer transactions
* 05/23/08 Remove duplicate code in TransactionDAO
* 05/22/08 New API and UI for handling capital gains and loss
* 05/22/08 Use java collections for storage instead of manually controlled arrays
* 05/08/08 Disable web update in Security History Dialog if a download source has not been selected for the security
* 04/12/08 Save and restore the last active view
* 04/06/08 Open streams were not being closed
* 04/06/08 Fixed formatting error in balance sheet and networth reports
* 03/25/08 Fixed import of jGnash 1.x Dividend transactions
* 03/20/08 Begin separation of BuyX and SellX transaction forms
* 03/10/08 Improve fees handling for BuyX transactions
* 03/05/08 Applied patch #1907963 for improved OFX parsing (Nicolas Bouillon)
* 03/03/08 Improved TransactionDialog
* 03/03/08 Fix divide by zero bug #1906150
* 03/01/08 Fix localization bug #1903842
* 02/29/08 Place nice with upcoming Nimbus look and feel
* 02/29/08 Update to jGoodies 1.2.0
* 02/27/08 Improve Next # action for transaction numbers Bug #1902455
* 02/21/08 Support for multiple security quote sources (Yahoo! and Yahoo! UK)
* 02/21/08 Improved OFX header parsing
* 01/31/08 Merge mt940 import support
* 01/30/08 Use of accounting terms were not correct in all cases.
* 01/22/08 Fixed handling for split and merge transactions in the portfolio report.
* 01/01/08 Reworked Dividend transactions and UI to support true double entry.
* 01/01/08 Use TimingFramework instead of jGoodies animations.
* 12/27/07 A button was added to the investment register to allow selection of available securities.
* 12/26/07 Improve generated payee of investment transactions.

== Release 2.0.0 - Alpha 3
* 12/26/07 Added Working OFX import for savings and checking accounts.
* 12/17/07 Improved new account wizard so user can add default account structures
* 12/10/07 Added import and export of the account tree


================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradle.properties
================================================
# suppress inspection "UnusedProperty" for whole file

# https://github.com/openjfx/javafx-gradle-plugin/releases
javafxPluginVersion=0.0.9

# https://github.com/ben-manes/gradle-versions-plugin/releases
versionsPluginVersion=0.36.0

# https://mvnrepository.com/artifact/org.openjfx/javafx
javaFXVersion=15.0.1

# https://github.com/TestFX/TestFX/releases
testFxVersion=4.0.16-alpha

# https://github.com/TestFX/Monocle/releases
monocleVersion=jdk-12.0.1+2

# https://plugins.gradle.org/plugin/edu.sc.seis.macAppBundle
macAppBundleVersion=2.3.0

# https://junit.org/junit5/
junitVersion=5.7.1

# https://github.com/glytching/junit-extensions
junitExtensionsVersion=2.4.0

# https://github.com/awaitility/awaitility
awaitilityVersion=4.0.3

# https://commons.apache.org/proper/commons-lang/
commonsLangVersion=3.11

# https://commons.apache.org/proper/commons-math/
commonsMathVersion=3.6.1

# https://commons.apache.org/proper/commons-csv/
commonsCsvVersion=1.8

#https://commons.apache.org/proper/commons-collections/
commonsCollectionsVersion=4.4

# https://commons.apache.org/proper/commons-text/
commonsTextVersion=1.9

# https://github.com/remkop/picocli
picocliVersion=4.6.1

# https://poi.apache.org/
apachePoiVersion=5.0.0

# http://www.h2database.com/html/main.html
h2Version=1.4.200

# http://hsqldb.org/
hsqldbVersion=2.5.1

# https://github.com/x-stream/xstream
xstreamVersion=1.4.15

# http://hibernate.org/orm/
hibernateVersion=5.4.28.Final

# https://github.com/brettwooldridge/HikariCP
hikariVersion=4.0.2

# https://pdfbox.apache.org/
pdfBoxVersion=2.0.22

# https://netty.io/index.html
nettyVersion=4.1.59.Final

# https://www.slf4j.org/news.html
slf4jVersion = 1.8.0-beta4



================================================
FILE: gradlew
================================================
#!/usr/bin/env sh

#
# Copyright 2015 the original author or authors.
#
# 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
#
#      https://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.
#

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn () {
    echo "$*"
}

die () {
    echo
    echo "$*"
    echo
    exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
  CYGWIN* )
    cygwin=true
    ;;
  Darwin* )
    darwin=true
    ;;
  MINGW* )
    msys=true
    ;;
  NONSTOP* )
    nonstop=true
    ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
    MAX_FD_LIMIT=`ulimit -H -n`
    if [ $? -eq 0 ] ; then
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
            MAX_FD="$MAX_FD_LIMIT"
        fi
        ulimit -n $MAX_FD
        if [ $? -ne 0 ] ; then
            warn "Could not set maximum file descriptor limit: $MAX_FD"
        fi
    else
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
    fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`

    JAVACMD=`cygpath --unix "$JAVACMD"`

    # We build the pattern for arguments to be converted via cygpath
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
    SEP=""
    for dir in $ROOTDIRSRAW ; do
        ROOTDIRS="$ROOTDIRS$SEP$dir"
        SEP="|"
    done
    OURCYGPATTERN="(^($ROOTDIRS))"
    # Add a user-defined pattern to the cygpath arguments
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
    fi
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    i=0
    for arg in "$@" ; do
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option

        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
        else
            eval `echo args$i`="\"$arg\""
        fi
        i=`expr $i + 1`
    done
    case $i in
        0) set -- ;;
        1) set -- "$args0" ;;
        2) set -- "$args0" "$args1" ;;
        3) set -- "$args0" "$args1" "$args2" ;;
        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
    esac
fi

# Escape application args
save () {
    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
    echo " "
}
APP_ARGS=`save "$@"`

# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: jGnash
================================================
#!/usr/bin/env sh

cwd=$(dirname "$0")
"$cwd"/bin/bootloader "$@"

if [ $? -eq 100 ]; then #relaunch automatically if return value is 100
  "$cwd"/bin/bootloader "$@"
fi

exit 0


================================================
FILE: jgnash-bayes/build.gradle.kts
================================================
description = "jGnash Bayes"

val moduleName = "jgnash.bayes"

tasks.jar {
    manifest.attributes["Automatic-Module-Name"] = moduleName
}

================================================
FILE: jgnash-bayes/src/main/java/jgnash/bayes/BayesClassifier.java
================================================
/*
 * jGnash, a personal finance application
 * Copyright (C) 2001-2020 Craig Cavanaugh
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package jgnash.bayes;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;

/**
 * Naive Bayes BayesClassifier.
 * Modeled after classifier presented in "Programming Collective Intelligence" by Toby Segaran
 *
 * @param <E> the type of mapped value
 * 
 * @author Craig Cavanaugh
 */
public class BayesClassifier<E> {

    /**
     * Default class if not determinate
     */
    private final E defaultClass;

    private static final double ASSUMED_PROBABILITY = 0.5;
    private static final double THRESHOLD = 1.0;
    private static final double WEIGHT = 1.0;
    private static final String WHITE_SPACE_REGEX = "[,\\s]+";
    // private final static String NUMBERS_REGEX = "(?>-?\\d+(?:[\\./]\\d+)?)";

    private final Map<String, Map<E, Integer>> featureCounter = new HashMap<>();
    private final Map<E, Integer> classCounter = new HashMap<>();
    private final Pattern whiteSpacePattern;

    /**
     * Constructor
     * 
     * @param defaultClass the mapped type
     */
    public BayesClassifier(final E defaultClass) {
        this.defaultClass = defaultClass;
        whiteSpacePattern = Pattern.compile(WHITE_SPACE_REGEX);
    }

    private void incrementFeature(final String feature, final E classification) {
        Map<E, Integer> featureMap = featureCounter.get(feature);

        if (featureMap == null) {
            featureMap = new HashMap<>();
            featureMap.put(classification, 1);
            featureCounter.put(feature, featureMap);
            return;
        }

        Integer count = featureMap.get(classification);
        count = (count == null) ? 1 : count + 1;
        featureMap.put(classification, count);
    }

    /**
     * Support method to increment a classification
     *
     * @param classification classification to increment
     */
    private void incrementClass(final E classification) {
        Integer count = classCounter.get(classification);
        count = (count == null) ? 1 : count + 1;
        classCounter.put(classification, count);
    }

    private int getClassCount(final E classification) {
        Integer count = classCounter.get(classification);

        return (count != null) ? count : 0;
    }

    /**
     * Gets the number of times the feature as occurred in the classification
     *
     * @param feature        feature to count
     * @param classification class
     * @return occurrence count
     */
    private int getFeatureCount(final String feature, final E classification) {
        Map<E, Integer> featureMap = featureCounter.get(feature);

        if (featureMap == null) {
            return 0;
        }
        Integer count = featureMap.get(classification);

        return (count != null) ? count : 0;
    }

    private int getFeatureCount(final String feature) {
        Map<E, Integer> featureMap = featureCounter.get(feature);
        int count = 0;

        if (featureMap == null) {
            return count;
        }               
        
        for (Entry<E, Integer> entry : featureMap.entrySet()) {
            count += entry.getValue();
        }                    

        return count;
    }

    private double getFeatureProbability(final String feature, final E classification) {
        int count = getClassCount(classification);
        return (count == 0) ? 0.0 : (double) getFeatureCount(feature, classification) / count;
    }

    private double getWeightedProbability(final String feature, final E classification) {
        double probability = getFeatureProbability(feature, classification);
        int totals = getFeatureCount(feature);
        return (WEIGHT * ASSUMED_PROBABILITY + totals * probability) / (WEIGHT + totals);
    }

    private double getClassProbability(final String item, final E classification) {
        double probability = 1;

        for (final String feature : whiteSpacePattern.split(item)) {
            probability *= getWeightedProbability(feature, classification);
        }

        return (double) classCounter.get(classification) / classCounter.size() * probability;
    }

    private void train(final Collection<String> features, final E classification) {
        for (String feature : features) {
            incrementFeature(feature, classification);
        }
        incrementClass(classification);
    }

    /**
     * Trains the classifier
     * 
     * @param item training string
     * @param classification object being classified
     */
    public void train(final String item, final E classification) {
        train(Arrays.asList(whiteSpacePattern.split(item.toLowerCase(Locale.getDefault()))), classification);
    }

    /**
     * Returns the best probabilistic match 
     * 
     * @param item String data to match
     * @return best possible match
     */
    public E classify(final String item) {
        E bestClass = defaultClass;
        double classProb;
        double bestProbability;
        double max = 0;

        Map<E, Double> probabilities = new HashMap<>();

        // find the category with the highest probability
        for (final E classification : classCounter.keySet()) {
            classProb = getClassProbability(item.toLowerCase(Locale.getDefault()), classification);
            probabilities.put(classification, classProb);
            if (classProb > max) {
                max = classProb;
                bestClass = classification;
            }
        }
                       
        // make sure the probability exceeds
        for (final Entry<E, Double> entry : probabilities.entrySet()) {
            if (!entry.getKey().equals(bestClass)) {
                classProb = entry.getValue();
                bestProbability = probabilities.get(bestClass);
                
                if (classProb * THRESHOLD >= bestProbability) {
                    return defaultClass;
                }
            }
        }       

        return bestClass;
    }
}

================================================
FILE: jgnash-convert/build.gradle.kts
================================================
description = "jGnash Convert"

val moduleName = "jgnash.convert"
val commonsCsvVersion: String by project

plugins {
    `java-library`
}

dependencies {
    implementation(project(":jgnash-resources"))
    implementation(project(":jgnash-core"))
    implementation(project(":jgnash-bayes"))

    implementation("org.apache.commons:commons-csv:$commonsCsvVersion")
}

tasks.jar {
    manifest.attributes["Automatic-Module-Name"] = moduleName
}

================================================
FILE: jgnash-convert/src/main/java/jgnash/convert/common/OfxTags.java
================================================
/*
 * jGnash, a personal finance application
 * Copyright (C) 2001-2020 Craig Cavanaugh
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package jgnash.convert.common;

/**
 * Known OFX tags
 *
 * @author Craig Cavanaugh
 * @author Nicolas Bouillon
 */
public interface OfxTags {

    /**
     * Account ID
     */
    String ACCTID = "ACCTID";

    /**
     * Account Type
     */
    String ACCTTYPE = "ACCTTYPE";

    /**
     * Available balance
     */
    String AVAILBAL = "AVAILBAL";

    /**
     * Balance Amount
     */
    String BALAMT = "BALAMT";

    /**
     * Bank Account info
     */
    String BANKACCTFROM = "BANKACCTFROM";

    /**
     * Bank Account info for a transfer
     */
    String BANKACCTTO = "BANKACCTTO";

    /**
     * CASH Tag
     */
    String CASH = "CASH";

    /**
     * Credit Card info
     */
    String CCACCTFROM = "CCACCTFROM";

    /**
     * Credit Account info for a transfer
     */
    String CCACCTTO = "CCACCTTO";

    /**
     * Investment Account info
     */
    String INVACCTFROM = "INVACCTFROM";

    /**
     * Investment Account info for a transfer
     */
    String INVACCTTO = "INVACCTTO";

    /**
     * Bank ID
     */
    String BANKID = "BANKID";

    /**
     * Stock purchase
     */
    String BUYSTOCK = "BUYSTOCK";

    /**
     * Purchase type, normally "BUY"
     */
    String BUYTYPE = "BUYTYPE";

    /**
     * Buy other security type
     */
    String BUYOTHER = "BUYOTHER";

    /**
     * Buy mutual fund
     */
    String BUYMF = "BUYMF";

    /**
     * Sub-account that security or cash is being transferred to: CASH, MARGIN, SHORT, OTHER
     */
    String SUBACCTTO = "SUBACCTTO";

    /**
     * Sub-account that security or cash is being transferred from: CASH, MARGIN, SHORT, OTHER
     */
    String SUBACCTFROM = "SUBACCTFROM";

    /**
     * Investment account position list
     */
    String INVPOSLIST = "INVPOSLIST";

    /**
     * Investment account balance information
     */
    String INVBAL = "INVBAL";

    /**
     * Open investment transaction orders list
     */
    String INVOOLIST = "INVOOLIST";

    /**
     * Branch identifier. May be required for some non-US banks
     */
    String BRANCHID = "BRANCHID";

    /**
     * Bank transaction list
     */
    String BANKTRANLIST = "BANKTRANLIST";

    String INVTRANLIST = "INVTRANLIST";

    String INVTRAN = "INVTRAN";

    String INVBUY = "INVBUY";

    String INVSELL = "INVSELL";

    String BROKERID = "BROKERID";

    /**
     * Check number
     */
    String CHECKNUM = "CHECKNUM";

    String CODE = "CODE";

    String CURDEF = "CURDEF";

    String CURRENCY = "CURRENCY";

    /**
     * Checking account type
     * @see #ACCTTYPE
     */
    String CHECKING = "CHECKING";

    /**
     * Credit line account type
     * @see #ACCTTYPE
     */
    String CREDITLINE = "CREDITLINE";

    /**
     * Money market account type
     * @see #ACCTTYPE
     */
    String MONEYMRKT = "MONEYMRKT";

    /**
     * Savings account type
     * @see #ACCTTYPE
     */
    String SAVINGS = "SAVINGS";

    /**
     * Credit transaction
     * @see #TRNTYPE
     */
    String CREDIT = "CREDIT";

    /**
     * Debit transaction
     * @see #TRNTYPE
     */
    String DEBIT = "DEBIT";

    /**
     * Date of balance
     * @see #LEDGERBAL
     * @see #AVAILBAL
     */
    String DTASOF = "DTASOF";

    /**
     * End date of transaction list
     */
    String DTEND = "DTEND";

    /**
     * Date posted
     */
    String DTPOSTED = "DTPOSTED";

    /**
     * Date user initiated transaction
     */
    String DTUSER = "DTUSER";

    String DTSERVER = "DTSERVER";

    /**
     * Start date of transaction list
     */
    String DTSTART = "DTSTART";

    String DTTRADE = "DTTRADE";

    String DTSETTLE = "DTSETTLE";

    /**
     * Fees applied to trade, amount
     */
    String FEES = "FEES";

    String FI = "FI";

    String FID = "FID";

    /**
     * Financial Institution transaction id
     */
    String FITID = "FITID";


    String LANGUAGE = "LANGUAGE";

    /**
     * Account balance
     */
    String LEDGERBAL = "LEDGERBAL";

    /**
     * Transaction memo
     */
    String MEMO = "MEMO";

    /**
     * Chase bank mucking up the OFX standard
     */
    String CATEGORY = "CATEGORY";

    String MESSAGE = "MESSAGE";

    /**
     * Name of payee or transaction description, may be used exclusive of {@code PAYEE}
     * @see #PAYEE
     */
    String NAME = "NAME";

    String OFX = "OFX";

    String ORG = "ORG";

    String ORIGCURRENCY = "ORIGCURRENCY";

    /**
     * Name of payee, may be used exclusive of {@code NAME}
     * @see #NAME
     */
    String PAYEE = "PAYEE";

    String PAYEEID = "PAYEEID";

    /**
     * Indicates an amount withheld due to a penalty. Amount
     */
    String PENALTY = "PENALTY";

    String REFNUM = "REFNUM";

    String SEVERITY = "SEVERITY";

    String SECID = "SECID";

    /**
     * Accounting SIC code
     */
    String SIC = "SIC";

    /**
     * Sign-on Message Set Aggregate
     */
    String SIGNONMSGSRSV1 = "SIGNONMSGSRSV1";

    String SONRS = "SONRS";

    String STATUS = "STATUS";

    /**
     * Bank statement response aggregate
     */
    String STMTRS = "STMTRS";

    /**
     * Investment account bank transaction
     */
    String INVBANKTRAN = "INVBANKTRAN";

    /**
     * Credit Card statement response aggregate
     */
    String CCSTMTRS = "CCSTMTRS";

    /**
     * Investment statement response aggregate
     */
    String INVSTMTRS = "INVSTMTRS";

    /**
     * Bank Transaction
     */
    String STMTTRN = "STMTTRN";

    String STMTTRNRS = "STMTTRNRS";

    String SUBACCTSEC = "SUBACCTSEC";

    /**
     * Where did the money for the transaction come from or go to? CASH, MARGIN, SHORT, OTHER
     */
    String SUBACCTFUND = "SUBACCTFUND";

    /**
     * Sell a mutual fund
     */
    String SELLMF = "SELLMF";

    /**
     * Sell other type of security
     */
    String SELLOTHER = "SELLOTHER";

    /**
     * Sell a stock
     */
    String SELLSTOCK = "SELLSTOCK";

    String SELLTYPE = "SELLTYPE";

    String CCSTMTTRNRS = "CCSTMTTRNRS";

    String INVSTMTTRNRS = "INVSTMTTRNRS";

    String REINVEST = "REINVEST";

    String INCOME = "INCOME";

    String INCOMETYPE = "INCOMETYPE";

    /**
     * 401k loan id
     */
    String LOANID = "LOANID";

    /**
     * 401k loan principal
     */
    String LOANPRINCIPAL = "LOANPRINCIPAL";
Download .txt
gitextract_1exs9n_q/

├── .github/
│   ├── ISSUE_TEMPLATE.md
│   └── workflows/
│       ├── ci-linux.yml
│       ├── ci-macOS.yml
│       ├── ci-windows.yml
│       └── gradle-wrapper-validation.yml
├── .gitignore
├── .travis.yml
├── COPYING
├── README.adoc
├── README.html
├── README.md
├── build.gradle.kts
├── changelog.adoc
├── deployfx/
│   └── gnome-money.icns
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── jGnash
├── jgnash-bayes/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── bayes/
│                       └── BayesClassifier.java
├── jgnash-convert/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── java/
│           │   └── jgnash/
│           │       └── convert/
│           │           ├── common/
│           │           │   └── OfxTags.java
│           │           ├── exportantur/
│           │           │   ├── csv/
│           │           │   │   └── CsvExport.java
│           │           │   └── ofx/
│           │           │       └── OfxExport.java
│           │           └── importat/
│           │               ├── BayesImportClassifier.java
│           │               ├── DateFormat.java
│           │               ├── GenericImport.java
│           │               ├── ImportBank.java
│           │               ├── ImportFilter.java
│           │               ├── ImportSecurity.java
│           │               ├── ImportState.java
│           │               ├── ImportTransaction.java
│           │               ├── ImportUtils.java
│           │               ├── ofx/
│           │               │   ├── OfxBank.java
│           │               │   ├── OfxImport.java
│           │               │   ├── OfxV1ToV2.java
│           │               │   ├── OfxV2Parser.java
│           │               │   └── Sanitize.java
│           │               └── qif/
│           │                   ├── QifAccount.java
│           │                   ├── QifCategory.java
│           │                   ├── QifImport.java
│           │                   ├── QifParser.java
│           │                   ├── QifReader.java
│           │                   ├── QifSplitTransaction.java
│           │                   ├── QifTransaction.java
│           │                   └── QifUtils.java
│           └── resources/
│               └── jgnash/
│                   └── convert/
│                       └── scripts/
│                           └── tidy.js
├── jgnash-core/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── java/
│           │   └── jgnash/
│           │       ├── engine/
│           │       │   ├── AbstractInvestmentTransactionEntry.java
│           │       │   ├── Account.java
│           │       │   ├── AccountGroup.java
│           │       │   ├── AccountProxy.java
│           │       │   ├── AccountTreeXMLFactory.java
│           │       │   ├── AccountType.java
│           │       │   ├── AccountUtils.java
│           │       │   ├── AmortizeObject.java
│           │       │   ├── AttachmentUtils.java
│           │       │   ├── CashFlow.java
│           │       │   ├── CommodityNode.java
│           │       │   ├── Comparators.java
│           │       │   ├── Config.java
│           │       │   ├── CurrencyNode.java
│           │       │   ├── DataStore.java
│           │       │   ├── DataStoreType.java
│           │       │   ├── DefaultCurrencies.java
│           │       │   ├── Engine.java
│           │       │   ├── EngineException.java
│           │       │   ├── EngineFactory.java
│           │       │   ├── ExchangeRate.java
│           │       │   ├── ExchangeRateDAO.java
│           │       │   ├── ExchangeRateHistoryNode.java
│           │       │   ├── InvestmentAccountProxy.java
│           │       │   ├── InvestmentPerformanceSummary.java
│           │       │   ├── InvestmentTransaction.java
│           │       │   ├── MathConstants.java
│           │       │   ├── QuoteSource.java
│           │       │   ├── RecTransaction.java
│           │       │   ├── ReconcileManager.java
│           │       │   ├── ReconciledState.java
│           │       │   ├── RootAccount.java
│           │       │   ├── SecurityHistoryEvent.java
│           │       │   ├── SecurityHistoryEventType.java
│           │       │   ├── SecurityHistoryNode.java
│           │       │   ├── SecurityNode.java
│           │       │   ├── StoredObject.java
│           │       │   ├── StoredObjectComparator.java
│           │       │   ├── Tag.java
│           │       │   ├── Transaction.java
│           │       │   ├── TransactionEntry.java
│           │       │   ├── TransactionEntryAbstractIncrease.java
│           │       │   ├── TransactionEntryAddX.java
│           │       │   ├── TransactionEntryBuyX.java
│           │       │   ├── TransactionEntryDividendX.java
│           │       │   ├── TransactionEntryMergeX.java
│           │       │   ├── TransactionEntryReinvestDivX.java
│           │       │   ├── TransactionEntryRemoveX.java
│           │       │   ├── TransactionEntryRocX.java
│           │       │   ├── TransactionEntrySellX.java
│           │       │   ├── TransactionEntrySplitX.java
│           │       │   ├── TransactionFactory.java
│           │       │   ├── TransactionTag.java
│           │       │   ├── TransactionType.java
│           │       │   ├── TrashObject.java
│           │       │   ├── attachment/
│           │       │   │   ├── AttachmentManager.java
│           │       │   │   ├── AttachmentTransferClient.java
│           │       │   │   ├── AttachmentTransferServer.java
│           │       │   │   ├── DistributedAttachmentManager.java
│           │       │   │   ├── LocalAttachmentManager.java
│           │       │   │   └── NettyTransferHandler.java
│           │       │   ├── budget/
│           │       │   │   ├── Budget.java
│           │       │   │   ├── BudgetFactory.java
│           │       │   │   ├── BudgetGoal.java
│           │       │   │   ├── BudgetPeriodDescriptor.java
│           │       │   │   ├── BudgetPeriodDescriptorFactory.java
│           │       │   │   ├── BudgetPeriodResults.java
│           │       │   │   ├── BudgetResultsModel.java
│           │       │   │   └── Pattern.java
│           │       │   ├── concurrent/
│           │       │   │   ├── DistributedLockManager.java
│           │       │   │   ├── DistributedLockServer.java
│           │       │   │   ├── LocalLockManager.java
│           │       │   │   ├── LockManager.java
│           │       │   │   ├── Priority.java
│           │       │   │   └── PriorityThreadPoolExecutor.java
│           │       │   ├── dao/
│           │       │   │   ├── AbstractDAO.java
│           │       │   │   ├── AccountDAO.java
│           │       │   │   ├── BudgetDAO.java
│           │       │   │   ├── CommodityDAO.java
│           │       │   │   ├── ConfigDAO.java
│           │       │   │   ├── DAO.java
│           │       │   │   ├── EngineDAO.java
│           │       │   │   ├── RecurringDAO.java
│           │       │   │   ├── TagDAO.java
│           │       │   │   ├── TransactionDAO.java
│           │       │   │   └── TrashDAO.java
│           │       │   ├── jpa/
│           │       │   │   ├── AbstractJpaDAO.java
│           │       │   │   ├── AbstractJpaDataStore.java
│           │       │   │   ├── JpaAccountDAO.java
│           │       │   │   ├── JpaBudgetDAO.java
│           │       │   │   ├── JpaCommodityDAO.java
│           │       │   │   ├── JpaConfigDAO.java
│           │       │   │   ├── JpaConfiguration.java
│           │       │   │   ├── JpaEngineDAO.java
│           │       │   │   ├── JpaH2DataStore.java
│           │       │   │   ├── JpaH2MvDataStore.java
│           │       │   │   ├── JpaHsqlDataStore.java
│           │       │   │   ├── JpaNetworkServer.java
│           │       │   │   ├── JpaRecurringDAO.java
│           │       │   │   ├── JpaTagDAO.java
│           │       │   │   ├── JpaTransactionDAO.java
│           │       │   │   ├── JpaTrashDAO.java
│           │       │   │   ├── JpaTrashEntity.java
│           │       │   │   └── SqlUtils.java
│           │       │   ├── message/
│           │       │   │   ├── ChannelEvent.java
│           │       │   │   ├── LocalServerListener.java
│           │       │   │   ├── Message.java
│           │       │   │   ├── MessageBus.java
│           │       │   │   ├── MessageBusClient.java
│           │       │   │   ├── MessageBusServer.java
│           │       │   │   ├── MessageChannel.java
│           │       │   │   ├── MessageListener.java
│           │       │   │   ├── MessageProperty.java
│           │       │   │   ├── MessageProxy.java
│           │       │   │   └── XStreamFactory.java
│           │       │   ├── recurring/
│           │       │   │   ├── DailyReminder.java
│           │       │   │   ├── MonthlyReminder.java
│           │       │   │   ├── OneTimeReminder.java
│           │       │   │   ├── PendingReminder.java
│           │       │   │   ├── RecurringIterator.java
│           │       │   │   ├── Reminder.java
│           │       │   │   ├── ReminderType.java
│           │       │   │   ├── WeeklyReminder.java
│           │       │   │   └── YearlyReminder.java
│           │       │   └── xstream/
│           │       │       ├── AbstractXStreamContainer.java
│           │       │       ├── AbstractXStreamDAO.java
│           │       │       ├── BinaryContainer.java
│           │       │       ├── BinaryXStreamDataStore.java
│           │       │       ├── StoredObjectReflectionProvider.java
│           │       │       ├── XMLContainer.java
│           │       │       ├── XMLDataStore.java
│           │       │       ├── XStreamAccountDAO.java
│           │       │       ├── XStreamBudgetDAO.java
│           │       │       ├── XStreamCommodityDAO.java
│           │       │       ├── XStreamConfigDAO.java
│           │       │       ├── XStreamEngineDAO.java
│           │       │       ├── XStreamJVM9.java
│           │       │       ├── XStreamRecurringDAO.java
│           │       │       ├── XStreamTagDAO.java
│           │       │       ├── XStreamTransactionDAO.java
│           │       │       └── XStreamTrashDAO.java
│           │       ├── net/
│           │       │   ├── AbstractAuthenticator.java
│           │       │   ├── ConnectionFactory.java
│           │       │   ├── YahooCrumbManager.java
│           │       │   ├── currency/
│           │       │   │   ├── CurrencyConverterParser.java
│           │       │   │   ├── CurrencyParser.java
│           │       │   │   └── CurrencyUpdateFactory.java
│           │       │   └── security/
│           │       │       ├── NullParser.java
│           │       │       ├── SecurityParser.java
│           │       │       ├── UpdateFactory.java
│           │       │       ├── YahooEventParser.java
│           │       │       └── iex/
│           │       │           └── IEXParser.java
│           │       ├── report/
│           │       │   ├── BalanceByMonthCSVReport.java
│           │       │   ├── ProfitLossTextReport.java
│           │       │   ├── ReportPeriod.java
│           │       │   └── ReportPeriodUtils.java
│           │       ├── text/
│           │       │   └── NumericFormats.java
│           │       ├── time/
│           │       │   ├── DateUtils.java
│           │       │   └── Period.java
│           │       └── util/
│           │           ├── CollectionUtils.java
│           │           ├── DefaultDaemonThreadFactory.java
│           │           ├── EncodeDecode.java
│           │           ├── EncryptionManager.java
│           │           ├── FileLocker.java
│           │           ├── FileMagic.java
│           │           ├── FileUtils.java
│           │           ├── LocaleObject.java
│           │           ├── LockedCommodityNode.java
│           │           ├── LogUtil.java
│           │           ├── MathEval.java
│           │           ├── MultiHashMap.java
│           │           ├── NewFileUtility.java
│           │           ├── NotNull.java
│           │           ├── Nullable.java
│           │           ├── SearchUtils.java
│           │           ├── function/
│           │           │   ├── MemoPredicate.java
│           │           │   ├── ParentAccountPredicate.java
│           │           │   ├── PayeePredicate.java
│           │           │   ├── ReconciledPredicate.java
│           │           │   ├── TagPredicate.java
│           │           │   └── TransactionAgePredicate.java
│           │           └── prefs/
│           │               ├── MapBasedPreferences.java
│           │               ├── MapPreferencesFactory.java
│           │               └── PortablePreferences.java
│           └── resources/
│               ├── META-INF/
│               │   └── persistence.xml
│               └── logging.properties
├── jgnash-fx/
│   ├── build.gradle.kts
│   ├── scripts/
│   │   ├── clean-security-history.js
│   │   └── helloworld.js
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── jgnash/
│       │   │       ├── app/
│       │   │       │   ├── jGnash.java
│       │   │       │   └── jGnashFx.java
│       │   │       ├── bootloader/
│       │   │       │   ├── BootLoader.java
│       │   │       │   └── BootLoaderDialog.java
│       │   │       └── uifx/
│       │   │           ├── Options.java
│       │   │           ├── StaticUIMethods.java
│       │   │           ├── about/
│       │   │           │   └── AboutDialogController.java
│       │   │           ├── actions/
│       │   │           │   ├── DatabasePathAction.java
│       │   │           │   ├── DefaultCurrencyAction.java
│       │   │           │   ├── DefaultLocaleAction.java
│       │   │           │   ├── ExecuteJavaScriptAction.java
│       │   │           │   ├── ExportAccountsAction.java
│       │   │           │   ├── ImportAccountsAction.java
│       │   │           │   ├── ImportOfxAction.java
│       │   │           │   └── ImportQifAction.java
│       │   │           ├── control/
│       │   │           │   ├── AbstractAccountTreeController.java
│       │   │           │   ├── AccountComboBox.java
│       │   │           │   ├── Alert.java
│       │   │           │   ├── AutoCompleteTextField.java
│       │   │           │   ├── BigDecimalTableCell.java
│       │   │           │   ├── BusyPane.java
│       │   │           │   ├── CheckComboBox.java
│       │   │           │   ├── CheckListView.java
│       │   │           │   ├── ChoiceDialog.java
│       │   │           │   ├── CurrencyComboBox.java
│       │   │           │   ├── DataStoreTypeComboBox.java
│       │   │           │   ├── DatePickerEx.java
│       │   │           │   ├── DateRangeDialogController.java
│       │   │           │   ├── DecimalTextField.java
│       │   │           │   ├── DetailedDecimalTextField.java
│       │   │           │   ├── DoughnutChart.java
│       │   │           │   ├── ExceptionDialog.java
│       │   │           │   ├── ImageDialog.java
│       │   │           │   ├── IntegerTextField.java
│       │   │           │   ├── IntegerTreeTableCell.java
│       │   │           │   ├── LockedCommodityListCell.java
│       │   │           │   ├── NullTableViewSelectionModel.java
│       │   │           │   ├── PopOverButton.java
│       │   │           │   ├── QuoteSourceComboBox.java
│       │   │           │   ├── SecurityComboBox.java
│       │   │           │   ├── SecurityHistoryEventTypeComboBox.java
│       │   │           │   ├── SecurityNodeAreaChart.java
│       │   │           │   ├── ShortDateTableCell.java
│       │   │           │   ├── StatusBar.java
│       │   │           │   ├── TabViewPane.java
│       │   │           │   ├── TableViewEx.java
│       │   │           │   ├── TextFieldEx.java
│       │   │           │   ├── TextInputDialog.java
│       │   │           │   ├── TimePeriodComboBox.java
│       │   │           │   ├── TransactionNumberComboBox.java
│       │   │           │   ├── autocomplete/
│       │   │           │   │   ├── AutoCompleteFactory.java
│       │   │           │   │   ├── AutoCompleteModel.java
│       │   │           │   │   └── DefaultAutoCompleteModel.java
│       │   │           │   └── wizard/
│       │   │           │       ├── AbstractWizardPaneController.java
│       │   │           │       ├── WizardDescriptor.java
│       │   │           │       ├── WizardDialogController.java
│       │   │           │       └── WizardPaneController.java
│       │   │           ├── dialog/
│       │   │           │   ├── ChangeDatabasePasswordDialogController.java
│       │   │           │   ├── ImportScriptsDialogController.java
│       │   │           │   ├── PackDatabaseDialogController.java
│       │   │           │   ├── RemoteConnectionDialogController.java
│       │   │           │   ├── TagManagerDialogController.java
│       │   │           │   ├── currency/
│       │   │           │   │   ├── AddRemoveCurrencyController.java
│       │   │           │   │   ├── EditExchangeRatesController.java
│       │   │           │   │   └── ModifyCurrencyController.java
│       │   │           │   ├── options/
│       │   │           │   │   ├── AccountTabController.java
│       │   │           │   │   ├── DataProviderTabController.java
│       │   │           │   │   ├── FormatsTabController.java
│       │   │           │   │   ├── GeneralTabController.java
│       │   │           │   │   ├── NetworkTabController.java
│       │   │           │   │   ├── OptionDialogController.java
│       │   │           │   │   ├── RegisterTabController.java
│       │   │           │   │   ├── RemindersTabController.java
│       │   │           │   │   ├── ReportTabController.java
│       │   │           │   │   ├── StartupShutdownTabController.java
│       │   │           │   │   └── TransactionNumberDialogController.java
│       │   │           │   └── security/
│       │   │           │       ├── CreateModifySecuritiesController.java
│       │   │           │       ├── HistoricalImportController.java
│       │   │           │       └── SecurityHistoryController.java
│       │   │           ├── net/
│       │   │           │   └── NetworkAuthenticator.java
│       │   │           ├── report/
│       │   │           │   ├── AbstractSumByTypeReport.java
│       │   │           │   ├── AccountBalanceChartController.java
│       │   │           │   ├── AccountRegisterReport.java
│       │   │           │   ├── AccountRegisterReportController.java
│       │   │           │   ├── BalanceByMonthOptionsDialogController.java
│       │   │           │   ├── BalanceSheetReport.java
│       │   │           │   ├── BalanceSheetReportController.java
│       │   │           │   ├── ChartUtilities.java
│       │   │           │   ├── IncomeExpenseBarChartDialogController.java
│       │   │           │   ├── IncomeExpensePayeePieChartDialogController.java
│       │   │           │   ├── IncomeExpensePieChartDialogController.java
│       │   │           │   ├── ListOfAccountsReport.java
│       │   │           │   ├── ListOfAccountsReportController.java
│       │   │           │   ├── NetWorthReport.java
│       │   │           │   ├── NetWorthReportController.java
│       │   │           │   ├── PortfolioReport.java
│       │   │           │   ├── PortfolioReportController.java
│       │   │           │   ├── ProfitLossReport.java
│       │   │           │   ├── ProfitLossReportController.java
│       │   │           │   ├── ReportActions.java
│       │   │           │   ├── TransactionTagPieChartDialogController.java
│       │   │           │   └── pdf/
│       │   │           │       ├── PageFormatDialogController.java
│       │   │           │       ├── ReportController.java
│       │   │           │       └── ReportViewerDialogController.java
│       │   │           ├── resource/
│       │   │           │   ├── cursor/
│       │   │           │   │   └── CustomCursor.java
│       │   │           │   └── font/
│       │   │           │       └── MaterialDesignLabel.java
│       │   │           ├── skin/
│       │   │           │   ├── BaseColorDialogController.java
│       │   │           │   ├── FontSizeDialogController.java
│       │   │           │   ├── StyleClass.java
│       │   │           │   └── ThemeManager.java
│       │   │           ├── tasks/
│       │   │           │   ├── BootEngineTask.java
│       │   │           │   ├── CloseFileTask.java
│       │   │           │   ├── PackDatabaseTask.java
│       │   │           │   └── SaveAsTask.java
│       │   │           ├── util/
│       │   │           │   ├── AccountTypeFilter.java
│       │   │           │   ├── FXMLUtils.java
│       │   │           │   ├── FileChooserFactory.java
│       │   │           │   ├── InjectFXML.java
│       │   │           │   ├── JavaFXUtils.java
│       │   │           │   ├── StageUtils.java
│       │   │           │   ├── TableViewManager.java
│       │   │           │   └── TreeSearch.java
│       │   │           ├── views/
│       │   │           │   ├── AccountBalanceDisplayManager.java
│       │   │           │   ├── AccountBalanceDisplayMode.java
│       │   │           │   ├── accounts/
│       │   │           │   │   ├── AccountCommodityFormatTreeTableCell.java
│       │   │           │   │   ├── AccountPropertiesController.java
│       │   │           │   │   ├── AccountTypeFilterFormController.java
│       │   │           │   │   ├── AccountsViewController.java
│       │   │           │   │   ├── SelectAccountController.java
│       │   │           │   │   ├── SelectAccountSecuritiesDialog.java
│       │   │           │   │   └── StaticAccountsMethods.java
│       │   │           │   ├── budget/
│       │   │           │   │   ├── BudgetGoalsDialogController.java
│       │   │           │   │   ├── BudgetManagerDialogController.java
│       │   │           │   │   ├── BudgetPropertiesDialogController.java
│       │   │           │   │   ├── BudgetSparkLine.java
│       │   │           │   │   ├── BudgetTableController.java
│       │   │           │   │   ├── BudgetViewController.java
│       │   │           │   │   └── HistoricalBudgetDialogController.java
│       │   │           │   ├── main/
│       │   │           │   │   ├── ConsoleDialogController.java
│       │   │           │   │   ├── MainToolBarController.java
│       │   │           │   │   ├── MainView.java
│       │   │           │   │   ├── MenuBarController.java
│       │   │           │   │   └── OpenDatabaseController.java
│       │   │           │   ├── recurring/
│       │   │           │   │   ├── AbstractTabController.java
│       │   │           │   │   ├── DayTabController.java
│       │   │           │   │   ├── MonthTabController.java
│       │   │           │   │   ├── NoneTabController.java
│       │   │           │   │   ├── NotificationDialog.java
│       │   │           │   │   ├── RecurringDialogController.java
│       │   │           │   │   ├── RecurringEntryDialog.java
│       │   │           │   │   ├── RecurringPropertiesController.java
│       │   │           │   │   ├── RecurringTabController.java
│       │   │           │   │   ├── RecurringViewController.java
│       │   │           │   │   ├── WeekTabController.java
│       │   │           │   │   └── YearTabController.java
│       │   │           │   └── register/
│       │   │           │       ├── AbstractInvIncomeSlipController.java
│       │   │           │       ├── AbstractInvSlipController.java
│       │   │           │       ├── AbstractPriceQtyInvSlipController.java
│       │   │           │       ├── AbstractSlipController.java
│       │   │           │       ├── AbstractTransactionEntryDialog.java
│       │   │           │       ├── AbstractTransactionEntrySlipController.java
│       │   │           │       ├── AbstractTransactionTableCell.java
│       │   │           │       ├── AccountExchangePane.java
│       │   │           │       ├── AccountPropertyWrapper.java
│       │   │           │       ├── AdjustSharesSlipController.java
│       │   │           │       ├── AdjustmentSlipController.java
│       │   │           │       ├── AmortizeSetupDialogController.java
│       │   │           │       ├── AttachmentPane.java
│       │   │           │       ├── BankRegisterPaneController.java
│       │   │           │       ├── BaseSlip.java
│       │   │           │       ├── BasicRegisterTableController.java
│       │   │           │       ├── BuyShareSlipController.java
│       │   │           │       ├── DateTransNumberDialogController.java
│       │   │           │       ├── DecreaseAmountProperty.java
│       │   │           │       ├── DividendSlipController.java
│       │   │           │       ├── FeeDialog.java
│       │   │           │       ├── FeePane.java
│       │   │           │       ├── FeeTransactionEntrySlipController.java
│       │   │           │       ├── GainLossDialog.java
│       │   │           │       ├── GainLossPane.java
│       │   │           │       ├── GainLossTransactionEntrySlipController.java
│       │   │           │       ├── IncreaseAmountProperty.java
│       │   │           │       ├── InvestmentRegisterPaneController.java
│       │   │           │       ├── InvestmentRegisterTableController.java
│       │   │           │       ├── InvestmentSlipManager.java
│       │   │           │       ├── InvestmentTransactionDialog.java
│       │   │           │       ├── InvestmentTransactionQuantityTableCell.java
│       │   │           │       ├── LiabilityRegisterPaneController.java
│       │   │           │       ├── LockedBasicRegisterPaneController.java
│       │   │           │       ├── LockedInvestmentRegisterPaneController.java
│       │   │           │       ├── RegisterActions.java
│       │   │           │       ├── RegisterFactory.java
│       │   │           │       ├── RegisterPaneController.java
│       │   │           │       ├── RegisterStage.java
│       │   │           │       ├── RegisterTableController.java
│       │   │           │       ├── RegisterViewController.java
│       │   │           │       ├── ReinvestDividendSlipController.java
│       │   │           │       ├── ReturnOfCapitalSlipController.java
│       │   │           │       ├── SellShareSlipController.java
│       │   │           │       ├── Slip.java
│       │   │           │       ├── SlipController.java
│       │   │           │       ├── SlipControllerContainer.java
│       │   │           │       ├── SlipType.java
│       │   │           │       ├── SplitMergeSharesSlipController.java
│       │   │           │       ├── SplitTransactionDialog.java
│       │   │           │       ├── SplitTransactionSlipController.java
│       │   │           │       ├── TransactionCommodityFormatTableCell.java
│       │   │           │       ├── TransactionDateTableCell.java
│       │   │           │       ├── TransactionDateTimeTableCell.java
│       │   │           │       ├── TransactionDialog.java
│       │   │           │       ├── TransactionEntryCommodityFormatTableCell.java
│       │   │           │       ├── TransactionStringTableCell.java
│       │   │           │       ├── TransactionTagDialogController.java
│       │   │           │       ├── TransactionTagPane.java
│       │   │           │       ├── TransferSlipController.java
│       │   │           │       └── reconcile/
│       │   │           │           ├── ReconcileDialogController.java
│       │   │           │           └── ReconcileSettingsDialogController.java
│       │   │           └── wizard/
│       │   │               ├── file/
│       │   │               │   ├── NewFileFourController.java
│       │   │               │   ├── NewFileOneController.java
│       │   │               │   ├── NewFileSummaryController.java
│       │   │               │   ├── NewFileThreeController.java
│       │   │               │   ├── NewFileTwoController.java
│       │   │               │   └── NewFileWizard.java
│       │   │               └── imports/
│       │   │                   ├── ImportPageOneController.java
│       │   │                   ├── ImportPageThreeController.java
│       │   │                   ├── ImportPageTwoController.java
│       │   │                   └── ImportWizard.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── MANIFEST.MF
│       │       └── jgnash/
│       │           ├── skin/
│       │           │   ├── default.css
│       │           │   ├── tableHideHorizontalScrollBar.css
│       │           │   └── tableHideVerticalScrollBar.css
│       │           └── uifx/
│       │               ├── about/
│       │               │   └── AboutDialog.fxml
│       │               ├── control/
│       │               │   ├── AlertDialog.fxml
│       │               │   ├── ChoiceDialog.fxml
│       │               │   ├── DateRangeDialog.fxml
│       │               │   ├── DetailedDecimalTextField.fxml
│       │               │   ├── ExceptionDialog.fxml
│       │               │   ├── TabViewPane.fxml
│       │               │   ├── TextInputDialog.fxml
│       │               │   └── wizard/
│       │               │       └── WizardDialog.fxml
│       │               ├── dialog/
│       │               │   ├── ChangePasswordDialog.fxml
│       │               │   ├── ImportScriptsDialog.fxml
│       │               │   ├── PackDatabaseDialog.fxml
│       │               │   ├── RemoteConnectionDialog.fxml
│       │               │   ├── TagManagerDialog.fxml
│       │               │   ├── currency/
│       │               │   │   ├── AddRemoveCurrency.fxml
│       │               │   │   ├── EditExchangeRates.fxml
│       │               │   │   └── ModifyCurrency.fxml
│       │               │   ├── options/
│       │               │   │   ├── AccountTab.fxml
│       │               │   │   ├── DataProviderTab.fxml
│       │               │   │   ├── FormatsTab.fxml
│       │               │   │   ├── GeneralTab.fxml
│       │               │   │   ├── NetworkTab.fxml
│       │               │   │   ├── OptionDialog.fxml
│       │               │   │   ├── RegisterTab.fxml
│       │               │   │   ├── RemindersTab.fxml
│       │               │   │   ├── ReportTab.fxml
│       │               │   │   ├── StartupShutdownTab.fxml
│       │               │   │   └── TransactionNumberDialog.fxml
│       │               │   └── security/
│       │               │       ├── CreateModifySecurities.fxml
│       │               │       ├── HistoricalImport.fxml
│       │               │       └── SecurityHistory.fxml
│       │               ├── report/
│       │               │   ├── AccountBalanceChart.fxml
│       │               │   ├── AccountRegisterReport.fxml
│       │               │   ├── BalanceByMonthOptionsDialog.fxml
│       │               │   ├── BalanceSheetReport.fxml
│       │               │   ├── IncomeExpenseBarChartDialog.fxml
│       │               │   ├── IncomeExpensePayeePieChartDialog.fxml
│       │               │   ├── IncomeExpensePieChartDialog.fxml
│       │               │   ├── ListOfAccountsReport.fxml
│       │               │   ├── NetWorthReport.fxml
│       │               │   ├── PortfolioReport.fxml
│       │               │   ├── ProfitLossReport.fxml
│       │               │   ├── TransactionTagPieChartDialog.fxml
│       │               │   └── pdf/
│       │               │       ├── PageFormatDialog.fxml
│       │               │       └── ReportViewerDialog.fxml
│       │               ├── skin/
│       │               │   ├── BaseColorDialog.fxml
│       │               │   └── FontSizeDialog.fxml
│       │               ├── views/
│       │               │   ├── accounts/
│       │               │   │   ├── AccountProperties.fxml
│       │               │   │   ├── AccountTypeFilterForm.fxml
│       │               │   │   ├── AccountsView.fxml
│       │               │   │   └── SelectAccountForm.fxml
│       │               │   ├── budget/
│       │               │   │   ├── BudgetGoalsDialog.fxml
│       │               │   │   ├── BudgetManagerDialog.fxml
│       │               │   │   ├── BudgetPropertiesDialog.fxml
│       │               │   │   ├── BudgetTable.fxml
│       │               │   │   ├── BudgetView.fxml
│       │               │   │   └── HistoricalBudgetDialog.fxml
│       │               │   ├── main/
│       │               │   │   ├── ConsoleDialog.fxml
│       │               │   │   ├── MainMenuBar.fxml
│       │               │   │   ├── MainToolBar.fxml
│       │               │   │   └── OpenDatabaseForm.fxml
│       │               │   ├── recurring/
│       │               │   │   ├── DayTab.fxml
│       │               │   │   ├── MonthTab.fxml
│       │               │   │   ├── NoneTab.fxml
│       │               │   │   ├── NotificationDialog.fxml
│       │               │   │   ├── RecurringDialog.fxml
│       │               │   │   ├── RecurringProperties.fxml
│       │               │   │   ├── RecurringView.fxml
│       │               │   │   ├── WeekTab.fxml
│       │               │   │   └── YearTab.fxml
│       │               │   └── register/
│       │               │       ├── AccountExchangePane.fxml
│       │               │       ├── AdjustSharesSlip.fxml
│       │               │       ├── AdjustmentSlip.fxml
│       │               │       ├── AmortizeSetupDialog.fxml
│       │               │       ├── AttachmentPane.fxml
│       │               │       ├── BankSlip.fxml
│       │               │       ├── BasicRegisterPane.fxml
│       │               │       ├── BasicRegisterTable.fxml
│       │               │       ├── BuyShareSlip.fxml
│       │               │       ├── DateTransNumberDialog.fxml
│       │               │       ├── DividendSlip.fxml
│       │               │       ├── FeeDialog.fxml
│       │               │       ├── FeeTransactionEntrySlip.fxml
│       │               │       ├── GainLossDialog.fxml
│       │               │       ├── GainLossTransactionEntrySlip.fxml
│       │               │       ├── InvestmentRegisterPane.fxml
│       │               │       ├── InvestmentRegisterTable.fxml
│       │               │       ├── InvestmentTransactionDialog.fxml
│       │               │       ├── InvestmentTransactionPane.fxml
│       │               │       ├── LiabilityRegisterPane.fxml
│       │               │       ├── LockedBasicRegisterPane.fxml
│       │               │       ├── LockedInvestmentRegisterPane.fxml
│       │               │       ├── RegisterView.fxml
│       │               │       ├── ReinvestDividendSlip.fxml
│       │               │       ├── ReturnOfCapitalSlip.fxml
│       │               │       ├── SellShareSlip.fxml
│       │               │       ├── SplitMergeSharesSlip.fxml
│       │               │       ├── SplitTransactionDialog.fxml
│       │               │       ├── SplitTransactionSlip.fxml
│       │               │       ├── TransactionDialog.fxml
│       │               │       ├── TransactionTagDialog.fxml
│       │               │       ├── TransactionTagPane.fxml
│       │               │       ├── TransferSlip.fxml
│       │               │       └── reconcile/
│       │               │           ├── ReconcileDialog.fxml
│       │               │           └── ReconcileSettingsDialog.fxml
│       │               └── wizard/
│       │                   ├── file/
│       │                   │   ├── NewFileFour.fxml
│       │                   │   ├── NewFileOne.fxml
│       │                   │   ├── NewFileSummary.fxml
│       │                   │   ├── NewFileThree.fxml
│       │                   │   └── NewFileTwo.fxml
│       │                   └── imports/
│       │                       ├── ImportPageOne.fxml
│       │                       ├── ImportPageThree.fxml
│       │                       └── ImportPageTwo.fxml
│       └── test/
│           └── java/
│               └── jgnash/
│                   └── uifx/
│                       ├── ControlsTest.java
│                       └── control/
│                           └── autocomplete/
│                               └── AutoCompleteModelTest.java
├── jgnash-fx-test-plugin/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── uifx/
│                       └── plugin/
│                           └── TestFxPlugin.java
├── jgnash-manual/
│   ├── readme.md
│   ├── sample.bxds
│   └── src/
│       ├── Manual.tex
│       ├── fdl-1.3.tex
│       └── gpl-3.0.tex
├── jgnash-plugin/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── plugin/
│                       ├── FxPlugin.java
│                       ├── Plugin.java
│                       └── PluginFactory.java
├── jgnash-report-core/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           └── java/
│               └── jgnash/
│                   └── report/
│                       ├── pdf/
│                       │   ├── Constants.java
│                       │   ├── FontRegistry.java
│                       │   ├── PageSize.java
│                       │   ├── Report.java
│                       │   └── ReportFactory.java
│                       ├── poi/
│                       │   ├── BudgetResultsExport.java
│                       │   ├── StyleFactory.java
│                       │   └── Workbook.java
│                       ├── table/
│                       │   ├── AbstractReportTableModel.java
│                       │   ├── ColumnStyle.java
│                       │   ├── GroupInfo.java
│                       │   ├── Row.java
│                       │   └── SortOrder.java
│                       └── ui/
│                           └── ReportPrintFactory.java
├── jgnash-resources/
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── java/
│           │   └── jgnash/
│           │       └── resource/
│           │           └── util/
│           │               ├── ClassPathUtils.java
│           │               ├── HTMLResource.java
│           │               ├── MonthName.java
│           │               ├── OS.java
│           │               ├── ResourceUtils.java
│           │               ├── TextResource.java
│           │               └── Version.java
│           └── resources/
│               └── jgnash/
│                   └── resource/
│                       ├── account/
│                       │   ├── cs/
│                       │   │   ├── common.xml
│                       │   │   ├── set.txt
│                       │   │   └── spouse.xml
│                       │   ├── de/
│                       │   │   ├── set.txt
│                       │   │   ├── spouse.xml
│                       │   │   └── standard.xml
│                       │   ├── en/
│                       │   │   ├── common.xml
│                       │   │   ├── set.txt
│                       │   │   └── spouse.xml
│                       │   ├── pt/
│                       │   │   ├── common.xml
│                       │   │   ├── set.txt
│                       │   │   └── spouse.xml
│                       │   └── zh/
│                       │       ├── common.xml
│                       │       ├── set.txt
│                       │       └── spouse.xml
│                       ├── constants.properties
│                       ├── html/
│                       │   └── en/
│                       │       ├── apache-license.html
│                       │       ├── credits.html
│                       │       ├── gpl-license.html
│                       │       ├── jgnash-license.html
│                       │       ├── lgpl.html
│                       │       ├── notice.html
│                       │       └── xstream-license.html
│                       ├── resource.properties
│                       ├── resource_cs.properties
│                       ├── resource_de.properties
│                       ├── resource_en.properties
│                       ├── resource_en_GB.properties
│                       ├── resource_es.properties
│                       ├── resource_fr.properties
│                       ├── resource_it.properties
│                       ├── resource_iw.properties
│                       ├── resource_lt.properties
│                       ├── resource_nl.properties
│                       ├── resource_pl.properties
│                       ├── resource_pt.properties
│                       ├── resource_ru.properties
│                       ├── resource_uk.properties
│                       ├── resource_zh.properties
│                       ├── resource_zh_TW.properties
│                       └── text/
│                           ├── cs/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── de/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewBudgetOne.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── en/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewBudgetOne.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── es/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── fr/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── it/
│                           │   ├── CreateNewFile.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── lt/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── nl/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── pl/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewBudgetOne.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── pt/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── ru/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           ├── uk/
│                           │   ├── ArchiveDate.txt
│                           │   ├── ArchiveEquity.txt
│                           │   ├── ArchiveFile.txt
│                           │   ├── CreateNewFile.txt
│                           │   ├── DupeTransImport.txt
│                           │   ├── FileNotSaved.txt
│                           │   ├── ImportFileZero.txt
│                           │   ├── ImportOne.txt
│                           │   ├── ImportTwo.txt
│                           │   ├── NewFileFour.txt
│                           │   ├── NewFileOne.txt
│                           │   ├── NewFileThree.txt
│                           │   ├── NewFileTwo.txt
│                           │   ├── QifOne.txt
│                           │   └── QifTwo.txt
│                           └── zh/
│                               ├── ArchiveDate.txt
│                               ├── ArchiveEquity.txt
│                               ├── ArchiveFile.txt
│                               ├── CreateNewFile.txt
│                               ├── DupeTransImport.txt
│                               ├── FileNotSaved.txt
│                               ├── ImportFileZero.txt
│                               ├── ImportOne.txt
│                               ├── ImportTwo.txt
│                               ├── NewBudgetOne.txt
│                               ├── NewFileFour.txt
│                               ├── NewFileOne.txt
│                               ├── NewFileThree.txt
│                               ├── NewFileTwo.txt
│                               ├── QifOne.txt
│                               └── QifTwo.txt
├── jgnash-tests/
│   ├── build.gradle.kts
│   └── src/
│       └── test/
│           ├── java/
│           │   ├── ApiTest.java
│           │   └── jgnash/
│           │       ├── ClassPathTest.java
│           │       ├── JavascriptTest.js
│           │       ├── PDFBoxTableTest.java
│           │       ├── VersionTest.java
│           │       ├── bayes/
│           │       │   └── BayesClassifierTest.java
│           │       ├── convert/
│           │       │   └── importat/
│           │       │       ├── FilterTest.java
│           │       │       ├── ofx/
│           │       │       │   ├── Ofx2Test.java
│           │       │       │   ├── OfxConvertTest.java
│           │       │       │   └── OfxExportText.java
│           │       │       └── qif/
│           │       │           └── QifUtilsTest.java
│           │       ├── engine/
│           │       │   ├── AbstractEngineTest.java
│           │       │   ├── AccountTreeDepthTest.java
│           │       │   ├── BinaryXStreamEngineTest.java
│           │       │   ├── CashFlowTest.java
│           │       │   ├── ConfigTest.java
│           │       │   ├── DataStoreTest.java
│           │       │   ├── DistributedLockTest.java
│           │       │   ├── EncryptedDistributedLockTest.java
│           │       │   ├── EngineTest.java
│           │       │   ├── FileTransferTest.java
│           │       │   ├── InvestmentHistoryExchangeTest.java
│           │       │   ├── InvestmentPerformanceTest.java
│           │       │   ├── InvestmentTransactionTest.java
│           │       │   ├── JpaH2EngineTest.java
│           │       │   ├── JpaH2MvEngineTest.java
│           │       │   ├── JpaHsqlEngineTest.java
│           │       │   ├── PriorityThreadTest.java
│           │       │   ├── TransactionTest.java
│           │       │   ├── XMLEngineTest.java
│           │       │   ├── net/
│           │       │   │   └── security/
│           │       │   │       ├── IEXParserTest.java
│           │       │   │       └── YahooEventParserTest.java
│           │       │   └── recurring/
│           │       │       ├── DailyReminderTest.java
│           │       │       ├── MonthlyReminderTest.java
│           │       │       ├── WeeklyReminderTest.java
│           │       │       └── YearlyReminderTest.java
│           │       ├── report/
│           │       │   └── poi/
│           │       │       └── BudgetResultsExportTest.java
│           │       ├── text/
│           │       │   └── NumericFormatsTests.java
│           │       └── util/
│           │           ├── BinaryXStreamTest.java
│           │           ├── DateFormatTest.java
│           │           ├── DateTest.java
│           │           ├── EncodeDecodeTest.java
│           │           ├── EncryptionManagerTest.java
│           │           ├── FileMagicTest.java
│           │           └── FileUtilsTest.java
│           └── resources/
│               ├── 401k-header.xml
│               ├── 401k.xml
│               ├── File_with_Accents.ofx
│               ├── IEX-IBM-1y.csv
│               ├── IEX-IBM-1y.json
│               ├── Sample.ofx
│               ├── activity.ofx
│               ├── bank1-commas.ofx
│               ├── bank1-indent.ofx
│               ├── bank1.ofx
│               ├── bank1.qif
│               ├── bank2.ofx
│               ├── budgetTest.xml
│               ├── checking1.ofx
│               ├── chequing.ofx
│               ├── comptes.ofx
│               ├── demobank.ofx
│               ├── invest.xml
│               ├── invest2.xml
│               ├── ofx_spec160_stmtrs_example.sgml
│               ├── ofx_spec201_stmtrs_example.xml
│               ├── test_fails.ofx
│               └── uglyFormat.ofx
├── mt940/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── net/
│       │           └── bzzt/
│       │               └── swift/
│       │                   └── mt940/
│       │                       ├── ImportMt940FxAction.java
│       │                       ├── Mt940Entry.java
│       │                       ├── Mt940File.java
│       │                       ├── Mt940Plugin.java
│       │                       ├── Mt940Record.java
│       │                       ├── exporter/
│       │                       │   └── Mt940Exporter.java
│       │                       └── parser/
│       │                           └── Mt940Parser.java
│       └── test/
│           ├── java/
│           │   └── net/
│           │       └── bzzt/
│           │           └── swift/
│           │               └── mt940/
│           │                   └── Mt940Test.java
│           └── resources/
│               ├── bank1.STA
│               ├── multiaccounts.sta
│               └── rabobank.swi
├── rhino-scripts/
│   ├── README.adoc
│   ├── clear-budget-goal.js
│   ├── create-random-transaction.js
│   └── load-budget-goal.js
├── rust-launcher/
│   ├── Cargo.toml
│   ├── README.adoc
│   ├── build.rs
│   └── src/
│       └── main.rs
├── settings.gradle.kts
├── spelling.dic
└── windows 10 Java reg fix.reg
Download .txt
Showing preview only (411K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4840 symbols across 522 files)

FILE: jgnash-bayes/src/main/java/jgnash/bayes/BayesClassifier.java
  class BayesClassifier (line 36) | public class BayesClassifier<E> {
    method BayesClassifier (line 58) | public BayesClassifier(final E defaultClass) {
    method incrementFeature (line 63) | private void incrementFeature(final String feature, final E classifica...
    method incrementClass (line 83) | private void incrementClass(final E classification) {
    method getClassCount (line 89) | private int getClassCount(final E classification) {
    method getFeatureCount (line 102) | private int getFeatureCount(final String feature, final E classificati...
    method getFeatureCount (line 113) | private int getFeatureCount(final String feature) {
    method getFeatureProbability (line 128) | private double getFeatureProbability(final String feature, final E cla...
    method getWeightedProbability (line 133) | private double getWeightedProbability(final String feature, final E cl...
    method getClassProbability (line 139) | private double getClassProbability(final String item, final E classifi...
    method train (line 149) | private void train(final Collection<String> features, final E classifi...
    method train (line 162) | public void train(final String item, final E classification) {
    method classify (line 172) | public E classify(final String item) {

FILE: jgnash-convert/src/main/java/jgnash/convert/common/OfxTags.java
  type OfxTags (line 26) | public interface OfxTags {

FILE: jgnash-convert/src/main/java/jgnash/convert/exportantur/csv/CsvExport.java
  class CsvExport (line 55) | public class CsvExport {
    method CsvExport (line 62) | private CsvExport() {
    method exportAccountTree (line 65) | public static void exportAccountTree(@NotNull final Engine engine, @No...
    method exportAccount (line 105) | public static void exportAccount(@NotNull final Account account, @NotN...

FILE: jgnash-convert/src/main/java/jgnash/convert/exportantur/ofx/OfxExport.java
  class OfxExport (line 50) | public class OfxExport implements OfxTags {
    method OfxExport (line 70) | public OfxExport(final Account account, final LocalDate startDate, fin...
    method exportAccount (line 77) | public void exportAccount() {
    method writeBankTransactions (line 201) | private void writeBankTransactions() {
    method writeInvestmentTransactions (line 208) | private void writeInvestmentTransactions() {
    method writeBankTransaction (line 244) | private void writeBankTransaction(final Transaction transaction) {
    method writeFitID (line 279) | private void writeFitID(@NotNull final Transaction transaction) {
    method writeSecID (line 288) | private void writeSecID(final SecurityNode node) {
    method writeBuyStockTransaction (line 303) | private void writeBuyStockTransaction(final InvestmentTransaction tran...
    method writeSellStockTransaction (line 332) | private void writeSellStockTransaction(final InvestmentTransaction tra...
    method writeReinvestStockTransaction (line 366) | private void writeReinvestStockTransaction(final InvestmentTransaction...
    method writeDividendTransaction (line 396) | private void writeDividendTransaction(final InvestmentTransaction tran...
    method encodeDate (line 417) | private String encodeDate(final LocalDate date) {
    method wrapOpen (line 421) | private static String wrapOpen(final String element) {
    method wrapClose (line 425) | private static String wrapClose(final String element) {
    method wrap (line 429) | private static String wrap(final String element, final String text) {
    method writeAccountTo (line 433) | private void writeAccountTo(Account account) {
    method getBankingMessageSetAggregate (line 475) | private static String getBankingMessageSetAggregate(final Account acco...
    method getResponse (line 494) | private static String getResponse(final Account account) {
    method getStatementResponse (line 513) | private static String getStatementResponse(final Account account) {
    method getAccountFromAggregate (line 532) | private static String getAccountFromAggregate(final Account account) {
    method getAccountToAggregate (line 551) | private static String getAccountToAggregate(final Account account) {
    method getTransactionList (line 570) | private static String getTransactionList(final Account account) {
    class IndentedPrintWriter (line 583) | private static class IndentedPrintWriter extends PrintWriter {
      method IndentedPrintWriter (line 587) | IndentedPrintWriter(final Writer out) {
      method println (line 591) | void println(final String x, final int indentLevel) {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/BayesImportClassifier.java
  class BayesImportClassifier (line 33) | public class BayesImportClassifier {
    method BayesImportClassifier (line 38) | private BayesImportClassifier() {
    method classifyTransactions (line 41) | public static void classifyTransactions(final List<? extends ImportTra...
    method generateClassifier (line 62) | private static BayesClassifier<Account> generateClassifier(List<Transa...

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/DateFormat.java
  type DateFormat (line 23) | public enum DateFormat {
    method DateFormat (line 29) | DateFormat(String format) {
    method toString (line 33) | @Override

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/GenericImport.java
  class GenericImport (line 44) | public class GenericImport {
    method GenericImport (line 46) | private GenericImport() {
    method importTransactions (line 49) | public static void importTransactions(@NotNull final List<? extends Im...
    method matchTransactions (line 100) | public static void matchTransactions(final List<? extends ImportTransa...
    method findFirstAvailableAccount (line 153) | public static Account findFirstAvailableAccount() {
    method importSecurities (line 166) | public static void importSecurities(final List<ImportSecurity> importS...

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ImportBank.java
  class ImportBank (line 29) | public class ImportBank<E extends ImportTransaction> {
    method addSecurity (line 35) | public void addSecurity(final ImportSecurity importSecurity) {
    method setTransactions (line 39) | public void setTransactions(List<E> transactions) {
    method getTransactions (line 48) | public List<E> getTransactions() {
    method addTransaction (line 52) | public void addTransaction(E transaction) {
    method getSecurityList (line 56) | public List<ImportSecurity> getSecurityList() {
    method isInvestmentAccount (line 60) | public boolean isInvestmentAccount() {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ImportFilter.java
  class ImportFilter (line 57) | public class ImportFilter {
    method ImportFilter (line 73) | ImportFilter(final String script) {
    method getImportFilters (line 79) | public static List<ImportFilter> getImportFilters() {
    method getEnabledImportFilters (line 101) | public static List<ImportFilter> getEnabledImportFilters() {
    method saveEnabledImportFilters (line 114) | public static void saveEnabledImportFilters(final List<ImportFilter> f...
    method getUserImportScriptDirectory (line 126) | private static Path getUserImportScriptDirectory() {
    method getBaseFileImportScriptDirectory (line 150) | private static Path getBaseFileImportScriptDirectory(@NotNull final Pa...
    method getScript (line 158) | public String getScript() {
    method evalScript (line 162) | private void evalScript() {
    method processMemo (line 170) | public String processMemo(final String memo) {
    method processPayee (line 183) | public String processPayee(final String payee) {
    method getDescription (line 196) | public String getDescription() {
    method acceptTransaction (line 209) | public void acceptTransaction(final ImportTransaction importTransactio...
    method getReader (line 220) | private Reader getReader() throws IOException {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ImportSecurity.java
  class ImportSecurity (line 31) | public class ImportSecurity {
    method toString (line 44) | @Override
    method getId (line 68) | public Optional<String> getId() {
    method setId (line 72) | public void setId(String id) {
    method getSecurityName (line 76) | Optional<String> getSecurityName() {
    method setSecurityName (line 80) | public void setSecurityName(final String securityName) {
    method getUnitPrice (line 84) | Optional<BigDecimal> getUnitPrice() {
    method setUnitPrice (line 88) | public void setUnitPrice(final BigDecimal unitPrice) {
    method getLocalDate (line 92) | public Optional<LocalDate> getLocalDate() {
    method setLocalDate (line 96) | public void setLocalDate(final LocalDate localDate) {
    method setCurrencyRate (line 100) | public void setCurrencyRate(final BigDecimal unitPrice) {
    method getCurrencyRate (line 104) | public Optional<BigDecimal> getCurrencyRate() {
    method setCurrency (line 108) | public void setCurrency(final String currency) {
    method getCurrency (line 112) | public Optional<String> getCurrency() {
    method getSecurityNode (line 119) | public SecurityNode getSecurityNode() {
    method setSecurityNode (line 123) | public void setSecurityNode(SecurityNode securityNode) {
    method getTicker (line 127) | public String getTicker() {
    method setTicker (line 131) | public void setTicker(final String ticker) {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ImportState.java
  type ImportState (line 23) | public enum ImportState {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ImportTransaction.java
  class ImportTransaction (line 37) | public class ImportTransaction implements Comparable<ImportTransaction> {
    method getAccount (line 121) | public Account getAccount() {
    method setAccount (line 125) | public void setAccount(final Account account) {
    method getFITID (line 135) | public String getFITID() {
    method setFITID (line 139) | public void setFITID(String FITID) {
    method getAmount (line 148) | public BigDecimal getAmount() {
    method setAmount (line 152) | public void setAmount(BigDecimal amount) {
    method getDatePosted (line 156) | @NotNull
    method setDatePosted (line 161) | public void setDatePosted(@NotNull LocalDate datePosted) {
    method getDateUser (line 170) | @Nullable
    method setDateUser (line 175) | public void setDateUser(@Nullable LocalDate dateUser) {
    method getCheckNumber (line 179) | public String getCheckNumber() {
    method setCheckNumber (line 183) | public void setCheckNumber(final String checkNumber) {
    method getMemo (line 187) | public String getMemo() {
    method setMemo (line 191) | public void setMemo(String memo) {
    method getState (line 195) | public ImportState getState() {
    method setState (line 199) | public void setState(ImportState state) {
    method getPayee (line 203) | @NotNull
    method setPayee (line 208) | public void setPayee(@NotNull String payee) {
    method getSecurityId (line 214) | public String getSecurityId() {
    method setSecurityId (line 218) | public void setSecurityId(String securityId) {
    method compareTo (line 222) | @Override
    method equals (line 241) | @Override
    method hashCode (line 254) | @Override
    method getUnits (line 262) | public BigDecimal getUnits() {
    method setUnits (line 266) | public void setUnits(final BigDecimal units) {
    method getUnitPrice (line 273) | public BigDecimal getUnitPrice() {
    method setUnitPrice (line 277) | public void setUnitPrice(final BigDecimal unitPrice) {
    method getCommission (line 284) | public BigDecimal getCommission() {
    method setCommission (line 288) | public void setCommission(final BigDecimal commission) {
    method isTaxExempt (line 292) | public boolean isTaxExempt() {
    method setTaxExempt (line 296) | public void setTaxExempt(boolean taxExempt) {
    method getSecurityType (line 300) | public String getSecurityType() {
    method setSecurityType (line 304) | public void setSecurityType(final String securityType) {
    method isInvestmentTransaction (line 308) | public boolean isInvestmentTransaction() {
    method getIncomeType (line 312) | public String getIncomeType() {
    method setIncomeType (line 316) | public void setIncomeType(String incomeType) {
    method getFees (line 320) | @NotNull public BigDecimal getFees() {
    method setFees (line 324) | public void setFees(@NotNull final BigDecimal fees) {
    method getTransactionType (line 333) | @NotNull
    method setTransactionType (line 338) | public void setTransactionType(@NotNull final TransactionType transact...
    method getTransactionTypeDescription (line 345) | public String getTransactionTypeDescription() {
    method setTransactionTypeDescription (line 349) | public void setTransactionTypeDescription(final String transactionType...
    method getSIC (line 358) | public String getSIC() {
    method setSIC (line 362) | public void setSIC(String SIC) {
    method getRefNum (line 370) | public String getRefNum() {
    method setRefNum (line 374) | public void setRefNum(String refNum) {
    method getPayeeId (line 383) | public String getPayeeId() {
    method setPayeeId (line 387) | public void setPayeeId(String payeeId) {
    method getSubAccount (line 396) | public String getSubAccount() {
    method setSubAccount (line 400) | public void setSubAccount(String subAccount) {
    method getCurrency (line 404) | public String getCurrency() {
    method setCurrency (line 408) | public void setCurrency(String currency) {
    method getGainsAccount (line 415) | public Account getGainsAccount() {
    method setGainsAccount (line 419) | public void setGainsAccount(final Account gainsAccount) {
    method getFeesAccount (line 426) | public Account getFeesAccount() {
    method setFeesAccount (line 430) | public void setFeesAccount(Account feesAccount) {
    method getToolTip (line 434) | @NotNull
    method toString (line 442) | @Override
    method getAccountTo (line 459) | public String getAccountTo() {
    method setAccountTo (line 463) | public void setAccountTo(String accountTo) {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ImportUtils.java
  class ImportUtils (line 35) | public class ImportUtils {
    method ImportUtils (line 37) | private ImportUtils() {
    method getRootExpenseAccount (line 40) | public static Account getRootExpenseAccount() {
    method getRootIncomeAccount (line 47) | public static Account getRootIncomeAccount() {
    method matchAccount (line 59) | public static Account matchAccount(final ImportTransaction importTrans...
    method searchForRootType (line 79) | private static Account searchForRootType(final Account account, final ...
    method matchSecurity (line 100) | static Optional<SecurityNode> matchSecurity(final ImportSecurity secur...
    method createSecurityNode (line 112) | static SecurityNode createSecurityNode(final ImportSecurity security, ...

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxBank.java
  class OfxBank (line 34) | public class OfxBank extends ImportBank<ImportTransaction> {
    method toString (line 68) | @Override

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxImport.java
  class OfxImport (line 47) | public class OfxImport {
    method OfxImport (line 52) | private OfxImport() {
    method importTransactions (line 55) | public static void importTransactions(final OfxBank ofxBank, final Acc...
    method importInvestmentTransaction (line 110) | private static InvestmentTransaction importInvestmentTransaction(final...
    method matchSecurity (line 181) | private static SecurityNode matchSecurity(final OfxBank ofxBank, final...
    method matchAccount (line 197) | public static Account matchAccount(final OfxBank bank) {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxV1ToV2.java
  class OfxV1ToV2 (line 42) | class OfxV1ToV2 {
    method convertToXML (line 62) | static String convertToXML(final Path path) {
    method convertToXML (line 70) | static String convertToXML(final InputStream stream) {
    method convertSgmlToXML (line 74) | private static String convertSgmlToXML(final String sgml) {
    method concat (line 107) | private static String concat(final Collection<String> strings) {
    method consumeHeader (line 124) | private static void consumeHeader(final BufferedReader reader) throws ...
    method readFile (line 153) | private static String readFile(final InputStream stream, final String ...
    method readFile (line 185) | private static String readFile(final Path path, final String character...
    method OfxV1ToV2 (line 194) | private OfxV1ToV2() {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxV2Parser.java
  class OfxV2Parser (line 69) | public class OfxV2Parser implements OfxTags {
    class AccountInfo (line 98) | private static class AccountInfo {
    method enableDetailedLogFile (line 105) | static void enableDetailedLogFile() {
    method parse (line 116) | public static OfxBank parse(@NotNull final Path file) throws Exception {
    method postProcess (line 144) | private static OfxBank postProcess(final OfxBank ofxBank) {
    method parseDate (line 185) | private static LocalDate parseDate(final String date) {
    method parseAmount (line 193) | private static BigDecimal parseAmount(final String amount) {
    method parseBoolean (line 220) | private static boolean parseBoolean(final String bool) {
    method parse (line 231) | public void parse(final InputStream stream) {
    method parse (line 254) | private void parse(final InputStream stream, final String encoding) {
    method parseFile (line 273) | private void parseFile(final Path path) {
    method parse (line 282) | public void parse(final String string, final String encoding) throws U...
    method readOfx (line 286) | private void readOfx(final XMLStreamReader reader) throws XMLStreamExc...
    method parseInvestmentAccountMessageSet (line 322) | private void parseInvestmentAccountMessageSet(final XMLStreamReader re...
    method parseBankMessageSet (line 383) | private void parseBankMessageSet(final XMLStreamReader reader) throws ...
    method parseCreditCardMessageSet (line 440) | private void parseCreditCardMessageSet(final XMLStreamReader reader) t...
    method parseSecuritesMessageSet (line 493) | private void parseSecuritesMessageSet(final XMLStreamReader reader) th...
    method parseSecuritiesList (line 522) | private void parseSecuritiesList(final XMLStreamReader reader) throws ...
    method parseSecurity (line 570) | private void parseSecurity(final XMLStreamReader reader) throws XMLStr...
    method parseBankTransactionList (line 642) | private void parseBankTransactionList(final XMLStreamReader reader) th...
    method parseInvestmentTransactionList (line 681) | private void parseInvestmentTransactionList(final XMLStreamReader read...
    method parseInvestmentTransaction (line 728) | private void parseInvestmentTransaction(final XMLStreamReader reader) ...
    method removeExtraWhiteSpace (line 872) | private String removeExtraWhiteSpace(final String string) {
    method parseBankTransaction (line 882) | private void parseBankTransaction(final XMLStreamReader reader) throws...
    method parseAccountInfo (line 966) | private static void parseAccountInfo(final ImportTransaction importTra...
    method parseAccountInfo (line 976) | private static AccountInfo parseAccountInfo(final XMLStreamReader read...
    method parseAccountInfo (line 1023) | private static void parseAccountInfo(final OfxBank ofxBank, final Acco...
    method parseLedgerBalance (line 1036) | private void parseLedgerBalance(final XMLStreamReader reader) throws X...
    method parseAvailableBalance (line 1078) | private void parseAvailableBalance(final XMLStreamReader reader) throw...
    method parseSignOnMessageSet (line 1120) | private void parseSignOnMessageSet(final XMLStreamReader reader) throw...
    method parseSignOnStatus (line 1165) | private void parseSignOnStatus(final XMLStreamReader reader) throws XM...
    method parseStatementStatus (line 1214) | private void parseStatementStatus(final XMLStreamReader reader) throws...
    method consumeElement (line 1263) | private static void consumeElement(final XMLStreamReader reader) throw...
    method getBank (line 1289) | public OfxBank getBank() {
    method getStatusCode (line 1297) | int getStatusCode() {
    method getStatusSeverity (line 1301) | String getStatusSeverity() {
    method getLanguage (line 1305) | public String getLanguage() {
    method getStatusMessage (line 1309) | String getStatusMessage() {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/ofx/Sanitize.java
  class Sanitize (line 25) | class Sanitize {
    method Sanitize (line 27) | private Sanitize() {
    method sanitize (line 38) | static String sanitize(final String xml) {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifAccount.java
  class QifAccount (line 29) | public class QifAccount extends ImportBank<QifTransaction> {
    method getTransactions (line 39) | @Override
    method get (line 51) | public QifTransaction get(final int index) {
    method toString (line 55) | @Override
    method reparseDates (line 60) | public void reparseDates(final DateFormat dateFormat) {
    method getDateFormat (line 70) | public DateFormat getDateFormat() {
    method setDateFormat (line 78) | public void setDateFormat(final DateFormat dateFormat) {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifCategory.java
  class QifCategory (line 23) | class QifCategory {
    method QifCategory (line 31) | public QifCategory() {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifImport.java
  class QifImport (line 53) | public class QifImport {
    method QifImport (line 74) | public QifImport() {
    method getParser (line 78) | public QifParser getParser() {
    method doFullParse (line 82) | public void doFullParse(final File file, final DateFormat dateFormat) ...
    method doFullImport (line 90) | public void doFullImport() {
    method doPartialParse (line 100) | public boolean doPartialParse(final File file) {
    method dumpStats (line 111) | public void dumpStats() {
    method importCategories (line 117) | private void importCategories() {
    method importAccounts (line 126) | private void importAccounts() {
    method loadCategoryMap (line 131) | private static void loadCategoryMap(final List<Account> list, final Ma...
    method loadCategoryMap (line 139) | private static void loadCategoryMap(final Account acc, final Map<Strin...
    method getBankAccountList (line 152) | private List<Account> getBankAccountList() {
    method loadAccountMap (line 160) | private void loadAccountMap() {
    method loadAccountMap (line 165) | private void loadAccountMap(final Account acc) {
    method addAccounts (line 177) | private void addAccounts() {
    method addTransactions (line 218) | private void addTransactions(final QifAccount qAcc, final Account acc) {
    method addCategories (line 246) | private void addCategories() {
    method findBestParent (line 269) | private Account findBestParent(final QifCategory cat, final Map<String...
    method findBestAccount (line 306) | private Account findBestAccount(final String category) {
    method isAccount (line 342) | private static boolean isAccount(final String category) {
    method reduceCategories (line 349) | private void reduceCategories() {
    method generateAccount (line 368) | private Account generateAccount(final QifCategory cat) {
    method generateAccount (line 394) | private Account generateAccount(final QifAccount acc) {
    method generateTransaction (line 437) | private Transaction generateTransaction(final QifTransaction qTran, fi...
    method generateSplitTransaction (line 508) | private TransactionEntry generateSplitTransaction(final QifSplitTransa...
    method removeMirrorTransaction (line 571) | private void removeMirrorTransaction(final QifTransaction qTran, final...
    method removeMirrorSplitTransaction (line 593) | private void removeMirrorSplitTransaction(final QifSplitTransaction qT...

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifParser.java
  class QifParser (line 55) | public final class QifParser {
    method QifParser (line 69) | QifParser(final DateFormat dateFormat) {
    method getBank (line 73) | public QifAccount getBank() {
    method startsWith (line 85) | private static boolean startsWith(final String source, final String pr...
    method setDateFormat (line 89) | private void setDateFormat(@NotNull final DateFormat dateFormat) {
    method parseFullFile (line 94) | void parseFullFile(final File file) throws IOException {
    method parsePartialFile (line 98) | boolean parsePartialFile(final File file) {
    method parseFullFile (line 102) | private void parseFullFile(final String fileName) throws IOException {
    method parsePartialFile (line 162) | private boolean parsePartialFile(final String fileName) {
    method parseAccount (line 191) | private void parseAccount(final QifReader in) throws IOException {
    method searchForDuplicate (line 303) | private QifAccount searchForDuplicate(final QifAccount acc) {
    method parseAccountTransactions (line 339) | private static boolean parseAccountTransactions(final QifReader in, fi...
    method parseInvestmentAccountTransactions (line 410) | private boolean parseInvestmentAccountTransactions(final QifReader in,...
    method parseSplitTransaction (line 492) | private static QifSplitTransaction parseSplitTransaction(final QifRead...
    method parseMemorizedTransactions (line 551) | private static void parseMemorizedTransactions(final QifReader in) thr...
    method parseCategoryList (line 578) | private void parseCategoryList(final QifReader in) throws IOException {
    method parseClassList (line 618) | private void parseClassList(final QifReader in) throws IOException {
    method parseSecurity (line 650) | private void parseSecurity(final QifReader in) throws IOException {
    method parsePrice (line 689) | private void parsePrice(final QifReader in) throws IOException {
    method dumpStats (line 707) | void dumpStats() {
    class QifSecurity (line 730) | static class QifSecurity {
    class QifClassItem (line 742) | static class QifClassItem {

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifReader.java
  class QifReader (line 30) | class QifReader extends LineNumberReader {
    method QifReader (line 34) | QifReader(Reader in) {
    method mark (line 38) | void mark() throws IOException {
    method reset (line 42) | @Override
    method peekLine (line 56) | String peekLine() throws IOException {
    method readLine (line 78) | @Override

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifSplitTransaction.java
  class QifSplitTransaction (line 27) | class QifSplitTransaction {
    method QifSplitTransaction (line 37) | public QifSplitTransaction() {
    method toString (line 41) | @Override

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifTransaction.java
  class QifTransaction (line 35) | public class QifTransaction extends ImportTransaction {
    method addSplit (line 55) | void addSplit(QifSplitTransaction split) {
    method hasSplits (line 59) | boolean hasSplits() {
    method toString (line 63) | @Override
    method determineDateFormat (line 77) | static DateFormat determineDateFormat(final Collection<QifTransaction>...
    method parseDate (line 126) | static LocalDate parseDate(final String sDate, final DateFormat format...

FILE: jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifUtils.java
  class QifUtils (line 41) | public class QifUtils {
    method QifUtils (line 47) | private QifUtils() {
    method parseMoney (line 50) | static BigDecimal parseMoney(final String money) {
    method isFullFile (line 106) | public static boolean isFullFile(final File file) {
    method startsWith (line 173) | private static boolean startsWith(final String source, final String pr...
    method stripCategoryTags (line 184) | static String stripCategoryTags(final String category) {

FILE: jgnash-convert/src/main/resources/jgnash/convert/scripts/tidy.js
  function acceptTransaction (line 26) | function acceptTransaction(transaction) {
  function processMemo (line 30) | function processMemo(memo) {
  function processPayee (line 34) | function processPayee(payee) {
  function getDescription (line 38) | function getDescription(locale) {
  function capitalizeFirstLetter (line 50) | function capitalizeFirstLetter(str) {
  function titleCase (line 54) | function titleCase(str) {

FILE: jgnash-core/src/main/java/jgnash/engine/AbstractInvestmentTransactionEntry.java
  class AbstractInvestmentTransactionEntry (line 33) | @Entity
    method AbstractInvestmentTransactionEntry (line 57) | protected AbstractInvestmentTransactionEntry() {
    method getTotal (line 70) | public BigDecimal getTotal() {
    method getSecurityNode (line 74) | public SecurityNode getSecurityNode() {
    method setSecurityNode (line 78) | void setSecurityNode(final SecurityNode securityNode) {
    method getPrice (line 82) | public BigDecimal getPrice() {
    method setPrice (line 86) | void setPrice(final BigDecimal price) {
    method setQuantity (line 97) | void setQuantity(final BigDecimal quantity) {
    method getQuantity (line 107) | public BigDecimal getQuantity() {
    method getSignedQuantity (line 117) | public abstract BigDecimal getSignedQuantity();
    method getTransactionType (line 124) | @NotNull public abstract TransactionType getTransactionType();
    method toString (line 126) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/Account.java
  class Account (line 68) | @Entity
    method Account (line 227) | public Account() {
    method Account (line 237) | public Account(@NotNull final AccountType type, @NotNull final Currenc...
    method getAccountSeparator (line 247) | private static String getAccountSeparator() {
    method setAccountSeparator (line 251) | static void setAccountSeparator(final String separator) {
    method getTransactionLock (line 255) | ReadWriteLock getTransactionLock() {
    method getProxy (line 259) | private AccountProxy getProxy() {
    method clearCachedBalances (line 269) | void clearCachedBalances() {
    method addTransaction (line 281) | boolean addTransaction(final Transaction tran) {
    method removeTransaction (line 323) | boolean removeTransaction(final Transaction tran) {
    method contains (line 352) | public boolean contains(final Transaction tran) {
    method contains (line 368) | public boolean contains(final Account account) {
    method getSortedTransactionList (line 383) | @NotNull
    method getTransactionAt (line 401) | @NotNull
    method getTransactionCount (line 417) | public int getTransactionCount() {
    method getNextTransactionNumber (line 433) | @NotNull
    method addChild (line 466) | boolean addChild(final Account child) {
    method removeChild (line 494) | boolean removeChild(final Account child) {
    method getChildren (line 516) | public List<Account> getChildren() {
    method getChildren (line 532) | public List<Account> getChildren(final Comparator<? super Account> com...
    method indexOf (line 546) | public int indexOf(final Transaction tran) {
    method getChildCount (line 561) | public int getChildCount() {
    method getParent (line 576) | public Account getParent() {
    method setParent (line 592) | public boolean setParent(final Account account) {
    method isParent (line 614) | public boolean isParent() {
    method getBalance (line 631) | public BigDecimal getBalance() {
    method getBalance (line 652) | private BigDecimal getBalance(final CurrencyNode node) {
    method getBalanceAt (line 669) | private BigDecimal getBalanceAt(final int index) {
    method getBalanceAt (line 686) | public BigDecimal getBalanceAt(final Transaction transaction) {
    method getReconciledBalance (line 709) | public BigDecimal getReconciledBalance() {
    method getReconciledBalance (line 723) | private BigDecimal getReconciledBalance(final CurrencyNode node) {
    method adjustForExchangeRate (line 727) | private BigDecimal adjustForExchangeRate(final BigDecimal amount, fina...
    method getFirstUnreconciledTransactionDate (line 741) | public LocalDate getFirstUnreconciledTransactionDate() {
    method getOpeningBalanceForReconcile (line 770) | public BigDecimal getOpeningBalanceForReconcile() {
    method getTreeBalance (line 780) | public BigDecimal getTreeBalance() {
    method getTreeBalance (line 807) | public BigDecimal getTreeBalance(final LocalDate endDate, final Curren...
    method getTreeBalance (line 834) | private BigDecimal getTreeBalance(final CurrencyNode node) {
    method getReconciledTreeBalance (line 860) | private BigDecimal getReconciledTreeBalance(final CurrencyNode node) {
    method getReconciledTreeBalance (line 883) | public BigDecimal getReconciledTreeBalance() {
    method getBalance (line 908) | public BigDecimal getBalance(final LocalDate start, final LocalDate en...
    method getBalance (line 930) | public BigDecimal getBalance(final LocalDate startDate, final LocalDat...
    method getAncestors (line 946) | public List<Account> getAncestors() {
    method getTreeBalance (line 969) | public BigDecimal getTreeBalance(final LocalDate start, final LocalDat...
    method getBalance (line 995) | public BigDecimal getBalance(final LocalDate localDate) {
    method getBalance (line 1013) | public BigDecimal getBalance(final LocalDate date, final CurrencyNode ...
    method getTransactions (line 1031) | public List<Transaction> getTransactions(final LocalDate startDate, fi...
    method getCurrencyNode (line 1050) | public CurrencyNode getCurrencyNode() {
    method setCurrencyNode (line 1061) | void setCurrencyNode(@NotNull final CurrencyNode node) {
    method isLocked (line 1071) | public boolean isLocked() {
    method setLocked (line 1075) | public void setLocked(final boolean locked) {
    method isPlaceHolder (line 1079) | public boolean isPlaceHolder() {
    method setPlaceHolder (line 1083) | public void setPlaceHolder(final boolean placeHolder) {
    method getDescription (line 1087) | public String getDescription() {
    method setDescription (line 1091) | public void setDescription(final String desc) {
    method getName (line 1095) | public synchronized String getName() {
    method setName (line 1099) | public synchronized void setName(final String newName) {
    method getPathName (line 1105) | public synchronized String getPathName() {
    method getAccountType (line 1115) | public AccountType getAccountType() {
    method setAccountType (line 1126) | void setAccountType(final AccountType type) {
    method isVisible (line 1143) | public boolean isVisible() {
    method setVisible (line 1152) | public void setVisible(final boolean visible) {
    method getNotes (line 1161) | public String getNotes() {
    method setNotes (line 1170) | public void setNotes(final String notes) {
    method compareTo (line 1183) | @Override
    method toString (line 1196) | @Override
    method equals (line 1201) | @Override
    method getAccountCode (line 1211) | public int getAccountCode() {
    method setAccountCode (line 1215) | public void setAccountCode(final int accountCode) {
    method getAccountNumber (line 1224) | public String getAccountNumber() {
    method setAccountNumber (line 1228) | public void setAccountNumber(final String account) {
    method addSecurity (line 1239) | boolean addSecurity(final SecurityNode node) {
    method removeSecurity (line 1258) | boolean removeSecurity(final SecurityNode node) {
    method containsSecurity (line 1275) | public boolean containsSecurity(final SecurityNode node) {
    method getMarketValue (line 1290) | public BigDecimal getMarketValue() {
    method getSecurities (line 1299) | public Set<SecurityNode> getSecurities() {
    method getUsedSecurities (line 1314) | public Set<SecurityNode> getUsedSecurities() {
    method getCashBalance (line 1332) | public BigDecimal getCashBalance() {
    method getDepth (line 1348) | public int getDepth() {
    method instanceOf (line 1367) | public final boolean instanceOf(final AccountType type) {
    method memberOf (line 1377) | public final boolean memberOf(final AccountGroup group) {
    method getBankId (line 1381) | public String getBankId() {
    method setBankId (line 1385) | public void setBankId(final String bankId) {
    method isExcludedFromBudget (line 1389) | public boolean isExcludedFromBudget() {
    method setExcludedFromBudget (line 1393) | public void setExcludedFromBudget(boolean excludeFromBudget) {
    method getAmortizeObject (line 1402) | @Nullable
    method setAmortizeObject (line 1407) | void setAmortizeObject(final AmortizeObject amortizeObject) {
    method setAttribute (line 1417) | void setAttribute(@NotNull final String key, @Nullable final String va...
    method getAttribute (line 1442) | @Nullable
    method getCachedSortedTransactionList (line 1464) | private List<Transaction> getCachedSortedTransactionList() {
    method readResolve (line 1480) | protected Object readResolve() {
    method postLoad (line 1485) | @PostLoad
    method clone (line 1502) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/AccountGroup.java
  type AccountGroup (line 27) | public enum AccountGroup {
    method AccountGroup (line 40) | AccountGroup(final String description) {
    method toString (line 44) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/AccountProxy.java
  class AccountProxy (line 33) | class AccountProxy {
    method AccountProxy (line 37) | AccountProxy(final Account account) {
    method getBalance (line 46) | public BigDecimal getBalance() {
    method getBalanceAt (line 69) | public BigDecimal getBalanceAt(final int index) {
    method getBalance (line 94) | public BigDecimal getBalance(final LocalDate start, final LocalDate en...
    method getBalance (line 121) | public BigDecimal getBalance(final LocalDate date) {
    method getCashBalance (line 143) | public BigDecimal getCashBalance() {
    method getMarketValue (line 152) | public BigDecimal getMarketValue() {
    method getReconciledBalance (line 161) | public BigDecimal getReconciledBalance() {
    method getOpeningBalanceForReconcile (line 186) | public BigDecimal getOpeningBalanceForReconcile() {

FILE: jgnash-core/src/main/java/jgnash/engine/AccountTreeXMLFactory.java
  class AccountTreeXMLFactory (line 66) | public class AccountTreeXMLFactory {
    method AccountTreeXMLFactory (line 71) | private AccountTreeXMLFactory() {
    method getStream (line 74) | private static XStream getStream() {
    method exportAccountTree (line 141) | public static void exportAccountTree(final Engine engine, final Path f...
    method loadAccountTree (line 160) | private static RootAccount loadAccountTree(final Reader reader) {
    method loadAccountTree (line 184) | public static RootAccount loadAccountTree(final Path file) {
    method loadAccountTree (line 202) | private static RootAccount loadAccountTree(final InputStream stream) {
    method importAccountTree (line 219) | public static void importAccountTree(final Engine engine, final RootAc...
    method mergeAccountTree (line 231) | public static void mergeAccountTree(final Engine engine, final RootAcc...
    method getLocalizedAccountSet (line 236) | public static Collection<RootAccount> getLocalizedAccountSet() {
    method getAccountSetList (line 252) | private static List<String> getAccountSetList() {
    class AccountImport (line 274) | private static class AccountImport {
      method importAccountTree (line 279) | private void importAccountTree(final Engine engine, final RootAccoun...
      method mergeAccountTree (line 287) | private void mergeAccountTree(final Engine engine, final RootAccount...
      method fixCurrencies (line 301) | private static void fixCurrencies(final Engine engine, final Account...
      method forceCurrency (line 355) | private static void forceCurrency(final Engine engine, final Account...
      method importChildren (line 392) | private void importChildren(final Engine engine, final Account accou...

FILE: jgnash-core/src/main/java/jgnash/engine/AccountType.java
  type AccountType (line 34) | public enum AccountType {
    method AccountType (line 59) | AccountType(final String description, final AccountGroup accountGroup,...
    method getAccountTypes (line 72) | public static Set<AccountType> getAccountTypes(final AccountGroup grou...
    method toString (line 80) | @Override
    method getAccountGroup (line 85) | public AccountGroup getAccountGroup() {
    method isMutable (line 89) | public boolean isMutable() {
    method getAccountTypeSet (line 93) | private static Set<AccountType> getAccountTypeSet() {
    method getProxy (line 100) | AccountProxy getProxy(final Account account) {

FILE: jgnash-core/src/main/java/jgnash/engine/AccountUtils.java
  class AccountUtils (line 25) | class AccountUtils {
    method searchTree (line 36) | static Account searchTree(final Account root, final String name, final...
    method AccountUtils (line 53) | private AccountUtils() {

FILE: jgnash-core/src/main/java/jgnash/engine/AmortizeObject.java
  class AmortizeObject (line 45) | @Entity
    method AmortizeObject (line 130) | public AmortizeObject() {
    method setDate (line 133) | public void setDate(final LocalDate localDate) {
    method getDate (line 137) | public LocalDate getDate() {
    method setPaymentPeriods (line 141) | public void setPaymentPeriods(final int periods) {
    method getPaymentPeriods (line 145) | public int getPaymentPeriods() {
    method setLength (line 154) | public void setLength(final int months) {
    method getLength (line 163) | public int getLength() {
    method setUseDailyRate (line 173) | public void setUseDailyRate(final boolean daily) {
    method getUseDailyRate (line 182) | public boolean getUseDailyRate() {
    method setDaysPerYear (line 192) | public void setDaysPerYear(final BigDecimal days) {
    method getDaysPerYear (line 202) | public BigDecimal getDaysPerYear() {
    method setRate (line 206) | public void setRate(final BigDecimal rate) {
    method getRate (line 210) | public BigDecimal getRate() {
    method setPrincipal (line 214) | public void setPrincipal(final BigDecimal principal) {
    method getPrincipal (line 218) | public BigDecimal getPrincipal() {
    method setInterestPeriods (line 222) | public void setInterestPeriods(final int periods) {
    method getInterestPeriods (line 226) | public int getInterestPeriods() {
    method setFees (line 230) | public void setFees(final BigDecimal fees) {
    method getFees (line 234) | public BigDecimal getFees() {
    method setInterestAccount (line 243) | public void setInterestAccount(final Account id) {
    method getInterestAccount (line 252) | public Account getInterestAccount() {
    method setBankAccount (line 261) | public void setBankAccount(final Account id) {
    method getBankAccount (line 270) | public Account getBankAccount() {
    method setFeesAccount (line 279) | public void setFeesAccount(final Account id) {
    method getFeesAccount (line 288) | public Account getFeesAccount() {
    method setPayee (line 292) | public void setPayee(final String payee) {
    method getPayee (line 296) | public String getPayee() {
    method setMemo (line 300) | public void setMemo(String memo) {
    method getMemo (line 304) | public String getMemo() {
    method getEffectiveInterestRate (line 315) | private double getEffectiveInterestRate() {
    method getDailyPeriodicInterestRate (line 329) | private double getDailyPeriodicInterestRate() {
    method getPIPayment (line 359) | private double getPIPayment() {
    method getPayment (line 382) | private double getPayment() {
    method getIPayment (line 393) | private double getIPayment(final BigDecimal balance) {
    method getIPayment (line 410) | private double getIPayment(final BigDecimal balance, final LocalDate s...
    method generateTransaction (line 435) | @Nullable

FILE: jgnash-core/src/main/java/jgnash/engine/AttachmentUtils.java
  class AttachmentUtils (line 36) | public class AttachmentUtils {
    method AttachmentUtils (line 43) | private AttachmentUtils() {
    method createAttachmentDirectory (line 53) | public static boolean createAttachmentDirectory(final Path baseFile) {
    method getAttachmentDirectory (line 78) | public static Path getAttachmentDirectory(@NotNull final Path baseFile) {
    method getAttachmentPath (line 88) | public static Path getAttachmentPath() {

FILE: jgnash-core/src/main/java/jgnash/engine/CashFlow.java
  class CashFlow (line 38) | public class CashFlow {
    class CashFlowItem (line 46) | private static class CashFlowItem {
      method CashFlowItem (line 50) | CashFlowItem(final LocalDate date, final BigDecimal amount) {
      method toString (line 55) | @Override
    method add (line 69) | public void add(final LocalDate date, final BigDecimal amount) {
    method internalRateOfReturn (line 79) | public double internalRateOfReturn() {
    method netPresentValue (line 131) | private double netPresentValue(final LocalDate referenceDate, final do...

FILE: jgnash-core/src/main/java/jgnash/engine/CommodityNode.java
  class CommodityNode (line 30) | @Entity
    method setScale (line 43) | public void setScale(final byte scale) {
    method getScale (line 47) | public byte getScale() {
    method setSymbol (line 51) | public void setSymbol(final String symbol) {
    method getSymbol (line 55) | public String getSymbol() {
    method setDescription (line 59) | public void setDescription(final String description) {
    method getDescription (line 63) | public String getDescription() {
    method setPrefix (line 67) | public void setPrefix(final String prefix) {
    method getPrefix (line 71) | public String getPrefix() {
    method setSuffix (line 75) | public void setSuffix(final String suffix) {
    method getSuffix (line 79) | public String getSuffix() {
    method toString (line 83) | @Override
    method compareTo (line 91) | @Override
    method equals (line 96) | @Override
    method matches (line 109) | public boolean matches(final CommodityNode other) {
    method round (line 124) | public BigDecimal round(final double value) {

FILE: jgnash-core/src/main/java/jgnash/engine/Comparators.java
  class Comparators (line 30) | public class Comparators {
    method getAccountByCode (line 32) | public static Comparator<Account> getAccountByCode() {
    method getAccountByName (line 36) | public static Comparator<Account> getAccountByName() {
    method getAccountByPathName (line 40) | public static Comparator<Account> getAccountByPathName() {
    method getAccountByBalance (line 44) | public static Comparator<Account> getAccountByBalance(LocalDate startD...
    method getAccountByTreePosition (line 55) | public static Comparator<Account> getAccountByTreePosition(Comparator<...
    class AccountByCode (line 59) | private static class AccountByCode implements Comparator<Account>, Ser...
      method compare (line 61) | @Override
    class AccountByName (line 74) | private static class AccountByName implements Comparator<Account>, Ser...
      method compare (line 76) | @Override
    class AccountByPathName (line 82) | private static class AccountByPathName implements Comparator<Account>,...
      method compare (line 84) | @Override
    class AccountByBalance (line 90) | private static class AccountByBalance implements Comparator<Account>, ...
      method AccountByBalance (line 100) | AccountByBalance(final LocalDate startDate, final LocalDate endDate,...
      method compare (line 107) | @Override
    class AccountByTreePosition (line 118) | private static class AccountByTreePosition implements Comparator<Accou...
      method AccountByTreePosition (line 122) | AccountByTreePosition(final Comparator<Account> subComparator) {
      method accountPath (line 126) | private static Deque<Account> accountPath(Account acc) {
      method compare (line 136) | @Override
    class ExplicitComparator (line 166) | public static class ExplicitComparator<T> implements Comparator<T>, Se...
      method ExplicitComparator (line 170) | @SafeVarargs
      method compare (line 175) | @Override
    method Comparators (line 181) | private Comparators() {

FILE: jgnash-core/src/main/java/jgnash/engine/Config.java
  class Config (line 45) | @Entity
    method Config (line 87) | public Config() {
    method initialize (line 91) | void initialize() {
    method getFileFormat (line 95) | public String getFileFormat() {
    method getMajorFileFormatVersion (line 99) | int getMajorFileFormatVersion() {
    method getMinorFileFormatVersion (line 103) | int getMinorFileFormatVersion() {
    method updateFileVersion (line 107) | void updateFileVersion() {
    method setDefaultCurrency (line 111) | void setDefaultCurrency(final CurrencyNode defaultCurrency) {
    method getDefaultCurrency (line 115) | CurrencyNode getDefaultCurrency() {
    method setAccountSeparator (line 119) | void setAccountSeparator(final String accountSeparator) {
    method getAccountSeparator (line 124) | String getAccountSeparator() {
    method setTransactionNumberList (line 128) | void setTransactionNumberList(final List<String> transactionNumberItem...
    method getTransactionNumberList (line 135) | List<String> getTransactionNumberList() {
    method setPreference (line 145) | void setPreference(@NotNull final String key, @Nullable final String v...
    method getPreference (line 164) | @Nullable
    method createBackups (line 179) | boolean createBackups() {
    method setCreateBackups (line 185) | void setCreateBackups(final boolean createBackups) {
    method getRetainedBackupLimit (line 189) | int getRetainedBackupLimit() {
    method setRetainedBackupLimit (line 199) | void setRetainedBackupLimit(final int retainedBackupLimit) {
    method removeOldBackups (line 203) | boolean removeOldBackups() {
    method setRemoveOldBackups (line 209) | void setRemoveOldBackups(final boolean removeOldBackups) {
    method setLastSecuritiesUpdateTimestamp (line 213) | void setLastSecuritiesUpdateTimestamp(@NotNull final LocalDateTime loc...
    method getLastSecuritiesUpdateTimestamp (line 217) | @NotNull
    method readResolve (line 233) | protected Object readResolve() {
    method postLoad (line 238) | @PostLoad

FILE: jgnash-core/src/main/java/jgnash/engine/CurrencyNode.java
  class CurrencyNode (line 30) | @Entity
    method CurrencyNode (line 35) | public CurrencyNode() {
    method getExchangeRateDAO (line 43) | synchronized private ExchangeRateDAO getExchangeRateDAO() {
    method setExchangeRateDAO (line 52) | synchronized void setExchangeRateDAO(final ExchangeRateDAO exchangeRat...
    method getExchangeRate (line 62) | synchronized public BigDecimal getExchangeRate(final CurrencyNode exch...

FILE: jgnash-core/src/main/java/jgnash/engine/DataStore.java
  type DataStore (line 34) | public interface DataStore {
    method closeEngine (line 39) | void closeEngine();
    method getClientEngine (line 50) | Engine getClientEngine(final String host, final int port, final char[]...
    method getLocalEngine (line 60) | Engine getLocalEngine(final String fileName, final String engineName, ...
    method getFileExt (line 67) | @NotNull
    method getFileName (line 75) | String getFileName();
    method getType (line 82) | DataStoreType getType();
    method isLocal (line 89) | boolean isLocal();
    method saveAs (line 99) | void saveAs(Path path, Collection<StoredObject> objects, DoubleConsume...
    method rename (line 108) | default void rename(final String fileName, final String newFileName) t...

FILE: jgnash-core/src/main/java/jgnash/engine/DataStoreType.java
  type DataStoreType (line 36) | public enum DataStoreType {
    method DataStoreType (line 67) | DataStoreType(final String description, final boolean supportsRemote, ...
    method getDataStore (line 73) | public DataStore getDataStore() {
    method toString (line 84) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/DefaultCurrencies.java
  class DefaultCurrencies (line 42) | public class DefaultCurrencies {
    method DefaultCurrencies (line 47) | private DefaultCurrencies() {
    method generateCurrencies (line 55) | public static Set<CurrencyNode> generateCurrencies() {
    method buildCustomNode (line 85) | public static CurrencyNode buildCustomNode(final String ISOCode) {
    method buildNode (line 107) | public static CurrencyNode buildNode(final Locale locale) {
    method getDefault (line 131) | public static CurrencyNode getDefault() {

FILE: jgnash-core/src/main/java/jgnash/engine/Engine.java
  class Engine (line 94) | public class Engine {
    method Engine (line 182) | public Engine(final EngineDAO eDAO, final LockManager lockManager, fin...
    method isFileDirty (line 229) | boolean isFileDirty() {
    method addLogHandler (line 241) | public static void addLogHandler(final Handler handler) {
    method getMarketPrice (line 257) | public static BigDecimal getMarketPrice(final Collection<Transaction> ...
    method buildExchangeRateId (line 304) | static String buildExchangeRateId(final CurrencyNode baseCurrency, fin...
    method getLogger (line 320) | public static Logger getLogger() {
    method logInfo (line 329) | private static void logInfo(final String message) {
    method logWarning (line 338) | private static void logWarning(final String message) {
    method logSevere (line 347) | private static void logSevere(final String message) {
    method shutDownAndWait (line 351) | private static void shutDownAndWait(final ExecutorService executorServ...
    method startExchangeRateUpdate (line 375) | public void startExchangeRateUpdate(final int delay) {
    method startSecuritiesUpdate (line 385) | public void startSecuritiesUpdate(final int delay) {
    method initialize (line 405) | private void initialize() {
    method checkAndCorrect (line 461) | private void checkAndCorrect() {
    method clearObsoleteExchangeRates (line 506) | private void clearObsoleteExchangeRates() {
    method removeExchangeRate (line 512) | private void removeExchangeRate(final ExchangeRate rate) {
    method stopBackgroundServices (line 525) | void stopBackgroundServices() {
    method shutdown (line 533) | void shutdown() {
    method getName (line 537) | public String getName() {
    method getAccountDAO (line 541) | private AccountDAO getAccountDAO() {
    method getBudgetDAO (line 545) | private BudgetDAO getBudgetDAO() {
    method getCommodityDAO (line 549) | private CommodityDAO getCommodityDAO() {
    method getConfigDAO (line 553) | private ConfigDAO getConfigDAO() {
    method getReminderDAO (line 557) | private RecurringDAO getReminderDAO() {
    method getTransactionDAO (line 561) | private TransactionDAO getTransactionDAO() {
    method getTrashDAO (line 565) | private TrashDAO getTrashDAO() {
    method moveObjectToTrash (line 569) | private boolean moveObjectToTrash(final Object object) {
    method emptyTrash (line 593) | private void emptyTrash() {
    method createDefaultReminder (line 634) | public static Reminder createDefaultReminder(final Transaction transac...
    method addReminder (line 649) | public boolean addReminder(final Reminder reminder) {
    method removeReminder (line 672) | public boolean removeReminder(final Reminder reminder) {
    method getReminders (line 698) | public List<Reminder> getReminders() {
    method getReminderByUuid (line 702) | public Reminder getReminderByUuid(final UUID uuid) {
    method getPendingReminders (line 706) | public List<PendingReminder> getPendingReminders() {
    method getPendingReminder (line 736) | public static PendingReminder getPendingReminder(@NotNull Reminder rem...
    method processPendingReminders (line 747) | public void processPendingReminders(final Collection<PendingReminder> ...
    method getStoredObjectByUuid (line 766) | public <T extends StoredObject> T getStoredObjectByUuid(final Class<T>...
    method getStoredObjects (line 778) | public Collection<StoredObject> getStoredObjects() {
    method isCommodityNodeValid (line 802) | private boolean isCommodityNodeValid(final CommodityNode node) {
    method addCurrency (line 842) | public boolean addCurrency(final CurrencyNode node) {
    method attachCurrencyNode (line 884) | void attachCurrencyNode(final CurrencyNode currencyNode) {
    method addSecurity (line 896) | public boolean addSecurity(final SecurityNode node) {
    method addSecurityHistory (line 938) | public boolean addSecurityHistory(@NotNull final SecurityNode node, @N...
    method addSecurityHistoryEvent (line 982) | public boolean addSecurityHistoryEvent(@NotNull final SecurityNode nod...
    method getInvestmentAccountList (line 1022) | private Set<Account> getInvestmentAccountList(final SecurityNode node) {
    method clearCachedAccountBalance (line 1033) | private void clearCachedAccountBalance(final SecurityNode node) {
    method clearCachedAccountBalance (line 1042) | private void clearCachedAccountBalance(final Account account) {
    method getBaseCurrencies (line 1062) | private CurrencyNode[] getBaseCurrencies(final String exchangeRateId) {
    method getActiveCurrencies (line 1089) | public Set<CurrencyNode> getActiveCurrencies() {
    method getCurrency (line 1106) | public CurrencyNode getCurrency(final String symbol) {
    method getCurrencies (line 1124) | public List<CurrencyNode> getCurrencies() {
    method getCurrencyNodeByUuid (line 1134) | public CurrencyNode getCurrencyNodeByUuid(final UUID uuid) {
    method getExchangeRate (line 1138) | public ExchangeRate getExchangeRate(final CurrencyNode baseCurrency, f...
    method getExchangeRateByUuid (line 1148) | public ExchangeRate getExchangeRateByUuid(final UUID uuid) {
    method getSecurities (line 1152) | @NotNull
    method getSecurity (line 1169) | public SecurityNode getSecurity(final String symbol) {
    method getSecurityNodeByUuid (line 1189) | public SecurityNode getSecurityNodeByUuid(final UUID uuid) {
    method isCommodityNodeUsed (line 1193) | private boolean isCommodityNodeUsed(final CommodityNode node) {
    method removeCommodity (line 1228) | public boolean removeCommodity(final CurrencyNode node) {
    method removeSecurity (line 1257) | public boolean removeSecurity(final SecurityNode node) {
    method removeSecurityHistory (line 1301) | public boolean removeSecurityHistory(@NotNull final SecurityNode node,...
    method removeSecurityHistoryEvent (line 1345) | public boolean removeSecurityHistoryEvent(@NotNull final SecurityNode ...
    method getConfig (line 1376) | private Config getConfig() {
    method getDefaultCurrency (line 1391) | public CurrencyNode getDefaultCurrency() {
    method setDefaultCurrency (line 1408) | public void setDefaultCurrency(final CurrencyNode defaultCurrency) {
    method setExchangeRate (line 1442) | public void setExchangeRate(final CurrencyNode baseCurrency, final Cur...
    method setExchangeRate (line 1447) | public void setExchangeRate(final CurrencyNode baseCurrency, final Cur...
    method removeExchangeRateHistory (line 1506) | public void removeExchangeRateHistory(final ExchangeRate exchangeRate,...
    method updateCommodity (line 1542) | public boolean updateCommodity(final CommodityNode oldNode, final Comm...
    method updateReminder (line 1605) | private boolean updateReminder(final Reminder reminder) {
    method getAccountSeparator (line 1623) | public String getAccountSeparator() {
    method setAccountSeparator (line 1638) | public void setAccountSeparator(final String separator) {
    method getAccountList (line 1664) | public List<Account> getAccountList() {
    method getAccountByUuid (line 1671) | public Account getAccountByUuid(final UUID id) {
    method getAccountByName (line 1681) | public Account getAccountByName(@NotNull final String accountName) {
    method getIncomeAccountList (line 1702) | @NotNull
    method getExpenseAccountList (line 1712) | @NotNull
    method getInvestmentAccountList (line 1722) | public List<Account> getInvestmentAccountList() {
    method refresh (line 1727) | public void refresh(final StoredObject object) {
    method addAccount (line 1738) | public boolean addAccount(final Account parent, final Account child) {
    method getRootAccount (line 1782) | public RootAccount getRootAccount() {
    method moveAccount (line 1803) | public boolean moveAccount(final Account account, final Account newPar...
    method setAccountCode (line 1861) | public boolean setAccountCode(final Account account, final int code) {
    method modifyAccount (line 1888) | public boolean modifyAccount(final Account template, final Account acc...
    method purgeBudgetGoal (line 1955) | private void purgeBudgetGoal(@NotNull final Account account) {
    method setAccountNumber (line 1971) | public void setAccountNumber(final Account account, final String numbe...
    method setAccountAttribute (line 1996) | public void setAccountAttribute(final Account account, @NotNull final ...
    method getAccountAttribute (line 2032) | public static String getAccountAttribute(@NotNull final Account accoun...
    method removeAccount (line 2042) | public boolean removeAccount(final Account account) {
    method getAttachment (line 2086) | public Future<Path> getAttachment(final String attachment) {
    method addAttachment (line 2090) | public boolean addAttachment(final Path path, final boolean copy) {
    method removeAttachment (line 2102) | public boolean removeAttachment(final String attachment) {
    method setAmortizeObject (line 2113) | public boolean setAmortizeObject(final Account account, final Amortize...
    method toggleAccountVisibility (line 2139) | public void toggleAccountVisibility(final Account account) {
    method addAccountSecurity (line 2168) | public boolean addAccountSecurity(final Account account, final Securit...
    method removeAccountSecurity (line 2205) | private boolean removeAccountSecurity(final Account account, final Sec...
    method updateAccountSecurities (line 2243) | public boolean updateAccountSecurities(final Account acc, final Collec...
    method addBudget (line 2280) | public boolean addBudget(final Budget budget) {
    method removeBudget (line 2307) | public boolean removeBudget(final Budget budget) {
    method updateBudgetGoals (line 2331) | public void updateBudgetGoals(final Budget budget, final Account accou...
    method updateBudgetGoals (line 2347) | private void updateBudgetGoals(final Budget budget, final Account acco...
    method updateBudget (line 2372) | public boolean updateBudget(final Budget budget) {
    method getBudgetList (line 2401) | public List<Budget> getBudgetList() {
    method getBudgetByUuid (line 2412) | public Budget getBudgetByUuid(final UUID uuid) {
    method isTransactionValid (line 2416) | public boolean isTransactionValid(final Transaction transaction) {
    method isStored (line 2499) | public boolean isStored(final StoredObject object) {
    method addTransaction (line 2503) | public boolean addTransaction(final Transaction transaction) {
    method removeTransaction (line 2548) | public boolean removeTransaction(final Transaction transaction) {
    method setTransactionReconciled (line 2589) | public void setTransactionReconciled(final Transaction transaction, fi...
    method getTransactionNumberList (line 2607) | public List<String> getTransactionNumberList() {
    method setTransactionNumberList (line 2617) | public void setTransactionNumberList(final List<String> list) {
    method getTransactions (line 2640) | public List<Transaction> getTransactions() {
    method getTransactionsWithAttachments (line 2649) | public List<Transaction> getTransactionsWithAttachments() {
    method getTransactionByUuid (line 2653) | public Transaction getTransactionByUuid(final UUID uuid) {
    method postTransactionAdd (line 2657) | private void postTransactionAdd(final Transaction transaction, final b...
    method postTransactionRemove (line 2674) | private void postTransactionRemove(final Transaction transaction, fina...
    method addTag (line 2697) | public boolean addTag(@NotNull Tag tag) {
    method updateTag (line 2722) | public boolean updateTag(@NotNull Tag tag) {
    method getTags (line 2746) | @NotNull
    method getTagsInUse (line 2762) | @NotNull
    method removeTag (line 2784) | public boolean removeTag(@NotNull Tag tag) {
    method getUuid (line 2812) | public String getUuid() {
    method setPreference (line 2816) | public void setPreference(@NotNull final String key, @Nullable final S...
    method getPreference (line 2833) | @Nullable
    method getBoolean (line 2844) | public boolean getBoolean(@NotNull final String key, final boolean def...
    method putBoolean (line 2856) | public void putBoolean(@NotNull final String key, final boolean value) {
    method createBackups (line 2860) | public boolean createBackups() {
    method setCreateBackups (line 2864) | public void setCreateBackups(final boolean createBackups) {
    method getRetainedBackupLimit (line 2883) | public int getRetainedBackupLimit() {
    method setRetainedBackupLimit (line 2887) | public void setRetainedBackupLimit(final int retainedBackupLimit) {
    method removeOldBackups (line 2906) | public boolean removeOldBackups() {
    method setRemoveOldBackups (line 2910) | public void setRemoveOldBackups(final boolean removeOldBackups) {
    method removeSecurityHistoryByDayOfWeek (line 2936) | public void removeSecurityHistoryByDayOfWeek(final SecurityNode securi...
    class SecuritiesUpdateRunnable (line 2964) | private class SecuritiesUpdateRunnable extends Thread {
      method SecuritiesUpdateRunnable (line 2969) | SecuritiesUpdateRunnable(final List<BackgroundCallable> callables, f...
      method run (line 2974) | @Override
    class BackgroundCallable (line 3025) | private class BackgroundCallable implements Callable<Boolean> {
      method BackgroundCallable (line 3031) | BackgroundCallable(@NotNull final Callable<Boolean> callable) {
      method call (line 3035) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/EngineException.java
  class EngineException (line 23) | public class EngineException extends RuntimeException {
    method EngineException (line 25) | public EngineException(final String message) {

FILE: jgnash-core/src/main/java/jgnash/engine/EngineFactory.java
  class EngineFactory (line 62) | public class EngineFactory {
    method EngineFactory (line 94) | private EngineFactory() {
    method addLogHandler (line 103) | public static void addLogHandler(final Handler handler) {
    method doesDatabaseExist (line 107) | public static boolean doesDatabaseExist(final String database, final D...
    method deleteDatabase (line 115) | public static boolean deleteDatabase(final String database) {
    method getEngine (line 130) | @Nullable
    method exportCompressedXML (line 135) | private static void exportCompressedXML(final String engineName) {
    method exportCompressedXML (line 142) | public static void exportCompressedXML(final String fileName, final Co...
    method removeOldCompressedXML (line 169) | public static void removeOldCompressedXML(final String fileName, final...
    method closeEngine (line 193) | public static synchronized void closeEngine(final String engineName) {
    method bootLocalEngine (line 244) | public static synchronized Engine bootLocalEngine(final String fileNam...
    method bootLocalEngine (line 269) | public static synchronized Engine bootLocalEngine(final String fileNam...
    method bootClientEngine (line 302) | public static synchronized Engine bootClientEngine(final String host, ...
    method getDataStoreByType (line 357) | private static DataStoreType getDataStoreByType(final Path file) {
    method getDataStoreByType (line 378) | public static DataStoreType getDataStoreByType(final String fileName) {
    method getFileVersion (line 382) | public static float getFileVersion(final Path file, final char[] passw...
    method getDefaultDatabase (line 415) | public static synchronized String getDefaultDatabase() {
    method getLastDatabase (line 428) | public static synchronized String getLastDatabase() {
    method getActiveDatabase (line 434) | public static synchronized String getActiveDatabase() {
    method getLastHost (line 448) | public static synchronized String getLastHost() {
    method getLastPort (line 460) | public static synchronized int getLastPort() {
    method getLastRemote (line 471) | public static synchronized boolean getLastRemote() {
    method usedPassword (line 477) | public static synchronized boolean usedPassword() {
    method saveAs (line 490) | public static void saveAs(final String destination, final DoubleConsum...
    method saveAs (line 586) | public static void saveAs(final String fileName, final String newFileN...

FILE: jgnash-core/src/main/java/jgnash/engine/ExchangeRate.java
  class ExchangeRate (line 46) | @Entity
    method ExchangeRate (line 74) | @SuppressWarnings("unused")
    method ExchangeRate (line 78) | ExchangeRate(final String rateId) {
    method contains (line 82) | public boolean contains(final ExchangeRateHistoryNode node) {
    method contains (line 93) | public boolean contains(final LocalDate localDate) {
    method getHistory (line 113) | public List<ExchangeRateHistoryNode> getHistory() {
    method addHistoryNode (line 121) | boolean addHistoryNode(final ExchangeRateHistoryNode node) {
    method getHistory (line 141) | @Nullable
    method removeHistoryNode (line 161) | boolean removeHistoryNode(final ExchangeRateHistoryNode hNode) {
    method getRateId (line 178) | public String getRateId() {
    method getRate (line 182) | public BigDecimal getRate() {
    method getRate (line 211) | BigDecimal getRate(final LocalDate localDate) {
    method equals (line 230) | @Override
    method hashCode (line 235) | @Override
    method readResolve (line 245) | protected Object readResolve() {
    method postLoad (line 250) | @PostLoad

FILE: jgnash-core/src/main/java/jgnash/engine/ExchangeRateDAO.java
  class ExchangeRateDAO (line 28) | class ExchangeRateDAO {
    method ExchangeRateDAO (line 32) | ExchangeRateDAO(final CommodityDAO commodityDAO) {
    method getExchangeRateNode (line 36) | ExchangeRate getExchangeRateNode(final CurrencyNode baseCurrency, fina...

FILE: jgnash-core/src/main/java/jgnash/engine/ExchangeRateHistoryNode.java
  class ExchangeRateHistoryNode (line 39) | @Entity
    method ExchangeRateHistoryNode (line 57) | @SuppressWarnings("unused")
    method ExchangeRateHistoryNode (line 67) | ExchangeRateHistoryNode(final LocalDate localDate, final BigDecimal ra...
    method getLocalDate (line 75) | public LocalDate getLocalDate() {
    method compareTo (line 79) | @Override
    method equals (line 84) | @Override
    method hashCode (line 90) | @Override
    method getRate (line 95) | public BigDecimal getRate() {

FILE: jgnash-core/src/main/java/jgnash/engine/InvestmentAccountProxy.java
  class InvestmentAccountProxy (line 31) | class InvestmentAccountProxy extends AccountProxy {
    method InvestmentAccountProxy (line 33) | public InvestmentAccountProxy(final Account account) {
    method getBalance (line 37) | @Override
    method getBalance (line 47) | @Override
    method getBalance (line 52) | @Override
    method getCashBalance (line 64) | @Override
    method getCashBalanceAt (line 75) | private BigDecimal getCashBalanceAt(final int index) {
    method getCashBalance (line 88) | private BigDecimal getCashBalance(final LocalDate start, final LocalDa...
    method getCashBalance (line 98) | private BigDecimal getCashBalance(final LocalDate end) {
    method getMarketPrice (line 119) | private BigDecimal getMarketPrice(final SecurityNode node, final Local...
    method getMarketValue (line 134) | @Override
    method getMarketValue (line 177) | private BigDecimal getMarketValue(final LocalDate date) {
    method getMarketValue (line 201) | private BigDecimal getMarketValue(final LocalDate start, final LocalDa...
    method getMarketValueAt (line 238) | private BigDecimal getMarketValueAt(final int index) {
    method getReconciledMarketValue (line 268) | private BigDecimal getReconciledMarketValue() {
    method getReconciledBalance (line 302) | @Override
    method getOpeningBalanceForReconcile (line 312) | @Override
    method round (line 347) | private BigDecimal round(final BigDecimal value) {

FILE: jgnash-core/src/main/java/jgnash/engine/InvestmentPerformanceSummary.java
  class InvestmentPerformanceSummary (line 39) | public class InvestmentPerformanceSummary {
    method InvestmentPerformanceSummary (line 58) | public InvestmentPerformanceSummary(final Account account, final Local...
    method getTransactionDateRange (line 91) | public static Pair<LocalDate, LocalDate> getTransactionDateRange(final...
    method _collectSubAccountTransactions (line 104) | private static void _collectSubAccountTransactions(final Account accou...
    method collectSubAccountTransactions (line 114) | private void collectSubAccountTransactions(final Account account, fina...
    method collectSubAccountSecurities (line 124) | private void collectSubAccountSecurities(final Account account, final ...
    method getPerformanceData (line 134) | public SecurityPerformanceData getPerformanceData(final SecurityNode n...
    method getSecurities (line 138) | public List<SecurityNode> getSecurities() {
    method calculateCostBasis (line 148) | private void calculateCostBasis(final SecurityPerformanceData data, fi...
    method calculateRealizedGains (line 200) | private void calculateRealizedGains(final SecurityPerformanceData data...
    method calculateUnrealizedGains (line 245) | private static void calculateUnrealizedGains(final SecurityPerformance...
    method calculateTotalGains (line 251) | private static void calculateTotalGains(final SecurityPerformanceData ...
    method calculateShares (line 265) | private static void calculateShares(final SecurityPerformanceData data...
    method calculatePercentPortfolio (line 297) | private void calculatePercentPortfolio() {
    method calculateInternalRateOfReturn (line 319) | private void calculateInternalRateOfReturn(final SecurityPerformanceDa...
    method runCalculations (line 376) | public void runCalculations() {
    method getMarketPrice (line 405) | private BigDecimal getMarketPrice(final SecurityNode node, final Local...
    method toString (line 409) | @Override
    method setStartDate (line 441) | private void setStartDate(LocalDate startDate) {
    method getStartDate (line 445) | private LocalDate getStartDate() {
    method setEndDate (line 449) | private void setEndDate(LocalDate endDate) {
    method getEndDate (line 453) | private LocalDate getEndDate() {
    class SecurityPerformanceData (line 457) | public class SecurityPerformanceData {
      method SecurityPerformanceData (line 483) | SecurityPerformanceData(final SecurityNode node) {
      method getCostBasisPerShare (line 487) | public BigDecimal getCostBasisPerShare() {
      method getCostBasisShares (line 491) | public BigDecimal getCostBasisShares() {
      method getMarketValue (line 495) | public BigDecimal getMarketValue() {
      method getMarketValue (line 499) | public BigDecimal getMarketValue(final CurrencyNode currencyNode) {
      method getNode (line 503) | public SecurityNode getNode() {
      method getSharesHeld (line 507) | public BigDecimal getSharesHeld() {
      method getPrice (line 511) | public BigDecimal getPrice(final CurrencyNode currencyNode) {
      method getPrice (line 515) | public BigDecimal getPrice() {
      method getRealizedGains (line 519) | public BigDecimal getRealizedGains() {
      method getTotalCostBasis (line 523) | public BigDecimal getTotalCostBasis() {
      method getHeldCostBasis (line 527) | public BigDecimal getHeldCostBasis() {
      method getTotalGains (line 531) | public BigDecimal getTotalGains() {
      method getTotalGainsPercentage (line 535) | public BigDecimal getTotalGainsPercentage() {
      method getUnrealizedGains (line 539) | public BigDecimal getUnrealizedGains() {
      method getInternalRateOfReturn (line 543) | public double getInternalRateOfReturn() {
      method setCostBasisPerShare (line 547) | void setCostBasisPerShare(final BigDecimal costBasis) {
      method setCostBasisShares (line 551) | void setCostBasisShares(final BigDecimal costBasisShares) {
      method setNode (line 555) | private void setNode(final SecurityNode node) {
      method setSharesHeld (line 559) | void setSharesHeld(final BigDecimal sharesHeld) {
      method setPrice (line 563) | void setPrice(final BigDecimal price) {
      method setAvgSalePrice (line 567) | void setAvgSalePrice(final BigDecimal avgSalePrice) {
      method setUnrealizedGains (line 571) | void setUnrealizedGains(final BigDecimal unrealizedGains) {
      method setRealizedGains (line 575) | void setRealizedGains(final BigDecimal realizedGains) {
      method setTotalGains (line 579) | void setTotalGains(final BigDecimal totalGains) {
      method setTotalGainsPercentage (line 583) | void setTotalGainsPercentage(final BigDecimal totalGainsPercentage) {
      method getAvgSalePrice (line 587) | public BigDecimal getAvgSalePrice() {
      method getSharesSold (line 591) | public BigDecimal getSharesSold() {
      method getPercentPortfolio (line 595) | public BigDecimal getPercentPortfolio() {
      method setPercentPortfolio (line 599) | public void setPercentPortfolio(final BigDecimal percentPortfolio) {
      method setInternalRateOfReturn (line 603) | public void setInternalRateOfReturn(final double internalRateOfRetur...

FILE: jgnash-core/src/main/java/jgnash/engine/InvestmentTransaction.java
  class InvestmentTransaction (line 35) | @Entity
    method InvestmentTransaction (line 38) | public InvestmentTransaction() {
    method getTransactionType (line 48) | @NotNull
    method getInvestmentAccount (line 63) | public Account getInvestmentAccount() {
    method addTransactionEntry (line 78) | @Override
    method getPrice (line 102) | public BigDecimal getPrice() {
    method getQuantity (line 121) | public BigDecimal getQuantity() {
    method getSignedQuantity (line 139) | private BigDecimal getSignedQuantity() {
    method getSecurityNode (line 151) | public SecurityNode getSecurityNode() {
    method getFees (line 168) | public BigDecimal getFees() {
    method getFees (line 178) | private BigDecimal getFees(final Account account) {
    method getInvestmentFeeEntries (line 196) | public List<TransactionEntry> getInvestmentFeeEntries() {
    method getInvestmentGainLossEntries (line 206) | public List<TransactionEntry> getInvestmentGainLossEntries() {
    method getMarketValue (line 216) | public BigDecimal getMarketValue(final BigDecimal sharePrice) {
    method getMarketValue (line 226) | public BigDecimal getMarketValue(final LocalDate date) {
    method getTotal (line 241) | public BigDecimal getTotal(final Account account) {
    method getTotalWithoutCashTransfer (line 264) | BigDecimal getTotalWithoutCashTransfer(final Account account) {
    method getNetCashValue (line 288) | public BigDecimal getNetCashValue() {
    method compareTo (line 320) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/MathConstants.java
  class MathConstants (line 28) | public final class MathConstants {
    method MathConstants (line 62) | private MathConstants() {

FILE: jgnash-core/src/main/java/jgnash/engine/QuoteSource.java
  type QuoteSource (line 37) | public enum QuoteSource {
    method QuoteSource (line 54) | QuoteSource(String description, final Class<? extends SecurityParser> ...
    method toString (line 59) | @Override
    method getParser (line 69) | @Nullable

FILE: jgnash-core/src/main/java/jgnash/engine/RecTransaction.java
  class RecTransaction (line 32) | public class RecTransaction implements Comparable<RecTransaction> {
    method RecTransaction (line 37) | public RecTransaction(@NotNull final Transaction transaction, @NotNull...
    method getDate (line 45) | public LocalDate getDate() {
    method getNumber (line 49) | public String getNumber() {
    method getPayee (line 53) | public String getPayee() {
    method getReconciledState (line 57) | public ReconciledState getReconciledState() {
    method setReconciledState (line 61) | public void setReconciledState(final ReconciledState reconciledState) {
    method getAmount (line 65) | public BigDecimal getAmount(final Account a) {
    method hashCode (line 74) | @Override
    method equals (line 79) | @Override
    method compareTo (line 93) | @Override
    method getTransaction (line 98) | public Transaction getTransaction() {

FILE: jgnash-core/src/main/java/jgnash/engine/ReconcileManager.java
  class ReconcileManager (line 37) | public class ReconcileManager {
    method ReconcileManager (line 46) | private ReconcileManager() {
    method setAutoReconcileIncomeExpense (line 65) | public static void setAutoReconcileIncomeExpense(final boolean reconci...
    method getAutoReconcileIncomeExpense (line 85) | public static boolean getAutoReconcileIncomeExpense() {
    method setAutoReconcileBothSides (line 96) | public static void setAutoReconcileBothSides(final boolean reconcile) {
    method getAutoReconcileBothSides (line 115) | public static boolean getAutoReconcileBothSides() {
    method isAutoReconcileDisabled (line 119) | public static boolean isAutoReconcileDisabled() {
    method setDoNotAutoReconcile (line 126) | public static void setDoNotAutoReconcile() {
    method reconcileTransaction (line 139) | public static void reconcileTransaction(final Account account, final T...
    method reconcileTransactions (line 164) | public static void reconcileTransactions(final Account account, final ...
    method setAccountDateAttribute (line 192) | public static void setAccountDateAttribute(@NotNull final Account acco...
    method getAccountDateAttribute (line 207) | public static Optional<LocalDate> getAccountDateAttribute(@NotNull fin...
    method setAccountBigDecimalAttribute (line 223) | public static void setAccountBigDecimalAttribute(@NotNull final Accoun...
    method getAccountBigDecimalAttribute (line 238) | public static Optional<BigDecimal> getAccountBigDecimalAttribute(@NotN...

FILE: jgnash-core/src/main/java/jgnash/engine/ReconciledState.java
  type ReconciledState (line 27) | public enum ReconciledState {
    method ReconciledState (line 34) | ReconciledState(final String symbol) {
    method toString (line 38) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/RootAccount.java
  class RootAccount (line 27) | @Entity
    method RootAccount (line 34) | public RootAccount() {
    method RootAccount (line 43) | protected RootAccount(final CurrencyNode node) {
    method getAccountType (line 47) | @Override
    method getPathName (line 57) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/SecurityHistoryEvent.java
  class SecurityHistoryEvent (line 42) | @Entity
    method SecurityHistoryEvent (line 67) | @SuppressWarnings("unused")
    method SecurityHistoryEvent (line 71) | public SecurityHistoryEvent(@NotNull final SecurityHistoryEventType ty...
    method getType (line 78) | public SecurityHistoryEventType getType() {
    method getValue (line 82) | public BigDecimal getValue() {
    method getDate (line 86) | public LocalDate getDate() {
    method equals (line 90) | @Override
    method hashCode (line 105) | @Override
    method compareTo (line 115) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/SecurityHistoryEventType.java
  type SecurityHistoryEventType (line 27) | public enum SecurityHistoryEventType {
    method SecurityHistoryEventType (line 34) | SecurityHistoryEventType(String description) {
    method toString (line 38) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/SecurityHistoryNode.java
  class SecurityHistoryNode (line 39) | @Entity
    method SecurityHistoryNode (line 66) | public SecurityHistoryNode() {
    method SecurityHistoryNode (line 78) | public SecurityHistoryNode(@NotNull final LocalDate date, @Nullable fi...
    method setHigh (line 87) | private void setHigh(final BigDecimal high) {
    method setLow (line 93) | private void setLow(final BigDecimal low) {
    method setVolume (line 99) | private void setVolume(final long volume) {
    method getHigh (line 103) | public BigDecimal getHigh() {
    method getLow (line 107) | public BigDecimal getLow() {
    method getVolume (line 111) | public long getVolume() {
    method setDate (line 115) | void setDate(final @NotNull LocalDate localDate) {
    method getLocalDate (line 120) | public LocalDate getLocalDate() {
    method setPrice (line 124) | void setPrice(final BigDecimal price) {
    method getPrice (line 130) | public BigDecimal getPrice() {
    method getAdjustedPrice (line 139) | public @NotNull
    method setAdjustmentMultiplier (line 153) | void setAdjustmentMultiplier(@NotNull BigDecimal multiplier) {
    method compareTo (line 164) | @Override
    method equals (line 175) | @Override
    method hashCode (line 181) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/SecurityNode.java
  class SecurityNode (line 51) | @Entity
    method SecurityNode (line 80) | public SecurityNode() {
    method SecurityNode (line 84) | public SecurityNode(final CurrencyNode node) {
    method getPrefix (line 94) | @Override
    method setPrefix (line 99) | @Override
    method getSuffix (line 109) | @Override
    method setSuffix (line 114) | @Override
    method getQuoteSource (line 124) | public QuoteSource getQuoteSource() {
    method setQuoteSource (line 133) | public void setQuoteSource(final QuoteSource source) {
    method getISIN (line 137) | @NotNull
    method setISIN (line 142) | public void setISIN(final String isin) {
    method setReportedCurrencyNode (line 151) | public void setReportedCurrencyNode(final CurrencyNode node) {
    method getReportedCurrencyNode (line 160) | public CurrencyNode getReportedCurrencyNode() {
    method addHistoryNode (line 164) | boolean addHistoryNode(final SecurityHistoryNode node) {
    method removeHistoryNode (line 178) | boolean removeHistoryNode(final LocalDate date) {
    method addSecurityHistoryEvent (line 194) | boolean addSecurityHistoryEvent(final SecurityHistoryEvent securityHis...
    method removeSecurityHistoryEvent (line 204) | boolean removeSecurityHistoryEvent(final SecurityHistoryEvent security...
    method contains (line 231) | public boolean contains(final LocalDate date) {
    method getHistoryNodes (line 257) | public List<SecurityHistoryNode> getHistoryNodes() {
    method getLocalDateBounds (line 296) | public Optional<LocalDate[]> getLocalDateBounds() {
    method getHistoryNodeGroupsBySplits (line 317) | public List<List<SecurityHistoryNode>> getHistoryNodeGroupsBySplits() {
    method getHistoryEvents (line 367) | public Set<SecurityHistoryEvent> getHistoryEvents() {
    method getSplitEvents (line 371) | private List<SecurityHistoryEvent> getSplitEvents() {
    method getHistoryNode (line 388) | public Optional<SecurityHistoryNode> getHistoryNode(final LocalDate da...
    method getClosestHistoryNode (line 416) | public Optional<SecurityHistoryNode> getClosestHistoryNode(final Local...
    method getMarketPrice (line 440) | private BigDecimal getMarketPrice(final LocalDate date) {
    method getMarketPrice (line 459) | public BigDecimal getMarketPrice(final LocalDate date, final CurrencyN...
    method clone (line 468) | @Override
    method readResolve (line 490) | protected Object readResolve() {
    method postLoad (line 495) | @PostLoad

FILE: jgnash-core/src/main/java/jgnash/engine/StoredObject.java
  class StoredObject (line 38) | @Entity
    method getUuid (line 72) | public UUID getUuid() {
    method setUuid (line 81) | private void setUuid(final UUID uuid) {
    method setMarkedForRemoval (line 85) | void setMarkedForRemoval() {
    method isMarkedForRemoval (line 89) | public boolean isMarkedForRemoval() {
    method hashCode (line 100) | @Override
    method equals (line 117) | @Override
    method clone (line 123) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/StoredObjectComparator.java
  class StoredObjectComparator (line 28) | public class StoredObjectComparator implements Comparator<StoredObject>,...
    method compare (line 30) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/Tag.java
  class Tag (line 28) | @Entity
    method Tag (line 54) | public Tag() {
    method setDescription (line 58) | public void setDescription(final String description) {
    method getDescription (line 64) | public String getDescription() {
    method setName (line 68) | public void setName(final String name) {
    method getName (line 74) | public String getName() {
    method setColor (line 84) | public void setColor(final long color) {
    method getColor (line 94) | public long getColor() {
    method getShape (line 103) | public int getShape() {
    method setShape (line 115) | public void setShape(final int unicode) {
    method toString (line 119) | @Override
    method compareTo (line 136) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/Transaction.java
  class Transaction (line 53) | @SuppressWarnings("JpaDataSourceORMInspection")
    method Transaction (line 125) | public Transaction() {
    method getAccounts (line 136) | @NotNull
    method areAccountsHidden (line 153) | public boolean areAccountsHidden() {
    method areAccountsLocked (line 171) | public boolean areAccountsLocked() {
    method getCommonAccount (line 190) | public Account getCommonAccount() {
    method addTransactionEntry (line 221) | public void addTransactionEntry(@NotNull final TransactionEntry entry) {
    method removeTransactionEntry (line 231) | public void removeTransactionEntry(@NotNull final TransactionEntry ent...
    method size (line 244) | public int size() {
    method setDate (line 248) | public void setDate(@NotNull final LocalDate localDate) {
    method getLocalDate (line 252) | public LocalDate getLocalDate() {
    method setPayee (line 261) | public void setPayee(@Nullable final String payee) {
    method getPayee (line 270) | @NotNull
    method setNumber (line 285) | public void setNumber(@Nullable final String number) {
    method getNumber (line 294) | @NotNull
    method getAmount (line 312) | public synchronized BigDecimal getAmount(final Account account) {
    method compareTo (line 326) | @Override
    method getTransactionEntries (line 360) | public List<TransactionEntry> getTransactionEntries() {
    method getTransactionEntries (line 369) | private List<TransactionEntry> getTransactionEntries(final Account acc...
    method getTransactionEntriesByTag (line 383) | List<TransactionEntry> getTransactionEntriesByTag(final TransactionTag...
    method addTransactionEntries (line 392) | public void addTransactionEntries(final Collection<TransactionEntry> e...
    method clearTransactionEntries (line 399) | public void clearTransactionEntries() {
    method getTimestamp (line 403) | public LocalDateTime getTimestamp() {
    method getTransactionType (line 411) | @NotNull
    method getMemo (line 436) | @NotNull
    method getTransactionMemo (line 456) | @Nullable
    method getMemo (line 467) | @NotNull
    method getMemo (line 478) | public static String getMemo(final List<TransactionEntry> transEntries) {
    method isMemoConcatenated (line 489) | public boolean isMemoConcatenated() {
    method setMemo (line 500) | public synchronized void setMemo(final String memo) {
    method getTags (line 515) | public Set<Tag> getTags() {
    method getTags (line 531) | public Set<Tag> getTags(final Account account) {
    method setTags (line 547) | public void setTags(final Collection<Tag> tags) {
    method setTags (line 559) | public void setTags(@NotNull final Class<? extends TransactionEntry> c...
    method getTags (line 568) | public Set<Tag> getTags(@NotNull final Class<? extends TransactionEntr...
    method getFitid (line 575) | @Nullable
    method setFitid (line 580) | public void setFitid(final String fitid) {
    method setReconciled (line 584) | @SuppressWarnings("WeakerAccess")
    method setReconciled (line 594) | public void setReconciled(@NotNull final ReconciledState state) {
    method getReconciled (line 603) | @NotNull
    method getAttachment (line 627) | @Nullable
    method setAttachment (line 638) | public void setAttachment(@Nullable final String attachment) {
    method clone (line 642) | @Override
    method toString (line 662) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntry.java
  class TransactionEntry (line 58) | @Entity
    method TransactionEntry (line 119) | public TransactionEntry() {
    method TransactionEntry (line 128) | public TransactionEntry(final Account account, final BigDecimal amount) {
    method TransactionEntry (line 146) | TransactionEntry(final Account creditAccount, final Account debitAccou...
    method TransactionEntry (line 165) | TransactionEntry(@NotNull final Account creditAccount, @NotNull final ...
    method getCreditAmount (line 181) | public BigDecimal getCreditAmount() {
    method getAmount (line 185) | public BigDecimal getAmount(@NotNull final Account account) {
    method setAmount (line 202) | public final void setAmount(@NotNull final BigDecimal amount) {
    method getCreditAccount (line 213) | public Account getCreditAccount() {
    method getCreditReconciled (line 217) | ReconciledState getCreditReconciled() {
    method getDebitAccount (line 221) | public Account getDebitAccount() {
    method getDebitReconciled (line 225) | ReconciledState getDebitReconciled() {
    method getMemo (line 229) | @NotNull
    method getReconciled (line 234) | public ReconciledState getReconciled(final Account account) {
    method setCreditAmount (line 244) | public void setCreditAmount(final BigDecimal creditAmount) {
    method setCreditAccount (line 250) | public void setCreditAccount(final Account creditAccount) {
    method setCreditReconciled (line 254) | void setCreditReconciled(@NotNull final ReconciledState creditReconcil...
    method setDebitAccount (line 260) | public void setDebitAccount(final Account debitAccount) {
    method setDebitReconciled (line 264) | void setDebitReconciled(@NotNull final ReconciledState debitReconciled) {
    method setMemo (line 275) | public void setMemo(final String memo) {
    method setReconciled (line 281) | public void setReconciled(final Account account, final ReconciledState...
    method getDebitAmount (line 289) | public BigDecimal getDebitAmount() {
    method setDebitAmount (line 293) | public void setDebitAmount(@NotNull final BigDecimal debitAmount) {
    method setTags (line 299) | public void setTags(final Collection<Tag> tags) {
    method getTags (line 304) | public Set<Tag> getTags() {
    method compareTo (line 311) | @Override
    method isSingleEntry (line 341) | boolean isSingleEntry() {
    method isMultiCurrency (line 353) | public boolean isMultiCurrency() {
    method setTransactionTag (line 357) | public void setTransactionTag(final TransactionTag transactionTag) {
    method getTransactionTag (line 364) | public TransactionTag getTransactionTag() {
    method clone (line 368) | @Override
    method equals (line 382) | @SuppressWarnings("BigDecimalEquals")
    method hashCode (line 405) | @Override
    method toString (line 417) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryAbstractIncrease.java
  class TransactionEntryAbstractIncrease (line 30) | @Entity
    method TransactionEntryAbstractIncrease (line 33) | protected TransactionEntryAbstractIncrease() {
    method getSignedQuantity (line 43) | @Override
    method setCreditAccount (line 48) | @Override
    method setDebitAccount (line 54) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryAddX.java
  class TransactionEntryAddX (line 32) | @Entity
    method TransactionEntryAddX (line 39) | @SuppressWarnings("unused")
    method TransactionEntryAddX (line 43) | public TransactionEntryAddX(final Account account, final SecurityNode ...
    method getTransactionType (line 52) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryBuyX.java
  class TransactionEntryBuyX (line 37) | @Entity
    method TransactionEntryBuyX (line 44) | @SuppressWarnings("unused")
    method TransactionEntryBuyX (line 58) | TransactionEntryBuyX(final Account account, final Account investmentAc...
    method getSignedQuantity (line 97) | @Override
    method getTransactionType (line 102) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryDividendX.java
  class TransactionEntryDividendX (line 36) | @Entity
    method TransactionEntryDividendX (line 43) | @SuppressWarnings("unused")
    method TransactionEntryDividendX (line 57) | TransactionEntryDividendX(final Account incomeAccount, final Account i...
    method getTotal (line 84) | @Override
    method getSignedQuantity (line 96) | @Override
    method getTransactionType (line 101) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryMergeX.java
  class TransactionEntryMergeX (line 32) | @Entity
    method TransactionEntryMergeX (line 40) | @SuppressWarnings("unused")
    method TransactionEntryMergeX (line 44) | public TransactionEntryMergeX(final Account investmentAccount, final S...
    method getSignedQuantity (line 64) | @Override
    method getTransactionType (line 69) | @Override
    method setCreditAccount (line 75) | @Override
    method setDebitAccount (line 81) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryReinvestDivX.java
  class TransactionEntryReinvestDivX (line 32) | @Entity
    method TransactionEntryReinvestDivX (line 40) | @SuppressWarnings("unused")
    method TransactionEntryReinvestDivX (line 44) | TransactionEntryReinvestDivX(final Account investmentAccount, final Se...
    method getTransactionType (line 65) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryRemoveX.java
  class TransactionEntryRemoveX (line 32) | @Entity
    method TransactionEntryRemoveX (line 39) | @SuppressWarnings("unused")
    method TransactionEntryRemoveX (line 43) | public TransactionEntryRemoveX(final Account account, final SecurityNo...
    method getSignedQuantity (line 59) | @Override
    method getTransactionType (line 64) | @Override
    method setCreditAccount (line 70) | @Override
    method setDebitAccount (line 76) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntryRocX.java
  class TransactionEntryRocX (line 35) | @Entity
    method TransactionEntryRocX (line 42) | @SuppressWarnings("unused")
    method TransactionEntryRocX (line 55) | TransactionEntryRocX(final Account incomeAccount, final Account invest...
    method getTotal (line 82) | @Override
    method getSignedQuantity (line 94) | @Override
    method getTransactionType (line 99) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntrySellX.java
  class TransactionEntrySellX (line 37) | @Entity
    method TransactionEntrySellX (line 44) | @SuppressWarnings("unused")
    method TransactionEntrySellX (line 58) | TransactionEntrySellX(final Account account, final Account investmentA...
    method getSignedQuantity (line 98) | @Override
    method getTransactionType (line 103) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionEntrySplitX.java
  class TransactionEntrySplitX (line 32) | @Entity
    method TransactionEntrySplitX (line 40) | @SuppressWarnings("unused")
    method TransactionEntrySplitX (line 44) | public TransactionEntrySplitX(final Account investmentAccount, final S...
    method getTransactionType (line 58) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionFactory.java
  class TransactionFactory (line 35) | public class TransactionFactory {
    method generateAddXTransaction (line 50) | public static InvestmentTransaction generateAddXTransaction(final Acco...
    method generateBuyXTransaction (line 89) | public static InvestmentTransaction generateBuyXTransaction(final Acco...
    method generateDividendXTransaction (line 145) | public static InvestmentTransaction generateDividendXTransaction(final...
    method generateRocXTransaction (line 201) | public static InvestmentTransaction generateRocXTransaction(final Acco...
    method generateDoubleEntryTransaction (line 257) | public static Transaction generateDoubleEntryTransaction(final Account...
    method generateDoubleEntryTransaction (line 295) | public static Transaction generateDoubleEntryTransaction(final Account...
    method generateMergeXTransaction (line 331) | public static InvestmentTransaction generateMergeXTransaction(final Ac...
    method generateReinvestDividendXTransaction (line 369) | public static InvestmentTransaction generateReinvestDividendXTransacti...
    method generateRemoveXTransaction (line 446) | public static InvestmentTransaction generateRemoveXTransaction(final A...
    method generateSellXTransaction (line 486) | public static InvestmentTransaction generateSellXTransaction(final Acc...
    method generateSingleEntryTransaction (line 550) | public static Transaction generateSingleEntryTransaction(final Account...
    method generateSplitXTransaction (line 585) | public static InvestmentTransaction generateSplitXTransaction(final Ac...
    method buildPayee (line 611) | private static String buildPayee(final String wordProperty, final Secu...
    method processCashTransfer (line 620) | private static void processCashTransfer(final Transaction transaction,...
    method processFees (line 634) | private static void processFees(final Transaction transaction, final A...
    method processGains (line 666) | private static void processGains(final Transaction transaction, final ...
    method createTransactionEntry (line 690) | public static TransactionEntry createTransactionEntry(final Account de...
    method TransactionFactory (line 707) | private TransactionFactory() {

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionTag.java
  type TransactionTag (line 27) | @SuppressWarnings("UnusedDeclaration")
    method TransactionTag (line 42) | TransactionTag(String description) {
    method toString (line 46) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TransactionType.java
  type TransactionType (line 28) | public enum TransactionType {
    method TransactionType (line 50) | TransactionType(String name) {
    method toString (line 54) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/TrashObject.java
  class TrashObject (line 33) | @Entity
    method TrashObject (line 50) | @SuppressWarnings("unused")
    method TrashObject (line 54) | TrashObject(final StoredObject object) {
    method getObject (line 60) | public StoredObject getObject() {
    method getDate (line 64) | public LocalDateTime getDate() {
    method compareTo (line 68) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/attachment/AttachmentManager.java
  type AttachmentManager (line 29) | public interface AttachmentManager {
    method addAttachment (line 30) | boolean addAttachment(Path path, boolean copy) throws IOException;
    method removeAttachment (line 32) | boolean removeAttachment(String attachment);
    method getAttachment (line 34) | Future<Path> getAttachment(String attachment);

FILE: jgnash-core/src/main/java/jgnash/engine/attachment/AttachmentTransferClient.java
  class AttachmentTransferClient (line 51) | class AttachmentTransferClient {
    method AttachmentTransferClient (line 64) | AttachmentTransferClient(final Path tempPath) {
    method connectToServer (line 76) | boolean connectToServer(final String host, final int port, final char[...
    method encrypt (line 111) | private String encrypt(final String message) {
    method requestFile (line 118) | void requestFile(final Path file) {
    method deleteFile (line 127) | void deleteFile(final String attachment) {
    method sendFile (line 136) | Future<Void> sendFile(final Path file) {
    method disconnectFromServer (line 147) | void disconnectFromServer() {
    class Initializer (line 164) | private class Initializer extends ChannelInitializer<SocketChannel> {
      method initChannel (line 166) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/attachment/AttachmentTransferServer.java
  class AttachmentTransferServer (line 54) | public class AttachmentTransferServer {
    method AttachmentTransferServer (line 68) | public AttachmentTransferServer(final int port, final Path attachmentP...
    method startServer (line 73) | public boolean startServer(final char[] password) {
    method stopServer (line 123) | public void stopServer() {
    class ServerTransferHandler (line 135) | private final class ServerTransferHandler extends NettyTransferHandler {
      method ServerTransferHandler (line 137) | ServerTransferHandler() {
      method channelActive (line 141) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/attachment/DistributedAttachmentManager.java
  class DistributedAttachmentManager (line 48) | public class DistributedAttachmentManager implements AttachmentManager {
    method DistributedAttachmentManager (line 67) | public DistributedAttachmentManager(final String host, final int port) {
    method addAttachment (line 100) | @Override
    method removeAttachment (line 132) | @Override
    method getAttachment (line 138) | @Override
    method connectToServer (line 164) | public boolean connectToServer(final char[] password) {
    method disconnectFromServer (line 168) | public void disconnectFromServer() {

FILE: jgnash-core/src/main/java/jgnash/engine/attachment/LocalAttachmentManager.java
  class LocalAttachmentManager (line 39) | public class LocalAttachmentManager implements AttachmentManager {
    method addAttachment (line 53) | @Override
    method removeAttachment (line 81) | @Override
    method getAttachment (line 97) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/attachment/NettyTransferHandler.java
  class NettyTransferHandler (line 50) | @ChannelHandler.Sharable
    method NettyTransferHandler (line 85) | NettyTransferHandler(final Path attachmentPath, @Nullable final Encryp...
    method channelRead0 (line 92) | @Override
    method deleteFile (line 116) | private void deleteFile(final String fileName) {
    method channelInactive (line 128) | @Override
    method exceptionCaught (line 141) | @Override
    method encrypt (line 148) | private String encrypt(final String message) {
    method sendFile (line 161) | Future<Void> sendFile(final Channel channel, final String fileName) {
    method sendFile (line 206) | private void sendFile(final ChannelHandlerContext ctx, final String ms...
    method closeOutputStream (line 210) | private void closeOutputStream(final String msg) {
    method writeOutputStream (line 225) | private void writeOutputStream(final String msg) {
    method openOutputStream (line 239) | private void openOutputStream(final String msg) {
    class Attachment (line 260) | private static class Attachment {
      method Attachment (line 267) | private Attachment(final Path path, long fileSize) throws IOException {

FILE: jgnash-core/src/main/java/jgnash/engine/budget/Budget.java
  class Budget (line 46) | @SuppressWarnings("JpaDataSourceORMInspection")
    method getName (line 101) | public String getName() {
    method setName (line 105) | public void setName(final String name) {
    method getDescription (line 115) | public String getDescription() {
    method setDescription (line 119) | public void setDescription(final String description) {
    method setBudgetGoal (line 129) | public void setBudgetGoal(final Account account, final BudgetGoal budg...
    method removeBudgetGoal (line 136) | public void removeBudgetGoal(final Account account) {
    method getBudgetGoal (line 149) | public BudgetGoal getBudgetGoal(final Account account) {
    method compareTo (line 164) | @Override
    method equals (line 180) | @Override
    method getBudgetPeriod (line 190) | public Period getBudgetPeriod() {
    method setBudgetPeriod (line 199) | public void setBudgetPeriod(final Period budgetPeriod) {
    method clone (line 209) | @Override
    method areAssetAccountsIncluded (line 233) | public boolean areAssetAccountsIncluded() {
    method setAssetAccountsIncluded (line 242) | public void setAssetAccountsIncluded(final boolean assetAccountsInclud...
    method areIncomeAccountsIncluded (line 251) | public boolean areIncomeAccountsIncluded() {
    method setIncomeAccountsIncluded (line 260) | public void setIncomeAccountsIncluded(final boolean incomeAccountsIncl...
    method areExpenseAccountsIncluded (line 269) | public boolean areExpenseAccountsIncluded() {
    method setExpenseAccountsIncluded (line 278) | public void setExpenseAccountsIncluded(final boolean expenseAccountsIn...
    method areLiabilityAccountsIncluded (line 287) | public boolean areLiabilityAccountsIncluded() {
    method setLiabilityAccountsIncluded (line 296) | public void setLiabilityAccountsIncluded(final boolean liabilityAccoun...
    method toString (line 305) | @Override
    method getRoundingScale (line 315) | public byte getRoundingScale() {
    method setRoundingScale (line 324) | public void setRoundingScale(final byte scale) {
    method getRoundingMode (line 333) | @NotNull
    method setRoundingMode (line 343) | public void setRoundingMode(@NotNull final RoundingMode roundingMethod) {
    method getStartMonth (line 353) | public Month getStartMonth() {
    method setStartMonth (line 361) | public void setStartMonth(Month startMonth) {

FILE: jgnash-core/src/main/java/jgnash/engine/budget/BudgetFactory.java
  class BudgetFactory (line 40) | public class BudgetFactory {
    method BudgetFactory (line 45) | private BudgetFactory() {
    method buildAverageBudget (line 48) | public static Budget buildAverageBudget(final Period budgetPeriod, fin...
    method buildAverageBudgetGoal (line 72) | public static BudgetGoal buildAverageBudgetGoal(final Account account,
    method buildBudgetGoal (line 111) | public static BudgetGoal buildBudgetGoal(final BudgetGoal baseBudgetGoal,

FILE: jgnash-core/src/main/java/jgnash/engine/budget/BudgetGoal.java
  class BudgetGoal (line 48) | @Entity
    method BudgetGoal (line 74) | public BudgetGoal() {
    method getGoals (line 78) | public final BigDecimal[] getGoals() {
    method setGoals (line 82) | public final void setGoals(final BigDecimal[] goals) {
    method getBudgetPeriod (line 105) | public Period getBudgetPeriod() {
    method setBudgetPeriod (line 114) | public void setBudgetPeriod(final Period budgetPeriod) {
    method setGoal (line 118) | public void setGoal(final int startPeriod, final int endPeriod, final ...
    method getGoal (line 143) | public BigDecimal getGoal(final int startPeriod, final int endPeriod, ...
    method clone (line 177) | @Override
    method hashCode (line 193) | @Override
    method equals (line 207) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/budget/BudgetPeriodDescriptor.java
  class BudgetPeriodDescriptor (line 33) | public class BudgetPeriodDescriptor implements Comparable<BudgetPeriodDe...
    method BudgetPeriodDescriptor (line 58) | BudgetPeriodDescriptor(final LocalDate periodStartDate, final LocalDat...
    method getStartPeriod (line 112) | public int getStartPeriod() {
    method getEndPeriod (line 116) | public int getEndPeriod() {
    method getStartDate (line 120) | public LocalDate getStartDate() {
    method getEndDate (line 124) | public LocalDate getEndDate() {
    method getPeriodDescription (line 128) | public String getPeriodDescription() {
    method getBudgetPeriod (line 132) | Period getBudgetPeriod() {
    method isBetween (line 142) | public boolean isBetween(final LocalDate date) {
    method toString (line 146) | @Override
    method hashCode (line 152) | @Override
    method equals (line 167) | @Override
    method compareTo (line 191) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/budget/BudgetPeriodDescriptorFactory.java
  class BudgetPeriodDescriptorFactory (line 38) | public final class BudgetPeriodDescriptorFactory {
    method BudgetPeriodDescriptorFactory (line 44) | private BudgetPeriodDescriptorFactory() {
    method getDescriptors (line 47) | public static List<BudgetPeriodDescriptor> getDescriptors(final int bu...

FILE: jgnash-core/src/main/java/jgnash/engine/budget/BudgetPeriodResults.java
  class BudgetPeriodResults (line 28) | public class BudgetPeriodResults {
    method getBudgeted (line 36) | public BigDecimal getBudgeted() {
    method setBudgeted (line 40) | public void setBudgeted(final BigDecimal budgeted) {
    method getChange (line 44) | public BigDecimal getChange() {
    method setChange (line 48) | public void setChange(final BigDecimal change) {
    method getRemaining (line 52) | public BigDecimal getRemaining() {
    method setRemaining (line 56) | public void setRemaining(final BigDecimal balance) {
    method toString (line 60) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/budget/BudgetResultsModel.java
  class BudgetResultsModel (line 55) | public class BudgetResultsModel implements MessageListener {
    method BudgetResultsModel (line 86) | public BudgetResultsModel(final Budget budget, final int year, final C...
    method getBudget (line 104) | public Budget getBudget() {
    method getBaseCurrency (line 108) | public CurrencyNode getBaseCurrency() {
    method getDepth (line 120) | public int getDepth(final Account account) {
    method areParentsIncluded (line 136) | private boolean areParentsIncluded(final Account account) {
    method getDescriptorList (line 152) | public List<BudgetPeriodDescriptor> getDescriptorList() {
    method registerListeners (line 156) | private void registerListeners() {
    method unregisterListeners (line 160) | private void unregisterListeners() {
    method addMessageListener (line 164) | public synchronized void addMessageListener(final MessageListener mess...
    method removeMessageListener (line 168) | public synchronized void removeMessageListener(final MessageListener m...
    method includeAccount (line 178) | public boolean includeAccount(final Account account) {
    method loadAccounts (line 202) | private void loadAccounts() {
    method loadAccountGroups (line 218) | private void loadAccountGroups() {
    method getAccountGroupList (line 240) | public List<AccountGroup> getAccountGroupList() {
    method getAccounts (line 250) | public final Set<Account> getAccounts() {
    method getAccounts (line 261) | private Set<Account> getAccounts(final AccountGroup group) {
    method clear (line 271) | private void clear(final BudgetPeriodDescriptor descriptor, final Acco...
    method clear (line 285) | private void clear(final BudgetPeriodDescriptor descriptor, final Acco...
    method clear (line 299) | private void clear(final Account account) {
    method clear (line 309) | private void clear(final AccountGroup accountGroup) {
    method clearCached (line 323) | private void clearCached() {
    method getResults (line 343) | public BudgetPeriodResults getResults(final BudgetPeriodDescriptor des...
    method getResults (line 364) | public BudgetPeriodResults getResults(final BudgetPeriodDescriptor des...
    method getResults (line 383) | public BudgetPeriodResults getResults(final Account account) {
    method getResults (line 399) | public BudgetPeriodResults getResults(final AccountGroup accountGroup) {
    method buildAccountResults (line 410) | private BudgetPeriodResults buildAccountResults(final BudgetPeriodDesc...
    method buildResults (line 473) | private BudgetPeriodResults buildResults(final BudgetPeriodDescriptor ...
    method buildResults (line 524) | private BudgetPeriodResults buildResults(final Account account) {
    method buildResults (line 561) | private BudgetPeriodResults buildResults(final AccountGroup group) {
    method clearCached (line 599) | private void clearCached(final Account account) {
    method processAccountEvent (line 624) | private void processAccountEvent(final Message message) {
    method processBudgetEvent (line 647) | private void processBudgetEvent(final Message message) {
    method processTransactionEvent (line 668) | private void processTransactionEvent(final Message message) {
    method messagePosted (line 683) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/budget/Pattern.java
  type Pattern (line 28) | @SuppressWarnings("unused")
    method Pattern (line 39) | Pattern(final String description) {
    method toString (line 43) | @Override
    method getIncrement (line 48) | public int getIncrement() {

FILE: jgnash-core/src/main/java/jgnash/engine/concurrent/DistributedLockManager.java
  class DistributedLockManager (line 64) | public class DistributedLockManager implements LockManager {
    method DistributedLockManager (line 104) | public DistributedLockManager(final String host, final int port) {
    method encrypt (line 109) | private String encrypt(final String message) {
    method connectToServer (line 122) | public boolean connectToServer(final char[] password) {
    method disconnectFromServer (line 159) | public void disconnectFromServer() {
    method getLock (line 176) | @Override
    method getLatch (line 181) | private CountDownLatch getLatch(final String lockMessage) {
    method lock (line 191) | private void lock(final String lockId, final String type) {
    method unlock (line 195) | private void unlock(final String lockId, final String type) {
    method changeLockState (line 199) | private void changeLockState(final String lockId, final String type, f...
    method processMessage (line 243) | private void processMessage(final String lockMessage) {
    class LockManagerThreadFactory (line 271) | private static class LockManagerThreadFactory implements ThreadFactory {
      method newThread (line 274) | @Override
    class Initializer (line 280) | private class Initializer extends ChannelInitializer<SocketChannel> {
      method initChannel (line 282) | @Override
    class ClientHandler (line 299) | @ChannelHandler.Sharable
      method channelRead (line 302) | @Override
      method exceptionCaught (line 311) | @Override
    class DistributedReadWriteLock (line 319) | private class DistributedReadWriteLock extends ReentrantReadWriteLock {
      method DistributedReadWriteLock (line 327) | DistributedReadWriteLock(final String lockId) {
      method readLock (line 336) | @Override
      method writeLock (line 342) | @Override
      class ReadLock (line 348) | class ReadLock extends ReentrantReadWriteLock.ReadLock {
        method ReadLock (line 350) | ReadLock(final ReentrantReadWriteLock lock) {
        method lock (line 354) | @Override
        method unlock (line 360) | @Override
      class WriteLock (line 367) | class WriteLock extends ReentrantReadWriteLock.WriteLock {
        method WriteLock (line 369) | WriteLock(final ReentrantReadWriteLock lock) {
        method lock (line 373) | @Override
        method unlock (line 379) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/concurrent/DistributedLockServer.java
  class DistributedLockServer (line 63) | public class DistributedLockServer {
    method DistributedLockServer (line 92) | public DistributedLockServer(final int port) {
    method encrypt (line 96) | private String encrypt(final String message) {
    method processMessage (line 103) | private void processMessage(final ChannelHandlerContext ctx, final Str...
    method getLock (line 172) | private ReadWriteLock getLock(final String lockId) {
    method startServer (line 176) | public boolean startServer(final char[] password) {
    method stopServer (line 211) | public void stopServer() {
    class LockServerThreadFactory (line 225) | private static class LockServerThreadFactory implements ThreadFactory {
      method newThread (line 228) | @Override
    class ServerHandler (line 235) | @ChannelHandler.Sharable
      method channelActive (line 238) | @Override
      method channelInactive (line 245) | @Override
      method channelRead (line 271) | @Override
      method exceptionCaught (line 279) | @Override
    class Initializer (line 286) | private class Initializer extends ChannelInitializer<SocketChannel> {
      method initChannel (line 288) | @Override
    class ReadWriteLock (line 309) | private static class ReadWriteLock {
      method ReadWriteLock (line 324) | private ReadWriteLock(final String id) {
      method hasWriteThread (line 328) | synchronized boolean hasWriteThread(final String id) {
      method cleanupStaleThread (line 338) | synchronized void cleanupStaleThread(final String remoteThread) {
      method cleanupStaleWriteThread (line 350) | synchronized void cleanupStaleWriteThread() {
      method lockForRead (line 362) | synchronized void lockForRead(final String remoteThread) throws Inte...
      method lockForWrite (line 372) | synchronized void lockForWrite(final String remoteThread) throws Int...
      method unlockRead (line 385) | synchronized void unlockRead(final String remoteThread) {
      method unlockWrite (line 402) | synchronized void unlockWrite(final String remoteThread) {
      method canGrantReadAccess (line 417) | private synchronized boolean canGrantReadAccess(final String remoteT...
      method canGrantWriteAccess (line 433) | private synchronized boolean canGrantWriteAccess(final String remote...
      method getReadHoldCount (line 444) | private synchronized int getReadHoldCount(final String remoteThread) {
      method isReadLockedByCurrentThread (line 451) | private synchronized boolean isReadLockedByCurrentThread(final Strin...
      method isWriteLockedByCurrentThread (line 455) | private synchronized boolean isWriteLockedByCurrentThread(final Stri...

FILE: jgnash-core/src/main/java/jgnash/engine/concurrent/LocalLockManager.java
  class LocalLockManager (line 29) | public class LocalLockManager implements LockManager {
    method getLock (line 32) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/concurrent/LockManager.java
  type LockManager (line 29) | public interface LockManager {
    method getLock (line 39) | ReentrantReadWriteLock getLock(final String lockId);

FILE: jgnash-core/src/main/java/jgnash/engine/concurrent/Priority.java
  class Priority (line 29) | public class Priority implements Comparable<Priority> {
    method Priority (line 41) | Priority(final int priority) {
    method getPriority (line 46) | int getPriority() {
    method compareTo (line 50) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/concurrent/PriorityThreadPoolExecutor.java
  class PriorityThreadPoolExecutor (line 38) | public class PriorityThreadPoolExecutor {
    method PriorityThreadPoolExecutor (line 44) | public PriorityThreadPoolExecutor(ThreadFactory threadFactory) {
    method PriorityThreadPoolExecutor (line 58) | public PriorityThreadPoolExecutor() {
    method submit (line 62) | private  <T> Future<T> submit(final Callable<T> callable, final Priori...
    method submit (line 76) | public <T> Future<T> submit(final Callable<T> callable, final int prio...
    method submit (line 80) | public <T> Future<T> submit(final Callable<T> callable) {
    method shutdown (line 84) | public void shutdown() {
    method shutdownNow (line 96) | @SuppressWarnings("UnusedReturnValue")
    method awaitTermination (line 101) | @SuppressWarnings("UnusedReturnValue")
    class FutureTaskWrapper (line 107) | static class FutureTaskWrapper<T> extends FutureTask<T> implements Com...
      method FutureTaskWrapper (line 110) | FutureTaskWrapper(final PriorityCallable<T> priorityCallable) {
      method getPriorityCallable (line 115) | PriorityCallable<T> getPriorityCallable() {
      method compareTo (line 119) | @Override
    type PriorityCallable (line 125) | private interface PriorityCallable<V> extends Callable<V> {
      method getPriority (line 126) | Priority getPriority ();

FILE: jgnash-core/src/main/java/jgnash/engine/dao/AbstractDAO.java
  class AbstractDAO (line 30) | public abstract class AbstractDAO implements DAO {
    method stripMarkedForRemoval (line 34) | protected static <T extends StoredObject> List<T> stripMarkedForRemova...
    method isDirty (line 39) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/dao/AccountDAO.java
  type AccountDAO (line 32) | public interface AccountDAO extends DAO {
    method getRootAccount (line 34) | RootAccount getRootAccount();
    method getAccountList (line 36) | List<Account> getAccountList();
    method addAccount (line 38) | boolean addAccount(Account parent, final Account child);
    method addRootAccount (line 40) | boolean addRootAccount(RootAccount account);
    method addAccountSecurity (line 49) | boolean addAccountSecurity(final Account account, final SecurityNode n...
    method getIncomeAccountList (line 56) | List<Account> getIncomeAccountList();
    method getExpenseAccountList (line 63) | List<Account> getExpenseAccountList();
    method getInvestmentAccountList (line 70) | List<Account> getInvestmentAccountList();
    method getAccountByUuid (line 72) | Account getAccountByUuid(final UUID uuid);
    method updateAccount (line 74) | boolean updateAccount(Account account);
    method toggleAccountVisibility (line 83) | boolean toggleAccountVisibility(final Account account);

FILE: jgnash-core/src/main/java/jgnash/engine/dao/BudgetDAO.java
  type BudgetDAO (line 30) | public interface BudgetDAO extends DAO {
    method add (line 32) | boolean add(Budget budget);
    method update (line 34) | boolean update(Budget budget);
    method getBudgets (line 36) | List<Budget> getBudgets();
    method getBudgetByUuid (line 38) | Budget getBudgetByUuid(final UUID uuid);

FILE: jgnash-core/src/main/java/jgnash/engine/dao/CommodityDAO.java
  type CommodityDAO (line 37) | public interface CommodityDAO extends DAO {
    method addCommodity (line 39) | boolean addCommodity(CommodityNode node);
    method addExchangeRateHistory (line 48) | boolean addExchangeRateHistory(final ExchangeRate rate);
    method addSecurityHistory (line 58) | boolean addSecurityHistory(final SecurityNode node, final SecurityHist...
    method addSecurityHistoryEvent (line 68) | boolean addSecurityHistoryEvent(final SecurityNode node, final Securit...
    method getActiveCurrencies (line 75) | Set<CurrencyNode> getActiveCurrencies();
    method getCurrencies (line 77) | List<CurrencyNode> getCurrencies();
    method getCurrencyByUuid (line 79) | CurrencyNode getCurrencyByUuid(final UUID uuid);
    method getSecurityByUuid (line 81) | SecurityNode getSecurityByUuid(final UUID uuid);
    method getExchangeNode (line 83) | ExchangeRate getExchangeNode(final String rateId);
    method getExchangeRateByUuid (line 85) | ExchangeRate getExchangeRateByUuid(final UUID uuid);
    method getSecurities (line 87) | @NotNull List<SecurityNode> getSecurities();
    method removeExchangeRateHistory (line 96) | boolean removeExchangeRateHistory(final ExchangeRate rate);
    method removeSecurityHistory (line 106) | boolean removeSecurityHistory(final SecurityNode node, final SecurityH...
    method removeSecurityHistoryEvent (line 116) | boolean removeSecurityHistoryEvent(final SecurityNode node, final Secu...
    method addExchangeRate (line 118) | void addExchangeRate(ExchangeRate eRate);
    method updateCommodityNode (line 120) | boolean updateCommodityNode(final CommodityNode node);
    method getExchangeRates (line 122) | List<ExchangeRate> getExchangeRates();

FILE: jgnash-core/src/main/java/jgnash/engine/dao/ConfigDAO.java
  type ConfigDAO (line 27) | public interface ConfigDAO extends DAO {
    method getDefaultConfig (line 29) | Config getDefaultConfig();
    method update (line 31) | void update(Config config);

FILE: jgnash-core/src/main/java/jgnash/engine/dao/DAO.java
  type DAO (line 27) | public interface DAO {
    method getObjectByUuid (line 28) | <T> T getObjectByUuid(final Class<T> tClass, final UUID uuid);
    method isDirty (line 30) | boolean isDirty();

FILE: jgnash-core/src/main/java/jgnash/engine/dao/EngineDAO.java
  type EngineDAO (line 29) | public interface EngineDAO extends DAO {
    method getAccountDAO (line 31) | AccountDAO getAccountDAO();
    method getBudgetDAO (line 33) | BudgetDAO getBudgetDAO();
    method getCommodityDAO (line 35) | CommodityDAO getCommodityDAO();
    method getConfigDAO (line 37) | ConfigDAO getConfigDAO();
    method getRecurringDAO (line 39) | RecurringDAO getRecurringDAO();
    method getTagDAO (line 41) | TagDAO getTagDAO();
    method getTransactionDAO (line 43) | TransactionDAO getTransactionDAO();
    method getTrashDAO (line 45) | TrashDAO getTrashDAO();
    method getStoredObjects (line 47) | List<StoredObject> getStoredObjects();
    method getStoredObjects (line 49) | <T extends StoredObject> List<T> getStoredObjects(Class<T> tClass);
    method refresh (line 58) | void refresh(StoredObject object);
    method bulkUpdate (line 67) | void bulkUpdate(List<? extends StoredObject> objectList);
    method shutdown (line 69) | void shutdown();
    method isRemote (line 71) | default boolean isRemote() {

FILE: jgnash-core/src/main/java/jgnash/engine/dao/RecurringDAO.java
  type RecurringDAO (line 30) | public interface RecurringDAO extends DAO {
    method getReminderList (line 32) | List<Reminder> getReminderList();
    method addReminder (line 34) | boolean addReminder(Reminder reminder);
    method getReminderByUuid (line 36) | Reminder getReminderByUuid(final UUID uuid);
    method updateReminder (line 38) | boolean updateReminder(Reminder reminder);

FILE: jgnash-core/src/main/java/jgnash/engine/dao/TagDAO.java
  type TagDAO (line 29) | public interface TagDAO extends DAO {
    method add (line 31) | boolean add(Tag tag);
    method update (line 33) | boolean update(Tag tag);
    method getTags (line 35) | Set<Tag> getTags();

FILE: jgnash-core/src/main/java/jgnash/engine/dao/TransactionDAO.java
  type TransactionDAO (line 30) | public interface TransactionDAO extends DAO {
    method getTransactions (line 37) | List<Transaction> getTransactions();
    method addTransaction (line 39) | boolean addTransaction(Transaction transaction);
    method getTransactionByUuid (line 41) | Transaction getTransactionByUuid(final UUID uuid);
    method removeTransaction (line 43) | boolean removeTransaction(Transaction transaction);
    method getTransactionsWithAttachments (line 50) | List<Transaction> getTransactionsWithAttachments();

FILE: jgnash-core/src/main/java/jgnash/engine/dao/TrashDAO.java
  type TrashDAO (line 29) | public interface TrashDAO extends DAO {
    method getTrashObjects (line 31) | List<TrashObject> getTrashObjects();
    method add (line 33) | void add(TrashObject trashObject);
    method remove (line 35) | void remove(TrashObject trashObject);
    method addEntityTrash (line 37) | void addEntityTrash(Object entity);

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/AbstractJpaDAO.java
  class AbstractJpaDAO (line 53) | abstract class AbstractJpaDAO extends AbstractDAO implements DAO {
    method AbstractJpaDAO (line 77) | AbstractJpaDAO(final EntityManager entityManager, final boolean isRemo...
    method shutDownExecutor (line 84) | static void shutDownExecutor() {
    method query (line 114) | @NotNull
    method merge (line 155) | <T extends StoredObject> T merge(final T object) {
    method persist (line 190) | boolean persist(final Object... objects) {
    method getObjectByUuid (line 232) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/AbstractJpaDataStore.java
  class AbstractJpaDataStore (line 58) | abstract class AbstractJpaDataStore implements DataStore {
    method waitForLockFileRelease (line 82) | private void waitForLockFileRelease(final String fileName, final char[...
    method closeEngine (line 88) | @Override
    method getClientEngine (line 107) | @Override
    method getLocalEngine (line 156) | @Override
    method getFileName (line 205) | @Override
    method isLocal (line 211) | @Override
    method saveAs (line 216) | @Override
    method toString (line 275) | @Override
    method exists (line 280) | private boolean exists(final String fileName) {
    method initEmptyDatabase (line 290) | private boolean initEmptyDatabase(final String fileName) {
    method deleteDatabase (line 322) | protected abstract void deleteDatabase(final String fileName);
    method getLockFileExtension (line 329) | protected abstract String getLockFileExtension();

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaAccountDAO.java
  class JpaAccountDAO (line 46) | class JpaAccountDAO extends AbstractJpaDAO implements AccountDAO {
    method JpaAccountDAO (line 50) | JpaAccountDAO(final EntityManager entityManager, final boolean isRemot...
    method getRootAccount (line 57) | @Override
    method getAccountList (line 100) | @Override
    method addAccount (line 108) | @Override
    method addRootAccount (line 143) | @Override
    method addAccountSecurity (line 151) | @Override
    method getAccountList (line 156) | private List<Account> getAccountList(final AccountType type) {
    method getIncomeAccountList (line 186) | @Override
    method getExpenseAccountList (line 194) | @Override
    method getInvestmentAccountList (line 202) | @Override
    method getAccountByUuid (line 213) | @Override
    method updateAccount (line 221) | @Override
    method toggleAccountVisibility (line 229) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaBudgetDAO.java
  class JpaBudgetDAO (line 33) | class JpaBudgetDAO extends AbstractJpaDAO implements BudgetDAO {
    method JpaBudgetDAO (line 35) | JpaBudgetDAO(final EntityManager entityManager, final boolean isRemote) {
    method add (line 39) | @Override
    method update (line 44) | @Override
    method getBudgets (line 49) | @Override
    method getBudgetByUuid (line 54) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaCommodityDAO.java
  class JpaCommodityDAO (line 49) | class JpaCommodityDAO extends AbstractJpaDAO implements CommodityDAO {
    method JpaCommodityDAO (line 53) | JpaCommodityDAO(final EntityManager entityManager, final boolean isRem...
    method addCommodity (line 60) | @Override
    method addSecurityHistory (line 65) | @Override
    method addSecurityHistoryEvent (line 70) | @Override
    method removeSecurityHistory (line 76) | @Override
    method removeSecurityHistoryEvent (line 81) | @Override
    method addExchangeRateHistory (line 86) | @Override
    method removeExchangeRateHistory (line 91) | @Override
    method getCurrencies (line 99) | @Override
    method getCurrencyByUuid (line 104) | @Override
    method getExchangeNode (line 112) | @Override
    method getExchangeRateByUuid (line 126) | @Override
    method getSecurityByUuid (line 131) | @Override
    method getSecurities (line 139) | @Override
    method getExchangeRates (line 145) | @Override
    method addExchangeRate (line 153) | @Override
    method updateCommodityNode (line 161) | @Override
    method getActiveCurrencies (line 169) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaConfigDAO.java
  class JpaConfigDAO (line 39) | class JpaConfigDAO extends AbstractJpaDAO implements ConfigDAO {
    method JpaConfigDAO (line 43) | JpaConfigDAO(final EntityManager entityManager, final boolean isRemote) {
    method getDefaultConfig (line 50) | @Override
    method update (line 93) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaConfiguration.java
  class JpaConfiguration (line 32) | class JpaConfiguration {
    method JpaConfiguration (line 34) | private JpaConfiguration() {
    method getBaseProperties (line 51) | private static Properties getBaseProperties(final DataStoreType databa...
    method getLocalProperties (line 73) | static Properties getLocalProperties(final DataStoreType dataStoreType...
    method getClientProperties (line 145) | static Properties getClientProperties(final DataStoreType dataStoreTyp...

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaEngineDAO.java
  class JpaEngineDAO (line 44) | class JpaEngineDAO extends AbstractJpaDAO implements EngineDAO {
    method JpaEngineDAO (line 62) | JpaEngineDAO(final EntityManager entityManager, final boolean isRemote) {
    method shutdown (line 66) | @Override
    method getAccountDAO (line 82) | @Override
    method getBudgetDAO (line 90) | @Override
    method getCommodityDAO (line 98) | @Override
    method getConfigDAO (line 106) | @Override
    method getRecurringDAO (line 114) | @Override
    method getTagDAO (line 122) | @Override
    method getTransactionDAO (line 130) | @Override
    method getTrashDAO (line 138) | @Override
    method getStoredObjects (line 146) | @Override
    method getStoredObjects (line 151) | @Override
    method refresh (line 161) | @Override
    method bulkUpdate (line 181) | @Override
    method isRemote (line 204) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaH2DataStore.java
  class JpaH2DataStore (line 34) | public class JpaH2DataStore extends AbstractJpaDataStore {
    method getFileExt (line 40) | @NotNull
    method getType (line 46) | @Override
    method getLockFileExtension (line 51) | @Override
    method deleteDatabase (line 56) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaH2MvDataStore.java
  class JpaH2MvDataStore (line 28) | public class JpaH2MvDataStore extends JpaH2DataStore {
    method getFileExt (line 32) | @NotNull
    method getType (line 38) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaHsqlDataStore.java
  class JpaHsqlDataStore (line 35) | public class JpaHsqlDataStore extends AbstractJpaDataStore {
    method getFileExt (line 44) | @NotNull
    method getType (line 50) | @Override
    method rename (line 55) | @Override
    method getLockFileExtension (line 67) | @Override
    method deleteDatabase (line 72) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaNetworkServer.java
  class JpaNetworkServer (line 61) | public class JpaNetworkServer {
    method startServer (line 93) | public synchronized void startServer(final String fileName, final int ...
    method startServer (line 127) | public synchronized void startServer(final String fileName, final int ...
    method run (line 142) | private synchronized void run(final DataStoreType dataStoreType, final...
    method runH2Server (line 243) | private void runH2Server(final String fileName, final int port, final ...
    method runHsqldbServer (line 278) | private void runHsqldbServer(final String fileName, final int port, fi...
    method stopServer (line 300) | private synchronized void stopServer() {
    method createEngine (line 304) | private Engine createEngine(final DataStoreType dataStoreType, final S...
    method exportXML (line 342) | private static void exportXML(final Engine engine, final String fileNa...

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaRecurringDAO.java
  class JpaRecurringDAO (line 34) | class JpaRecurringDAO extends AbstractJpaDAO implements RecurringDAO {
    method JpaRecurringDAO (line 36) | JpaRecurringDAO(final EntityManager entityManager, final boolean isRem...
    method getReminderList (line 43) | @Override
    method addReminder (line 51) | @Override
    method getReminderByUuid (line 56) | @Override
    method updateReminder (line 62) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaTagDAO.java
  class JpaTagDAO (line 33) | class JpaTagDAO extends AbstractJpaDAO implements TagDAO {
    method JpaTagDAO (line 35) | JpaTagDAO(final EntityManager entityManager, final boolean isRemote) {
    method add (line 39) | @Override
    method update (line 44) | @Override
    method getTags (line 49) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaTransactionDAO.java
  class JpaTransactionDAO (line 40) | class JpaTransactionDAO extends AbstractJpaDAO implements TransactionDAO {
    method JpaTransactionDAO (line 44) | JpaTransactionDAO(final EntityManager entityManager, final boolean isR...
    method getTransactions (line 52) | @Override
    method addTransaction (line 60) | @Override
    method getTransactionByUuid (line 92) | @Override
    method removeTransaction (line 100) | @Override
    method getTransactionsWithAttachments (line 133) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaTrashDAO.java
  class JpaTrashDAO (line 52) | class JpaTrashDAO extends AbstractJpaDAO implements TrashDAO {
    method JpaTrashDAO (line 66) | JpaTrashDAO(final EntityManager entityManager, final boolean isRemote) {
    method stopTrashExecutor (line 77) | void stopTrashExecutor() {
    method getTrashObjects (line 88) | @Override
    method add (line 118) | @Override
    method remove (line 146) | @Override
    method addEntityTrash (line 178) | @Override
    method cleanupEntityTrash (line 206) | private void cleanupEntityTrash() {

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/JpaTrashEntity.java
  class JpaTrashEntity (line 36) | @Entity
    method JpaTrashEntity (line 64) | @SuppressWarnings("unused")
    method JpaTrashEntity (line 69) | JpaTrashEntity(final Object entity) {
    method getDate (line 74) | public LocalDateTime getDate() {
    method getClassName (line 78) | String getClassName() {
    method getEntityId (line 82) | long getEntityId() {
    method getBasicEntityId (line 86) | private static long getBasicEntityId(final Object object) {
    method setPending (line 99) | void setPending() {
    method isPending (line 103) | boolean isPending() {

FILE: jgnash-core/src/main/java/jgnash/engine/jpa/SqlUtils.java
  class SqlUtils (line 47) | public class SqlUtils {
    method SqlUtils (line 63) | private SqlUtils() {
    method changePassword (line 66) | public static boolean changePassword(final String fileName, final char...
    method getFileVersion (line 103) | public static float getFileVersion(final String fileName, final char[]...
    method getTableAndColumnNames (line 162) | public static Set<String> getTableAndColumnNames(final String fileName) {
    method dropColumn (line 200) | @SuppressWarnings("SameParameterValue")
    method isConnectionValid (line 249) | static boolean isConnectionValid(final String url) {
    method waitForLockFileRelease (line 274) | static void waitForLockFileRelease(final DataStoreType dataStoreType, ...

FILE: jgnash-core/src/main/java/jgnash/engine/message/ChannelEvent.java
  type ChannelEvent (line 25) | public enum ChannelEvent {

FILE: jgnash-core/src/main/java/jgnash/engine/message/LocalServerListener.java
  type LocalServerListener (line 26) | public interface LocalServerListener {
    method messagePosted (line 27) | void messagePosted(String event);

FILE: jgnash-core/src/main/java/jgnash/engine/message/Message.java
  class Message (line 38) | public class Message implements Serializable, Cloneable {
    method Message (line 59) | @Deprecated
    method Message (line 63) | public Message(final MessageChannel channel, final ChannelEvent event,...
    method Message (line 67) | private Message(final MessageChannel channel, final ChannelEvent event...
    method getChannel (line 73) | public MessageChannel getChannel() {
    method getEvent (line 77) | public ChannelEvent getEvent() {
    method setObject (line 87) | public void setObject(@NotNull final MessageProperty key, @NotNull fin...
    method getObject (line 98) | @SuppressWarnings("unchecked")
    method getSource (line 103) | public String getSource() {
    method setRemote (line 107) | void setRemote() {
    method isRemote (line 111) | public boolean isRemote() {
    method writeObject (line 123) | @SuppressWarnings("unused")
    method readObject (line 149) | @SuppressWarnings({"unchecked", "unused"})
    method clone (line 168) | @Override
    method toString (line 182) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/message/MessageBus.java
  class MessageBus (line 49) | public class MessageBus {
    method MessageBus (line 71) | private MessageBus(final String busName) {
    method setRemote (line 83) | public synchronized boolean setRemote(final String host, final int por...
    method setLocal (line 91) | public synchronized void setLocal() {
    method getInstance (line 100) | public static synchronized MessageBus getInstance() {
    method getInstance (line 104) | public static synchronized MessageBus getInstance(final String name) {
    method getRemoteDataBasePath (line 108) | public String getRemoteDataBasePath() {
    method getRemoteDataStoreType (line 115) | public DataStoreType getRemoteDataStoreType() {
    method disconnectFromServer (line 122) | private void disconnectFromServer() {
    method shutDownRemoteServer (line 136) | public void shutDownRemoteServer(final String remoteHost, final int re...
    method connectToServer (line 148) | private boolean connectToServer(final String remoteHost, final int rem...
    method registerListener (line 177) | public void registerListener(final MessageListener listener, final Mes...
    method logStackTrace (line 191) | private static void logStackTrace() {
    method unregisterListener (line 201) | public void unregisterListener(final MessageListener listener, final M...
    method containsListener (line 216) | private boolean containsListener(final MessageListener listener, final...
    method fireBlockingEvent (line 235) | public void fireBlockingEvent(final Message message) {
    method fireEvent (line 250) | public Future<Void> fireEvent(final Message message) {

FILE: jgnash-core/src/main/java/jgnash/engine/message/MessageBusClient.java
  class MessageBusClient (line 69) | class MessageBusClient {
    method MessageBusClient (line 96) | MessageBusClient(final String host, final int port, final String name) {
    method getDataBasePath (line 104) | String getDataBasePath() {
    method getDataStoreType (line 108) | DataStoreType getDataStoreType() {
    method getConnectionTimeout (line 112) | private static int getConnectionTimeout() {
    method connectToServer (line 116) | boolean connectToServer(final char[] password) {
    class MessageBusClientInitializer (line 152) | private class MessageBusClientInitializer extends ChannelInitializer<S...
      method initChannel (line 154) | @Override
    class MessageBusClientHandler (line 171) | @ChannelHandler.Sharable
      method decrypt (line 176) | private String decrypt(final Object object) {
      method channelRead (line 188) | @Override
      method exceptionCaught (line 227) | @Override
    method disconnectFromServer (line 235) | void disconnectFromServer() {
    method sendRemoteMessage (line 255) | synchronized void sendRemoteMessage(final Message message) {
    method sendRemoteShutdownRequest (line 264) | void sendRemoteShutdownRequest() {
    method sendRemoteMessage (line 268) | private void sendRemoteMessage(final String message) {
    method processRemoteMessage (line 296) | private void processRemoteMessage(final Message message) {

FILE: jgnash-core/src/main/java/jgnash/engine/message/MessageBusServer.java
  class MessageBusServer (line 58) | public class MessageBusServer {
    method MessageBusServer (line 90) | public MessageBusServer(final int port) {
    method startServer (line 94) | public boolean startServer(final DataStoreType dataStoreType, final St...
    method stopServer (line 134) | public void stopServer() {
    method addLocalListener (line 155) | public void addLocalListener(final LocalServerListener listener) {
    method removeLocalListener (line 165) | public void removeLocalListener(final LocalServerListener listener) {
    method encrypt (line 181) | private String encrypt(final String message) {
    method decrypt (line 188) | private String decrypt(final String message) {
    class MessageBusRemoteInitializer (line 200) | private class MessageBusRemoteInitializer extends ChannelInitializer<S...
      method initChannel (line 202) | @Override
    class MessageBusServerHandler (line 218) | @ChannelHandler.Sharable
      method channelActive (line 221) | @Override
      method channelInactive (line 232) | @Override
      method channelRead (line 238) | @Override
      method processMessage (line 247) | private void processMessage(final String message) {
      method exceptionCaught (line 268) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/message/MessageChannel.java
  type MessageChannel (line 25) | public enum MessageChannel {

FILE: jgnash-core/src/main/java/jgnash/engine/message/MessageListener.java
  type MessageListener (line 25) | public interface MessageListener {
    method messagePosted (line 26) | void messagePosted(Message message);

FILE: jgnash-core/src/main/java/jgnash/engine/message/MessageProperty.java
  type MessageProperty (line 25) | public enum MessageProperty {

FILE: jgnash-core/src/main/java/jgnash/engine/message/MessageProxy.java
  class MessageProxy (line 36) | public class MessageProxy {
    method addMessageListener (line 58) | public final void addMessageListener(final MessageListener messageList...
    method removeMessageListener (line 74) | public final void removeMessageListener(final MessageListener messageL...
    method forwardMessage (line 99) | public final void forwardMessage(final Message message) {

FILE: jgnash-core/src/main/java/jgnash/engine/message/XStreamFactory.java
  class XStreamFactory (line 31) | class XStreamFactory {
    method XStreamFactory (line 32) | private XStreamFactory() {}
    method getInstance (line 34) | static XStream getInstance() {

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/DailyReminder.java
  class DailyReminder (line 31) | @Entity
    method DailyReminder (line 34) | public DailyReminder() {
    method getIterator (line 37) | @Override
    method getReminderType (line 42) | @Override
    class DailyIterator (line 47) | private class DailyIterator implements RecurringIterator {
      method DailyIterator (line 50) | DailyIterator() {
      method next (line 58) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/MonthlyReminder.java
  class MonthlyReminder (line 37) | @Entity
    method MonthlyReminder (line 49) | public MonthlyReminder() {
    method getIterator (line 52) | @Override
    method getType (line 62) | public int getType() {
    method getReminderType (line 66) | @Override
    method setType (line 76) | public void setType(int type) {
    class MonthlyIterator (line 82) | private class MonthlyIterator implements RecurringIterator {
      method MonthlyIterator (line 85) | MonthlyIterator() {
      method next (line 115) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/OneTimeReminder.java
  class OneTimeReminder (line 29) | @Entity
    method OneTimeReminder (line 32) | public OneTimeReminder() {
    method getIterator (line 35) | @Override
    method getReminderType (line 40) | @Override
    class OneTimeIterator (line 45) | private class OneTimeIterator implements RecurringIterator {
      method next (line 49) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/PendingReminder.java
  class PendingReminder (line 29) | public class PendingReminder implements Comparable<PendingReminder> {
    method PendingReminder (line 43) | public PendingReminder(final @NotNull Reminder reminder, final @NotNul...
    method compareTo (line 48) | @Override
    method equals (line 61) | @Override
    method hashCode (line 70) | @Override
    method isApproved (line 82) | public synchronized final boolean isApproved() {
    method setApproved (line 91) | public synchronized final void setApproved(final boolean approved) {
    method getCommitDate (line 100) | public synchronized final LocalDate getCommitDate() {
    method getReminder (line 109) | public synchronized final Reminder getReminder() {
    method toString (line 113) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/RecurringIterator.java
  type RecurringIterator (line 27) | public interface RecurringIterator {
    method next (line 34) | LocalDate next();

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/Reminder.java
  class Reminder (line 41) | @Entity
    method compareTo (line 100) | @Override
    method getDaysAdvance (line 123) | public int getDaysAdvance() {
    method getDescription (line 132) | public String getDescription() {
    method getEndDate (line 141) | public @Nullable LocalDate getEndDate() {
    method getIterator (line 150) | public abstract RecurringIterator getIterator();
    method getLastDate (line 156) | public @Nullable LocalDate getLastDate() {
    method getStartDate (line 165) | public @NotNull LocalDate getStartDate() {
    method getTransaction (line 175) | public Transaction getTransaction() {
    method getReminderType (line 186) | public abstract ReminderType getReminderType();
    method equals (line 188) | @Override
    method isAutoCreate (line 200) | public boolean isAutoCreate() {
    method isEnabled (line 209) | public boolean isEnabled() {
    method setDaysAdvance (line 219) | public void setDaysAdvance(final int advanceRemindDays) {
    method setAutoCreate (line 227) | public void setAutoCreate(final boolean autoCreate) {
    method setDescription (line 236) | public void setDescription(@NotNull final String description) {
    method setEnabled (line 246) | public void setEnabled(final boolean enabled) {
    method setEndDate (line 255) | public void setEndDate(final @Nullable LocalDate endDate) {
    method setLastDate (line 264) | private void setLastDate(final @NotNull LocalDate lastDate) {
    method setLastDate (line 271) | public void setLastDate() {
    method setStartDate (line 280) | public void setStartDate(final @NotNull LocalDate startDate) {
    method setTransaction (line 289) | public void setTransaction(final Transaction transaction) {
    method getIncrement (line 298) | public int getIncrement() {
    method setIncrement (line 307) | public void setIncrement(final int increment) {
    method toString (line 311) | @Override
    method setNotes (line 321) | public void setNotes(final String notes) {
    method getNotes (line 330) | public String getNotes() {
    method setAccount (line 339) | public void setAccount(final Account account) {
    method getAccount (line 348) | public Account getAccount() {
    method clone (line 352) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/ReminderType.java
  type ReminderType (line 28) | public enum ReminderType {
    method ReminderType (line 38) | ReminderType(String name) {
    method toString (line 45) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/WeeklyReminder.java
  class WeeklyReminder (line 32) | @Entity
    method WeeklyReminder (line 35) | public WeeklyReminder() {
    method getReminderType (line 39) | @Override
    method getIterator (line 44) | @Override
    class WeeklyIterator (line 49) | private class WeeklyIterator implements RecurringIterator {
      method WeeklyIterator (line 52) | WeeklyIterator() {
      method next (line 65) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/recurring/YearlyReminder.java
  class YearlyReminder (line 31) | @Entity
    method YearlyReminder (line 34) | public YearlyReminder() {
    method getIterator (line 38) | @Override
    method getReminderType (line 43) | @Override
    class YearlyIterator (line 48) | private class YearlyIterator implements RecurringIterator {
      method YearlyIterator (line 51) | YearlyIterator() {
      method next (line 66) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/AbstractXStreamContainer.java
  class AbstractXStreamContainer (line 86) | abstract class AbstractXStreamContainer {
    method AbstractXStreamContainer (line 96) | AbstractXStreamContainer(final Path path) {
    method createBackup (line 105) | static void createBackup(final Path origFile) {
    method query (line 133) | @SuppressWarnings("unchecked")
    method configureXStream (line 139) | static XStream configureXStream(final XStreamJVM9 xstream) {
    method acquireFileLock (line 238) | boolean acquireFileLock() {
    method releaseFileLock (line 242) | void releaseFileLock() {
    method commit (line 246) | abstract void commit();
    method set (line 248) | boolean set(final StoredObject object) {
    method delete (line 268) | void delete(final StoredObject object) {
    method get (line 278) | StoredObject get(final UUID uuid) {
    method query (line 297) | <T extends StoredObject> List<T> query(final Class<T> clazz) {
    method close (line 307) | void close() {
    method getFileName (line 311) | String getFileName() {
    method asList (line 325) | List<StoredObject> asList() {
    class XStreamOut (line 335) | static class XStreamOut extends XStreamJVM9 {
      method XStreamOut (line 337) | XStreamOut(final ReflectionProvider reflectionProvider, final Hierar...
      method wrapMapper (line 341) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/AbstractXStreamDAO.java
  class AbstractXStreamDAO (line 35) | abstract class AbstractXStreamDAO extends AbstractDAO implements DAO {
    method AbstractXStreamDAO (line 50) | AbstractXStreamDAO(@NotNull final AbstractXStreamContainer container) {
    method getObjectByUuid (line 56) | private StoredObject getObjectByUuid(final UUID uuid) {
    method getObjectByUuid (line 60) | @Override
    method commit (line 72) | final void commit() {
    method commitAndReset (line 80) | final void commitAndReset() {

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/BinaryContainer.java
  class BinaryContainer (line 58) | class BinaryContainer extends AbstractXStreamContainer {
    method BinaryContainer (line 60) | BinaryContainer(final Path path) {
    method commit (line 64) | @Override
    method writeBinary (line 69) | private synchronized void writeBinary() {
    method writeBinary (line 91) | static synchronized void writeBinary(@NotNull final Collection<StoredO...
    method readBinary (line 151) | void readBinary() {

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/BinaryXStreamDataStore.java
  class BinaryXStreamDataStore (line 43) | public class BinaryXStreamDataStore implements DataStore {
    method closeEngine (line 56) | @Override
    method getLocalEngine (line 69) | @Override
    method isLocal (line 93) | @Override
    method getFileExt (line 104) | @Override
    method getFileName (line 115) | @Override
    method getType (line 120) | @Override
    method getClientEngine (line 131) | @Override
    method toString (line 141) | @Override
    method saveAs (line 149) | @Override
    method getFileVersion (line 161) | public static float getFileVersion(final Path file) {

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/StoredObjectReflectionProvider.java
  class StoredObjectReflectionProvider (line 33) | final class StoredObjectReflectionProvider extends PureJavaReflectionPro...
    method StoredObjectReflectionProvider (line 40) | StoredObjectReflectionProvider(final List<StoredObject> objects) {
    method newInstance (line 44) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XMLContainer.java
  class XMLContainer (line 57) | class XMLContainer extends AbstractXStreamContainer {
    method XMLContainer (line 59) | XMLContainer(final Path path) {
    method writeXML (line 71) | static synchronized void writeXML(@NotNull final Collection<StoredObje...
    method commit (line 132) | @Override
    method writeXML (line 137) | private synchronized void writeXML() {
    method readXML (line 151) | void readXML() {

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XMLDataStore.java
  class XMLDataStore (line 43) | public class XMLDataStore implements DataStore {
    method closeEngine (line 56) | @Override
    method getLocalEngine (line 69) | @Override
    method isLocal (line 93) | @Override
    method getFileExt (line 104) | @NotNull
    method getFileName (line 115) | @Override
    method getType (line 120) | @Override
    method getClientEngine (line 131) | @Override
    method toString (line 142) | @Override
    method saveAs (line 147) | @Override
    method getFileVersion (line 159) | public static float getFileVersion(final Path file) {

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamAccountDAO.java
  class XStreamAccountDAO (line 36) | class XStreamAccountDAO extends AbstractXStreamDAO implements AccountDAO {
    method XStreamAccountDAO (line 40) | XStreamAccountDAO(final AbstractXStreamContainer container) {
    method getRootAccount (line 44) | @Override
    method getAccountList (line 67) | @Override
    method addAccount (line 72) | @Override
    method addRootAccount (line 80) | @Override
    method addAccountSecurity (line 88) | @Override
    method getIncomeAccountList (line 96) | @Override
    method getExpenseAccountList (line 101) | @Override
    method getInvestmentAccountList (line 106) | @Override
    method getAccountByUuid (line 111) | @Override
    method updateAccount (line 116) | @Override
    method toggleAccountVisibility (line 122) | @Override
    method getAccountByType (line 128) | private List<Account> getAccountByType(final AccountType type) {

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamBudgetDAO.java
  class XStreamBudgetDAO (line 31) | class XStreamBudgetDAO extends AbstractXStreamDAO implements BudgetDAO {
    method XStreamBudgetDAO (line 33) | XStreamBudgetDAO(final AbstractXStreamContainer container) {
    method add (line 37) | @Override
    method update (line 45) | @Override
    method getBudgets (line 53) | @Override
    method getBudgetByUuid (line 58) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamCommodityDAO.java
  class XStreamCommodityDAO (line 41) | class XStreamCommodityDAO extends AbstractXStreamDAO implements Commodit...
    method XStreamCommodityDAO (line 43) | XStreamCommodityDAO(final AbstractXStreamContainer container) {
    method addCommodity (line 47) | @Override
    method addExchangeRateHistory (line 54) | @Override
    method addSecurityHistory (line 60) | @Override
    method addSecurityHistoryEvent (line 66) | @Override
    method getActiveCurrencies (line 72) | @Override
    method getCurrencies (line 83) | @Override
    method getCurrencyByUuid (line 88) | @Override
    method getSecurityByUuid (line 93) | @Override
    method getExchangeNode (line 98) | @Override
    method getExchangeRateByUuid (line 112) | @Override
    method getSecurities (line 125) | @Override
    method getExchangeRates (line 130) | @Override
    method removeExchangeRateHistory (line 135) | @Override
    method removeSecurityHistory (line 141) | @Override
    method removeSecurityHistoryEvent (line 147) | @Override
    method addExchangeRate (line 153) | @Override
    method updateCommodityNode (line 159) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamConfigDAO.java
  class XStreamConfigDAO (line 31) | class XStreamConfigDAO extends AbstractXStreamDAO implements ConfigDAO {
    method XStreamConfigDAO (line 35) | XStreamConfigDAO(final AbstractXStreamContainer container) {
    method getDefaultConfig (line 39) | @Override
    method update (line 59) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamEngineDAO.java
  class XStreamEngineDAO (line 45) | class XStreamEngineDAO extends AbstractXStreamDAO implements EngineDAO {
    method XStreamEngineDAO (line 69) | XStreamEngineDAO(final AbstractXStreamContainer container) {
    method shutdown (line 97) | @Override
    method getAccountDAO (line 104) | @Override
    method getBudgetDAO (line 112) | @Override
    method getCommodityDAO (line 120) | @Override
    method getConfigDAO (line 128) | @Override
    method getRecurringDAO (line 136) | @Override
    method getTransactionDAO (line 144) | @Override
    method getTagDAO (line 152) | @Override
    method getTrashDAO (line 160) | @Override
    method getStoredObjects (line 168) | @Override
    method getStoredObjects (line 173) | @Override
    method refresh (line 178) | @Override
    method bulkUpdate (line 183) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamJVM9.java
  class XStreamJVM9 (line 59) | public class XStreamJVM9 extends XStream {
    method XStreamJVM9 (line 61) | public XStreamJVM9(final ReflectionProvider reflectionProvider, final ...
    method setupConverters (line 65) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamRecurringDAO.java
  class XStreamRecurringDAO (line 31) | class XStreamRecurringDAO extends AbstractXStreamDAO implements Recurrin...
    method XStreamRecurringDAO (line 33) | XStreamRecurringDAO(final AbstractXStreamContainer container) {
    method getReminderList (line 37) | @Override
    method addReminder (line 42) | @Override
    method getReminderByUuid (line 49) | @Override
    method updateReminder (line 54) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamTagDAO.java
  class XStreamTagDAO (line 31) | class XStreamTagDAO extends AbstractXStreamDAO implements TagDAO {
    method XStreamTagDAO (line 33) | XStreamTagDAO(final AbstractXStreamContainer container) {
    method add (line 37) | @Override
    method update (line 45) | @Override
    method getTags (line 53) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamTransactionDAO.java
  class XStreamTransactionDAO (line 32) | class XStreamTransactionDAO extends AbstractXStreamDAO implements Transa...
    method XStreamTransactionDAO (line 34) | XStreamTransactionDAO(final AbstractXStreamContainer container) {
    method getTransactions (line 38) | @Override
    method addTransaction (line 43) | @Override
    method getTransactionByUuid (line 51) | @Override
    method removeTransaction (line 56) | @Override
    method getTransactionsWithAttachments (line 62) | @Override

FILE: jgnash-core/src/main/java/jgnash/engine/xstream/XStreamTrashDAO.java
  class XStreamTrashDAO (line 31) | class XStreamTrashDAO extends AbstractXStreamDAO implements TrashDAO {
    method XStreamTrashDAO (line 35) | XStreamTrashDAO(final AbstractXStreamContainer container) {
    method getTrashObjects (line 39) | @Override
    method add (line 44) | @Override
    method remove (line 50) | @Override
    method addEntityTrash (line 60) | @Override

FILE: jgnash-core/src/main/java/jgnash/net/AbstractAuthenticator.java
  class AbstractAuthenticator (line 30) | public class AbstractAuthenticator extends Authenticator {
    method setName (line 46) | public static void setName(String name) {
    method getName (line 51) | public static String getName() {
    method setHost (line 56) | public static void setHost(String host) {
    method getHost (line 61) | public static String getHost() {
    method setPort (line 66) | public static void setPort(int port) {
    method getPort (line 71) | public static int getPort() {
    method setPassword (line 76) | public static void setPassword(String password) {
    method getPassword (line 81) | public static String getPassword() {
    method setUseAuthentication (line 86) | public static void setUseAuthentication(boolean use) {
    method setUseProxy (line 91) | public static void setUseProxy(boolean use) {
    method isProxyUsed (line 96) | public static boolean isProxyUsed() {
    method isAuthenticationUsed (line 101) | public static boolean isAuthenticationUsed() {

FILE: jgnash-core/src/main/java/jgnash/net/ConnectionFactory.java
  class ConnectionFactory (line 35) | public class ConnectionFactory {
    method ConnectionFactory (line 47) | private ConnectionFactory() {
    method setConnectionTimeout (line 55) | public synchronized static void setConnectionTimeout(final int seconds) {
    method getConnectionTimeout (line 70) | public synchronized static int getConnectionTimeout() {
    method openConnection (line 75) | @Nullable
    method openConnection (line 85) | @Nullable

FILE: jgnash-core/src/main/java/jgnash/net/YahooCrumbManager.java
  class YahooCrumbManager (line 43) | public class YahooCrumbManager {
    method YahooCrumbManager (line 61) | private YahooCrumbManager() {
    method authorize (line 72) | public static synchronized boolean authorize(final String symbol) {
    method clearAuthorization (line 155) | public static synchronized void clearAuthorization() {
    method getCookie (line 162) | public static synchronized String getCookie() {
    method getCrumb (line 166) | public static synchronized String getCrumb() {

FILE: jgnash-core/src/main/java/jgnash/net/currency/CurrencyConverterParser.java
  class CurrencyConverterParser (line 40) | public class CurrencyConverterParser implements CurrencyParser {
    method parse (line 44) | @Override
    method getConversion (line 99) | @Override

FILE: jgnash-core/src/main/java/jgnash/net/currency/CurrencyParser.java
  type CurrencyParser (line 27) | interface CurrencyParser {
    method getConversion (line 29) | BigDecimal getConversion();
    method parse (line 31) | boolean parse(String source, String target);

FILE: jgnash-core/src/main/java/jgnash/net/currency/CurrencyUpdateFactory.java
  class CurrencyUpdateFactory (line 34) | public class CurrencyUpdateFactory {
    method CurrencyUpdateFactory (line 38) | private CurrencyUpdateFactory() {
    method setUpdateOnStartup (line 41) | public static void setUpdateOnStartup(final boolean update) {
    method getUpdateOnStartup (line 49) | public static boolean getUpdateOnStartup() {
    method getExchangeRate (line 61) | public static Optional<BigDecimal> getExchangeRate(final CurrencyNode ...
    class UpdateExchangeRatesCallable (line 77) | public static class UpdateExchangeRatesCallable implements Callable<Bo...
      method call (line 79) | @Override

FILE: jgnash-core/src/main/java/jgnash/net/security/NullParser.java
  class NullParser (line 39) | public class NullParser implements SecurityParser {
    method setTokenSupplier (line 46) | @Override
    method retrieveHistoricalPrice (line 51) | @Override
    method retrieveHistoricalEvents (line 56) | @Override

FILE: jgnash-core/src/main/java/jgnash/net/security/SecurityParser.java
  type SecurityParser (line 36) | public interface SecurityParser {
    method setTokenSupplier (line 43) | void setTokenSupplier(@NotNull final Supplier<String> supplier);
    method retrieveHistoricalPrice (line 54) | @NotNull
    method retrieveHistoricalEvents (line 66) | @NotNull

FILE: jgnash-core/src/main/java/jgnash/net/security/UpdateFactory.java
  class UpdateFactory (line 60) | public class UpdateFactory {
    method addLogHandler (line 74) | public static void addLogHandler(final Handler handler) {
    method setUpdateOnStartup (line 78) | public static void setUpdateOnStartup(final boolean update) {
    method shouldAutomaticUpdateOccur (line 95) | public static boolean shouldAutomaticUpdateOccur(final LocalDateTime l...
    method getUpdateOnStartup (line 139) | public static boolean getUpdateOnStartup() {
    method updateSecurityEvents (line 151) | public static void updateSecurityEvents(final SecurityNode node) {
    method updateOne (line 155) | public static boolean updateOne(final SecurityNode node) {
    method waitForCallable (line 159) | private static boolean waitForCallable(final Callable<Boolean> callabl...
    method downloadHistory (line 178) | public static List<SecurityHistoryNode> downloadHistory(final Security...
    class UpdateSecurityNodeCallable (line 212) | public static class UpdateSecurityNodeCallable implements Callable<Boo...
      method UpdateSecurityNodeCallable (line 216) | public UpdateSecurityNodeCallable(@NotNull final SecurityNode securi...
      method call (line 220) | @Override
    class UpdateSecurityNodeEventsCallable (line 259) | public static class UpdateSecurityNodeEventsCallable implements Callab...
      method UpdateSecurityNodeEventsCallable (line 263) | public UpdateSecurityNodeEventsCallable(@NotNull final SecurityNode ...
      method call (line 267) | @Override
    method getTokenSupplier (line 316) | private static Supplier<String> getTokenSupplier(final SecurityParser ...
    method UpdateFactory (line 328) | private UpdateFactory() {

FILE: jgnash-core/src/main/java/jgnash/net/security/YahooEventParser.java
  class YahooEventParser (line 61) | public class YahooEventParser implements SecurityParser {
    method retrieveHistoricalEvents (line 69) | public Set<SecurityHistoryEvent> retrieveHistoricalEvents(@NotNull fin...
    method retrieveNewDividends (line 93) | private static List<SecurityHistoryEvent> retrieveNewDividends(@NotNul...
    method setTokenSupplier (line 128) | @Override
    method retrieveHistoricalPrice (line 133) | @Override
    method retrieveNewSplits (line 174) | private static List<SecurityHistoryEvent> retrieveNewSplits(@NotNull f...
    method parseStream (line 213) | private static <T> List<T> parseStream(@NotNull final SecurityNode sec...
    method parseYahooDate (line 278) | private static LocalDate parseYahooDate(final String string) {
    method buildYahooQuery (line 285) | private static String buildYahooQuery(final SecurityNode securityNode,...

FILE: jgnash-core/src/main/java/jgnash/net/security/iex/IEXParser.java
  class IEXParser (line 59) | public class IEXParser implements SecurityParser {
    type IEXChartPeriod (line 67) | private enum IEXChartPeriod {
      method IEXChartPeriod (line 80) | IEXChartPeriod(final String api, final int days) {
      method getPath (line 85) | public static String getPath(final int days) {
    method setUseSandbox (line 103) | public void setUseSandbox() {
    method setTokenSupplier (line 112) | @Override
    method retrieveHistoricalPrice (line 130) | @Override
    method retrieveHistoricalEvents (line 198) | @Override
    method retrieveSplitEvents (line 217) | private Set<SecurityHistoryEvent> retrieveSplitEvents(final SecurityNo...
    method retrieveDividendEvents (line 271) | private Set<SecurityHistoryEvent> retrieveDividendEvents(final Securit...
    method isDataOkay (line 331) | private static boolean isDataOkay(final String line) {

FILE: jgnash-core/src/main/java/jgnash/report/BalanceByMonthCSVReport.java
  class BalanceByMonthCSVReport (line 53) | public class BalanceByMonthCSVReport {
    method BalanceByMonthCSVReport (line 81) | public BalanceByMonthCSVReport(@NotNull final String fileName, @NotNul...
    method run (line 96) | public void run() {
    method getLastDays (line 119) | private static LocalDate[] getLastDays(final LocalDate startDate, fina...
    method buildLists (line 135) | private void buildLists(final Account account, final LocalDate[] dates) {
    method writeHorizontalFormatCSVFile (line 159) | private void writeHorizontalFormatCSVFile(final String fileName, final...
    method writeVerticalCSVFileFormat (line 194) | private void writeVerticalCSVFileFormat(final String fileName, final L...

FILE: jgnash-core/src/main/java/jgnash/report/ProfitLossTextReport.java
  class ProfitLossTextReport (line 53) | public class ProfitLossTextReport {
    method ProfitLossTextReport (line 90) | public ProfitLossTextReport(final String fileName, final LocalDate sta...
    method run (line 103) | public void run() {
    method generateReport (line 108) | private void generateReport() {
    method writeFile (line 164) | private void writeFile() {
    method getBalances (line 176) | private List<BigDecimal> getBalances(final Account a, final AccountTyp...
    method formatDecimal (line 206) | private String formatDecimal(final BigDecimal balance) {
    method formatAccountName (line 226) | private static String formatAccountName(final String name) {

FILE: jgnash-core/src/main/java/jgnash/report/ReportPeriod.java
  type ReportPeriod (line 27) | public enum ReportPeriod {
    method ReportPeriod (line 35) | ReportPeriod(final String description) {
    method toString (line 39) | @Override

FILE: jgnash-core/src/main/java/jgnash/report/ReportPeriodUtils.java
  class ReportPeriodUtils (line 33) | public class ReportPeriodUtils {
    method ReportPeriodUtils (line 35) | private ReportPeriodUtils() {
    class Descriptor (line 39) | public static class Descriptor {
      method Descriptor (line 45) | private Descriptor(@NotNull final LocalDate startDate, @NotNull fina...
      method getStartDate (line 52) | public LocalDate getStartDate() {
      method getEndDate (line 56) | public LocalDate getEndDate() {
      method getLabel (line 60) | public String getLabel() {
    method getDescriptors (line 65) | public static List<Descriptor> getDescriptors(@NotNull ReportPeriod re...

FILE: jgnash-core/src/main/java/jgnash/text/NumericFormats.java
  class NumericFormats (line 44) | public final class NumericFormats {
    method NumericFormats (line 68) | private NumericFormats() {
    method getKnownFullPatterns (line 72) | public static Set<String> getKnownFullPatterns() {
    method getKnownShortPatterns (line 90) | public static Set<String> getKnownShortPatterns() {
    method getFullFormatPattern (line 109) | public static String getFullFormatPattern() {
    method getShortFormatPattern (line 113) | public static String getShortFormatPattern() {
    method getFormatPattern (line 126) | private static String getFormatPattern(@NotNull final String key, fina...
    method setFullFormatPattern (line 133) | public static void setFullFormatPattern(@NotNull final String pattern) {
    method setShortFormatPattern (line 141) | public static void setShortFormatPattern(@NotNull final String pattern) {
    method setFormatPattern (line 149) | private static void setFormatPattern(@NotNull final String key, @NotNu...
    method getShortCommodityFormat (line 164) | public static NumberFormat getShortCommodityFormat(@NotNull final Comm...
    method getFullCommodityFormat (line 210) | public static NumberFormat getFullCommodityFormat(@NotNull final Commo...
    method generateFullFormat (line 225) | private static DecimalFormat generateFullFormat(final CommodityNode no...
    method getConversion (line 258) | private static String getConversion(final String cur1, final String cu...
    method getConversion (line 262) | public static String getConversion(final CommodityNode cur1, final Com...
    method getFixedPrecisionFormat (line 266) | public static NumberFormat getFixedPrecisionFormat(final int scale) {
    method getPercentageFormat (line 274) | public static NumberFormat getPercentageFormat() {
    class CommodityListener (line 282) | private static class CommodityListener implements MessageListener {
      method messagePosted (line 284) | @Override

FILE: jgnash-core/src/main/java/jgnash/time/DateUtils.java
  class DateUtils (line 59) | public class DateUtils {
    method DateUtils (line 91) | private DateUtils() {
    method setShortDateFormatPattern (line 94) | public static void setShortDateFormatPattern(@NotNull final String pat...
    method getAvailableShortDateFormats (line 106) | public static Set<String> getAvailableShortDateFormats() {
    method getShortDatePattern (line 120) | public static String getShortDatePattern() {
    method getShortDateTimePattern (line 139) | private static String getShortDateTimePattern() {
    method getShortDateManualEntryPattern (line 154) | private static String getShortDateManualEntryPattern() {
    method getExcelDateFormatter (line 174) | public static DateTimeFormatter getExcelDateFormatter() {
    method getExcelTimestampFormatter (line 184) | public static DateTimeFormatter getExcelTimestampFormatter() {
    method asDate (line 199) | public static Date asDate(final LocalDate localDate) {
    method asDate (line 209) | public static Date asDate(final LocalDateTime localDate) {
    method asLocalDate (line 219) | public static LocalDate asLocalDate(final Date date) {
    method asLocalDate (line 233) | public static LocalDate asLocalDate(final long milli) {
    method asEpochMilli (line 243) | public static long asEpochMilli(final LocalDate localDate) {
    method after (line 255) | public static boolean after(final LocalDate d1, final LocalDate d2) {
    method before (line 267) | public static boolean before(final LocalDate d1, final LocalDate d2) {
    method before (line 279) | public static boolean before(final LocalDate d1, final LocalDate d2, f...
    method between (line 296) | public static boolean between(final LocalDate d1, final LocalDate d2, ...
    method getDaysInYear (line 306) | public static int getDaysInYear(final int year) {
    method getFirstDayBiWeekly (line 316) | public static LocalDate[] getFirstDayBiWeekly(final int year) {
    method getFirstDayBiWeekly (line 329) | public static LocalDate[] getFirstDayBiWeekly(final Month statingMonth...
    method getFirstDayMonthly (line 340) | public static LocalDate[] getFirstDayMonthly(final int year) {
    method getFirstDayMonthly (line 353) | public static LocalDate[] getFirstDayMonthly(final Month month, final ...
    method getFirstDayMonthly (line 367) | private static LocalDate[] getFirstDayMonthly(final Month month, final...
    method getFirstDayOfTheMonth (line 395) | public static LocalDate getFirstDayOfTheMonth(final LocalDate date) {
    method getFirstDayOfTheMonth (line 406) | private static LocalDate getFirstDayOfTheMonth(final int month, final ...
    method getFirstDayQuarterly (line 416) | public static LocalDate[] getFirstDayQuarterly(final int year) {
    method getFirstDayQuarterly (line 426) | public static LocalDate[] getFirstDayQuarterly(final Month statingMont...
    method getFirstDayWeekly (line 438) | public static LocalDate[] getFirstDayWeekly(final int year) {
    method getFirstDayWeekly (line 451) | public static LocalDate[] getFirstDayWeekly(final Month statingMonth, ...
    method getFirstDayWeekly (line 465) | public static LocalDate[] getFirstDayWeekly(final Month statingMonth, ...
    method getNumberOfWeeksInYear (line 503) | public static int getNumberOfWeeksInYear(final int year) {
    method getAllDays (line 514) | public static LocalDate[] getAllDays(final int year) {
    method getAllDays (line 518) | public static LocalDate[] getAllDays(final Month statingMonth, final i...
    method getLastDayOfTheMonth (line 539) | public static LocalDate getLastDayOfTheMonth(@NotNull final LocalDate ...
    method getLastDayOfTheMonths (line 553) | public static List<LocalDate> getLastDayOfTheMonths(final LocalDate st...
    method getFirstDayOfTheMonths (line 580) | public static List<LocalDate> getFirstDayOfTheMonths(final LocalDate s...
    method getLastDayOfTheQuarter (line 604) | public static LocalDate getLastDayOfTheQuarter(final LocalDate date) {
    method getLastDayOfTheYear (line 631) | public static LocalDate getLastDayOfTheYear(@NotNull final LocalDate d...
    method getQuarterBounds (line 644) | private static LocalDate[] getQuarterBounds(final LocalDate date) {
    method getQuarterNumber (line 668) | public static int getQuarterNumber(final LocalDate date) {
    method getShortDateFormatter (line 688) | public static DateTimeFormatter getShortDateFormatter() {
    method getShortDateTimeFormatter (line 692) | public static DateTimeFormatter getShortDateTimeFormatter() {
    method getShortDateManualEntryFormatter (line 696) | public static DateTimeFormatter getShortDateManualEntryFormatter() {
    method getWeekOfTheYear (line 706) | public static int getWeekOfTheYear(final LocalDate dateOfYear) {

FILE: jgnash-core/src/main/java/jgnash/time/Period.java
  type Period (line 27) | public enum Period {
    method Period (line 43) | Period(final String description, final float months) {
    method toString (line 48) | @Override
    method getMonths (line 53) | public float getMonths() {

FILE: jgnash-core/src/main/java/jgnash/util/CollectionUtils.java
  class CollectionUtils (line 30) | public class CollectionUtils {
    method CollectionUtils (line 32) | private CollectionUtils() {}
    method sortMapByValue (line 42) | public static <K, V extends Comparable<? super V>> Map<K, V> sortMapBy...

FILE: jgnash-core/src/main/java/jgnash/util/DefaultDaemonThreadFactory.java
  class DefaultDaemonThreadFactory (line 36) | public class DefaultDaemonThreadFactory implements ThreadFactory {
    method DefaultDaemonThreadFactory (line 44) | public DefaultDaemonThreadFactory(final String description) {
    method newThread (line 48) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/EncodeDecode.java
  class EncodeDecode (line 35) | public class EncodeDecode {
    method EncodeDecode (line 41) | private EncodeDecode() {
    method encodeDoubleArray (line 52) | public static String encodeDoubleArray(final double[] doubleArray) {
    method decodeDoubleArray (line 67) | public static double[] decodeDoubleArray(@NotNull final String string) {
    method encodeBooleanArray (line 77) | public static String encodeBooleanArray(final boolean[] array) {
    method decodeBooleanArray (line 98) | public static boolean[] decodeBooleanArray(final String array) {
    method encodeStringCollection (line 114) | public static String encodeStringCollection(final Collection<String> l...
    method encodeStringCollection (line 118) | public static String encodeStringCollection(final Collection<String> l...
    method decodeStringCollection (line 130) | public static Collection<String> decodeStringCollection(final String s...
    method decodeStringCollection (line 134) | public static Collection<String> decodeStringCollection(final String s...
    method colorStringToLong (line 149) | public static long colorStringToLong(final String color) {
    method longToColorString (line 158) | public static String longToColorString(final long color) {

FILE: jgnash-core/src/main/java/jgnash/util/EncryptionManager.java
  class EncryptionManager (line 41) | public class EncryptionManager {
    method EncryptionManager (line 53) | public EncryptionManager(final char[] password) {
    method encrypt (line 78) | public String encrypt(final String plain) {
    method decrypt (line 102) | public String decrypt(final String encrypted) {

FILE: jgnash-core/src/main/java/jgnash/util/FileLocker.java
  class FileLocker (line 17) | public class FileLocker {
    method acquireLock (line 21) | public boolean acquireLock(final Path path) {
    method release (line 36) | @SuppressWarnings("UnusedReturnValue")

FILE: jgnash-core/src/main/java/jgnash/util/FileMagic.java
  class FileMagic (line 61) | public class FileMagic {
    method FileMagic (line 85) | private FileMagic() {
    method magic (line 94) | public static FileType magic(final Path path) {
    method getOfxV1Encoding (line 121) | public static String getOfxV1Encoding(final Path path) {
    method getOfxV1Encoding (line 145) | private static String getOfxV1Encoding(final Path path, final Charset ...
    method isOfxV1 (line 202) | public static boolean isOfxV1(final Path path) {
    method isOfxV2 (line 235) | public static boolean isOfxV2(final Path path) {
    method isBinaryXStreamFile (line 275) | static boolean isBinaryXStreamFile(final Path path) {
    method isH2File (line 279) | private static boolean isH2File(final Path path) {
    method isH2MvFile (line 283) | private static boolean isH2MvFile(final Path path) {
    method isHsqlFile (line 287) | private static boolean isHsqlFile(final Path path) {
    method isFile (line 291) | private static boolean isFile(final Path path, final byte[] header) {
    method isValidVersion2File (line 319) | private static boolean isValidVersion2File(final Path path) {
    method getXMLVersion (line 344) | private static String getXMLVersion(final Path path) {
    method detectCharset (line 381) | private static boolean detectCharset(final InputStream inputStream, fi...
    method detectCharset (line 405) | private static boolean detectCharset(final Path path, final Charset ch...
    method detectCharset (line 413) | private static Charset detectCharset(final Path path) {
    method detectCharset (line 430) | public static Charset detectCharset(final InputStream inputStream) {
    method detectCharset (line 446) | public static Charset detectCharset(final String fileName) {
    type FileType (line 459) | public enum FileType {

FILE: jgnash-core/src/main/java/jgnash/util/FileUtils.java
  class FileUtils (line 69) | public final class FileUtils {
    method FileUtils (line 92) | private FileUtils() {
    method deletePathAndContents (line 101) | public static void deletePathAndContents(final Path path) throws IOExc...
    method isFileLocked (line 128) | public static boolean isFileLocked(final String fileName) throws IOExc...
    method isLockFileStale (line 168) | public static boolean isLockFileStale(final String fileName) throws IO...
    method deleteLockFile (line 202) | public static boolean deleteLockFile(final String fileName) throws IOE...
    method stripFileExtension (line 226) | public static String stripFileExtension(@NotNull final String fileName) {
    method lastModified (line 253) | private static long lastModified(final Path path) throws IOException {
    method fileHasExtension (line 263) | public static boolean fileHasExtension(final String fileName) {
    method getFileExtension (line 274) | public static String getFileExtension(final String fileName) {
    method copyFile (line 302) | public static boolean copyFile(final Path src, final Path dst) {
    method compressFile (line 319) | public static void compressFile(@NotNull final Path source, @NotNull f...
    method getDirectoryListing (line 368) | public static List<Path> getDirectoryListing(final Path directory, fin...
    method waitForFileRemoval (line 394) | public static boolean waitForFileRemoval(final String fileName, final ...

FILE: jgnash-core/src/main/java/jgnash/util/LocaleObject.java
  class LocaleObject (line 31) | public class LocaleObject implements Comparable<LocaleObject> {
    method LocaleObject (line 37) | public LocaleObject(final Locale locale) {
    method getLocale (line 43) | public Locale getLocale() {
    method toString (line 47) | @Override
    method compareTo (line 52) | @Override
    method equals (line 57) | @Override
    method hashCode (line 65) | @Override
    method equals (line 70) | private boolean equals(final LocaleObject obj) {
    method getLocaleObjects (line 74) | public static Collection<LocaleObject> getLocaleObjects() {

FILE: jgnash-core/src/main/java/jgnash/util/LockedCommodityNode.java
  class LockedCommodityNode (line 27) | public class LockedCommodityNode<T extends CommodityNode> implements Com...
    method LockedCommodityNode (line 32) | public LockedCommodityNode(@NotNull final T t, final boolean locked) {
    method toString (line 37) | @Override
    method isLocked (line 42) | public boolean isLocked() {
    method compareTo (line 46) | @Override
    method equals (line 51) | @SuppressWarnings("rawtypes")
    method getNode (line 57) | public T getNode() {
    method hashCode (line 61) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/LogUtil.java
  class LogUtil (line 35) | public class LogUtil {
    method LogUtil (line 48) | private LogUtil() {
    method configureLogging (line 52) | public static void configureLogging() {
    method logSevere (line 62) | public static void logSevere(final Class<?> clazz, final Throwable thr...
    method logSevere (line 72) | public static void logSevere(final Class<?> clazz, final String messag...

FILE: jgnash-core/src/main/java/jgnash/util/MathEval.java
  class MathEval (line 8) | public class MathEval {
    method MathEval (line 15) | private MathEval(final String str) {
    method eval (line 19) | public static double eval(final String str) throws ArithmeticException {
    method nextChar (line 23) | private void nextChar() {
    method eat (line 27) | private boolean eat(final int charToEat) {
    method parse (line 40) | private double parse() throws ArithmeticException {
    method parseExpression (line 57) | private double parseExpression() {
    method parseTerm (line 71) | private double parseTerm() {
    method parseFactor (line 85) | private double parseFactor() {

FILE: jgnash-core/src/main/java/jgnash/util/MultiHashMap.java
  class MultiHashMap (line 36) | public class MultiHashMap<K, V> extends HashMap<K, Object> {
    method put (line 40) | @SuppressWarnings("unchecked")
    method get (line 72) | @SuppressWarnings("rawtypes")
    method getAll (line 96) | @SuppressWarnings("unchecked")
    method remove (line 114) | @SuppressWarnings({"unchecked", "rawtypes", "element-type-mismatch"})
    method removeValue (line 145) | @SuppressWarnings("rawtypes")

FILE: jgnash-core/src/main/java/jgnash/util/NewFileUtility.java
  class NewFileUtility (line 41) | public class NewFileUtility {
    method buildNewFile (line 43) | public static void buildNewFile(final String fileName, final DataStore...
    method NewFileUtility (line 109) | private NewFileUtility() {

FILE: jgnash-core/src/main/java/jgnash/util/SearchUtils.java
  class SearchUtils (line 27) | public class SearchUtils {
    method SearchUtils (line 29) | private SearchUtils() {
    method createSearchPattern (line 39) | public static Pattern createSearchPattern(final String pattern, final ...
    method wildcardSearchToRegex (line 51) | private static String wildcardSearchToRegex(final String wildcard) {

FILE: jgnash-core/src/main/java/jgnash/util/function/MemoPredicate.java
  class MemoPredicate (line 34) | public class MemoPredicate implements Predicate<Transaction> {
    method MemoPredicate (line 40) | public MemoPredicate(final String filter, final boolean useRegex) {
    method test (line 50) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/function/ParentAccountPredicate.java
  class ParentAccountPredicate (line 29) | public class ParentAccountPredicate implements Predicate<Account> {
    method test (line 31) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/function/PayeePredicate.java
  class PayeePredicate (line 35) | public class PayeePredicate implements Predicate<Transaction> {
    method PayeePredicate (line 41) | public PayeePredicate(@NotNull final String filter, final boolean useR...
    method test (line 51) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/function/ReconciledPredicate.java
  class ReconciledPredicate (line 33) | public class ReconciledPredicate implements Predicate<Transaction> {
    method ReconciledPredicate (line 38) | public ReconciledPredicate(@NotNull Account account, @Nullable final R...
    method test (line 43) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/function/TagPredicate.java
  class TagPredicate (line 35) | public class TagPredicate implements Predicate<Transaction> {
    method TagPredicate (line 39) | public TagPredicate(@NotNull final Set<Tag> tags) {
    method test (line 43) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/function/TransactionAgePredicate.java
  class TransactionAgePredicate (line 31) | public class TransactionAgePredicate implements Predicate<Transaction> {
    method TransactionAgePredicate (line 36) | public TransactionAgePredicate(final ChronoUnit chronoUnit, final int ...
    method test (line 41) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/prefs/MapBasedPreferences.java
  class MapBasedPreferences (line 31) | @SuppressWarnings("unused")
    method MapBasedPreferences (line 38) | MapBasedPreferences(final MapBasedPreferences parent, final String nam...
    method isUserNode (line 44) | @Override
    method putSpi (line 49) | @Override
    method getSpi (line 54) | @Override
    method removeSpi (line 59) | @Override
    method removeNodeSpi (line 64) | @Override
    method keysSpi (line 69) | @Override
    method childrenNamesSpi (line 74) | @Override
    method childSpi (line 79) | @Override
    method syncSpi (line 84) | @Override
    method flushSpi (line 89) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/prefs/MapPreferencesFactory.java
  class MapPreferencesFactory (line 28) | @SuppressWarnings("unused")
    method systemRoot (line 39) | @Override
    method userRoot (line 49) | @Override

FILE: jgnash-core/src/main/java/jgnash/util/prefs/PortablePreferences.java
  class PortablePreferences (line 42) | public class PortablePreferences {
    method PortablePreferences (line 44) | private PortablePreferences() {
    method initPortablePreferences (line 48) | public static void initPortablePreferences(final String portableFile) {
    method importPreferences (line 57) | private static void importPreferences(final String file) {
    method deleteUserPreferences (line 74) | public static void deleteUserPreferences() {
    method getPreferenceFile (line 91) | private static Path getPreferenceFile(final String portableFile) {
    class ExportPreferencesThread (line 103) | private static class ExportPreferencesThread extends Thread {
      method ExportPreferencesThread (line 106) | ExportPreferencesThread(@NotNull final String file) {
      method run (line 110) | @Override

FILE: jgnash-fx-test-plugin/src/main/java/jgnash/uifx/plugin/TestFxPlugin.java
  class TestFxPlugin (line 18) | @SuppressWarnings("unused")
    method getOptionsNode (line 21) | @Override
    method getName (line 26) | @Override
    method start (line 31) | @Override
    method stop (line 61) | @Override

FILE: jgnash-fx/scripts/clean-security-history.js
  function debug (line 8) | function debug(message) {   // helper function to print messages to the ...

FILE: jgnash-fx/scripts/helloworld.js
  function debug (line 2) | function debug(message) {   // helper function to print messages to the ...

FILE: jgnash-fx/src/main/java/jgnash/app/jGnash.java
  class jGnash (line 36) | public class jGnash {
    method main (line 38) | public static void main(final String[] args) {
    method launch (line 89) | private static void launch(final String[] args) {

FILE: jgnash-fx/src/main/java/jgnash/app/jGnashFx.java
  class jGnashFx (line 66) | public class jGnashFx extends Application {
    method main (line 78) | public static void main(final String[] args) {
    method start (line 168) | @Override
    method stop (line 178) | @Override
    method startServer (line 183) | private static void startServer() {
    method setupNetworking (line 200) | private static void setupNetworking() {
    method configureLogging (line 218) | private static void configureLogging() {
    class CommandLineOptions (line 229) | @SuppressWarnings({"CanBeFinal", "FieldMayBeFinal"})
      class VersionProvider (line 289) | static class  VersionProvider implements IVersionProvider {
        method getVersion (line 290) | @Override

FILE: jgnash-fx/src/main/java/jgnash/bootloader/BootLoader.java
  class BootLoader (line 54) | public class BootLoader {
    method doFilesExist (line 75) | public static boolean doFilesExist() {
    method getLibPath (line 93) | private static String getLibPath() {
    method getOS (line 106) | public static String getOS() {
    method downloadFiles (line 120) | public static boolean downloadFiles(final Consumer<String> fileNameCon...
    method getTotalDownloadSize (line 172) | private static long getTotalDownloadSize() throws MalformedURLException {
    method getFileDownloadSize (line 185) | private static long getFileDownloadSize(final URL source) {
    method showException (line 200) | private stati
Condensed preview — 921 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,941K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 173,
    "preview": "## Expected Behavior\n\n\n## Actual Behavior\n\n\n## Steps to Reproduce the Problem\n\n  1.\n  2.\n  3.\n\n## Specifications\n\n  - jG"
  },
  {
    "path": ".github/workflows/ci-linux.yml",
    "chars": 488,
    "preview": "name: 'CI Test Linux'\n\non: [push]\n\njobs:\n  test:\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@"
  },
  {
    "path": ".github/workflows/ci-macOS.yml",
    "chars": 269,
    "preview": "name: 'CI Test macOS'\n\non: [push]\n\njobs:\n  test:\n\n    runs-on: macOS-latest\n\n    steps:\n      - uses: actions/checkout@m"
  },
  {
    "path": ".github/workflows/ci-windows.yml",
    "chars": 277,
    "preview": "name: 'CI Test Windows'\n\non: [push]\n\njobs:\n  test:\n\n    runs-on: windows-latest\n\n    steps:\n      - uses: actions/checko"
  },
  {
    "path": ".github/workflows/gradle-wrapper-validation.yml",
    "chars": 223,
    "preview": "name: \"Validate Gradle Wrapper\"\non: [push, pull_request]\n\njobs:\n  validation:\n    name: \"Validation\"\n    runs-on: ubuntu"
  },
  {
    "path": ".gitignore",
    "chars": 328,
    "preview": "**/target/\n**/build/\n**/out/\n**/bin/\n.svn/\n*.directory\n.settings/\n.project\n.classpath\n.idea/\n*.iml\n*.log\nnb-configuratio"
  },
  {
    "path": ".travis.yml",
    "chars": 757,
    "preview": "language: java\n\nsudo: required\n\nbefore_install:\n  - sudo apt-get update -q\n  - sudo apt-get install lib32z1 lib32ncurses"
  },
  {
    "path": "COPYING",
    "chars": 703,
    "preview": " jGnash, a personal finance application\n Copyright (C) 2001-2020 Craig Cavanaugh\n\n This program is free software: you ca"
  },
  {
    "path": "README.adoc",
    "chars": 10210,
    "preview": "image:https://jgnash.github.io/img/jgnash-logo.png[jGnash Logo]\n\n== jGnash README\n\nhttps://sourceforge.net/projects/jgna"
  },
  {
    "path": "README.html",
    "chars": 46671,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<me"
  },
  {
    "path": "README.md",
    "chars": 11524,
    "preview": "<span class=\"image\">![jGnash Logo](https://jgnash.github.io/img/jgnash-logo.png)</span>\n\n## jGnash README\n\n[jGnash](http"
  },
  {
    "path": "build.gradle.kts",
    "chars": 243,
    "preview": "plugins {\n    id(\"com.github.ben-manes.versions\")\n}\n\nallprojects {\n    repositories {\n        mavenCentral()\n        jce"
  },
  {
    "path": "changelog.adoc",
    "chars": 100231,
    "preview": "== WANTS\n* Support for Derby database\n* CSV Import\n* OFX export\n* VAT/GST UI\n* Command Line interface/Class for loading "
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 202,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradle.properties",
    "chars": 1693,
    "preview": "# suppress inspection \"UnusedProperty\" for whole file\n\n# https://github.com/openjfx/javafx-gradle-plugin/releases\njavafx"
  },
  {
    "path": "gradlew",
    "chars": 5766,
    "preview": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0"
  },
  {
    "path": "gradlew.bat",
    "chars": 2763,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "jGnash",
    "chars": 178,
    "preview": "#!/usr/bin/env sh\n\ncwd=$(dirname \"$0\")\n\"$cwd\"/bin/bootloader \"$@\"\n\nif [ $? -eq 100 ]; then #relaunch automatically if re"
  },
  {
    "path": "jgnash-bayes/build.gradle.kts",
    "chars": 138,
    "preview": "description = \"jGnash Bayes\"\n\nval moduleName = \"jgnash.bayes\"\n\ntasks.jar {\n    manifest.attributes[\"Automatic-Module-Nam"
  },
  {
    "path": "jgnash-bayes/src/main/java/jgnash/bayes/BayesClassifier.java",
    "chars": 6782,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/build.gradle.kts",
    "chars": 444,
    "preview": "description = \"jGnash Convert\"\n\nval moduleName = \"jgnash.convert\"\nval commonsCsvVersion: String by project\n\nplugins {\n  "
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/common/OfxTags.java",
    "chars": 10450,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/exportantur/csv/CsvExport.java",
    "chars": 7531,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/exportantur/ofx/OfxExport.java",
    "chars": 23978,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/BayesImportClassifier.java",
    "chars": 2857,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/DateFormat.java",
    "chars": 1065,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/GenericImport.java",
    "chars": 9172,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ImportBank.java",
    "chars": 2003,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ImportFilter.java",
    "chars": 7923,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2021 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ImportSecurity.java",
    "chars": 3662,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ImportState.java",
    "chars": 890,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ImportTransaction.java",
    "chars": 10887,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ImportUtils.java",
    "chars": 4021,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxBank.java",
    "chars": 3205,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxImport.java",
    "chars": 9673,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxV1ToV2.java",
    "chars": 5864,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ofx/OfxV2Parser.java",
    "chars": 51624,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/ofx/Sanitize.java",
    "chars": 1487,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifAccount.java",
    "chars": 2370,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifCategory.java",
    "chars": 978,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifImport.java",
    "chars": 23722,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifParser.java",
    "chars": 30177,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifReader.java",
    "chars": 2759,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifSplitTransaction.java",
    "chars": 1480,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifTransaction.java",
    "chars": 5170,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/java/jgnash/convert/importat/qif/QifUtils.java",
    "chars": 7550,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-convert/src/main/resources/jgnash/convert/scripts/tidy.js",
    "chars": 1708,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/build.gradle.kts",
    "chars": 1835,
    "preview": "description = \"jGnash Core\"\n\nvar moduleName = \"jgnash.core\"\n\nval commonsCollectionsVersion: String by project\nval common"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AbstractInvestmentTransactionEntry.java",
    "chars": 3779,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/Account.java",
    "chars": 43923,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AccountGroup.java",
    "chars": 1724,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AccountProxy.java",
    "chars": 6091,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AccountTreeXMLFactory.java",
    "chars": 16689,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AccountType.java",
    "chars": 4721,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AccountUtils.java",
    "chars": 1717,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AmortizeObject.java",
    "chars": 16726,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/AttachmentUtils.java",
    "chars": 2813,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/CashFlow.java",
    "chars": 4593,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/CommodityNode.java",
    "chars": 3238,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/Comparators.java",
    "chars": 5896,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/Config.java",
    "chars": 7243,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/CurrencyNode.java",
    "chars": 2406,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/DataStore.java",
    "chars": 3558,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/DataStoreType.java",
    "chars": 2960,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/DefaultCurrencies.java",
    "chars": 4380,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2021 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/Engine.java",
    "chars": 102357,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/EngineException.java",
    "chars": 949,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/EngineFactory.java",
    "chars": 26110,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/ExchangeRate.java",
    "chars": 6590,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/ExchangeRateDAO.java",
    "chars": 1629,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/ExchangeRateHistoryNode.java",
    "chars": 2906,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/InvestmentAccountProxy.java",
    "chars": 11775,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/InvestmentPerformanceSummary.java",
    "chars": 22869,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/InvestmentTransaction.java",
    "chars": 11281,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/MathConstants.java",
    "chars": 1971,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/QuoteSource.java",
    "chars": 2821,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/RecTransaction.java",
    "chars": 3093,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/ReconcileManager.java",
    "chars": 9227,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/ReconciledState.java",
    "chars": 1326,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/RootAccount.java",
    "chars": 1626,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/SecurityHistoryEvent.java",
    "chars": 3519,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/SecurityHistoryEventType.java",
    "chars": 1326,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/SecurityHistoryNode.java",
    "chars": 5073,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/SecurityNode.java",
    "chars": 15874,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/StoredObject.java",
    "chars": 3536,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/StoredObjectComparator.java",
    "chars": 2649,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/Tag.java",
    "chars": 4259,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/Transaction.java",
    "chars": 20391,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntry.java",
    "chars": 13215,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryAbstractIncrease.java",
    "chars": 1740,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryAddX.java",
    "chars": 1713,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryBuyX.java",
    "chars": 3827,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryDividendX.java",
    "chars": 3657,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryMergeX.java",
    "chars": 2696,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryReinvestDivX.java",
    "chars": 2242,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryRemoveX.java",
    "chars": 2420,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntryRocX.java",
    "chars": 3611,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntrySellX.java",
    "chars": 3840,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionEntrySplitX.java",
    "chars": 2007,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionFactory.java",
    "chars": 31138,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionTag.java",
    "chars": 1731,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TransactionType.java",
    "chars": 2058,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/TrashObject.java",
    "chars": 1960,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/attachment/AttachmentManager.java",
    "chars": 1163,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/attachment/AttachmentTransferClient.java",
    "chars": 5942,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/attachment/AttachmentTransferServer.java",
    "chars": 5402,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/attachment/DistributedAttachmentManager.java",
    "chars": 6435,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/attachment/LocalAttachmentManager.java",
    "chars": 3330,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/attachment/NettyTransferHandler.java",
    "chars": 9551,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/Budget.java",
    "chars": 10079,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/BudgetFactory.java",
    "chars": 5066,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/BudgetGoal.java",
    "chars": 7111,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/BudgetPeriodDescriptor.java",
    "chars": 6136,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2021 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/BudgetPeriodDescriptorFactory.java",
    "chars": 3788,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/BudgetPeriodResults.java",
    "chars": 1738,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/BudgetResultsModel.java",
    "chars": 25359,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/budget/Pattern.java",
    "chars": 1638,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/concurrent/DistributedLockManager.java",
    "chars": 12702,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/concurrent/DistributedLockServer.java",
    "chars": 16121,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/concurrent/LocalLockManager.java",
    "chars": 1309,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/concurrent/LockManager.java",
    "chars": 1292,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/concurrent/Priority.java",
    "chars": 1786,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/concurrent/PriorityThreadPoolExecutor.java",
    "chars": 4491,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/AbstractDAO.java",
    "chars": 1330,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/AccountDAO.java",
    "chars": 2369,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/BudgetDAO.java",
    "chars": 1102,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/CommodityDAO.java",
    "chars": 4031,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/ConfigDAO.java",
    "chars": 982,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/DAO.java",
    "chars": 976,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/EngineDAO.java",
    "chars": 1914,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/RecurringDAO.java",
    "chars": 1156,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/TagDAO.java",
    "chars": 997,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/TransactionDAO.java",
    "chars": 1455,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/dao/TrashDAO.java",
    "chars": 1103,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/AbstractJpaDAO.java",
    "chars": 8698,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/AbstractJpaDataStore.java",
    "chars": 11302,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaAccountDAO.java",
    "chars": 7323,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaBudgetDAO.java",
    "chars": 1610,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaCommodityDAO.java",
    "chars": 6258,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaConfigDAO.java",
    "chars": 3140,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaConfiguration.java",
    "chars": 7666,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaEngineDAO.java",
    "chars": 5504,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaH2DataStore.java",
    "chars": 2137,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaH2MvDataStore.java",
    "chars": 1250,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaHsqlDataStore.java",
    "chars": 2562,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaNetworkServer.java",
    "chars": 13332,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2021 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaRecurringDAO.java",
    "chars": 1889,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaTagDAO.java",
    "chars": 1448,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaTransactionDAO.java",
    "chars": 4982,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaTrashDAO.java",
    "chars": 9443,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/JpaTrashEntity.java",
    "chars": 2976,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/jpa/SqlUtils.java",
    "chars": 12600,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/ChannelEvent.java",
    "chars": 2607,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/LocalServerListener.java",
    "chars": 980,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/Message.java",
    "chars": 5799,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/MessageBus.java",
    "chars": 10035,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/MessageBusClient.java",
    "chars": 15245,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/MessageBusServer.java",
    "chars": 9078,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/MessageChannel.java",
    "chars": 971,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/MessageListener.java",
    "chars": 979,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/MessageProperty.java",
    "chars": 985,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/MessageProxy.java",
    "chars": 3687,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/message/XStreamFactory.java",
    "chars": 1430,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/DailyReminder.java",
    "chars": 1868,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/MonthlyReminder.java",
    "chars": 5116,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/OneTimeReminder.java",
    "chars": 1627,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/PendingReminder.java",
    "chars": 3238,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/RecurringIterator.java",
    "chars": 1112,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/Reminder.java",
    "chars": 9188,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/ReminderType.java",
    "chars": 1462,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/WeeklyReminder.java",
    "chars": 2340,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/recurring/YearlyReminder.java",
    "chars": 2635,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/AbstractXStreamContainer.java",
    "chars": 12910,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2021 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/AbstractXStreamDAO.java",
    "chars": 2565,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/BinaryContainer.java",
    "chars": 6088,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/BinaryXStreamDataStore.java",
    "chars": 5480,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/StoredObjectReflectionProvider.java",
    "chars": 1651,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XMLContainer.java",
    "chars": 6272,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XMLDataStore.java",
    "chars": 5339,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamAccountDAO.java",
    "chars": 3542,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamBudgetDAO.java",
    "chars": 1663,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamCommodityDAO.java",
    "chars": 4703,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamConfigDAO.java",
    "chars": 1828,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamEngineDAO.java",
    "chars": 5257,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamJVM9.java",
    "chars": 5421,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamRecurringDAO.java",
    "chars": 1691,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamTagDAO.java",
    "chars": 1502,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamTransactionDAO.java",
    "chars": 2079,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/engine/xstream/XStreamTrashDAO.java",
    "chars": 1840,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/AbstractAuthenticator.java",
    "chars": 3556,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/ConnectionFactory.java",
    "chars": 3154,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/YahooCrumbManager.java",
    "chars": 6092,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/currency/CurrencyConverterParser.java",
    "chars": 3468,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/currency/CurrencyParser.java",
    "chars": 987,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/currency/CurrencyUpdateFactory.java",
    "chars": 3327,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/security/NullParser.java",
    "chars": 1874,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/security/SecurityParser.java",
    "chars": 2418,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/security/UpdateFactory.java",
    "chars": 12506,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/security/YahooEventParser.java",
    "chars": 13243,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  },
  {
    "path": "jgnash-core/src/main/java/jgnash/net/security/iex/IEXParser.java",
    "chars": 13232,
    "preview": "/*\n * jGnash, a personal finance application\n * Copyright (C) 2001-2020 Craig Cavanaugh\n *\n * This program is free softw"
  }
]

// ... and 721 more files (download for full content)

About this extraction

This page contains the full source code of the ccavanaugh/jgnash GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 921 files (5.4 MB), approximately 1.5M tokens, and a symbol index with 4840 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!