コード例 #1
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
  private static void parseExchangeRate(final XMLStreamReader reader) {
    Map<String, String> elementMap = new HashMap<>();

    /* still at start of the exchange rate.  Need to know when end is reached */
    QName parsingElement = reader.getName();

    try {
      while (reader.hasNext()) {

        int event = reader.next();

        switch (event) {
          case XMLStreamConstants.START_ELEMENT:
            String element = reader.getLocalName();
            elementMap.put(element.intern(), reader.getElementText());
            break;
          case XMLStreamConstants.END_ELEMENT:
            if (reader.getName().equals(parsingElement)) {
              logger.finest("Found the end of the exchange rate");

              try {
                String key = elementMap.get("key");

                if (key != null && key.length() == 6) {

                  Engine e = EngineFactory.getEngine(EngineFactory.DEFAULT);

                  CurrencyNode cOne = e.getCurrency(key.substring(0, 3));
                  CurrencyNode cTwo = e.getCurrency(key.substring(3, 6));

                  // jGnash 1.x would hold onto old exchange rates for deleted commodities
                  if (cOne != null && cTwo != null) {
                    BigDecimal rate = new BigDecimal(elementMap.get("rate"));

                    EngineFactory.getEngine(EngineFactory.DEFAULT)
                        .setExchangeRate(cOne, cTwo, rate);

                    logger.log(
                        Level.FINE,
                        "Set ExchangeRate {0}:{1}",
                        new Object[] {key, rate.toString()});
                  }
                }

              } catch (Exception e) {
                logger.log(Level.SEVERE, e.toString(), e);
              }
              return;
            }
            break;
          default:
            break;
        }
      }
    } catch (XMLStreamException e) {
      logger.severe("Error importing exchange rate");
      logger.log(Level.SEVERE, e.toString(), e);
    }
  }
コード例 #2
0
  @FXML
  @Override
  public void handleEnterAction() {
    if (validateForm()) {
      if (modTrans == null) { // new transaction
        Transaction newTrans = buildTransaction();

        ReconcileManager.reconcileTransaction(
            accountProperty.get(), newTrans, getReconciledState());

        newTrans = attachmentPane.buildTransaction(newTrans); // chain the transaction build

        final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

        if (engine != null) {
          engine.addTransaction(newTrans);
        }
      } else {
        Transaction newTrans = buildTransaction();

        newTrans.setDateEntered(modTrans.getDateEntered());

        // restore the reconciled state of the previous old transaction
        for (final Account a : modTrans.getAccounts()) {
          if (!a.equals(accountProperty.get())) {
            ReconcileManager.reconcileTransaction(a, newTrans, modTrans.getReconciled(a));
          }
        }

        /*
         * Reconcile the modified transaction for this account.
         * This must be performed last to ensure consistent results per the ReconcileManager rules
         */
        ReconcileManager.reconcileTransaction(
            accountProperty.get(), newTrans, getReconciledState());

        newTrans = attachmentPane.buildTransaction(newTrans); // chain the transaction build

        final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

        if (engine != null && engine.removeTransaction(modTrans)) {
          engine.addTransaction(newTrans);
        }
      }
      clearForm();

      if (payeeTextField != null) {
        payeeTextField.requestFocus();
      } else {
        memoTextField.requestFocus();
      }
    }
  }
