diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..da88288
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/.gradle/
diff --git a/.project b/.project
new file mode 100644
index 0000000..27b38db
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ refactor-kata
+ Project refactor-kata created by Buildship.
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..e889521
--- /dev/null
+++ b/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,2 @@
+connection.project.dir=
+eclipse.preferences.version=1
diff --git a/.settings/org.jboss.ide.eclipse.as.core.prefs b/.settings/org.jboss.ide.eclipse.as.core.prefs
new file mode 100644
index 0000000..cf3aa3a
--- /dev/null
+++ b/.settings/org.jboss.ide.eclipse.as.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.jboss.ide.eclipse.as.core.singledeployable.deployableList=
diff --git a/src/main/java/com/digite/kata/refactoring/BillingInterface.java b/src/main/java/com/digite/kata/refactoring/BillingInterface.java
new file mode 100644
index 0000000..9e963e2
--- /dev/null
+++ b/src/main/java/com/digite/kata/refactoring/BillingInterface.java
@@ -0,0 +1,8 @@
+package com.digite.kata.refactoring;
+
+public interface BillingInterface {
+
+ public double getRentAmount(int rentDays);
+ public int getEarnedPoints(int rentDays);
+
+}
diff --git a/src/main/java/com/digite/kata/refactoring/Children.java b/src/main/java/com/digite/kata/refactoring/Children.java
new file mode 100644
index 0000000..f59d438
--- /dev/null
+++ b/src/main/java/com/digite/kata/refactoring/Children.java
@@ -0,0 +1,20 @@
+package com.digite.kata.refactoring;
+
+public class Children implements BillingInterface{
+
+ public double getRentAmount(int rentDays)
+ {
+ double amount = 1.5;
+
+ if (rentDays > 3)
+ amount += (rentDays - 3) * 1.5;
+
+ return amount;
+
+ }
+
+ public int getEarnedPoints(int rentDays) {
+ int count = 0;
+ return count++;
+ }
+}
diff --git a/src/main/java/com/digite/kata/refactoring/Customer.java b/src/main/java/com/digite/kata/refactoring/Customer.java
index f13fce0..091063e 100644
--- a/src/main/java/com/digite/kata/refactoring/Customer.java
+++ b/src/main/java/com/digite/kata/refactoring/Customer.java
@@ -14,52 +14,14 @@ public Customer(String name) {
public void addRental(Rental arg) {
_rentals.addElement(arg);
}
-
+
+ public Vector getRentals()
+ {
+ return _rentals;
+ }
+
public String getName() {
return _name;
}
- public String statement() {
- double totalAmount = 0;
- int frequentRenterPoints = 0;
- Enumeration rentals = _rentals.elements();
- String result = "Rental Record for " + getName() + "\n";
- while (rentals.hasMoreElements()) {
- double thisAmount = 0;
- Rental each = (Rental) rentals.nextElement();
- //determine amounts for each line
- switch (each.getMovie().getPriceCode()) {
- case Movie.REGULAR:
- thisAmount += 2;
- if (each.getDaysRented() > 2)
- thisAmount += (each.getDaysRented() - 2) * 1.5;
- break;
- case Movie.NEW_RELEASE:
- thisAmount += each.getDaysRented() * 3;
- break;
- case Movie.CHILDRENS:
- thisAmount += 1.5;
- if (each.getDaysRented() > 3)
- thisAmount += (each.getDaysRented() - 3) * 1.5;
- break;
- }
- // add frequent renter points
- frequentRenterPoints++;
- // add bonus for a two day new release rental
- if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE)
- &&
- each.getDaysRented() > 1) frequentRenterPoints++;
- //show figures for this rental
- result += "\t" + each.getMovie().getTitle() + "\t" +
- String.valueOf(thisAmount) + "\n";
- totalAmount += thisAmount;
- }
- //add footer lines
- result += "Amount owed is " + String.valueOf(totalAmount) +
- "\n";
- result += "You earned " + String.valueOf(frequentRenterPoints)
- +
- " frequent renter points";
- return result;
- }
}
\ No newline at end of file
diff --git a/src/main/java/com/digite/kata/refactoring/Invoice.java b/src/main/java/com/digite/kata/refactoring/Invoice.java
new file mode 100644
index 0000000..a3739b6
--- /dev/null
+++ b/src/main/java/com/digite/kata/refactoring/Invoice.java
@@ -0,0 +1,34 @@
+package com.digite.kata.refactoring;
+
+import java.util.Enumeration;
+import java.util.Vector;
+
+public class Invoice {
+
+ public static String getInvoice(String w_custName, Vector _rentals) {
+ double totalAmount = 0;
+ int frequentRenterPoints = 0;
+ Enumeration rentals = _rentals.elements();
+ String result = "Rental Record for " + w_custName + "\n";
+ while (rentals.hasMoreElements())
+ {
+ double thisAmount = 0;
+ Rental each = (Rental) rentals.nextElement();
+ //determine amounts for each line
+
+ thisAmount = each.getMovieType().getRentAmount(each.getDaysRented());
+ frequentRenterPoints += each.getMovieType().getEarnedPoints(each.getDaysRented());
+
+ result += each.getMovie().getTitle()+ " " +
+ String.valueOf(thisAmount) + "\n";
+ totalAmount += thisAmount;
+ }
+ //add footer lines
+ result += "Amount owed is " + String.valueOf(totalAmount) +
+ "\n";
+ result += "You earned " + String.valueOf(frequentRenterPoints)
+ +
+ " frequent renter points";
+ return result;
+ }
+}
diff --git a/src/main/java/com/digite/kata/refactoring/JTestMovie.java b/src/main/java/com/digite/kata/refactoring/JTestMovie.java
new file mode 100644
index 0000000..4202ad8
--- /dev/null
+++ b/src/main/java/com/digite/kata/refactoring/JTestMovie.java
@@ -0,0 +1,58 @@
+package com.digite.kata.refactoring;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+public class JTestMovie {
+
+ @Test
+ public void testForSameType()
+ {
+ Movie obj = new Movie("Movie1", Movie.REGULAR);
+ Movie obj1 = new Movie("Movie2", Movie.REGULAR);
+ BillingInterface regular = new Regular();
+
+ Rental rental = new Rental(obj, 10, regular);
+ Rental rental1 = new Rental(obj1, 20, regular);
+
+ Customer cust = new Customer("Seema");
+ cust.addRental(rental);
+ cust.addRental(rental1);
+
+ String finalResult = "Rental Record for Seema\nMovie1 14.0\nMovie2 29.0\nAmount owed is 43.0\nYou earned 2 frequent renter points";
+
+ String w_bill = Invoice.getInvoice(cust.getName(), cust.getRentals());
+ assertEquals(finalResult, w_bill);
+ System.out.println(w_bill);
+
+ }
+
+ @Test
+ public void testForDifferntType()
+ {
+ Movie obj = new Movie("Movie1", Movie.REGULAR);
+ Movie obj1 = new Movie("Movie2", Movie.NEW_RELEASE);
+ Movie obj2 = new Movie("Movie3", Movie.CHILDRENS);
+ BillingInterface regular = new Regular();
+ BillingInterface newRelease = new NewRelease();
+ BillingInterface children = new Children();
+
+ Rental rental = new Rental(obj, 10, regular);
+ Rental rental1 = new Rental(obj1, 20, newRelease);
+ Rental rental3 = new Rental(obj2, 30, children);
+
+ Customer cust = new Customer("Seema");
+ cust.addRental(rental);
+ cust.addRental(rental1);
+ cust.addRental(rental3);
+
+ String finalResult = "Rental Record for Seema\nMovie1 14.0\nMovie2 60.0\nMovie3 42.0\nAmount owed is 116.0\nYou earned 3 frequent renter points";
+
+ String w_bill = Invoice.getInvoice(cust.getName(), cust.getRentals());
+ assertEquals(finalResult, w_bill);
+ System.out.println(w_bill);
+
+ }
+
+}
diff --git a/src/main/java/com/digite/kata/refactoring/Movie.java b/src/main/java/com/digite/kata/refactoring/Movie.java
index 2eb91d5..176e02f 100644
--- a/src/main/java/com/digite/kata/refactoring/Movie.java
+++ b/src/main/java/com/digite/kata/refactoring/Movie.java
@@ -10,6 +10,7 @@ public class Movie {
public Movie(String title, int priceCode) {
_title = title;
_priceCode = priceCode;
+
}
public String getTitle() {
@@ -23,4 +24,6 @@ public int getPriceCode() {
public void setPriceCode(int priceCode) {
_priceCode = priceCode;
}
+
+
}
\ No newline at end of file
diff --git a/src/main/java/com/digite/kata/refactoring/NewRelease.java b/src/main/java/com/digite/kata/refactoring/NewRelease.java
new file mode 100644
index 0000000..e3af26c
--- /dev/null
+++ b/src/main/java/com/digite/kata/refactoring/NewRelease.java
@@ -0,0 +1,24 @@
+package com.digite.kata.refactoring;
+
+public class NewRelease implements BillingInterface {
+ public double getRentAmount(int rentDays)
+ {
+ double amount = 0;
+
+ amount += rentDays * 3;
+
+ return amount;
+
+ }
+
+ public int getEarnedPoints(int rentDays) {
+ int count = 0;
+ count++;
+
+ if (rentDays > 1)
+ count++;
+
+ return count;
+ }
+
+}
diff --git a/src/main/java/com/digite/kata/refactoring/Regular.java b/src/main/java/com/digite/kata/refactoring/Regular.java
new file mode 100644
index 0000000..0bb8de0
--- /dev/null
+++ b/src/main/java/com/digite/kata/refactoring/Regular.java
@@ -0,0 +1,21 @@
+package com.digite.kata.refactoring;
+
+
+public class Regular implements BillingInterface{
+
+ public double getRentAmount(int rentDays)
+ {
+ double amount = 2;
+
+ if (rentDays > 2)
+ amount += (rentDays - 2) * 1.5;
+
+ return amount;
+
+ }
+
+ public int getEarnedPoints(int rentDays) {
+ int count = 0;
+ return ++count;
+ }
+}
diff --git a/src/main/java/com/digite/kata/refactoring/Rental.java b/src/main/java/com/digite/kata/refactoring/Rental.java
index 4d17895..78eb0df 100644
--- a/src/main/java/com/digite/kata/refactoring/Rental.java
+++ b/src/main/java/com/digite/kata/refactoring/Rental.java
@@ -4,10 +4,12 @@ public class Rental {
private Movie _movie;
private int _daysRented;
-
- public Rental(Movie movie, int daysRented) {
+ private BillingInterface _obj;
+
+ public Rental(Movie movie, int daysRented, BillingInterface obj) {
_movie = movie;
_daysRented = daysRented;
+ _obj = obj;
}
public Movie getMovie() {
@@ -17,4 +19,10 @@ public Movie getMovie() {
public int getDaysRented() {
return _daysRented;
}
+
+ public BillingInterface getMovieType()
+ {
+ return _obj;
+ }
+
}