From: Roland Häder Date: Sat, 26 Aug 2017 22:02:17 +0000 (+0200) Subject: Please cherry-pick/rename: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=2d776d88a31ee6f0f63fc9b52c892c7fb73fc0f4;p=addressbook-ejb.git Please cherry-pick/rename: - added admin/general company employee session bean and implemented all methods - implemented isCompanyNameUsed() and used dependency injection for injecting other EJB Signed-off-by: Roland Häder --- diff --git a/src/conf/persistence.xml b/src/conf/persistence.xml index fe33b05..d56e840 100644 --- a/src/conf/persistence.xml +++ b/src/conf/persistence.xml @@ -10,7 +10,7 @@ org.mxchange.jcontactsbusiness.branch.CompanyBranchOffice org.mxchange.jcontactsbusiness.department.CompanyDepartment org.mxchange.jcontactsbusiness.employee.CompanyEmployee - org.mxchange.jcontactsbusiness.headquarters.CompanyHeadQuartersData + org.mxchange.jcontactsbusiness.headquarters.CompanyHeadquartersData org.mxchange.jcontactsbusiness.jobposition.EmployeePosition org.mxchange.jcontactsbusiness.logo.CompanyLogo org.mxchange.jcontactsbusiness.opening_times.BusinessOpeningTimes diff --git a/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookAdminBusinessDataSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookAdminBusinessDataSessionBean.java index 06b377d..5cce597 100644 --- a/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookAdminBusinessDataSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookAdminBusinessDataSessionBean.java @@ -17,10 +17,13 @@ package org.mxchange.jcontactsbusiness.basicdata; import java.text.MessageFormat; +import java.util.GregorianCalendar; import java.util.List; +import java.util.Objects; import javax.ejb.Stateless; import javax.persistence.Query; import org.mxchange.addressbook.database.BaseAddressbookDatabaseBean; +import org.mxchange.jcontactsbusiness.exceptions.basicdata.BusinessDataAlreadyAddedException; /** * An administrative stateless session bean for business data @@ -43,9 +46,54 @@ public class AddressbookAdminBusinessDataSessionBean extends BaseAddressbookData super(); } + @Override + public BusinessBasicData addCompanyBasicData (final BusinessBasicData basicData) throws BusinessDataAlreadyAddedException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addBusinessBasicData: basicData={1} - CALLED!", this.getClass().getSimpleName(), basicData)); //NOI18N + + // Is the instance set? + if (null == basicData) { + // Throw NPE + throw new NullPointerException("basicData is null"); //NOI18N + } else if (basicData.getCompanyDataId() != null) { + // Should be null + throw new IllegalArgumentException(MessageFormat.format("basicData.companyDataId={0} - is not null", basicData.getCompanyDataId())); //NOI18N + } + + // Get all available entries + List list = this.allCompanyBasicData(); + + // Is the list filled? + if (!list.isEmpty()) { + // Then check each entry + for (final BusinessBasicData entry : list) { + // Is the company name matching? + if (Objects.equals(entry.getCompanyName(), basicData.getCompanyName())) { + // Found match + throw new BusinessDataAlreadyAddedException(basicData); + } + } + } + + // Now add current date + basicData.setCompanyCreated(new GregorianCalendar()); + + // Persist it + this.getEntityManager().persist(basicData); + + // Flush it (bad performance!) + this.getEntityManager().flush(); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.addBusinessBasicData: basicData.companyDataId={1} - EXIT!", this.getClass().getSimpleName(), basicData.getCompanyDataId())); //NOI18N + + // Return updated instance + return basicData; + } + @Override @SuppressWarnings ("unchecked") - public List allBusinessContacts () { + public List allCompanyBasicData () { // Trace message this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allBusinessContacts: CALLED!", this.getClass().getSimpleName())); //NOI18N diff --git a/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookBusinessDataSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookBusinessDataSessionBean.java index 9462007..2987866 100644 --- a/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookBusinessDataSessionBean.java +++ b/src/java/org/mxchange/jcontactsbusiness/basicdata/AddressbookBusinessDataSessionBean.java @@ -17,6 +17,9 @@ package org.mxchange.jcontactsbusiness.basicdata; import java.text.MessageFormat; +import java.util.List; +import java.util.Objects; +import javax.ejb.EJB; import javax.ejb.Stateless; import javax.persistence.NoResultException; import javax.persistence.Query; @@ -36,6 +39,12 @@ public class AddressbookBusinessDataSessionBean extends BaseAddressbookDatabaseB */ private static final long serialVersionUID = 56_389_504_892_184_571L; + /** + * Administrative EJB + */ + @EJB + private AdminBusinessDataSessionBeanRemote adminBusinessDataBean; + /** * Default constructor */ @@ -45,7 +54,7 @@ public class AddressbookBusinessDataSessionBean extends BaseAddressbookDatabaseB } @Override - public BusinessBasicData findBusinessDataById (final Long businessDataId) throws BusinessDataNotFoundException { + public BusinessBasicData findBasicDataById (final Long companyDataId) throws BusinessDataNotFoundException { // Trace message this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findBusinessDataById: CALLED!", this.getClass().getSimpleName())); //NOI18N @@ -53,7 +62,7 @@ public class AddressbookBusinessDataSessionBean extends BaseAddressbookDatabaseB Query query = this.getEntityManager().createNamedQuery("SearchBusinessDataById", CompanyBasicData.class); //NOI18N // Set parameter - query.setParameter("businessDataId", businessDataId); //NOI18N + query.setParameter("companyDataId", companyDataId); //NOI18N // Get single instance BusinessBasicData businessData = null; @@ -67,7 +76,7 @@ public class AddressbookBusinessDataSessionBean extends BaseAddressbookDatabaseB this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findBusinessDataById: Found contact={1}", this.getClass().getSimpleName(), businessData)); //NOI18N } catch (final NoResultException ex) { // No result found - throw new BusinessDataNotFoundException(businessDataId, ex); + throw new BusinessDataNotFoundException(companyDataId, ex); } // Trace message @@ -77,4 +86,43 @@ public class AddressbookBusinessDataSessionBean extends BaseAddressbookDatabaseB return businessData; } + @Override + public Boolean isCompanyNameUsed (final String companyName) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.isCompanyNameUsed: companyName={1} - CALLED!", this.getClass().getSimpleName(), companyName)); //NOI18N + + // Is the parameter valid? + if (null == companyName) { + // Throw NPE + throw new NullPointerException("companyName is null"); //NOI18N + } else if (companyName.isEmpty()) { + // Throw IAE + throw new IllegalArgumentException("companyName is empty"); //NOI18N + } + + // Default is not found + Boolean isCompanyNameUsed = Boolean.FALSE; + + // Get whole list + List list = this.adminBusinessDataBean.allCompanyBasicData(); + + // Check whole list + for (final BusinessBasicData basicData : list) { + // Is name used? + if (Objects.equals(basicData.getCompanyName(), companyName)) { + // Found one + isCompanyNameUsed = Boolean.TRUE; + + // Abort search + break; + } + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.isCompanyNameUsed: isCompanyNameUsed={1} - EXIT!", this.getClass().getSimpleName(), isCompanyNameUsed)); //NOI18N + + // Return it + return isCompanyNameUsed; + } + } diff --git a/src/java/org/mxchange/jcontactsbusiness/employee/AddressbookAdminCompanyEmployeeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/employee/AddressbookAdminCompanyEmployeeSessionBean.java new file mode 100644 index 0000000..391fa33 --- /dev/null +++ b/src/java/org/mxchange/jcontactsbusiness/employee/AddressbookAdminCompanyEmployeeSessionBean.java @@ -0,0 +1,42 @@ +/* + * 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.employee; + +import javax.ejb.Stateless; +import org.mxchange.addressbook.database.BaseAddressbookDatabaseBean; + +/** + * 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 AddressbookAdminCompanyEmployeeSessionBean extends BaseAddressbookDatabaseBean implements AdminCompanyEmployeeSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 26_458_796_703_761L; + + /** + * Default constructor + */ + public AddressbookAdminCompanyEmployeeSessionBean () { + super(); + } + +} diff --git a/src/java/org/mxchange/jcontactsbusiness/employee/AddressbookCompanyEmployeeSessionBean.java b/src/java/org/mxchange/jcontactsbusiness/employee/AddressbookCompanyEmployeeSessionBean.java new file mode 100644 index 0000000..234997b --- /dev/null +++ b/src/java/org/mxchange/jcontactsbusiness/employee/AddressbookCompanyEmployeeSessionBean.java @@ -0,0 +1,108 @@ +/* + * 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.employee; + +import java.text.MessageFormat; +import java.util.List; +import javax.ejb.Stateless; +import javax.persistence.NoResultException; +import javax.persistence.Query; +import org.mxchange.addressbook.database.BaseAddressbookDatabaseBean; +import org.mxchange.jcontactsbusiness.exceptions.employee.CompanyEmployeeNotFoundException; + +/** + * 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 AddressbookCompanyEmployeeSessionBean extends BaseAddressbookDatabaseBean implements CompanyEmployeeSessionBeanRemote { + + /** + * Serial number + */ + private static final long serialVersionUID = 26_458_796_703_761L; + + /** + * Default constructor + */ + public AddressbookCompanyEmployeeSessionBean () { + super(); + } + + @Override + @SuppressWarnings ("unchecked") + public List allCompanyEmployees () { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allCompanyEmployees(): CALLED!", this.getClass().getSimpleName())); //NOI18N + + // Get named query + Query query = this.getEntityManager().createNamedQuery("AllCompanyEmployees"); //NOI18N + + // Get list form it + List employees = query.getResultList(); + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.allCompanyEmployees(): employees.size()={1} - EXIT!", this.getClass().getSimpleName(), employees.size())); //NOI18N + + // Return it + return employees; + } + + @Override + public Employee findCompanyEmployeeById (final Long employeeId) throws CompanyEmployeeNotFoundException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findCompanyEmployeeById(): employeeId={1} - CALLED!", this.getClass().getSimpleName(), employeeId)); //NOI18N + + // Is the employee id valid? + if (null == employeeId) { + // Throw NPE + throw new NullPointerException("employeeId is null"); //NOI18N + } else if (employeeId < 1) { + // Not valid + throw new IllegalArgumentException(MessageFormat.format("employeeId={0} is not valid", employeeId)); //NOI18N + } + + // Now get named query + Query query = this.getEntityManager().createNamedQuery("SearchCompanyEmployeeById"); //NOI18N + + // Set parameter + query.setParameter("employeeId", employeeId); //NOI18N + + // Declare instance + Employee employee; + + // Try to find a result + try { + // Find a single result + employee = (Employee) query.getSingleResult(); + + // Log trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findCompanyEmployeeById: Found employee={1}", this.getClass().getSimpleName(), employee)); //NOI18N + } catch (final NoResultException ex) { + // No result found + throw new CompanyEmployeeNotFoundException(employeeId, ex); + } + + // Log trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("{0}.findCompanyEmployeeById: employee={1} - EXIT!", this.getClass().getSimpleName(), employee)); //NOI18N + + // Return found instance + return employee; + } + +}