コード例 #3
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
  private CurrencyNode decodeCurrency(final String currency) {

    // Check if the currency is already in the cache.
    if (currencyCache.containsKey(currency)) {
      return currencyCache.get(currency);
    }

    String split[] = CURRENCY_DELIMITER_PATTERN.split(currency);
    String symbol = split[0];

    CurrencyNode node = EngineFactory.getEngine(EngineFactory.DEFAULT).getCurrency(symbol);

    if (node == null) {
      logger.log(Level.INFO, "Converting a commodity into a currency: {0}", symbol);

      Commodity cNode = commodityMap.get(symbol);

      if (cNode != null) {
        node = new CurrencyNode();

        node.setDescription(cNode.description);
        node.setPrefix(cNode.prefix);
        node.setSuffix(cNode.suffix);
        node.setScale(cNode.scale);
        node.setSymbol(cNode.symbol);

        EngineFactory.getEngine(EngineFactory.DEFAULT).addCurrency(node);
      } else {
        // Convert security to currency.  For users who figured out how to push the limits of the
        // jGnash 1.x commodity interface
        SecurityNode sNode = EngineFactory.getEngine(EngineFactory.DEFAULT).getSecurity(symbol);
        if (sNode != null) {
          node = new CurrencyNode();

          node.setDescription(sNode.getDescription());
          node.setPrefix(sNode.getPrefix());
          node.setSuffix(sNode.getSuffix());
          node.setScale(sNode.getScale());
          node.setSymbol(sNode.getSymbol());

          EngineFactory.getEngine(EngineFactory.DEFAULT).addCurrency(node);
        } else {
          logger.log(Level.SEVERE, "Bad file, currency " + symbol + " not mapped", new Exception());
        }
      }
    }

    // Put the currency in the cache.
    currencyCache.put(currency, node);

    return node;
  }
コード例 #4
0
  private void initComponents() {

    final Resource rb = Resource.get();

    setTitle(rb.getString("Title.DefTranNum"));

    okButton = new JButton(rb.getString("Button.Ok"));
    cancelButton = new JButton(rb.getString("Button.Cancel"));
    insertButton = new JButton(rb.getString("Button.Insert"));
    removeButton = new JButton(rb.getString("Button.Remove"));

    upButton = new JButton(Resource.getIcon("/jgnash/resource/stock_up-16.png"));
    downButton = new JButton(Resource.getIcon("/jgnash/resource/stock_down-16.png"));

    insertButton.addActionListener(this);
    cancelButton.addActionListener(this);
    okButton.addActionListener(this);
    removeButton.addActionListener(this);
    upButton.addActionListener(this);
    downButton.addActionListener(this);

    model = new DefaultListModel<>();
    final List<String> items =
        EngineFactory.getEngine(EngineFactory.DEFAULT).getTransactionNumberList();

    for (String s : items) {
      model.addElement(s);
    }

    list = new JList<>(model);

    entryField = new JTextFieldEx(10);
  }
コード例 #5
0
ファイル: UpdateFactory.java プロジェクト: peteclarkez/jgnash
    @Override
    public Boolean call() throws Exception {
      boolean result = false;

      final Engine e = EngineFactory.getEngine(EngineFactory.DEFAULT);

      if (e != null && securityNode.getQuoteSource() != QuoteSource.NONE) {
        final SecurityParser parser = securityNode.getQuoteSource().getParser();

        if (parser != null
            && !Thread.currentThread().isInterrupted()) { // check for thread interruption
          if (parser.parse(securityNode)) {

            final SecurityHistoryNode node =
                new SecurityHistoryNode(
                    parser.getDate(),
                    parser.getPrice(),
                    parser.getVolume(),
                    parser.getHigh(),
                    parser.getLow());

            if (!Thread.currentThread().isInterrupted()) { // check for thread interruption
              result = e.addSecurityHistory(securityNode, node);

              if (result) {
                logger.info(
                    ResourceUtils.getString("Message.UpdatedPrice", securityNode.getSymbol()));
              }
            }
          }
        }
      }

      return result;
    }
コード例 #6
0
ファイル: UpdateFactory.java プロジェクト: peteclarkez/jgnash
  public static void setUpdateOnStartup(final boolean update) {
    final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    if (engine != null) {
      engine.putBoolean(UPDATE_ON_STARTUP, update);
    }
  }
コード例 #7
0
  private void initComponents() {
    accountCombo = new AccountListComboBox();

    helpPane = new JTextPane();
    helpPane.setEditable(false);
    helpPane.setEditorKit(new StyledEditorKit());
    helpPane.setBackground(getBackground());
    helpPane.setText(TextResource.getString("QifOne.txt"));

    /* Create the combo for date format selection */
    String[] formats = {QifUtils.US_FORMAT, QifUtils.EU_FORMAT};
    dateFormatCombo = new JComboBox<>(formats);

    dateFormatCombo.addActionListener(this);
    dateFormatCombo.setSelectedIndex(pref.getInt(DATE_FORMAT, 0));

    accountCombo.addActionListener(this);

    /* Try a set the combobox to the last selected account */
    String lastAccount = pref.get(LAST_ACCOUNT, "");

    Account last = EngineFactory.getEngine(EngineFactory.DEFAULT).getAccountByUuid(lastAccount);

    if (last != null) {
      setAccount(last);
    }
  }
