From 89032a01d70c17e0b78808ce12537719b73e162d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Tue, 6 Jun 2017 22:45:43 +0200 Subject: [PATCH] Continued: - added billable income POJO/POJI - moved generic code to jcoreee MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../database/BaseFinancialsDatabaseBean.java | 58 +--- .../model/income/BillableIncome.java | 149 ++++++++++ .../model/income/FinancialIncome.java | 262 ++++++++++++++++++ .../jfinancials/model/income/IncomeUtils.java | 33 +++ .../income/interval/FinancialInterval.java | 88 ++++++ .../model/receipt/FinancialReceipt.java | 2 +- .../receipt/entry/BillableReceiptEntry.java | 2 +- .../model/receipt/entry/ReceiptEntry.java | 8 +- 8 files changed, 543 insertions(+), 59 deletions(-) create mode 100644 src/org/mxchange/jfinancials/model/income/BillableIncome.java create mode 100644 src/org/mxchange/jfinancials/model/income/FinancialIncome.java create mode 100644 src/org/mxchange/jfinancials/model/income/IncomeUtils.java create mode 100644 src/org/mxchange/jfinancials/model/income/interval/FinancialInterval.java diff --git a/src/org/mxchange/jfinancials/database/BaseFinancialsDatabaseBean.java b/src/org/mxchange/jfinancials/database/BaseFinancialsDatabaseBean.java index 4d8d833..b44baec 100644 --- a/src/org/mxchange/jfinancials/database/BaseFinancialsDatabaseBean.java +++ b/src/org/mxchange/jfinancials/database/BaseFinancialsDatabaseBean.java @@ -21,18 +21,9 @@ import java.util.GregorianCalendar; import java.util.Objects; import java.util.Properties; import javax.ejb.EJBException; -import javax.faces.FacesException; -import javax.jms.Connection; import javax.jms.JMSException; -import javax.jms.MessageProducer; import javax.jms.ObjectMessage; -import javax.jms.Queue; -import javax.jms.QueueConnectionFactory; -import javax.jms.Session; import javax.mail.Address; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; import org.mxchange.jcontacts.contact.Contact; import org.mxchange.jcoreee.database.BaseDatabaseBean; import org.mxchange.jmailee.model.delivery.wrapper.EmailDeliveryWrapper; @@ -57,55 +48,12 @@ public abstract class BaseFinancialsDatabaseBean extends BaseDatabaseBean { */ private static final long serialVersionUID = 12_895_410_275_811_963L; - /** - * Connection - */ - private Connection connection; - - /** - * Message producer - */ - private MessageProducer messageProducer; - - /** - * Mailer message queue - */ - private Queue queue; - - /** - * Session instance - */ - private Session session; - /** * Protected constructor */ protected BaseFinancialsDatabaseBean () { // Call super constructor - super(); - - try { - // Get initial context - Context context = new InitialContext(); - - // Get factory from JMS resource - QueueConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup("jms/jfinancials-queue-factory"); //NOI18N - - // Lookup queue - this.queue = (Queue) context.lookup("jms/jfinancials-email-queue"); //NOI18N - - // Create connection - this.connection = connectionFactory.createConnection(); - - // Init session instance - this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - - // And message producer - this.messageProducer = this.session.createProducer(this.queue); - } catch (final NamingException | JMSException e) { - // Continued to throw - throw new FacesException(e); - } + super("jms/jfinancials-queue-factory", "jms/jfinancials-email-queue"); //NOI18N } /** @@ -548,11 +496,11 @@ public abstract class BaseFinancialsDatabaseBean extends BaseDatabaseBean { try { // Send out email change - ObjectMessage message = this.session.createObjectMessage(); + ObjectMessage message = this.getSession().createObjectMessage(); message.setObject(emailWrapper); // Send message - this.sendMessage(message, this.messageProducer); + this.sendMessage(message); } catch (final JMSException ex) { // Throw again throw new EJBException(ex); diff --git a/src/org/mxchange/jfinancials/model/income/BillableIncome.java b/src/org/mxchange/jfinancials/model/income/BillableIncome.java new file mode 100644 index 0000000..dff77d6 --- /dev/null +++ b/src/org/mxchange/jfinancials/model/income/BillableIncome.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2017 Roland Häder + * + * 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 . + */ +package org.mxchange.jfinancials.model.income; + +import java.io.Serializable; +import java.util.Calendar; +import org.mxchange.jfinancials.model.income.interval.FinancialInterval; +import org.mxchange.jusercore.model.user.User; + +/** + * An interface for billable income + *

+ * @author Roland Häder + */ +public interface BillableIncome extends Serializable { + + /** + * Getter for income id (primary key) + *

+ * @return Income id (primary key) + */ + Long getIncomeId (); + + /** + * Setter for income id (primary key) + *

+ * @param incomeId Income id (primary key) + */ + void setIncomeId (final Long incomeId); + + /** + * Getter for income-created timestamp + *

+ * @return Income-created timestamp + */ + Calendar getIncomeCreated (); + + /** + * Setter for income-created timestamp + *

+ * @param incomeCreated Income-created timestamp + */ + void setIncomeCreated (final Calendar incomeCreated); + + /** + * Getter for whether income is enabled + *

+ * @return Whether income is enabled + */ + Boolean getIncomeEnabled (); + + /** + * Setter for whether income is enabled + *

+ * @param incomeEnabled Whether income is enabled + */ + void setIncomeEnabled (final Boolean incomeEnabled); + + /** + * Getter for income interval + *

+ * @return Income interval + */ + FinancialInterval getIncomeInterval (); + + /** + * Setter for income interval + *

+ * @param incomeInterval Income interval + */ + void setIncomeInterval (final FinancialInterval incomeInterval); + + /** + * Getter for income single amount + *

+ * @return Income single amount + */ + Float getIncomeSingleAmount (); + + /** + * Setter for income single amount + *

+ * @param incomeSingleAmount Income single amount + */ + void setIncomeSingleAmount (final Float incomeSingleAmount); + + /** + * Getter for income title + *

+ * @return Income title + */ + String getIncomeTitle (); + + /** + * Setter for income title + *

+ * @param incomeTitle Income title + */ + void setIncomeTitle (final String incomeTitle); + + /** + * Getter for income-updated timestamp + *

+ * @return Income-updated timestamp + */ + Calendar getIncomeUpdated (); + + /** + * Setter for income-updated timestamp + *

+ * @param incomeUpdated Income-updated timestamp + */ + void setIncomeUpdated (final Calendar incomeUpdated); + + /** + * Getter for connected user account + *

+ * @return Connected user account + */ + User getIncomeUser (); + + /** + * Setter for connected user account + *

+ * @param incomeUser Connected user account + */ + void setIncomeUser (final User incomeUser); + + @Override + boolean equals (final Object object); + + @Override + int hashCode (); + +} diff --git a/src/org/mxchange/jfinancials/model/income/FinancialIncome.java b/src/org/mxchange/jfinancials/model/income/FinancialIncome.java new file mode 100644 index 0000000..c26b148 --- /dev/null +++ b/src/org/mxchange/jfinancials/model/income/FinancialIncome.java @@ -0,0 +1,262 @@ +/* + * Copyright (C) 2017 Roland Häder + * + * 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 . + */ +package org.mxchange.jfinancials.model.income; + +import java.util.Calendar; +import java.util.Objects; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; +import javax.persistence.Transient; +import org.mxchange.jfinancials.model.income.interval.FinancialInterval; +import org.mxchange.jusercore.model.user.LoginUser; +import org.mxchange.jusercore.model.user.User; + +/** + * An entity for income data + *

+ * @author Roland Häder + */ +@Entity (name = "income") +@Table (name = "income") +@SuppressWarnings ("PersistenceUnitPresent") +public class FinancialIncome implements BillableIncome { + + /** + * Serial number + */ + @Transient + private static final long serialVersionUID = 173_587_690_625_524L; + + /** + * Income created timestamp + */ + @Basic (optional = false) + @Temporal (TemporalType.TIMESTAMP) + @Column (name = "income_created", nullable = false, updatable = false) + private Calendar incomeCreated; + + /** + * Income enabled (default) or disabled (no longer receiving income but need + * to keep it for statistics). + */ + @Basic (optional = false) + @Column (name = "income_enabled", nullable = false) + private Boolean incomeEnabled; + + /** + * Income id (primary key) + */ + @Id + @GeneratedValue (strategy = GenerationType.IDENTITY) + @Column (name = "income_id", nullable = false, updatable = false) + private Long incomeId; + + /** + * Income interval + */ + @Basic (optional = false) + @Column (name = "income_interval", nullable = false) + @Enumerated (EnumType.STRING) + private FinancialInterval incomeInterval; + + /** + * Income single amount + */ + @Basic (optional = false) + @Column (name = "income_single_amount", nullable = false) + private Float incomeSingleAmount; + + /** + * Income title + */ + @Basic (optional = false) + @Column (name = "income_title", nullable = false) + private String incomeTitle; + + /** + * Income updated timestamp + */ + @Temporal (TemporalType.TIMESTAMP) + @Column (name = "income_updated", insertable = false) + private Calendar incomeUpdated; + + /** + * Connected user account + */ + @JoinColumn (name = "income_user_id", referencedColumnName = "user_id", nullable = false, updatable = false) + @OneToOne (targetEntity = LoginUser.class, cascade = CascadeType.REFRESH, optional = false) + private User incomeUser; + + /** + * Default constructor + */ + public FinancialIncome () { + } + + /** + * Constructor with all fields, except timestamps. These have to be set at a + * proper place + *

+ * @param incomeTitle Income (type) title + * @param incomeSingleAmount Single amount + * @param incomeInterval Interval + * @param incomeUser Connected user + */ + public FinancialIncome (final String incomeTitle, final Float incomeSingleAmount, final FinancialInterval incomeInterval, final User incomeUser) { + // Call default constructor + this(); + + // Set all fields + this.incomeTitle = incomeTitle; + this.incomeSingleAmount = incomeSingleAmount; + this.incomeInterval = incomeInterval; + this.incomeUser = incomeUser; + + // Enable this income by default + this.incomeEnabled = Boolean.TRUE; + } + + @Override + public boolean equals (final Object object) { + if (this == object) { + return true; + } else if (null == object) { + return false; + } else if (this.getClass() != object.getClass()) { + return false; + } + + final BillableIncome other = (BillableIncome) object; + + if (!Objects.equals(this.getIncomeTitle(), other.getIncomeTitle())) { + return false; + } else if (!Objects.equals(this.getIncomeId(), other.getIncomeId())) { + return false; + } else if (!Objects.equals(this.getIncomeUser(), other.getIncomeUser())) { + return false; + } + return true; + } + + @Override + @SuppressWarnings ("ReturnOfDateField") + public Calendar getIncomeCreated () { + return this.incomeCreated; + } + + @Override + @SuppressWarnings ("AssignmentToDateFieldFromParameter") + public void setIncomeCreated (Calendar incomeCreated) { + this.incomeCreated = incomeCreated; + } + + @Override + public Boolean getIncomeEnabled () { + return this.incomeEnabled; + } + + @Override + public void setIncomeEnabled (Boolean incomeEnabled) { + this.incomeEnabled = incomeEnabled; + } + + @Override + public Long getIncomeId () { + return this.incomeId; + } + + @Override + public void setIncomeId (final Long incomeId) { + this.incomeId = incomeId; + } + + @Override + public FinancialInterval getIncomeInterval () { + return this.incomeInterval; + } + + @Override + public void setIncomeInterval (FinancialInterval incomeInterval) { + this.incomeInterval = incomeInterval; + } + + @Override + public Float getIncomeSingleAmount () { + return this.incomeSingleAmount; + } + + @Override + public void setIncomeSingleAmount (Float incomeSingleAmount) { + this.incomeSingleAmount = incomeSingleAmount; + } + + @Override + public String getIncomeTitle () { + return this.incomeTitle; + } + + @Override + public void setIncomeTitle (String incomeTitle) { + this.incomeTitle = incomeTitle; + } + + @Override + @SuppressWarnings ("ReturnOfDateField") + public Calendar getIncomeUpdated () { + return this.incomeUpdated; + } + + @Override + @SuppressWarnings ("AssignmentToDateFieldFromParameter") + public void setIncomeUpdated (Calendar incomeUpdated) { + this.incomeUpdated = incomeUpdated; + } + + @Override + public User getIncomeUser () { + return this.incomeUser; + } + + @Override + public void setIncomeUser (User incomeUser) { + this.incomeUser = incomeUser; + } + + @Override + public int hashCode () { + int hash = 3; + + hash = 29 * hash + Objects.hashCode(this.getIncomeId()); + hash = 29 * hash + Objects.hashCode(this.getIncomeTitle()); + hash = 29 * hash + Objects.hashCode(this.getIncomeUser()); + + return hash; + } + +} diff --git a/src/org/mxchange/jfinancials/model/income/IncomeUtils.java b/src/org/mxchange/jfinancials/model/income/IncomeUtils.java new file mode 100644 index 0000000..70054da --- /dev/null +++ b/src/org/mxchange/jfinancials/model/income/IncomeUtils.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2016, 2017 Roland Häder + * + * 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 . + */ +package org.mxchange.jfinancials.model.income; + +import java.io.Serializable; + +/** + * An utilities class for incomes + *

+ * @author Roland Häder + */ +public class IncomeUtils implements Serializable { + + /** + * Serial number + */ + private static final long serialVersionUID = 145_986_981_751L; + +} diff --git a/src/org/mxchange/jfinancials/model/income/interval/FinancialInterval.java b/src/org/mxchange/jfinancials/model/income/interval/FinancialInterval.java new file mode 100644 index 0000000..99a1476 --- /dev/null +++ b/src/org/mxchange/jfinancials/model/income/interval/FinancialInterval.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2016, 2017 Roland Häder + * + * 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 . + */ +package org.mxchange.jfinancials.model.income.interval; + +import java.io.Serializable; + +/** + * An enumeration for income/expenses intervals + *

+ * @author Roland Häder + */ +public enum FinancialInterval implements Serializable { + + /** + * Daily + */ + DAILY("FINANCIAL_INTERVAL_DAILY", "financial_interval_daily"), //NOI18N + + /** + * Weekly + */ + WEEKLY("FINANCIAL_INTERVAL_WEEKLY", "financial_interval_weekly"), //NOI18N + + /** + * Monthly + */ + MONTHLY("FINANCIAL_INTERVAL_MONTHLY", "financial_interval_monthly"), //NOI18N + + /** + * Yearly + */ + YEARLY("FINANCIAL_INTERVAL_YEARLY", "financial_interval_yearly"); //NOI18N + + /** + * Message key + */ + private final String messageKey; + + /** + * CSS style class + */ + private final String styleClass; + + /** + * Constructor with i18n translation key and CSS style class + *

+ * @param messageKey Message key (i18n) + * @param styleClass CSS style class + */ + private FinancialInterval (final String messageKey, final String styleClass) { + // Set it here + this.messageKey = messageKey; + this.styleClass = styleClass; + } + + /** + * Getter for message key + *

+ * @return Message key (i18n) + */ + public String getMessageKey () { + return this.messageKey; + } + + /** + * Getter for CSS style class + *

+ * @return CSS style class + */ + public String getStyleClass () { + return this.styleClass; + } + +} diff --git a/src/org/mxchange/jfinancials/model/receipt/FinancialReceipt.java b/src/org/mxchange/jfinancials/model/receipt/FinancialReceipt.java index 34fdc9c..6d58ffa 100644 --- a/src/org/mxchange/jfinancials/model/receipt/FinancialReceipt.java +++ b/src/org/mxchange/jfinancials/model/receipt/FinancialReceipt.java @@ -111,7 +111,7 @@ public class FinancialReceipt implements BillableReceipt { // Call other constructor first this(); - // Set all + // Set all values this.receiptPaymentType = receiptPaymentType; this.receiptSeller = receiptSeller; this.receiptUser = receiptUser; diff --git a/src/org/mxchange/jfinancials/model/receipt/entry/BillableReceiptEntry.java b/src/org/mxchange/jfinancials/model/receipt/entry/BillableReceiptEntry.java index 8dbbfa5..10efd09 100644 --- a/src/org/mxchange/jfinancials/model/receipt/entry/BillableReceiptEntry.java +++ b/src/org/mxchange/jfinancials/model/receipt/entry/BillableReceiptEntry.java @@ -18,8 +18,8 @@ package org.mxchange.jfinancials.model.receipt.entry; import java.io.Serializable; import java.util.Calendar; -import org.mxchange.jproduct.model.product.Product; import org.mxchange.jfinancials.model.receipt.BillableReceipt; +import org.mxchange.jproduct.model.product.Product; /** * An interface for receipt entries diff --git a/src/org/mxchange/jfinancials/model/receipt/entry/ReceiptEntry.java b/src/org/mxchange/jfinancials/model/receipt/entry/ReceiptEntry.java index 6fb49b9..7851431 100644 --- a/src/org/mxchange/jfinancials/model/receipt/entry/ReceiptEntry.java +++ b/src/org/mxchange/jfinancials/model/receipt/entry/ReceiptEntry.java @@ -33,10 +33,10 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.Transient; +import org.mxchange.jfinancials.model.receipt.BillableReceipt; import org.mxchange.jfinancials.model.receipt.FinancialReceipt; import org.mxchange.jproduct.model.product.GenericProduct; import org.mxchange.jproduct.model.product.Product; -import org.mxchange.jfinancials.model.receipt.BillableReceipt; /** * A class for entryReceipt entries @@ -81,7 +81,7 @@ public class ReceiptEntry implements BillableReceiptEntry { * Product being linked in this entryReceipt item */ @JoinColumn (name = "entry_product_id", referencedColumnName = "product_id", nullable = false, updatable = false, unique = true) - @OneToOne (targetEntity = GenericProduct.class, cascade = CascadeType.ALL, optional = false) + @OneToOne (targetEntity = GenericProduct.class, cascade = CascadeType.REFRESH, optional = false) private Product entryProduct; /** @@ -120,6 +120,10 @@ public class ReceiptEntry implements BillableReceiptEntry { * @param entryReceipt FinancialReceipt instance */ public ReceiptEntry (final Product entryProduct, final Float entryProductPrice, final Long entryProductQuantity, final BillableReceipt entryReceipt) { + // Call other constructor + this(); + + // Set all values this.entryProduct = entryProduct; this.entryProductPrice = entryProductPrice; this.entryProductQuantity = entryProductQuantity; -- 2.39.5