From 778965c800c42ce7e73c9ad072fcc4858aad674b Mon Sep 17 00:00:00 2001 From: Caleb Fontenot Date: Mon, 2 Oct 2023 13:29:00 -0500 Subject: [PATCH] Sleepy WebDev modified: .gitignore new file: Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Company.html new file: Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Employee.html new file: Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeController.html new file: Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeInterface.html new file: Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeTitleValidate.html new file: Semester 2/LabJuneauValidateUserInput/Printed HTMLs/index.html new file: Semester 2/LabJuneauValidateUserInput/nb-configuration.xml new file: Semester 2/LabJuneauValidateUserInput/pom.xml new file: Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/JakartaRestConfiguration.java new file: Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/resources/JakartaEE9Resource.java new file: Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/beans/EmployeeController.java new file: Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Company.java new file: Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Employee.java new file: Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/EmployeeInterface.java new file: Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/validators/EmployeeTitleValidate.java new file: Semester 2/LabJuneauValidateUserInput/src/main/resources/META-INF/persistence.xml new file: Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/beans.xml new file: Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/glassfish-web.xml new file: Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/web.xml new file: Semester 2/LabJuneauValidateUserInput/src/main/webapp/index.xhtml new file: Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/css/1.css new file: Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/images/1.png modified: Semester 2/LabJuneauValidateUserInput_CalebFontenot/src/main/java/bl/Company.java deleted: Semester 2/ZIPs/LabJuneauValidateUserInput_CalebFontenot.zip --- .gitignore | 1 + .../Printed HTMLs/Company.html | 48 +++++++ .../Printed HTMLs/Employee.html | 64 +++++++++ .../Printed HTMLs/EmployeeController.html | 88 +++++++++++++ .../Printed HTMLs/EmployeeInterface.html | 58 +++++++++ .../Printed HTMLs/EmployeeTitleValidate.html | 58 +++++++++ .../Printed HTMLs/index.html | 122 ++++++++++++++++++ .../nb-configuration.xml | 21 +++ Semester 2/LabJuneauValidateUserInput/pom.xml | 77 +++++++++++ .../JakartaRestConfiguration.java | 13 ++ .../resources/JakartaEE9Resource.java | 20 +++ .../slcc/asdv/beans/EmployeeController.java | 61 +++++++++ .../main/java/edu/slcc/asdv/bl/Company.java | 23 ++++ .../main/java/edu/slcc/asdv/bl/Employee.java | 41 ++++++ .../edu/slcc/asdv/bl/EmployeeInterface.java | 32 +++++ .../validators/EmployeeTitleValidate.java | 36 ++++++ .../main/resources/META-INF/persistence.xml | 7 + .../src/main/webapp/WEB-INF/beans.xml | 6 + .../src/main/webapp/WEB-INF/glassfish-web.xml | 25 ++++ .../src/main/webapp/WEB-INF/web.xml | 31 +++++ .../src/main/webapp/index.xhtml | 92 +++++++++++++ .../src/main/webapp/resources/css/1.css | 8 ++ .../src/main/webapp/resources/images/1.png | Bin 0 -> 432 bytes .../src/main/java/bl/Company.java | 7 +- ...bJuneauValidateUserInput_CalebFontenot.zip | Bin 30540 -> 0 bytes 25 files changed, 938 insertions(+), 1 deletion(-) create mode 100644 Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Company.html create mode 100644 Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Employee.html create mode 100644 Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeController.html create mode 100644 Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeInterface.html create mode 100644 Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeTitleValidate.html create mode 100644 Semester 2/LabJuneauValidateUserInput/Printed HTMLs/index.html create mode 100644 Semester 2/LabJuneauValidateUserInput/nb-configuration.xml create mode 100644 Semester 2/LabJuneauValidateUserInput/pom.xml create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/JakartaRestConfiguration.java create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/resources/JakartaEE9Resource.java create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/beans/EmployeeController.java create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Company.java create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Employee.java create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/EmployeeInterface.java create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/validators/EmployeeTitleValidate.java create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/resources/META-INF/persistence.xml create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/beans.xml create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/glassfish-web.xml create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/web.xml create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/webapp/index.xhtml create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/css/1.css create mode 100644 Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/images/1.png delete mode 100644 Semester 2/ZIPs/LabJuneauValidateUserInput_CalebFontenot.zip diff --git a/.gitignore b/.gitignore index 370e082..1023db7 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,4 @@ /Semester 2/LabJuneauValidateUserInput_CalebFontenot/target/ /Semester 2/Assignments/lab_EL5_CalebFontenot/target/ /Semester 2/Assignments/labEL2_CalebFontenot/target/ +/Semester 2/LabJuneauValidateUserInput/target/ diff --git a/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Company.html b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Company.html new file mode 100644 index 0000000..2b59e3a --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Company.html @@ -0,0 +1,48 @@ + + + +Company.java + + + + +
/home/caleb/ASDV-WebDev/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Company.java
+
+package edu.slcc.asdv.bl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author ASDV1
+ */
+public class Company implements EmployeeInterface
+{
+    private List<Employee> employeeList;
+    public Company(){employeeList = new ArrayList<Employee>();  }
+    @Override
+    public boolean insertEmployee(Employee e){return employeeList.add( e ); }
+
+    @Override
+    public boolean removeEmployee(Employee e){return employeeList.remove(e);}
+
+    @Override
+    public List<Employee> getEmployees(){return employeeList;}
+
+}
+
+
+ diff --git a/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Employee.html b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Employee.html new file mode 100644 index 0000000..04ce7c4 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/Employee.html @@ -0,0 +1,64 @@ + + + +Employee.java + + + + +
/home/caleb/ASDV-WebDev/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Employee.java
+
+package edu.slcc.asdv.bl;
+
+import java.io.Serializable;
+
+public class Employee implements Serializable
+{
+
+    private String employeeFirst;
+    private String employeeLast;
+    private String employeeTitle;
+    private String photo;
+
+
+
+    public Employee(String first, 
+            String last, String title, 
+            String photo)
+    {
+        employeeFirst = first;
+        employeeLast = last;
+        employeeTitle = title;
+        this.photo = photo;
+    }
+
+    public String getEmployeeFirst() { return employeeFirst; }
+
+    public void setEmployeeFirst(String employeeFirst){ this.employeeFirst = employeeFirst;}
+
+    public String getEmployeeLast(){return employeeLast;}
+
+    public void setEmployeeLast(String employeeLast){this.employeeLast = employeeLast;}
+
+    public String getEmployeeTitle(){return employeeTitle; }
+
+    public void setEmployeeTitle(String employeeTitle){ this.employeeTitle = employeeTitle; }
+
+    public String getPhoto(){return photo;}
+
+    public void setPhoto(String photo){this.photo = photo;}
+
+}
+
+
+ diff --git a/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeController.html b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeController.html new file mode 100644 index 0000000..b5f582b --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeController.html @@ -0,0 +1,88 @@ + + + +EmployeeController.java + + + + +
/home/caleb/ASDV-WebDev/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/beans/EmployeeController.java
+
+package edu.slcc.asdv.beans;
+
+import edu.slcc.asdv.bl.Company;
+import edu.slcc.asdv.bl.Employee;
+import edu.slcc.asdv.bl.EmployeeInterface;
+import jakarta.enterprise.context.SessionScoped;
+import jakarta.faces.application.FacesMessage;
+import jakarta.faces.context.FacesContext;
+import jakarta.inject.Named;
+import java.io.Serializable;
+
+
+@Named(value = "employeeController")
+@SessionScoped
+public class EmployeeController implements Serializable
+{
+
+    private String employeeFirst;
+    private String employeeLast;
+    private String employeeTitle;
+
+    private EmployeeInterface company;//placeholder
+    
+    public EmployeeController() { company = new Company(); }
+    
+    public EmployeeInterface getCompany(){ return this.company ;}
+    
+    public String getEmployeeFirst(){return employeeFirst;}
+    public void setEmployeeFirst(String employeeFirst){ this.employeeFirst = employeeFirst; }
+    public String getEmployeeLast(){return employeeLast;}
+    public void setEmployeeLast(String employeeLast){ this.employeeLast = employeeLast; }
+    public String getEmployeeTitle(){return employeeTitle;}
+    public void setEmployeeTitle(String employeeTitle){ this.employeeTitle = employeeTitle;}
+    
+    public void delete(Employee e) {
+            System.out.println(e);
+            company.removeEmployee(e);
+    };
+    
+    public void insert()
+    {
+        boolean b = company.insertEmployee(
+                new Employee(
+                        this.employeeFirst, //from textbox
+                        this.getEmployeeLast(), //from textbox
+                        this.employeeTitle, "1.png"));
+        FacesMessage facesMsg = null;
+        if (b)
+        {
+            facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO,
+                    "Employee Successfully Added", null);
+            this.employeeFirst = "";//reset text boxes too
+            this.employeeLast = "";
+            this.employeeTitle = "";
+        }
+        else
+            facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                    "Employee Not Added", null);   
+        FacesContext.getCurrentInstance().addMessage(null, facesMsg);
+    }
+}
+
+
+ diff --git a/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeInterface.html b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeInterface.html new file mode 100644 index 0000000..080fefd --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeInterface.html @@ -0,0 +1,58 @@ + + + +EmployeeInterface.java + + + + +
/home/caleb/ASDV-WebDev/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/EmployeeInterface.java
+
+
+package edu.slcc.asdv.bl;
+
+import java.util.List;
+
+/**
+ *
+ * @author ASDV1
+ */
+public interface EmployeeInterface
+{
+/**Inserts a new employee in thr list
+ * 
+ * @param e the employee to be inserted.
+ * @return true if inserted successfully, false otherwise.
+ */
+    boolean insertEmployee(Employee e);
+    
+    /** Removes an employee from the list.
+     * 
+     * @param e the employee to be removed
+     * @return true if the employee was successfully removed, false otherwise.
+     */
+    boolean removeEmployee(Employee e);
+    
+    /** Gets all employees in the list.
+     * 
+     * @return list of employees.
+     */
+    List<Employee> getEmployees();
+    
+}
+
+
+ diff --git a/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeTitleValidate.html b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeTitleValidate.html new file mode 100644 index 0000000..9d17eac --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/EmployeeTitleValidate.html @@ -0,0 +1,58 @@ + + + +EmployeeTitleValidate.java + + + + +
/home/caleb/ASDV-WebDev/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/validators/EmployeeTitleValidate.java
+
+package edu.slcc.asdv.validators;
+
+import jakarta.faces.application.FacesMessage;
+import jakarta.faces.component.UIComponent;
+import jakarta.faces.context.FacesContext;
+import jakarta.faces.validator.FacesValidator;
+import jakarta.faces.validator.Validator;
+import jakarta.faces.validator.ValidatorException;
+
+@FacesValidator("employeeTitleValidate")
+public class EmployeeTitleValidate implements Validator
+{
+
+    @Override
+    public void validate(FacesContext fc, UIComponent uic, Object t) 
+            throws ValidatorException
+    {
+        checkTitle(t);
+    }
+
+    private void checkTitle(Object value)
+    {
+        String title = value.toString();
+        title = title.toLowerCase();
+        if (!title.contains("java"))
+        {
+            String messageText = "Title does not include the word Java";
+            String messageTextLong = "Title does not include the word Java. "
+                                         + "Please type java";
+            throw new ValidatorException(
+                    new FacesMessage(FacesMessage.SEVERITY_ERROR,
+                    messageText, messageTextLong));
+        }
+    }
+
+}
+
+
+ diff --git a/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/index.html b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/index.html new file mode 100644 index 0000000..72a8d06 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/Printed HTMLs/index.html @@ -0,0 +1,122 @@ + + + +index.xhtml + + + + +
/home/caleb/ASDV-WebDev/Semester 2/LabJuneauValidateUserInput/src/main/webapp/index.xhtml
+
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:h="http://xmlns.jcp.org/jsf/html"
+      xmlns:f="http://xmlns.jcp.org/jsf/core">
+    <h:head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <title>Validating Data</title>
+      <h:outputStylesheet name="css/1.css"/>
+
+    </h:head>
+    <h:body>
+        <h:form id="employeeForm">
+            <h:panelGrid id="outer" columns="2"
+                          >
+                <h:column  >
+                    <h1>Java Developer Employee Information</h1>
+                    <br/>
+                    <h:messages globalOnly="true" errorStyle="color: red" 
+                                infoStyle="color: green"/>
+                    <br/>
+                    <h:dataTable id="empTable" 
+                                 var="emp"
+                                 border="1" 
+                                 value="#{employeeController.company.getEmployees()}"
+                                 rendered="#{employeeController.company.getEmployees().size() > 0}">
+
+                        <f:facet name="header">
+                            Current Employees
+                        </f:facet>
+
+                        <h:column id="empNameCol">
+                            <f:facet name="header">Employee</f:facet>
+                            <h:outputText id="empName" 
+                                          value="#{emp.getEmployeeFirst()} #{emp.employeeLast}"/>
+                        </h:column>
+
+                        <h:column id="titleCol">
+                            <f:facet name="header">Title</f:facet>
+                            <h:outputText id="title" value="#{emp.employeeTitle}"/>
+                        </h:column>
+
+                        <h:column id="imageCol">
+                            <f:facet name="header">Photo</f:facet>
+                            <h:graphicImage  library="images" name="#{emp.photo}"/>
+                        </h:column>
+                        <h:column>
+                        <f:facet name="header">Delete</f:facet>
+                        <h:commandLink value="delete" immediate="true"
+                                                       action="#{employeeController.delete(emp)}"/>
+                        </h:column>
+                    </h:dataTable>
+                    <p>  Please use the form below to insert employee information. </p>
+                    <h:panelGrid columns="3">
+
+                        <h:outputLabel for="employeeFirst" value="First:" />
+                        <h:inputText id="employeeFirst" 
+                                     value="#{employeeController.employeeFirst}">
+                            <f:validateLength disabled=""
+                                
+                                minimum="3" maximum="30"/>
+                        </h:inputText>
+                        <h:message for="employeeFirst" errorStyle="color:red"/>
+
+                        <h:outputLabel for="employeeLast" value="Last: " />
+                        <h:inputText id="employeeLast" value="#{employeeController.employeeLast}">
+                            <f:validateLength minimum="3" maximum="30"/>
+                        </h:inputText>
+                        <h:message for="employeeLast" errorStyle="color:red"/>
+
+                        <h:outputLabel for="employeeTitle" value="Title (Must be a Java Position): " />
+                        <h:inputText id="employeeTitle" value="#{employeeController.employeeTitle}">
+                            <f:validator validatorId="employeeTitleValidate" />
+                        </h:inputText>
+                        <h:message for="employeeTitle" errorStyle="color:red"/>
+
+                    </h:panelGrid>
+
+                    
+                        <h:commandButton id="employeeInsert" 
+                                         action="#{employeeController.insert}"
+                                         value="Insert Employee"/>
+
+                       
+                </h:column> 
+                
+              
+            </h:panelGrid>
+               </h:form>
+    </h:body>
+</html>
+
+
+
+ diff --git a/Semester 2/LabJuneauValidateUserInput/nb-configuration.xml b/Semester 2/LabJuneauValidateUserInput/nb-configuration.xml new file mode 100644 index 0000000..2b8fafd --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/nb-configuration.xml @@ -0,0 +1,21 @@ + + + + + + 10-web + gfv700ee10 + JSP + JDK_11__System_ + + diff --git a/Semester 2/LabJuneauValidateUserInput/pom.xml b/Semester 2/LabJuneauValidateUserInput/pom.xml new file mode 100644 index 0000000..fae3e12 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/pom.xml @@ -0,0 +1,77 @@ + + 4.0.0 + com.pap.exam + LabJuneauValidateUserInput + 1.0 + war + LabJuneauValidateUserInput-1.0 + + + 1.8 + 1.8 + ${project.build.directory}/endorsed + UTF-8 + false + 9.0.0 + + + + + jakarta.platform + jakarta.jakartaee-api + ${jakartaee} + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + ${endorsed.dir} + + + + + org.apache.maven.plugins + maven-war-plugin + 2.3 + + false + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.6 + + + validate + + copy + + + ${endorsed.dir} + true + + + jakarta.platform + jakarta.jakartaee-api + ${jakartaee} + jar + + + + + + + + + \ No newline at end of file diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/JakartaRestConfiguration.java b/Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/JakartaRestConfiguration.java new file mode 100644 index 0000000..42172b2 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/JakartaRestConfiguration.java @@ -0,0 +1,13 @@ +package com.pap.exam.labjuneauvalidateuserinput; + +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.core.Application; + +/** + * Configures Jakarta RESTful Web Services for the application. + * @author Juneau + */ +@ApplicationPath("resources") +public class JakartaRestConfiguration extends Application { + +} diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/resources/JakartaEE9Resource.java b/Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/resources/JakartaEE9Resource.java new file mode 100644 index 0000000..1f52157 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/java/com/pap/exam/labjuneauvalidateuserinput/resources/JakartaEE9Resource.java @@ -0,0 +1,20 @@ +package com.pap.exam.labjuneauvalidateuserinput.resources; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Response; + +/** + * + * @author + */ +@Path("jakartaee9") +public class JakartaEE9Resource { + + @GET + public Response ping(){ + return Response + .ok("ping Jakarta EE") + .build(); + } +} diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/beans/EmployeeController.java b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/beans/EmployeeController.java new file mode 100644 index 0000000..56ba15f --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/beans/EmployeeController.java @@ -0,0 +1,61 @@ +package edu.slcc.asdv.beans; + +import edu.slcc.asdv.bl.Company; +import edu.slcc.asdv.bl.Employee; +import edu.slcc.asdv.bl.EmployeeInterface; +import jakarta.enterprise.context.SessionScoped; +import jakarta.faces.application.FacesMessage; +import jakarta.faces.context.FacesContext; +import jakarta.inject.Named; +import java.io.Serializable; + + +@Named(value = "employeeController") +@SessionScoped +public class EmployeeController implements Serializable +{ + + private String employeeFirst; + private String employeeLast; + private String employeeTitle; + + private EmployeeInterface company;//placeholder + + public EmployeeController() { company = new Company(); } + + public EmployeeInterface getCompany(){ return this.company ;} + + public String getEmployeeFirst(){return employeeFirst;} + public void setEmployeeFirst(String employeeFirst){ this.employeeFirst = employeeFirst; } + public String getEmployeeLast(){return employeeLast;} + public void setEmployeeLast(String employeeLast){ this.employeeLast = employeeLast; } + public String getEmployeeTitle(){return employeeTitle;} + public void setEmployeeTitle(String employeeTitle){ this.employeeTitle = employeeTitle;} + + public void delete(Employee e) { + System.out.println(e); + company.removeEmployee(e); + }; + + public void insert() + { + boolean b = company.insertEmployee( + new Employee( + this.employeeFirst, //from textbox + this.getEmployeeLast(), //from textbox + this.employeeTitle, "1.png")); + FacesMessage facesMsg = null; + if (b) + { + facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, + "Employee Successfully Added", null); + this.employeeFirst = "";//reset text boxes too + this.employeeLast = ""; + this.employeeTitle = ""; + } + else + facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, + "Employee Not Added", null); + FacesContext.getCurrentInstance().addMessage(null, facesMsg); + } +} diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Company.java b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Company.java new file mode 100644 index 0000000..5daef02 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Company.java @@ -0,0 +1,23 @@ +package edu.slcc.asdv.bl; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author ASDV1 + */ +public class Company implements EmployeeInterface +{ + private List employeeList; + public Company(){employeeList = new ArrayList(); } + @Override + public boolean insertEmployee(Employee e){return employeeList.add( e ); } + + @Override + public boolean removeEmployee(Employee e){return employeeList.remove(e);} + + @Override + public List getEmployees(){return employeeList;} + +} diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Employee.java b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Employee.java new file mode 100644 index 0000000..4462653 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/Employee.java @@ -0,0 +1,41 @@ +package edu.slcc.asdv.bl; + +import java.io.Serializable; + +public class Employee implements Serializable +{ + + private String employeeFirst; + private String employeeLast; + private String employeeTitle; + private String photo; + + + + public Employee(String first, + String last, String title, + String photo) + { + employeeFirst = first; + employeeLast = last; + employeeTitle = title; + this.photo = photo; + } + + public String getEmployeeFirst() { return employeeFirst; } + + public void setEmployeeFirst(String employeeFirst){ this.employeeFirst = employeeFirst;} + + public String getEmployeeLast(){return employeeLast;} + + public void setEmployeeLast(String employeeLast){this.employeeLast = employeeLast;} + + public String getEmployeeTitle(){return employeeTitle; } + + public void setEmployeeTitle(String employeeTitle){ this.employeeTitle = employeeTitle; } + + public String getPhoto(){return photo;} + + public void setPhoto(String photo){this.photo = photo;} + +} diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/EmployeeInterface.java b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/EmployeeInterface.java new file mode 100644 index 0000000..99815fe --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/bl/EmployeeInterface.java @@ -0,0 +1,32 @@ + +package edu.slcc.asdv.bl; + +import java.util.List; + +/** + * + * @author ASDV1 + */ +public interface EmployeeInterface +{ +/**Inserts a new employee in thr list + * + * @param e the employee to be inserted. + * @return true if inserted successfully, false otherwise. + */ + boolean insertEmployee(Employee e); + + /** Removes an employee from the list. + * + * @param e the employee to be removed + * @return true if the employee was successfully removed, false otherwise. + */ + boolean removeEmployee(Employee e); + + /** Gets all employees in the list. + * + * @return list of employees. + */ + List getEmployees(); + +} diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/validators/EmployeeTitleValidate.java b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/validators/EmployeeTitleValidate.java new file mode 100644 index 0000000..48e42a0 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/java/edu/slcc/asdv/validators/EmployeeTitleValidate.java @@ -0,0 +1,36 @@ +package edu.slcc.asdv.validators; + +import jakarta.faces.application.FacesMessage; +import jakarta.faces.component.UIComponent; +import jakarta.faces.context.FacesContext; +import jakarta.faces.validator.FacesValidator; +import jakarta.faces.validator.Validator; +import jakarta.faces.validator.ValidatorException; + +@FacesValidator("employeeTitleValidate") +public class EmployeeTitleValidate implements Validator +{ + + @Override + public void validate(FacesContext fc, UIComponent uic, Object t) + throws ValidatorException + { + checkTitle(t); + } + + private void checkTitle(Object value) + { + String title = value.toString(); + title = title.toLowerCase(); + if (!title.contains("java")) + { + String messageText = "Title does not include the word Java"; + String messageTextLong = "Title does not include the word Java. " + + "Please type java"; + throw new ValidatorException( + new FacesMessage(FacesMessage.SEVERITY_ERROR, + messageText, messageTextLong)); + } + } + +} diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/resources/META-INF/persistence.xml b/Semester 2/LabJuneauValidateUserInput/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..7582bf1 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/beans.xml b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000..a0cd39d --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/glassfish-web.xml b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/glassfish-web.xml new file mode 100644 index 0000000..584a477 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/glassfish-web.xml @@ -0,0 +1,25 @@ + + + + + + + + Keep a copy of the generated servlet class' java code. + + + diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/web.xml b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..0aa9448 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,31 @@ + + + + jakarta.faces.PROJECT_STAGE + Development + + + + Faces Servlet + jakarta.faces.webapp.FacesServlet + 1 + + + + Faces Servlet + /faces/* + + + + + 30 + + + + + faces/index.xhtml + + diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/webapp/index.xhtml b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/index.xhtml new file mode 100644 index 0000000..5bb19cf --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/index.xhtml @@ -0,0 +1,92 @@ + + + + + + Validating Data + + + + + + + +

Java Developer Employee Information

+
+ +
+ + + + Current Employees + + + + Employee + + + + + Title + + + + + Photo + + + + Delete + + + +

Please use the form below to insert employee information.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ + diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/css/1.css b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/css/1.css new file mode 100644 index 0000000..aab40d9 --- /dev/null +++ b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/css/1.css @@ -0,0 +1,8 @@ + + + + +td { + + vertical-align: top; +} \ No newline at end of file diff --git a/Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/images/1.png b/Semester 2/LabJuneauValidateUserInput/src/main/webapp/resources/images/1.png new file mode 100644 index 0000000000000000000000000000000000000000..59a683ab60d66781b7d5135885ec5565c2e9b6af GIT binary patch literal 432 zcmV;h0Z;ykP)3UdjpyAFfVed2?SO8UOe#sTVA&Kh{t}N3C z2G}D!a3AagVGo#;{E#N)`v<>4!w@j<14i6b05?Wm11xP$fc5EIfFFb-I}hm^;PWSD zz!t%E4e0M8Y6 z9DVHdydFT<0y9p}V30pE4fA>ci?9Ovz{C^cd2PTNsHy)5|K;m2ul))(Kur&ra(>3+ zc};)~3GuuhKyb94;B$<*aA6$Hs{um7oOwL21_%fh216CiYXSm7Jg*7}2$8%xARq+! zjsSwgBCJ>;SX`dJ<<38Io(mi<|H0(@0r?N7`H$!MFDUX~(d56R%70Cl|Dv)?nKEU{ a getEmployees(){return employeeList;} diff --git a/Semester 2/ZIPs/LabJuneauValidateUserInput_CalebFontenot.zip b/Semester 2/ZIPs/LabJuneauValidateUserInput_CalebFontenot.zip deleted file mode 100644 index d38eb18f4aed339c7f0cd261245901e1b2341aaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30540 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