コード例 #8
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
    @Override
    public void run() {

      assert liabilityAccount != null && elementMap != null;

      AmortizeObject ao = new AmortizeObject();

      ao.setBankAccount(accountMap.get(elementMap.get("bankAccount")));
      ao.setDate(decodeDate(elementMap.get("date")));

      if (elementMap.get("daysPerYear") != null) {
        ao.setDaysPerYear(new BigDecimal(elementMap.get("daysPerYear")));
      }

      ao.setFees(new BigDecimal(elementMap.get("fees")));
      ao.setFeesAccount(accountMap.get(elementMap.get("feesAccount")));
      ao.setInterestAccount(accountMap.get(elementMap.get("interestAccount")));
      ao.setInterestPeriods(Integer.parseInt(elementMap.get("compondingPeriods")));
      ao.setLength(Integer.parseInt(elementMap.get("length")));
      ao.setMemo(elementMap.get("memo"));
      ao.setPayee(elementMap.get("payee"));
      ao.setPaymentPeriods(Integer.parseInt(elementMap.get("paymentPeriods")));
      ao.setPrincipal(new BigDecimal(elementMap.get("principal")));
      ao.setRate(new BigDecimal(elementMap.get("rate")));
      ao.setUseDailyRate(Boolean.parseBoolean(elementMap.get("useDailyRate")));

      Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);
      engine.setAmortizeObject(liabilityAccount, ao);
    }
コード例 #9
0
ファイル: ProfitLossTXT.java プロジェクト: tsachev/jgnash
  private void createReport() {
    Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);
    Account root = engine.getRootAccount();

    baseCommodity = engine.getDefaultCurrency();

    numberFormat = CommodityFormat.getFullNumberFormat(baseCommodity);
    SimpleDateFormat df = new SimpleDateFormat("dd-MMMMM-yyyy");

    dates = getDates();

    // title and dates
    pl.add(rb.getString("Title.ProfitLoss"));
    pl.add("");
    pl.add("From " + df.format(dates[0]) + " To " + df.format(dates[1]));
    pl.add("");
    pl.add("");

    // Income
    pl.add("Income");
    pl.add("------------------------------------------------------");
    getBalances(root, dates, AccountType.INCOME);

    // Add up the  Gross Income.
    BigDecimal total1 = BigDecimal.ZERO;
    for (Object aBalance1 : balance) {
      total1 = total1.add((BigDecimal) aBalance1);
    }
    pl.add("------------------------------------------------------");
    pl.add(formatAcctNameOut(rb.getString("Word.GrossIncome")) + " " + formatDecimalOut(total1));
    pl.add("------------------------------------------------------");
    pl.add("");
    pl.add("");

    // Expense
    pl.add("Expenses");
    pl.add("------------------------------------------------------");
    balance = new ArrayList<>();
    getBalances(root, dates, AccountType.EXPENSE);

    // Add up the Gross Expenses
    BigDecimal total2 = BigDecimal.ZERO;
    for (Object aBalance : balance) {
      total2 = total2.add((BigDecimal) aBalance);
    }
    pl.add("------------------------------------------------------");
    pl.add(formatAcctNameOut(rb.getString("Word.GrossExpense")) + " " + formatDecimalOut(total2));
    pl.add("------------------------------------------------------");
    pl.add("");
    pl.add("");

    // Net Total
    pl.add("------------------------------------------------------");
    pl.add(
        formatAcctNameOut(rb.getString("Word.NetIncome"))
            + " "
            + formatDecimalOut(total1.add(total2)));
    pl.add("======================================================");
  }
