From 5a55d0fc6639510ce5d62bad4552315061cdfe80 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sat, 14 Oct 2017 15:32:51 +0200 Subject: [PATCH] Please cherry-pick: - added createManaged() methods for BranchOffice and HeadquartersData entities - added helper method setAllOpeningTimesCreated() which sets "created" entity property of all opening times - renamed EJB [admin]companyEmployee to only plain [admin]employee (enough), remember to write the "e" upper-case in adminEmployee - added EJB for opening times - added EJB for departments - updated persistence unit with new entity class' name MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- src/conf/persistence.xml | 2 +- .../PizzaBusinessDataSessionBean.java | 9 + .../PizzaAdminBranchOfficeSessionBean.java | 16 ++ .../PizzaBranchOfficeSessionBean.java | 9 + .../FinancialsAdminDepartmentSessionBean.java | 176 ++++++++++++++++++ .../FinancialsDepartmentSessionBean.java | 101 ++++++++++ .../PizzaAdminCompanyEmployeeSessionBean.java | 6 +- .../PizzaCompanyEmployeeSessionBean.java | 6 +- ...inancialsAdminOpeningTimesSessionBean.java | 84 +++++++++ .../FinancialsOpeningTimesSessionBean.java | 101 ++++++++++ .../database/BasePizzaEnterpriseBean.java | 119 +++++++++++- 11 files changed, 617 insertions(+), 12 deletions(-) create mode 100644 src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsAdminDepartmentSessionBean.java create mode 100644 src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsDepartmentSessionBean.java create mode 100644 src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsAdminOpeningTimesSessionBean.java create mode 100644 src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsOpeningTimesSessionBean.java diff --git a/src/conf/persistence.xml b/src/conf/persistence.xml index ed0d8de..d7fd347 100644 --- a/src/conf/persistence.xml +++ b/src/conf/persistence.xml @@ -10,7 +10,7 @@ org.mxchange.jcontactsbusiness.model.headquarters.CompanyHeadquartersData org.mxchange.jcontactsbusiness.model.jobposition.EmployeePosition org.mxchange.jcontactsbusiness.model.logo.CompanyLogo - org.mxchange.jcontactsbusiness.model.opening_times.BusinessOpeningTimes + org.mxchange.jcontactsbusiness.model.opening_time.BusinessOpeningTime org.mxchange.jcountry.model.data.CountryData org.mxchange.jcustomercore.model.customer.ContactCustomer org.mxchange.jphone.model.phonenumbers.fax.FaxNumber diff --git a/src/java/org/mxchange/jcontactsbusiness/model/basicdata/PizzaBusinessDataSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/basicdata/PizzaBusinessDataSessionBean.java index 311c682..652fb38 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/basicdata/PizzaBusinessDataSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/basicdata/PizzaBusinessDataSessionBean.java @@ -70,6 +70,15 @@ public class PizzaBusinessDataSessionBean extends BasePizzaDatabaseBean implemen // Trace message this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findBasicDataById: CALLED!", this.getClass().getSimpleName())); //NOI18N + // Validate parameter + if (null == basicDataId) { + // Throw NPE + throw new NullPointerException("basicDataId is null"); //NOI18N + } else if (basicDataId < 1) { + // Throw NPE + throw new NullPointerException(MessageFormat.format("basicDataId={0}is invalid", basicDataId)); //NOI18N + } + // Get query final Query query = this.getEntityManager().createNamedQuery("SearchBusinessDataById", CompanyBasicData.class); //NOI18N diff --git a/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaAdminBranchOfficeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaAdminBranchOfficeSessionBean.java index f2a59bc..5b811af 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaAdminBranchOfficeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaAdminBranchOfficeSessionBean.java @@ -23,6 +23,7 @@ import javax.ejb.EJB; import javax.ejb.Stateless; import org.mxchange.jcontactsbusiness.exceptions.branchoffice.BranchOfficeAlreadyAddedException; import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData; +import org.mxchange.jcontactsbusiness.model.opening_time.OpeningTime; import org.mxchange.jcountry.model.data.Country; import org.mxchange.jusercore.model.user.User; import org.mxchange.pizzaaplication.database.BasePizzaDatabaseBean; @@ -104,6 +105,21 @@ public class PizzaAdminBranchOfficeSessionBean extends BasePizzaDatabaseBean imp // Set "created" timestamp on any number assigned this.setAllPhoneEntriesCreated(branchOffice); + // Get opening times + final List openingTimes = branchOffice.getBranchOpeningTimes(); + + // Debugging: + this.getLoggerBeanLocal().logDebug(MessageFormat.format("{0}.addBranchOffice(): branchOffice.branchOfficeOpeningTimes={1}", this.getClass().getSimpleName(), openingTimes)); + + // Is opening times set and not empty? + if ((openingTimes instanceof List) && (!openingTimes.isEmpty())) { + // Add created timestamp for all times + this.setAllOpeningTimesCreated(openingTimes); + } else { + // Set all to null + branchOffice.setBranchOpeningTimes(null); + } + // Persist it this.getEntityManager().persist(branchOffice); diff --git a/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaBranchOfficeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaBranchOfficeSessionBean.java index 47a3a60..2557638 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaBranchOfficeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/PizzaBranchOfficeSessionBean.java @@ -61,6 +61,15 @@ public class PizzaBranchOfficeSessionBean extends BasePizzaEnterpriseBean implem // Trace message this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findBranchOfficeById: CALLED!", this.getClass().getSimpleName())); //NOI18N + // Validate parameter + if (null == branchOfficeId) { + // Throw NPE + throw new NullPointerException("branchOfficeId is null"); //NOI18N + } else if (branchOfficeId < 1) { + // Throw NPE + throw new NullPointerException(MessageFormat.format("branchOfficeId={0}is invalid", branchOfficeId)); //NOI18N + } + // Get query final Query query = this.getEntityManager().createNamedQuery("SearchBranchOfficeById", CompanyBranchOffice.class); //NOI18N diff --git a/src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsAdminDepartmentSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsAdminDepartmentSessionBean.java new file mode 100644 index 0000000..002e4da --- /dev/null +++ b/src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsAdminDepartmentSessionBean.java @@ -0,0 +1,176 @@ +/* + * 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 Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.mxchange.jcontactsbusiness.model.department; + +import java.text.MessageFormat; +import java.util.Date; +import java.util.List; +import javax.ejb.EJB; +import javax.ejb.Stateless; +import org.mxchange.jcontactsbusiness.exceptions.department.DepartmentAlreadyAddedException; +import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData; +import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice; +import org.mxchange.jcontactsbusiness.model.employee.Employee; +import org.mxchange.jcontactsbusiness.model.headquarters.HeadquartersData; +import org.mxchange.jfinancials.database.BaseFinancialsDatabaseBean; +import org.mxchange.jusercore.model.user.User; + +/** + * A stateless session bean for administrative department purposes + *

