/home/oracle/labs/06CollectionOperations/examples/EmployeeSearch/src/com/example/lambda/Employee.java
  1 package com.example.lambda;
  2 
  3 import java.time.LocalDate;
  4 import java.util.ArrayList;
  5 import java.util.List;
  6 import java.util.function.Consumer;
  7 
  8 /**
  9  * @author MikeW
 10  */
 11 public class Employee implements Comparable<Employee>{
 12   private String givenName;
 13   private String surName;
 14   private int age;
 15   private Gender gender;
 16   private Role role;
 17   private String dept;
 18   private LocalDate startDate;
 19   private double salary;
 20   private String eMail;
 21   private String phone;
 22   private String address;
 23   private String city;
 24   private String state;
 25   private String code;  
 26   
 27   public static class Builder{
 28     
 29     private String givenName="";
 30     private String surName="";
 31     private int age = 0;
 32     private Gender gender = Gender.FEMALE;
 33     private Role role = Role.STAFF;
 34     private String dept = "";
 35     private LocalDate startDate =  LocalDate.of(1,1,1);
 36     private double salary = 0;
 37     private String eMail = "";
 38     private String phone = "";
 39     private String address = "";
 40     private String city = "";
 41     private String state = "";
 42     private String code = "";
 43 
 44        
 45     public Employee.Builder givenName(String givenName){
 46       this.givenName = givenName;
 47       return this;
 48     }
 49     
 50     public Employee.Builder surName(String surName){
 51       this.surName = surName;
 52       return this;
 53     }
 54     
 55     public Employee.Builder age (int val){
 56       age = val;
 57       return this;
 58     }
 59     
 60     public Employee.Builder gender(Gender val){
 61       gender = val;
 62       return this;
 63     }
 64 
 65     public Employee.Builder role(Role val){
 66       role = val;
 67       return this;
 68     }
 69     
 70     public Employee.Builder dept(String val){
 71       dept = val;
 72       return this;
 73     }
 74     
 75     public Employee.Builder startDate(LocalDate val){
 76         startDate =  val;
 77         return this;
 78     }
 79     
 80     public Employee.Builder salary(double val){
 81         salary = val;
 82         return this;
 83     }
 84         
 85     public Employee.Builder email(String val){
 86       eMail = val;
 87       return this;
 88     }
 89     
 90     public Employee.Builder phoneNumber(String val){
 91       phone = val;
 92       return this;
 93     }
 94     
 95     public Employee.Builder address(String val){
 96       address = val;
 97       return this;
 98     }
 99 
100     public Employee.Builder city(String val){
101       city = val;
102       return this;
103     }
104 
105     public Employee.Builder state(String val){
106       state = val;
107       return this;
108     }
109 
110     public Employee.Builder code(String val){
111       code = val;
112       return this;
113     }
114     
115     public Employee build(){
116       return new Employee(this);
117     }
118   }
119     
120   private Employee(){
121     super();
122   }
123     
124   private Employee(Employee.Builder builder){
125     givenName = builder.givenName;
126     surName = builder.surName;
127     age = builder.age;
128     gender = builder.gender;
129     role = builder.role;
130     dept = builder.dept;
131     startDate = builder.startDate;
132     salary = builder.salary;
133     eMail = builder.eMail;
134     phone = builder.phone;
135     address = builder.address;
136     city = builder.city;
137     state = builder.state;
138     code = builder.code;
139         
140   }
141   
142   public static int sortBySalary(Employee a, Employee b){
143       Double s1 = new Double(a.getSalary());
144       Double s2 = new Double(b.getSalary());
145       return s1.compareTo(s2);   
146   }
147       
148   public String getGivenName(){
149     return givenName;
150   }
151   
152   public String getSurName(){
153     return surName;
154   }
155   
156   public void setSurName(String name){
157       this.surName = name;
158   }
159   
160   public int getAge(){
161     return age;
162   }
163   
164   public Gender getGender(){
165     return gender;
166   }
167 
168   public Role getRole(){
169     return role;
170   }
171 
172   public String getDept(){
173     return dept;
174   }
175   
176   public LocalDate getStartDate(){
177       return startDate;
178   }
179   
180   public double getSalary(){
181       return salary;
182   }
183     
184   public String getEmail(){
185     return eMail;
186   }
187   
188   public String getPhone(){
189     return phone;
190   }
191   
192   public String getAddress(){
193     return address;
194   }
195   
196   public String getCity(){
197       return city;
198   }
199   
200   public String getState(){
201       return state;
202   }
203   
204   public String getCode(){
205       return code;
206   }
207   
208   @Override
209   public int compareTo(Employee e){
210       return this.getSurName().compareTo(e.getSurName());
211   }
212   
213  
214   
215   public void print(){
216     System.out.println(
217       "\nName: " + givenName + " " + surName + "\n" + 
218       "Age: " + age + "\n" +
219       "Gender: " + gender + "\n" + 
220       "Role: " + role + "\n" +
221       "Dept: " + dept + "\n" +
222       "Start date: " + startDate + "\n" + 
223       "Salary: " + salary + "\n" + 
224       "eMail: " + eMail + "\n" + 
225       "Phone: " + phone + "\n" +
226       "Address: " + address + "\n" + 
227       "City: " + city + "\n" +
228       "State: " + state + "\n" +
229       "Code: " + code + "\n"
230     );
231   } 
232 
233   public void printSummary(){
234     System.out.println(
235       "Name: " + givenName + " " + surName + 
236       " Role: " + role + 
237       " Dept: " + dept + 
238       " eMail: " + eMail
239     );
240   } 
241 
242   public void printLambda(Consumer<Employee> cons){
243     cons.accept(this);
244   } 
245   
246   
247   @Override
248   public String toString(){
249     return 
250       "Name: " + givenName + " " + surName +  
251       " Age: " + age + 
252       " Gender: " + gender + 
253       " Role: " + role + 
254       " Dept: " + dept + 
255       " Start date: " + startDate + 
256       " Salary: " + salary +  
257       " eMail: " + eMail +
258       " Phone: " + phone +
259       " Address: " + address +
260       " City: " + city +
261       " State: " + state +
262       " Code: " + code + "\n";
263 
264   } 
265 
266   public static List<Employee> createShortList(){
267     List<Employee> people = new ArrayList<>();
268     
269     people.add(
270       new Employee.Builder()
271             .givenName("Bob")
272             .surName("Baker")
273             .age(23)
274             .gender(Gender.MALE)
275             .role(Role.STAFF)
276             .dept("Eng")
277             .startDate(LocalDate.of(2013, 1, 10))
278             .salary(40000)
279             .email("bob.baker@example.com")
280             .phoneNumber("201-121-4678")
281             .address("44 4th St")
282             .city("Smallville")
283             .state("KS")
284             .code("12333")
285             .build() 
286       );
287     
288     people.add(
289       new Employee.Builder()
290             .givenName("Jane")
291             .surName("Doe")
292             .age(25)
293             .gender(Gender.FEMALE)
294             .role(Role.STAFF)
295             .dept("Sales")
296             .startDate(LocalDate.of(2011, 7, 14))
297             .salary(45000)
298             .email("jane.doe@example.com")
299             .phoneNumber("202-123-4678")
300             .address("33 3rd St")
301             .city("Smallville")
302             .state("KS")
303             .code("12333")
304             .build() 
305       );
306     
307     people.add(
308       new Employee.Builder()
309             .givenName("John")
310             .surName("Doe")
311             .age(28)
312             .gender(Gender.MALE)
313             .role(Role.MANAGER)
314             .dept("Eng")
315             .startDate(LocalDate.of(2007, 3, 1))
316             .salary(65000)
317             .email("john.doe@example.com")
318             .phoneNumber("202-123-4678")
319             .address("33 3rd St")
320             .city("Smallville")
321             .state("KS")
322             .code("12333")
323             .build()
324     );
325     
326     people.add(
327       new Employee.Builder()
328             .givenName("James")
329             .surName("Johnson")
330             .age(45)
331             .gender(Gender.MALE)
332             .role(Role.MANAGER)
333             .dept("Eng")
334             .startDate(LocalDate.of(1999, 5, 1))
335             .salary(85000)
336             .email("james.johnson@example.com")
337             .phoneNumber("333-456-1233")
338             .address("201 2nd St")
339             .city("BrainTree")
340             .state("MA")
341             .code("11111")
342             .build()
343     );
344 
345     people.add(
346       new Employee.Builder()
347             .givenName("John")
348             .surName("Adams")
349             .age(52)
350             .gender(Gender.MALE)
351             .role(Role.MANAGER)
352             .dept("Sales")
353             .startDate(LocalDate.of(1994, 2, 1))
354             .salary(90000)
355             .email("john.adams@example.com")
356             .phoneNumber("112-111-1111")
357             .address("111 1st St")
358             .city("Braintree")
359             .state("MA")
360             .code("11111")
361             .build()
362     );
363     
364     people.add(
365       new Employee.Builder()
366             .givenName("Joe")
367             .surName("Bailey")
368             .age(62)
369             .gender(Gender.MALE)
370             .role(Role.EXECUTIVE)
371             .dept("Eng")
372             .startDate(LocalDate.of(1992, 1, 5))
373             .salary(120000)
374             .email("joebob.bailey@example.com")
375             .phoneNumber("112-111-1111")
376             .address("111 1st St")
377             .city("Town")
378             .state("CO")
379             .code("11111")
380             .build()
381     );
382     
383     people.add(
384       new Employee.Builder()
385             .givenName("Phil")
386             .surName("Smith")
387             .age(55)
388             .gender(Gender.MALE)
389             .role(Role.EXECUTIVE)
390             .dept("HR")
391             .startDate(LocalDate.of(2000, 10, 10))
392             .salary(110000)
393             .email("phil.smith@examp;e.com")
394             .phoneNumber("222-33-1234")
395             .address("22 2nd St")
396             .city("New Park")
397             .state("CO")
398             .code("222333")
399             .build()
400     );
401     
402     people.add(
403       new Employee.Builder()
404             .givenName("Betty")
405             .surName("Jones")
406             .age(65)
407             .gender(Gender.FEMALE)
408             .role(Role.EXECUTIVE)
409             .dept("Sales")
410             .startDate(LocalDate.of(1984, 7, 10))
411             .salary(140000)
412             .email("betty.jones@example.com")
413             .phoneNumber("211-33-1234")
414             .address("22 4th St")
415             .city("New Park")
416             .state("CO")
417             .code("222333")
418             .build()
419     );
420     
421     
422     return people;
423   }
424   
425 }