コード例 #10
0
ファイル: MenuBarController.java プロジェクト: laeubi/jgnash
  @FXML
  private void updateCurrencies() {
    final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    Objects.requireNonNull(engine);

    engine.startExchangeRateUpdate(0);
  }
コード例 #11
0
  void scrollToTop() {

    RootAccount rootAccount = EngineFactory.getEngine(EngineFactory.DEFAULT).getRootAccount();

    if (rootAccount != null) {
      tree.scrollPathToVisible(new TreePath(rootAccount)); // scroll to the top
    }
  }
コード例 #12
0
ファイル: MenuBarController.java プロジェクト: laeubi/jgnash
 @FXML
 private void handleExitAction() {
   if (EngineFactory.getEngine(EngineFactory.DEFAULT) != null) {
     CloseFileTask.initiateShutdown();
   } else {
     Platform.exit();
   }
 }
コード例 #13
0
ファイル: MenuBarController.java プロジェクト: laeubi/jgnash
  @FXML
  private void updateSecurities() {
    final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    Objects.requireNonNull(engine);

    engine.startSecuritiesUpdate(0);
  }
コード例 #14
0
  @FXML
  private void handleDeleteAccountAction() {
    if (getSelectedAccount().isPresent()) {
      final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);
      Objects.requireNonNull(engine);

      if (!engine.removeAccount(getSelectedAccount().get())) {
        StaticUIMethods.displayError(resources.getString("Message.Error.AccountRemove"));
      }
    }
  }
コード例 #15
0
ファイル: UpdateFactory.java プロジェクト: peteclarkez/jgnash
  public static boolean getUpdateOnStartup() {
    boolean result = false;

    final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    if (engine != null) {
      result = engine.getBoolean(UPDATE_ON_STARTUP, false);
    }

    return result;
  }
コード例 #16
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
  private void parseTransaction(final XMLStreamReader reader) {

    assert reader.getAttributeCount() == 2;

    Map<String, String> elementMap = new HashMap<>();

    /* still at start of the transaction.  Need to know when end is reached */
    QName parsingElement = reader.getName();

    String transactionClass = reader.getAttributeValue(0);
    String transactionId = reader.getAttributeValue(1);

    elementMap.put(ID, transactionId);

    try {
      while (reader.hasNext()) {

        int event = reader.next();

        switch (event) {
          case XMLStreamConstants.START_ELEMENT:
            String element = reader.getLocalName();
            elementMap.put(element.intern(), reader.getElementText());
            break;
          case XMLStreamConstants.END_ELEMENT:
            if (reader.getName().equals(parsingElement)) {
              logger.log(Level.FINEST, "Found the end of a Transaction: {0}", transactionId);

              try {
                Transaction transaction = generateTransaction(transactionClass, elementMap);

                if (transaction != null) {
                  Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);
                  engine.addTransaction(transaction);
                  logger.finest("Transaction add complete");
                }
              } catch (Exception e) {
                logger.log(Level.SEVERE, "Error importing transaction id: {0}", transactionId);
                logger.log(Level.SEVERE, e.toString(), e);
                throw new RuntimeException(e);
              }
              return;
            }
            break;
          default:
            break;
        }
      }
    } catch (XMLStreamException e) {
      logger.log(Level.SEVERE, "Error importing transaction id: {0}", transactionId);
      logger.log(Level.SEVERE, e.toString(), e);
    }
  }
コード例 #17
0
  private void okAction() {
    final ListModel<String> listModel = list.getModel();
    final int size = listModel.getSize();
    final List<String> items = new ArrayList<>();

    for (int i = 0; i < size; i++) {
      items.add(listModel.getElementAt(i));
    }

    EngineFactory.getEngine(EngineFactory.DEFAULT).setTransactionNumberList(items);
    close();
  }
