From 11d7669a67b1cb509382c7b2fc24074da42ee319 Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 9 Apr 2021 14:35:30 +0530 Subject: [PATCH] Adding assignment changes --- bin/.gitignore | 1 + .../SOLID/lsp/stack/before/StackWrong.java | 17 +++++-- .../before/client/CalculateTaxesClient.java | 4 +- .../before/employees/Employee.java | 2 + .../before/employees/FullTimeEmployee.java | 8 ++++ .../before/employees/Intern.java | 8 ++++ .../before/employees/PartTimeEmployee.java | 8 ++++ .../before/taxes/TaxCalculator.java | 13 +---- .../before/taxes/TaxCalculatorFulltime.java | 17 +++++++ .../before/taxes/TaxCalculatorIntern.java | 16 +++++++ .../before/taxes/TaxCalculatorPartTime.java | 18 +++++++ .../before/Employee.java | 48 ++++++++----------- .../before/EmployeeRepository.java | 17 +++++++ .../before/SaveEmployeesMain.java | 2 +- 14 files changed, 133 insertions(+), 46 deletions(-) create mode 100644 bin/.gitignore create mode 100644 src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorFulltime.java create mode 100644 src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorIntern.java create mode 100644 src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorPartTime.java diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 00000000..8af4d073 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1 @@ +/oops/ diff --git a/src/oops/SOLID/lsp/stack/before/StackWrong.java b/src/oops/SOLID/lsp/stack/before/StackWrong.java index 1170e573..9bfa0552 100644 --- a/src/oops/SOLID/lsp/stack/before/StackWrong.java +++ b/src/oops/SOLID/lsp/stack/before/StackWrong.java @@ -14,19 +14,28 @@ * so objects of ArrayList are not fully replaceable by the objects of stack. * */ -public class StackWrong extends ArrayList{ +public class StackWrong { private int topPointer = 0; + private ArrayList arrayList = new ArrayList<>(); public void push(Integer a) { - add(topPointer, a); + arrayList.add(topPointer, a); topPointer++; } public void pop() { - remove(topPointer-1); + if(topPointer == 0) + return; + arrayList.remove(topPointer-1); topPointer--; } public Integer top() { - return get(topPointer-1); + if(topPointer == 0) + return -1; + return arrayList.get(topPointer-1); + } + public void clear() { + arrayList.clear(); + topPointer = 0; } public static void main(String[] args) { diff --git a/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java b/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java index 1651161c..8013c086 100644 --- a/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java +++ b/src/oops/SOLID/openClosePrinciple/before/client/CalculateTaxesClient.java @@ -26,10 +26,10 @@ public static void main(String[] args) { for (Employee employee: employees){ // compute individual tax - double tax = TaxCalculator.calculate(employee); + double tax = employee.calculateTax(); String formattedTax = currencyFormatter.format(tax); // add to company total taxes - totalTaxes += TaxCalculator.calculate(employee); + totalTaxes += tax; } } } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java b/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java index a84b72a3..ad9d80d9 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/Employee.java @@ -57,5 +57,7 @@ public void setNbHoursPerWeek(int nbHoursPerWeek) { public String getFullName(){ return this.firstName + " " + this.lastName; } + + public abstract double calculateTax(); } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java b/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java index cd9e9384..c4f3c901 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/FullTimeEmployee.java @@ -1,8 +1,16 @@ package oops.SOLID.openClosePrinciple.before.employees; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculator; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculatorFulltime; + public class FullTimeEmployee extends Employee { public FullTimeEmployee(String fullName, int monthlyIncome) { super(fullName, monthlyIncome); this.setNbHoursPerWeek(40); } + + public double calculateTax() { + TaxCalculator calculator = new TaxCalculatorFulltime(); + return calculator.calculate(this); + } } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java b/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java index 80191de2..bbab0a0f 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/Intern.java @@ -1,8 +1,16 @@ package oops.SOLID.openClosePrinciple.before.employees; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculator; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculatorIntern; + public class Intern extends Employee { public Intern(String fullName, int monthlyIncome, int nbHours) { super(fullName, monthlyIncome); setNbHoursPerWeek(nbHours); } + + public double calculateTax() { + TaxCalculator calculator = new TaxCalculatorIntern(); + return calculator.calculate(this); + } } diff --git a/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java b/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java index 5c491175..34d6f3d1 100644 --- a/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java +++ b/src/oops/SOLID/openClosePrinciple/before/employees/PartTimeEmployee.java @@ -1,8 +1,16 @@ package oops.SOLID.openClosePrinciple.before.employees; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculator; +import oops.SOLID.openClosePrinciple.before.taxes.TaxCalculatorPartTime; + public class PartTimeEmployee extends Employee { public PartTimeEmployee(String fullName, int monthlyIncome) { super(fullName, monthlyIncome); this.setNbHoursPerWeek(20); } + + public double calculateTax() { + TaxCalculator calculator = new TaxCalculatorPartTime(); + return calculator.calculate(this); + } } \ No newline at end of file diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java index ab0300be..7ac039cc 100644 --- a/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculator.java @@ -2,15 +2,6 @@ import oops.SOLID.openClosePrinciple.before.employees.Employee; -public class TaxCalculator { - private final static int INCOME_TAX_PERCENTAGE = 20; - private final static int PROFESSIONAL_TAX_PERCENTAGE = 3; - - - public static double calculate(Employee employee) { - return - (employee.getMonthlyIncome() * PROFESSIONAL_TAX_PERCENTAGE) / 100 + - (employee.getMonthlyIncome() * INCOME_TAX_PERCENTAGE) / 100; - - } +public interface TaxCalculator { + double calculate(Employee employee); } \ No newline at end of file diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorFulltime.java b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorFulltime.java new file mode 100644 index 00000000..c452cd2e --- /dev/null +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorFulltime.java @@ -0,0 +1,17 @@ +package oops.SOLID.openClosePrinciple.before.taxes; + +import oops.SOLID.openClosePrinciple.before.employees.Employee; + +public class TaxCalculatorFulltime implements TaxCalculator { + + public double calculate(Employee employee) { + final int INCOME_TAX_PERCENTAGE = 30; + final int PROFESSIONAL_TAX_PERCENTAGE = 2; + final int EDUCATIONAL_TAX_PERCENTAGE = 1; + + return + (employee.getMonthlyIncome() * PROFESSIONAL_TAX_PERCENTAGE) / 100 + + (employee.getMonthlyIncome() * INCOME_TAX_PERCENTAGE) / 100 + + (employee.getMonthlyIncome() * EDUCATIONAL_TAX_PERCENTAGE) / 100; + } +} diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorIntern.java b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorIntern.java new file mode 100644 index 00000000..da605446 --- /dev/null +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorIntern.java @@ -0,0 +1,16 @@ +package oops.SOLID.openClosePrinciple.before.taxes; + +import oops.SOLID.openClosePrinciple.before.employees.Employee; + +public class TaxCalculatorIntern implements TaxCalculator { + + public double calculate(Employee employee) { + final int INCOME_TAX_PERCENTAGE = 15; + + if(employee.getMonthlyIncome() < 300000) + return 0; + else + return (employee.getMonthlyIncome() * INCOME_TAX_PERCENTAGE) / 100; + } + +} diff --git a/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorPartTime.java b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorPartTime.java new file mode 100644 index 00000000..87acaebb --- /dev/null +++ b/src/oops/SOLID/openClosePrinciple/before/taxes/TaxCalculatorPartTime.java @@ -0,0 +1,18 @@ +package oops.SOLID.openClosePrinciple.before.taxes; + +import oops.SOLID.openClosePrinciple.before.employees.Employee; + +public class TaxCalculatorPartTime implements TaxCalculator { + + public double calculate(Employee employee) { + final int INCOME_TAX_PERCENTAGE = 20; + final int PROFESSIONAL_TAX_PERCENTAGE = 3; + final int EDUCATIONAL_TAX_PERCENTAGE = 1; + + return + (employee.getMonthlyIncome() * PROFESSIONAL_TAX_PERCENTAGE) / 100 + + (employee.getMonthlyIncome() * INCOME_TAX_PERCENTAGE) / 100 + + (employee.getMonthlyIncome() * EDUCATIONAL_TAX_PERCENTAGE) / 100; + } + +} diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java index a742fac0..a740d0e1 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/Employee.java @@ -53,7 +53,7 @@ public int getNbHoursPerWeek() { public void setNbHoursPerWeek(int nbHoursPerWeek) { if(nbHoursPerWeek <= 0){ - throw new IllegalArgumentException("Income must be positive"); + throw new IllegalArgumentException("Number of working hours must be positive"); } this.nbHoursPerWeek = nbHoursPerWeek; @@ -63,32 +63,24 @@ public String getFullName(){ return this.firstName + " " + this.lastName; } - public void save(){ - try { - Employee employee =this; - StringBuilder sb = new StringBuilder(); - sb.append("### EMPLOYEE RECORD ####"); - sb.append(System.lineSeparator()); - sb.append("NAME: "); - sb.append(employee.firstName + " " + employee.lastName); - sb.append(System.lineSeparator()); - sb.append("POSITION: "); - sb.append(employee.getClass().getTypeName()); - sb.append(System.lineSeparator()); - sb.append("EMAIL: "); - sb.append(employee.getEmail()); - sb.append(System.lineSeparator()); - sb.append("MONTHLY WAGE: "); - sb.append(employee.monthlyIncome); - sb.append(System.lineSeparator()); - - Path path = Paths.get(employee.getFullName() - .replace(" ","_") + ".rec"); - Files.write(path, sb.toString().getBytes()); - - System.out.println("Saved employee " + employee.toString()); - } catch (IOException e){ - System.out.println("ERROR: Could not save employee. " + e); - } + public String getDetails(){ + Employee employee = this; + StringBuilder sb = new StringBuilder(); + sb.append("### EMPLOYEE RECORD ####"); + sb.append(System.lineSeparator()); + sb.append("NAME: "); + sb.append(employee.firstName + " " + employee.lastName); + sb.append(System.lineSeparator()); + sb.append("POSITION: "); + sb.append(employee.getClass().getTypeName()); + sb.append(System.lineSeparator()); + sb.append("EMAIL: "); + sb.append(employee.getEmail()); + sb.append(System.lineSeparator()); + sb.append("MONTHLY WAGE: "); + sb.append(employee.monthlyIncome); + sb.append(System.lineSeparator()); + + return sb.toString(); } } diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java index b76f4589..370aae17 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/EmployeeRepository.java @@ -1,5 +1,9 @@ package oops.SOLID.singleResponsibilityPrinciple.before; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.List; @@ -16,4 +20,17 @@ public List findAll(){ return Arrays.asList(anna, billy, steve, magda); } + + public void save(Employee employee) { + try { + String employeeDetails = employee.getDetails(); + Path path = Paths.get(employee.getFullName().replace(" ","_") + ".rec"); + Files.write(path, employeeDetails.getBytes()); + + System.out.println("Saved employee " + employee.toString()); + } + catch (IOException e) { + System.out.println("ERROR: Could not save employee. " + e); + } + } } \ No newline at end of file diff --git a/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java b/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java index 3e30e5e9..3d69ce39 100644 --- a/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java +++ b/src/oops/SOLID/singleResponsibilityPrinciple/before/SaveEmployeesMain.java @@ -10,7 +10,7 @@ public static void main(String[] args) { // Save all for (Employee e : employees){ - e.save(); + repository.save(e); } } } \ No newline at end of file