From: Roland Häder Date: Sat, 14 Oct 2017 13:32:51 +0000 (+0200) Subject: Please cherry-pick: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=b937350c8afebdc3ae2902fa8c5408d7a54fa756;p=jfinancials-ejb.git 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 Signed-off-by: Roland Häder --- diff --git a/src/conf/persistence.xml b/src/conf/persistence.xml index 999b69b..50a2f09 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.jfinancials.model.income.FinancialIncome org.mxchange.jfinancials.model.receipt.FinancialReceipt diff --git a/src/java/org/mxchange/jcontactsbusiness/model/basicdata/FinancialsBusinessDataSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/basicdata/FinancialsBusinessDataSessionBean.java index 2a29af7..b61179b 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/basicdata/FinancialsBusinessDataSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/basicdata/FinancialsBusinessDataSessionBean.java @@ -70,6 +70,15 @@ public class FinancialsBusinessDataSessionBean extends BaseFinancialsDatabaseBea // 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/FinancialsAdminBranchOfficeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/FinancialsAdminBranchOfficeSessionBean.java index ad06c11..6d1fd49 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/FinancialsAdminBranchOfficeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/FinancialsAdminBranchOfficeSessionBean.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.jfinancials.database.BaseFinancialsDatabaseBean; import org.mxchange.jusercore.model.user.User; @@ -104,6 +105,21 @@ public class FinancialsAdminBranchOfficeSessionBean extends BaseFinancialsDataba // 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/FinancialsBranchOfficeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/FinancialsBranchOfficeSessionBean.java index 21971f0..64ae095 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/FinancialsBranchOfficeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/branchoffice/FinancialsBranchOfficeSessionBean.java @@ -61,6 +61,15 @@ public class FinancialsBranchOfficeSessionBean extends BaseFinancialsDatabaseBea // 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/FinancialsAdminCompanyEmployeeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/employee/FinancialsAdminCompanyEmployeeSessionBean.java index 9387418..6ec5629 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/employee/FinancialsAdminCompanyEmployeeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/employee/FinancialsAdminCompanyEmployeeSessionBean.java @@ -24,7 +24,7 @@ import org.mxchange.jfinancials.database.BaseFinancialsDatabaseBean; *

* @author Roland Häder */ -@Stateless (name = "adminCompanyEmployee", description = "An administrative statless bean for handling company employees") +@Stateless (name = "adminEmployee", description = "An administrative statless bean for handling company employees") public class FinancialsAdminCompanyEmployeeSessionBean extends BaseFinancialsDatabaseBean implements AdminCompanyEmployeeSessionBeanRemote { /** diff --git a/src/java/org/mxchange/jcontactsbusiness/model/employee/FinancialsCompanyEmployeeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/model/employee/FinancialsCompanyEmployeeSessionBean.java index f986d5c..3919d0a 100644 --- a/src/java/org/mxchange/jcontactsbusiness/model/employee/FinancialsCompanyEmployeeSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/model/employee/FinancialsCompanyEmployeeSessionBean.java @@ -29,7 +29,7 @@ import org.mxchange.jfinancials.database.BaseFinancialsDatabaseBean; *

* @author Roland Häder */ -@Stateless (name = "companyEmployee", description = "A general statless bean for handling company employees") +@Stateless (name = "employee", description = "A general statless bean for handling company employees") public class FinancialsCompanyEmployeeSessionBean extends BaseFinancialsDatabaseBean implements CompanyEmployeeSessionBeanRemote { /** 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/jfinancials/database/BaseFinancialsDatabaseBean.java b/src/java/org/mxchange/jfinancials/database/BaseFinancialsDatabaseBean.java index bc03f56..e818fbd 100644 --- a/src/java/org/mxchange/jfinancials/database/BaseFinancialsDatabaseBean.java +++ b/src/java/org/mxchange/jfinancials/database/BaseFinancialsDatabaseBean.java @@ -18,6 +18,7 @@ package org.mxchange.jfinancials.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; @@ -101,7 +106,7 @@ public abstract class BaseFinancialsDatabaseBean 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) @@ -137,7 +142,7 @@ public abstract class BaseFinancialsDatabaseBean 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) @@ -173,7 +178,7 @@ public abstract class BaseFinancialsDatabaseBean 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) @@ -189,6 +194,42 @@ public abstract class BaseFinancialsDatabaseBean 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 *

@@ -209,7 +250,7 @@ public abstract class BaseFinancialsDatabaseBean 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) @@ -225,6 +266,42 @@ public abstract class BaseFinancialsDatabaseBean 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 *

@@ -245,7 +322,7 @@ public abstract class BaseFinancialsDatabaseBean 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 @@ -270,6 +347,38 @@ public abstract class BaseFinancialsDatabaseBean 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 *