コード例 #18
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
  private SecurityNode decodeSecurity(final String symbol) {
    Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    SecurityNode sNode = engine.getSecurity(symbol);

    if (sNode == null) {

      Commodity cNode = commodityMap.get(symbol);

      if (cNode != null) {

        logger.log(Level.INFO, "Converting a commodity into a security: {0}", symbol);

        sNode = new SecurityNode(engine.getDefaultCurrency());

        sNode.setDescription(cNode.description);
        sNode.setPrefix(cNode.prefix);
        sNode.setSuffix(cNode.suffix);
        sNode.setScale(cNode.scale);
        sNode.setSymbol(cNode.symbol);
        sNode.setQuoteSource(QuoteSource.YAHOO);

        engine.addSecurity(sNode);
      } else { // may be a currency... try to create a security

        CurrencyNode currency = decodeCurrency(symbol);

        if (currency != null) {

          logger.info("Converting a currency into a security");

          sNode = new SecurityNode();

          sNode.setDescription(currency.getDescription());
          sNode.setPrefix(currency.getPrefix());
          sNode.setSuffix(currency.getSuffix());
          sNode.setScale(currency.getScale());
          sNode.setSymbol(currency.getSymbol());

          sNode.setReportedCurrencyNode(currency);
          sNode.setQuoteSource(QuoteSource.YAHOO);

          engine.addSecurity(sNode);
        }
      }
    }

    if (sNode == null) {
      logger.log(Level.SEVERE, "Bad file, security {0} not mapped", symbol);
    }

    return sNode;
  }
コード例 #19
0
  private List<Transaction> _getPrintableTransactions() {
    List<Transaction> l = new ArrayList<>();

    for (Transaction t : EngineFactory.getEngine(EngineFactory.DEFAULT).getTransactions()) {
      if (PRINT.equalsIgnoreCase(t.getNumber())) {
        l.add(t);
      }
    }

    Collections.sort(l); // use natural sort order
    return l;
  }
コード例 #20
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
  void importAccounts(final XMLStreamReader reader) {

    logger.info("Begin Account import");

    try {
      parse:
      while (reader.hasNext()) {
        int event = reader.next();

        switch (event) {
          case XMLStreamConstants.START_ELEMENT:
            if (reader.getAttributeCount() > 0) {
              if (reader.getAttributeValue(0).contains("Account")) {
                logger.finest("Found the start of an Account");
                parseAccount(reader);
              }
            }
            break;
          case XMLStreamConstants.END_ELEMENT:
            if (reader.getLocalName().equals("objects")) {
              logger.finest("Found the end of the object list and accounts");
              break parse;
            }
            break;
          default:
            break;
        }
      }
    } catch (XMLStreamException e) {
      logger.log(Level.SEVERE, e.toString(), e);
    }

    logger.info("Linking accounts");

    Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    for (Account account : parentMap.keySet()) {
      if (account.getAccountType() != AccountType.ROOT) {
        Account parent = accountMap.get(parentMap.get(account));
        if (!account.getParent().equals(parent)) {
          if (engine.moveAccount(account, parent)) {
            logger.log(
                Level.FINEST,
                "Moving {0} to {1}",
                new Object[] {account.getName(), parent.getName()});
          }
        }
      }
    }

    logger.info("Account import complete");
  }
コード例 #21
0
  private void updateAccountCode(final Account account, final Integer code) {
    final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    if (engine != null) {
      try {
        final Account template = (Account) account.clone();
        template.setAccountCode(code);

        engine.modifyAccount(template, account);
      } catch (final CloneNotSupportedException e) {
        Logger.getLogger(AccountsViewController.class.getName())
            .log(Level.SEVERE, e.getLocalizedMessage(), e);
      }
    }
  }
コード例 #22
0
  private void loadAccountTree() {
    final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    if (engine != null) {
      RootAccount r = engine.getRootAccount();

      final TreeItem<Account> root = new TreeItem<>(r);
      root.setExpanded(true);

      treeTableView.setRoot(root);
      loadChildren(root);
    } else {
      treeTableView.setRoot(null);
    }
  }