+ * @author Roland Häder + */ +@Stateless (name = "adminDepartment", description = "An administrative statless bean for handling department data (all)") +public class FinancialsAdminDepartmentSessionBean extends BaseFinancialsDatabaseBean implements AdminDepartmentSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 58_467_386_571_701L; + + /** + * General department bean + */ + @EJB (lookup = "java:global/jfinancials-ejb/department!org.mxchange.jcontactsbusiness.model.department.DepartmentSessionBeanRemote") + private DepartmentSessionBeanRemote departmentBean; + + /** + * Default constructor + */ + public FinancialsAdminDepartmentSessionBean () { + // Call super constructor + super(); + } + + @Override + public Department addDepartment (final Department department) throws DepartmentAlreadyAddedException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addDepartment(): department={1} - CALLED!", this.getClass().getSimpleName(), department)); //NOI18N + + // Validate parameter + if (null == department) { + // Throw NPE + throw new NullPointerException("department is null"); //NOI18N + } else if (department.getDepartmentId() instanceof Long) { + // Should not happen + throw new IllegalArgumentException("department.departmentId should not be set."); //NOI18N + } else if (department.getDepartmentCompany() == null) { + // Throw NPE + throw new NullPointerException("department.departmentCompany is null"); //NOI18N + } else if (department.getDepartmentCompany().getBasicDataId() == null) { + // Throw NPE again + throw new NullPointerException("department.departmentCompany.basicDataId is null"); //NOI18N + } else if (department.getDepartmentCompany().getBasicDataId() < 1) { + // Throw IAE + throw new IllegalArgumentException(MessageFormat.format("department.departmentCompany.basicDataId={0} is invalid", department.getDepartmentCompany().getBasicDataId())); //NOI18N + } else if (department.getDepartmentI18nKey() == null) { + // Throw NPE + throw new NullPointerException("department.departmentName is null"); //NOI18N + } else if (department.getDepartmentI18nKey().isEmpty()) { + // Throw IAE + throw new NullPointerException("department.departmentName is empty"); //NOI18N + } else if (this.isDepartmentFound(department)) { + // Already added, abort here + throw new DepartmentAlreadyAddedException(department); + } + + // Set created timestamp + department.setDepartmentCreated(new Date()); + + // Get managed basic data instance + final BusinessBasicData managedBasicData = this.createManaged(department.getDepartmentCompany()); + + // Set it back + department.setDepartmentCompany(managedBasicData); + + // Is branch office set? + if (department.getDepartmentBranchOffice() instanceof BranchOffice) { + // Get managed branch office + final BranchOffice managedBranchOffice = this.createManaged(department.getDepartmentBranchOffice()); + + // Set it back + department.setDepartmentBranchOffice(managedBranchOffice); + } + + // Is headquarters set? + if (department.getDepartmentHeadquarters() instanceof HeadquartersData) { + // Get managed headquarters + final HeadquartersData managedHeadquarters = this.createManaged(department.getDepartmentHeadquarters()); + + // Set it back + department.setDepartmentHeadquarters(managedHeadquarters); + } + + // Is lead employee set? + if (department.getDepartmentLead()instanceof Employee) { + // Get managed lead employee + final Employee managedEmployee = this.createManaged(department.getDepartmentLead()); + + // Set it back + department.setDepartmentLead(managedEmployee); + } + + // Is "owning" user set? + if (department.getDepartmentUserOwner()instanceof User) { + // Get managed user + final User managedUser = this.createManaged(department.getDepartmentUserOwner()); + + // Set it back + department.setDepartmentUserOwner(managedUser); + } + + // Persist it + this.getEntityManager().persist(department); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addDepartment(): department.departmentId={1} - EXIT!", this.getClass().getSimpleName(), department.getDepartmentId())); //NOI18N + + // Return updated instance + return department; + } + + /** + * Checks if given department's address is already persisted. The whole + * (persisted) list is being loaded and each address is being matched + * against the given department's address. + *

+ * @param department Branch office being checked + *

+ * @return Whether it has been found + */ + private boolean isDepartmentFound (final Department department) { + // Get whole list + final List departments = this.departmentBean.allDepartments(); + + // Default is not found + boolean isFound = false; + + // Check all single addresses + for (final Department dep : departments) { + // Is the same address found? + if (Departments.isSameDepartment(dep, department)) { + // Found one + isFound = true; + break; + } + } + + // Return flag + return isFound; + } + +} diff --git a/src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsDepartmentSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsDepartmentSessionBean.java new file mode 100644 index 0000000..f88605e --- /dev/null +++ b/src/java/org/mxchange/jcontactsbusiness/model/department/FinancialsDepartmentSessionBean.java @@ -0,0 +1,101 @@ +/* + * 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 Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.mxchange.jcontactsbusiness.model.department; + +import java.text.MessageFormat; +import java.util.List; +import javax.ejb.Stateless; +import javax.persistence.NoResultException; +import javax.persistence.Query; +import org.mxchange.jcontactsbusiness.exceptions.department.DepartmentNotFoundException; +import org.mxchange.jfinancials.database.BaseFinancialsDatabaseBean; + +/** + * A stateless session bean for general department purposes + *

+ * @author Roland Häder + */ +@Stateless (name = "department", description = "A general statless bean for handling branch office data (all)") +public class FinancialsDepartmentSessionBean extends BaseFinancialsDatabaseBean implements DepartmentSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 58_467_386_571_701L; + + @Override + @SuppressWarnings ("unchecked") + public List allDepartments () { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allDepartments: CALLED!", this.getClass().getSimpleName())); //NOI18N + + // Get query + final Query query = this.getEntityManager().createNamedQuery("AllDepartments"); //NOI18N + + // Get list from it + final List list = query.getResultList(); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allDepartments: list.size()={1} - EXIT!", this.getClass().getSimpleName(), list.size())); //NOI18N + + // Return it + return list; + } + + @Override + public Department findDepartmentById (final Long departmentId) throws DepartmentNotFoundException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findDepartmentById: CALLED!", this.getClass().getSimpleName())); //NOI18N + + // Validate parameter + if (null == departmentId) { + // Throw NPE + throw new NullPointerException("departmentId is null"); //NOI18N + } else if (departmentId < 1) { + // Throw NPE + throw new NullPointerException(MessageFormat.format("departmentId={0}is invalid", departmentId)); //NOI18N + } + + // Get query + final Query query = this.getEntityManager().createNamedQuery("SearchDepartmentById", CompanyDepartment.class); //NOI18N + + // Set parameter + query.setParameter("departmentId", departmentId); //NOI18N + + // Get single instance + final Department department; + + // Try to find a result + try { + // Find a single result + department = (Department) query.getSingleResult(); + + // Log trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findDepartmentById: Found department={1}", this.getClass().getSimpleName(), department)); //NOI18N + } catch (final NoResultException ex) { + // No result found + throw new DepartmentNotFoundException(departmentId, ex); + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findDepartmentById: department={1} - EXIT!", this.getClass().getSimpleName(), department)); //NOI18N + + // Return it + return department; + } + +} diff --git a/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaAdminCompanyEmployeeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaAdminCompanyEmployeeSessionBean.java index e27b91b..85fa30a 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaAdminCompanyEmployeeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaAdminCompanyEmployeeSessionBean.java @@ -17,15 +17,15 @@ package org.mxchange.jcontactsbusiness.model.employee; import javax.ejb.Stateless; -import org.mxchange.pizzaaplication.database.BasePizzaDatabaseBean; +import org.mxchange.pizzaaplication.database.BasePizzaEnterpriseBean; /** * A stateless bean for administrative purposes for company employees. *

* @author Roland Häder */ -@Stateless (name = "adminCompanyEmployee", description = "An administrative statless bean for handling company employees") -public class PizzaAdminCompanyEmployeeSessionBean extends BasePizzaDatabaseBean implements AdminCompanyEmployeeSessionBeanRemote { +@Stateless (name = "adminEmployee", description = "An administrative statless bean for handling company employees") +public class PizzaAdminCompanyEmployeeSessionBean extends BasePizzaEnterpriseBean implements AdminCompanyEmployeeSessionBeanRemote { /** * Serial number diff --git a/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaCompanyEmployeeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaCompanyEmployeeSessionBean.java index 1d5dc53..4547737 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaCompanyEmployeeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/employee/PizzaCompanyEmployeeSessionBean.java @@ -22,15 +22,15 @@ import javax.ejb.Stateless; import javax.persistence.NoResultException; import javax.persistence.Query; import org.mxchange.jcontactsbusiness.exceptions.employee.CompanyEmployeeNotFoundException; -import org.mxchange.pizzaaplication.database.BasePizzaDatabaseBean; +import org.mxchange.pizzaaplication.database.BasePizzaEnterpriseBean; /** * A stateless bean for general purposes for company employees. *

* @author Roland Häder */ -@Stateless (name = "companyEmployee", description = "A general statless bean for handling company employees") -public class PizzaCompanyEmployeeSessionBean extends BasePizzaDatabaseBean implements CompanyEmployeeSessionBeanRemote { +@Stateless (name = "employee", description = "A general statless bean for handling company employees") +public class PizzaCompanyEmployeeSessionBean extends BasePizzaEnterpriseBean implements CompanyEmployeeSessionBeanRemote { /** * Serial number diff --git a/src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsAdminOpeningTimesSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsAdminOpeningTimesSessionBean.java new file mode 100644 index 0000000..4f1468a --- /dev/null +++ b/src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsAdminOpeningTimesSessionBean.java @@ -0,0 +1,84 @@ +/* + * 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 Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.mxchange.jcontactsbusiness.model.opening_time; + +import java.text.MessageFormat; +import java.util.Date; +import javax.ejb.Stateless; +import org.mxchange.jfinancials.database.BaseFinancialsDatabaseBean; + +/** + * A stateless session bean for administrative opening times purposes + *

+ * @author Roland Häder + */ +@Stateless (name = "adminOpeningTimes", description = "An administrative statless bean for handling opening times") +public class FinancialsAdminOpeningTimesSessionBean extends BaseFinancialsDatabaseBean implements AdminOpeningTimeSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 58_467_386_571_701L; + + /** + * Default constructor + */ + public FinancialsAdminOpeningTimesSessionBean () { + // Call super constructor + super(); + } + + @Override + public OpeningTime addOpeningTime (final OpeningTime openingTime) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addOpeningTimes(): openingTime={1} - CALLED!", this.getClass().getSimpleName(), openingTime)); //NOI18N + + // Validate parameter + if (null == openingTime) { + // Throw NPE + throw new NullPointerException("openingTime is null"); //NOI18N + } else if (openingTime.getOpeningId() instanceof Long) { + // Should not happen + throw new IllegalArgumentException("openingTime.openingId should not be set."); //NOI18N + } else if (openingTime.getOpeningStartDay()== null) { + // Throw NPE + throw new NullPointerException("openingTime.openingStartDay is null"); //NOI18N + } else if (openingTime.getOpeningStartTime()== null) { + // Throw NPE + throw new NullPointerException("openingTime.openingStartTime is null"); //NOI18N + } else if (openingTime.getOpeningEndDay()== null) { + // Throw NPE + throw new NullPointerException("openingTime.openingEndDay is null"); //NOI18N + } else if (openingTime.getOpeningEndTime()== null) { + // Throw NPE + throw new NullPointerException("openingTime.openingEndTime is null"); //NOI18N + } + + // Set created timestamp + openingTime.setOpeningCreated(new Date()); + + // Persist it + this.getEntityManager().persist(openingTime); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addOpeningTimes(): openingTime.openingId={1} - EXIT!", this.getClass().getSimpleName(), openingTime.getOpeningId())); //NOI18N + + // Return updated instance + return openingTime; + } + +} diff --git a/src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsOpeningTimesSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsOpeningTimesSessionBean.java new file mode 100644 index 0000000..7e418b5 --- /dev/null +++ b/src/java/org/mxchange/jcontactsbusiness/model/opening_time/FinancialsOpeningTimesSessionBean.java @@ -0,0 +1,101 @@ +/* + * 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 Affero 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.mxchange.jcontactsbusiness.model.opening_time; + +import java.text.MessageFormat; +import java.util.List; +import javax.ejb.Stateless; +import javax.persistence.NoResultException; +import javax.persistence.Query; +import org.mxchange.jcontactsbusiness.exceptions.opening_time.OpeningTimeNotFoundException; +import org.mxchange.jfinancials.database.BaseFinancialsDatabaseBean; + +/** + * A stateless session bean for general opening times purposes + *

+ * @author Roland Häder + */ +@Stateless (name = "openingTimes", description = "A general statless bean for handling branch office data (all)") +public class FinancialsOpeningTimesSessionBean extends BaseFinancialsDatabaseBean implements OpeningTimeSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 58_467_386_571_701L; + + @Override + @SuppressWarnings ("unchecked") + public List allOpeningTimes () { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allOpeningTimes: CALLED!", this.getClass().getSimpleName())); //NOI18N + + // Get query + final Query query = this.getEntityManager().createNamedQuery("AllOpeningTimes"); //NOI18N + + // Get list from it + final List list = query.getResultList(); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allOpeningTimes: list.size()={1} - EXIT!", this.getClass().getSimpleName(), list.size())); //NOI18N + + // Return it + return list; + } + + @Override + public OpeningTime findOpeningTimesById (final Long departmentId) throws OpeningTimeNotFoundException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findOpeningTimesById: CALLED!", this.getClass().getSimpleName())); //NOI18N + + // Validate parameter + if (null == departmentId) { + // Throw NPE + throw new NullPointerException("departmentId is null"); //NOI18N + } else if (departmentId < 1) { + // Throw NPE + throw new NullPointerException(MessageFormat.format("departmentId={0}is invalid", departmentId)); //NOI18N + } + + // Get query + final Query query = this.getEntityManager().createNamedQuery("SearchOpeningTimesById", BusinessOpeningTime.class); //NOI18N + + // Set parameter + query.setParameter("departmentId", departmentId); //NOI18N + + // Get single instance + final OpeningTime department; + + // Try to find a result + try { + // Find a single result + department = (OpeningTime) query.getSingleResult(); + + // Log trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findOpeningTimesById: Found department={1}", this.getClass().getSimpleName(), department)); //NOI18N + } catch (final NoResultException ex) { + // No result found + throw new OpeningTimeNotFoundException(departmentId, ex); + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findOpeningTimesById: department={1} - EXIT!", this.getClass().getSimpleName(), department)); //NOI18N + + // Return it + return department; + } + +} diff --git a/src/java/org/mxchange/pizzaaplication/database/BasePizzaEnterpriseBean.java b/src/java/org/mxchange/pizzaaplication/database/BasePizzaEnterpriseBean.java index 506ad6c..0f6477f 100644 --- a/src/java/org/mxchange/pizzaaplication/database/BasePizzaEnterpriseBean.java +++ b/src/java/org/mxchange/pizzaaplication/database/BasePizzaEnterpriseBean.java @@ -18,6 +18,7 @@ package org.mxchange.pizzaaplication.database; import java.text.MessageFormat; import java.util.Date; +import java.util.List; import java.util.Objects; import java.util.Properties; import javax.ejb.EJBException; @@ -32,8 +33,12 @@ import org.mxchange.jcontacts.model.contact.UserContact; import org.mxchange.jcontactsbusiness.model.basicdata.BusinessBasicData; import org.mxchange.jcontactsbusiness.model.basicdata.CompanyBasicData; import org.mxchange.jcontactsbusiness.model.branchoffice.BranchOffice; +import org.mxchange.jcontactsbusiness.model.branchoffice.CompanyBranchOffice; import org.mxchange.jcontactsbusiness.model.employee.CompanyEmployee; import org.mxchange.jcontactsbusiness.model.employee.Employee; +import org.mxchange.jcontactsbusiness.model.headquarters.CompanyHeadquartersData; +import org.mxchange.jcontactsbusiness.model.headquarters.HeadquartersData; +import org.mxchange.jcontactsbusiness.model.opening_time.OpeningTime; import org.mxchange.jcoreee.database.BaseDatabaseBean; import org.mxchange.jcountry.model.data.Country; import org.mxchange.jcountry.model.data.CountryData; @@ -308,7 +313,7 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { throw new NullPointerException("contact.contactId is null"); //NOI18N } else if (contact.getContactId() < 1) { // Id is set - throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is null", contact.getContactId())); //NOI18N + throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is invalid", contact.getContactId())); //NOI18N } // Try to find it (should be there) @@ -344,7 +349,7 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { throw new NullPointerException("country.countryId is null"); //NOI18N } else if (country.getCountryId() < 1) { // Id is set - throw new IllegalArgumentException(MessageFormat.format("country.countryId={0} is null", country.getCountryId())); //NOI18N + throw new IllegalArgumentException(MessageFormat.format("country.countryId={0} is invalid", country.getCountryId())); //NOI18N } // Try to find it (should be there) @@ -380,7 +385,7 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { throw new NullPointerException("basicData.basicDataId is null"); //NOI18N } else if (basicData.getBasicDataId() < 1) { // Id is set - throw new IllegalArgumentException(MessageFormat.format("basicData.basicDataId={0} is null", basicData.getBasicDataId())); //NOI18N + throw new IllegalArgumentException(MessageFormat.format("basicData.basicDataId={0} is invalid", basicData.getBasicDataId())); //NOI18N } // Try to find it (should be there) @@ -396,6 +401,42 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { return managedBasicData; } + /** + * Get back a managed instance from given branch office + *

+ * @param branchOffice Unmanaged/detached branch office instance + *

+ * @return Managed basic data instance + */ + protected BranchOffice createManaged (final BranchOffice branchOffice) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.createManaged: branchOffice={1} - CALLED!", this.getClass().getSimpleName(), branchOffice)); //NOI18N + + // user should not be null + if (null == branchOffice) { + // Abort here + throw new NullPointerException("branchOffice is null"); //NOI18N + } else if (branchOffice.getBranchId() == null) { + // Id is set + throw new NullPointerException("branchOffice.branchOfficeId is null"); //NOI18N + } else if (branchOffice.getBranchId() < 1) { + // Id is set + throw new IllegalArgumentException(MessageFormat.format("branchOffice.branchOfficeId={0} is invalid", branchOffice.getBranchId())); //NOI18N + } + + // Try to find it (should be there) + final BranchOffice managedBranchOffice = this.getEntityManager().find(CompanyBranchOffice.class, branchOffice.getBranchId()); + + // Should be there + assert (managedBranchOffice instanceof BusinessBasicData) : "managedBranchOffice is null"; //NOI18N + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.createManaged: managedBranchOffice={1} - EXIT!", this.getClass().getSimpleName(), managedBranchOffice)); //NOI18N + + // Return it + return managedBranchOffice; + } + /** * Get back a managed instance from given employee *

@@ -416,7 +457,7 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { throw new NullPointerException("employee.employeeId is null"); //NOI18N } else if (employee.getEmployeeId() < 1) { // Id is set - throw new IllegalArgumentException(MessageFormat.format("employee.employeeId={0} is null", employee.getEmployeeId())); //NOI18N + throw new IllegalArgumentException(MessageFormat.format("employee.employeeId={0} is invalid", employee.getEmployeeId())); //NOI18N } // Try to find it (should be there) @@ -432,6 +473,42 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { return managedEmployee; } + /** + * Get back a managed instance from given headquarters + *

+ * @param headquarters Unmanaged/detached headquarters instance + *

+ * @return Managed basic data instance + */ + protected HeadquartersData createManaged (final HeadquartersData headquarters) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.createManaged: branchOffice={1} - CALLED!", this.getClass().getSimpleName(), headquarters)); //NOI18N + + // user should not be null + if (null == headquarters) { + // Abort here + throw new NullPointerException("branchOffice is null"); //NOI18N + } else if (headquarters.getHeadquartersId() == null) { + // Id is set + throw new NullPointerException("branchOffice.headquartersId is null"); //NOI18N + } else if (headquarters.getHeadquartersId() < 1) { + // Id is set + throw new IllegalArgumentException(MessageFormat.format("branchOffice.headquartersId={0} is invalid", headquarters.getHeadquartersId())); //NOI18N + } + + // Try to find it (should be there) + final HeadquartersData managedHeadquarters = this.getEntityManager().find(CompanyHeadquartersData.class, headquarters.getHeadquartersId()); + + // Should be there + assert (managedHeadquarters instanceof BusinessBasicData) : "managedHeadquarters is null"; //NOI18N + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.createManaged: managedHeadquarters={1} - EXIT!", this.getClass().getSimpleName(), managedHeadquarters)); //NOI18N + + // Return it + return managedHeadquarters; + } + /** * Get back a managed instance from given user *

@@ -452,7 +529,7 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { throw new NullPointerException("user.userId is null"); //NOI18N } else if (user.getUserId() < 1) { // Id is set - throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is null", user.getUserId())); //NOI18N + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is invalid", user.getUserId())); //NOI18N } else if (user.getUserContact() == null) { // Throw NPE again throw new NullPointerException("user.userContact is null"); //NOI18N @@ -477,6 +554,38 @@ public abstract class BasePizzaEnterpriseBean extends BaseDatabaseBean { return managedUser; } + /** + * Sets created timestamp on all opening times. + *

+ * @param openingTimes Opening times list + *

+ * @throws NullPointerException If given list is null + * @throws IllegalArgumentException If given list is empty + * @throws IllegalStateException If openingId is not null + */ + protected void setAllOpeningTimesCreated (final List openingTimes) { + // Validate parameter + if (null == openingTimes) { + // Throw NPE + throw new NullPointerException("openingTimes is null"); + } else if (openingTimes.isEmpty()) { + // Throw IAE + throw new IllegalArgumentException("openingTimes is empty"); + } + + // Walk through whole list + for (final OpeningTime openingTime : openingTimes) { + // Id should not be set + if (openingTime.getOpeningId() != null) { + // Abort here + throw new IllegalStateException("openingTime.openingId is not null"); + } + + // Set created timestamp + openingTime.setOpeningCreated(new Date()); + } + } + /** * Updates all contact's phone entry's created timestamps *

-- 2.39.5