コード例 #23
0
  @FXML
  private void convertAction() {
    final Optional<Account> accountOptional =
        StaticAccountsMethods.selectAccount(null, accountProperty.get());
    if (accountOptional.isPresent()) {
      final Account opp = accountOptional.get();

      final Transaction t = new Transaction();

      t.setDate(datePicker.getValue());
      t.setNumber(numberComboBox.getValue());
      t.setPayee(payeeTextField.getText());

      final TransactionEntry entry = new TransactionEntry();
      entry.setMemo(memoTextField.getText());

      if (amountField.getDecimal().signum() >= 0) {
        entry.setCreditAccount(accountProperty.get());
        entry.setDebitAccount(opp);
      } else {
        entry.setDebitAccount(accountProperty.get());
        entry.setCreditAccount(opp);
      }

      entry.setCreditAmount(amountField.getDecimal().abs());
      entry.setDebitAmount(amountField.getDecimal().abs().negate());

      t.addTransactionEntry(entry);

      ReconcileManager.reconcileTransaction(accountProperty.get(), t, getReconciledState());

      TransactionDialog.showAndWait(
          accountProperty.get(),
          t,
          optional -> {
            if (optional.isPresent()) {
              final Transaction tran = optional.get();
              final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);
              Objects.requireNonNull(engine);

              if (engine.removeTransaction(modTrans)) {
                engine.addTransaction(tran);
              }
              clearForm();
            }
          });
    }
  }
コード例 #24
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
    @Override
    public void run() {
      try {
        SecurityNode clone = (SecurityNode) sNode.clone();

        Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

        CurrencyNode currencyNode = engine.getCurrency(cNode);

        if (currencyNode != null) {
          clone.setReportedCurrencyNode(currencyNode);
          engine.updateCommodity(sNode, clone);
        }
      } catch (CloneNotSupportedException e) {
        logger.log(Level.SEVERE, e.toString(), e);
      }
    }
コード例 #25
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
  private static void parseCurrencyNode(final XMLStreamReader reader) {
    Map<String, String> elementMap = new HashMap<>();

    /* still at start of the element.  Need to know when end is reached */
    QName parsingElement = reader.getName();

    try {
      while (reader.hasNext()) {
        int event = reader.next();

        switch (event) {
          case XMLStreamConstants.START_ELEMENT:
            String element = reader.getLocalName();
            elementMap.put(element, reader.getElementText());
            break;
          case XMLStreamConstants.END_ELEMENT:
            if (reader.getName().equals(parsingElement)) {
              logger.finest("Found the end of a CurrencyNode");

              Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

              if (engine.getCurrency(elementMap.get("symbol")) == null) {

                CurrencyNode node = new CurrencyNode();

                node.setSymbol(elementMap.get("symbol"));
                node.setDescription(elementMap.get("description"));
                node.setPrefix(elementMap.get("prefix"));
                node.setSuffix(elementMap.get("suffix"));
                node.setScale(Byte.parseByte(elementMap.get("scale")));

                engine.addCurrency(node);
              }
              return;
            }
            break;

          default:
            break;
        }
      }
    } catch (XMLStreamException e) {
      logger.log(Level.SEVERE, e.toString(), e);
    }
  }
コード例 #26
0
  /**
   * Changes and transaction number to the next available in the account and returns the resultant
   *
   * @param transaction transaction to change the check number
   * @return the resultant transaction
   */
  private static Transaction changeTransNum(final Transaction transaction) {
    Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

    try {
      Transaction clone = (Transaction) transaction.clone();

      clone.setNumber(getNextTransactionNum(transaction));

      if (engine.removeTransaction(transaction)) {
        engine.addTransaction(clone);
        return clone;
      }
    } catch (CloneNotSupportedException e) {
      Logger.getLogger(PrintCheckFactory.class.getName()).log(Level.SEVERE, null, e);
    }

    return transaction;
  }
コード例 #27
0
ファイル: UpdateFactory.java プロジェクト: peteclarkez/jgnash
    @Override
    public Boolean call() throws Exception {
      boolean result = true;

      try {
        final Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);
        Objects.requireNonNull(engine);

        final List<SecurityHistoryNode> newSecurityNodes =
            downloadHistory(securityNode, startDate, endDate);

        for (final SecurityHistoryNode historyNode : newSecurityNodes) {
          engine.addSecurityHistory(securityNode, historyNode);
        }
      } catch (NullPointerException | NumberFormatException ex) {
        logger.log(Level.SEVERE, null, ex);
        result = false;
      }

      return result;
    }
コード例 #28
0
ファイル: UpdateFactory.java プロジェクト: peteclarkez/jgnash
    @Override
    public Boolean call() throws Exception {

      boolean result = true;

      final Engine e = EngineFactory.getEngine(EngineFactory.DEFAULT);

      final LocalDate oldest = securityNode.getHistoryNodes().get(0).getLocalDate();

      if (e != null && securityNode.getQuoteSource() != QuoteSource.NONE) {

        final Set<SecurityHistoryEvent> oldHistoryEvents =
            new HashSet<>(securityNode.getHistoryEvents());

        for (final SecurityHistoryEvent securityHistoryEvent :
            YahooEventParser.retrieveNew(securityNode)) {
          if (!Thread.currentThread().isInterrupted()) { // check for thread interruption

            if (securityHistoryEvent.getDate().isAfter(oldest)
                || securityHistoryEvent.getDate().isEqual(oldest)) {
              if (!oldHistoryEvents.contains(securityHistoryEvent)) {
                result = e.addSecurityHistoryEvent(securityNode, securityHistoryEvent);

                if (result) {
                  logger.info(
                      ResourceUtils.getString(
                          "Message.UpdatedSecurityEvent", securityNode.getSymbol()));
                }
              }
            }
          }
        }
      }

      return result;
    }
コード例 #29
0
ファイル: Import.java プロジェクト: CptMauli/jgnash
  @SuppressWarnings({"unchecked", "ConstantConditions"})
  private void parseAccount(final XMLStreamReader reader) {

    assert reader.getAttributeCount() == 2;

    Map<String, Object> elementMap = new HashMap<>();

    /* still at start of the account.  Need to know when end is reached */
    QName parsingElement = reader.getName();

    String accountClass = reader.getAttributeValue(0);
    String accountId = reader.getAttributeValue(1);

    try {
      while (reader.hasNext()) {
        int event = reader.next();

        switch (event) {
          case XMLStreamConstants.START_ELEMENT:
            String element = reader.getLocalName();

            switch (element) {
              case "securities":
                logger.info("Parsing account securities");
                elementMap.put("securities", parseAccountSecurities(reader));
                break;
              case "amortize":
                logger.info("Parsing amortize object");
                elementMap.put("amortize", parseAmortizeObject(reader));
                break;
              case "locked":
                lockMap.put(accountId, Boolean.valueOf(reader.getElementText()));
                break;
              default:
                elementMap.put(element, reader.getElementText());
                break;
            }
            break;
          case XMLStreamConstants.END_ELEMENT:
            if (reader.getName().equals(parsingElement)) {
              logger.finest("Found the end of an Account");

              Account account = generateAccount(accountClass, elementMap);

              if (account != null) {
                accountMap.put(accountId, account);

                // do not put the root account into the parent map
                if (account.getAccountType() != AccountType.ROOT) {
                  parentMap.put(account, (String) elementMap.get("parentAccount"));
                }

                if (account.getAccountType() != AccountType.ROOT) {
                  Engine engine = EngineFactory.getEngine(EngineFactory.DEFAULT);

                  engine.addAccount(engine.getRootAccount(), account);

                  if (account.getAccountType() == AccountType.LIABILITY) {
                    Map<String, String> amortizeObject =
                        (Map<String, String>) elementMap.get("amortize");

                    if (amortizeObject != null) {
                      AOThread t = new AOThread(account, amortizeObject);
                      workQueue.add(t);
                    }
                  }
                }
              }
              return;
            }
            break;
          default:
            break;
        }
      }
    } catch (XMLStreamException e) {
      logger.log(Level.SEVERE, "Error importing account id: {0}", accountId);
      logger.log(Level.SEVERE, e.toString(), e);
    }
  }
コード例 #30
0
ファイル: MenuBarController.java プロジェクト: laeubi/jgnash
 @FXML
 private void handleCloseAction() {
   if (EngineFactory.getEngine(EngineFactory.DEFAULT) != null) {
     CloseFileTask.initiateFileClose();
   }
 }