From fe3c90b6e23b899241884baed1827d29babcf439 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 17:22:25 +0200 Subject: [PATCH 01/11] Revert "Merge pull request #2 from Grandis/master" Revert to get initial code (before refactoring by Grandis) --- .idea/codeStyleSettings.xml | 6 +-- .idea/compiler.xml | 13 +---- .idea/misc.xml | 2 +- README.md | 7 +-- rentalStore.iml | 2 +- .../org/kranonit/rentalStore/Customer.java | 53 +++++-------------- .../java/org/kranonit/rentalStore/Main.java | 2 +- .../java/org/kranonit/rentalStore/Movie.java | 28 ++-------- .../java/org/kranonit/rentalStore/Price.java | 52 ------------------ .../java/org/kranonit/rentalStore/Rental.java | 27 +++++++--- .../kranonit/rentalStore/CustomerTest.java | 24 +-------- 11 files changed, 44 insertions(+), 172 deletions(-) delete mode 100644 src/main/java/org/kranonit/rentalStore/Price.java diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml index 9178b38..1129f00 100644 --- a/.idea/codeStyleSettings.xml +++ b/.idea/codeStyleSettings.xml @@ -2,11 +2,7 @@ diff --git a/.idea/compiler.xml b/.idea/compiler.xml index d6da3ff..15e1639 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -13,18 +13,7 @@ - - - - - - - - - - - - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 28e766a..096cb5b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + diff --git a/README.md b/README.md index 3d9934e..19e58c5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,4 @@ -Rental Store +rentalStore =========== -Java refactoring example by Martin Fowler -Example forn first chapter of book. - -Download book here http://share.auditory.ru/2009/Roman.Novikov/refactoring.pdf +Java refactoring example by Martin Fowler \ No newline at end of file diff --git a/rentalStore.iml b/rentalStore.iml index 873c6e9..c7fac17 100644 --- a/rentalStore.iml +++ b/rentalStore.iml @@ -5,8 +5,8 @@ - + diff --git a/src/main/java/org/kranonit/rentalStore/Customer.java b/src/main/java/org/kranonit/rentalStore/Customer.java index 3ce1022..c901a9a 100644 --- a/src/main/java/org/kranonit/rentalStore/Customer.java +++ b/src/main/java/org/kranonit/rentalStore/Customer.java @@ -20,57 +20,28 @@ public String getName() { } public String statement() { + double totalAmount = 0; int frequentRenterPoints = 0; Enumeration rentals = _rentals.elements(); String result = "Rental Record for " + getName() + "\n"; while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); + double thisAmount = each.getCharge(); + // 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(each.getCharge()) + "\n"; + + String.valueOf(thisAmount) + "\n"; + totalAmount += thisAmount; } // add footer lines - result += "Amount owed is " + String.valueOf(getTotalCharge()) + "\n"; - result += "You earned " + String.valueOf(getTotalFrequentRenterPoints()) + result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; + result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; return result; } - public String htmlStatement() { - Enumeration rentals = _rentals.elements(); - String result = "<Н1>0перации аренды для <ЕМ>" + getName() + "

\n"; - while (rentals.hasMoreElements()) { - Rental each = (Rental) rentals.nextElement(); - // показать результаты по каждой аренде - result += each.getMovie().getTitle() + - String.valueOf(each.getCharge()) + "
\n"; - } - //добавить нижний колонтитул - result += "<Р>Ваша задолженность составляет <ЕМ>" + - String.valueOf(getTotalCharge()) + "

\n"; - result += "На этой аренде вы заработали <ЕМ>" + - String.valueOf(getTotalFrequentRenterPoints()) + " очков за активность<Р>"; - return result; - } - - private double getTotalCharge() { - double result = 0; - Enumeration rentals = _rentals.elements(); - while (rentals.hasMoreElements()) { - Rental each = (Rental)rentals.nextElement(); - result += each.getCharge(); - } - return result; - } - - private int getTotalFrequentRenterPoints(){ - int result = 0; - Enumeration rentals = _rentals.elements(); - while (rentals.hasMoreElements()) { - Rental each = (Rental) rentals.nextElement(); - result += each.getFrequentRenterPoints(); - } - return result; - } - - } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Main.java b/src/main/java/org/kranonit/rentalStore/Main.java index 8b6f5f8..61b0649 100644 --- a/src/main/java/org/kranonit/rentalStore/Main.java +++ b/src/main/java/org/kranonit/rentalStore/Main.java @@ -12,7 +12,7 @@ public static void main(String[] args) { c.addRental(new Rental(m2, 4)); c.addRental(new Rental(m3, 5)); c.addRental(new Rental(m4, 6)); - System.out.println(c.statement()); + System.out.print(c.statement()); } } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java index f29968d..f866a27 100644 --- a/src/main/java/org/kranonit/rentalStore/Movie.java +++ b/src/main/java/org/kranonit/rentalStore/Movie.java @@ -5,42 +5,22 @@ public class Movie { public static final int REGULAR = 0; public static final int NEW_RELEASE = 1; private String _title; - Price _price; + private int _priceCode; public Movie(String title, int priceCode) { _title = title; - setPriceCode(priceCode); + _priceCode = priceCode; } public int getPriceCode() { - return _price.getPriceCode(); + return _priceCode; } public void setPriceCode(int arg) { - switch (arg) { - case REGULAR: - _price = new RegularPrice(); - break; - case CHILDRENS: - _price = new ChildrensPrice(); - break; - case NEW_RELEASE: - _price = new NewReleasePrice(); - break; - default: - throw new IllegalArgumentException("Incorrect Price Code"); - } - } - - double getCharge(int daysRented) { - return _price.getCharge(daysRented); + _priceCode = arg; } public String getTitle() { return _title; } - - int getFrequentRenterPoints(int daysRented) { - return _price.getFrequentRenterPoints(daysRented); - } } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Price.java b/src/main/java/org/kranonit/rentalStore/Price.java deleted file mode 100644 index 53a6a71..0000000 --- a/src/main/java/org/kranonit/rentalStore/Price.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.kranonit.rentalStore; - -abstract class Price { - abstract int getPriceCode(); - abstract double getCharge(int daysRented); - - int getFrequentRenterPoints(int daysRented) { - return 1; - } -} - -class ChildrensPrice extends Price { - int getPriceCode() { - return Movie.CHILDRENS; - } - - double getCharge(int daysRented) { - double result = 1.5; - if (daysRented > 3) { - result += (daysRented - 3) * 1.5; - } - return result; - } -} - -class NewReleasePrice extends Price { - int getPriceCode() { - return Movie.NEW_RELEASE; - } - - double getCharge(int daysRented) { - return daysRented * 3; - } - - int getFrequentRenterPoints(int daysRented) { - return (daysRented > 1) ? 2 : 1; - } -} - -class RegularPrice extends Price { - int getPriceCode() { - return Movie.REGULAR; - } - - double getCharge(int daysRented){ - double result = 2; - if (daysRented > 2) { - result += (daysRented - 2) * 1.5; - } - return result; - } -} diff --git a/src/main/java/org/kranonit/rentalStore/Rental.java b/src/main/java/org/kranonit/rentalStore/Rental.java index bf03032..0769fe7 100644 --- a/src/main/java/org/kranonit/rentalStore/Rental.java +++ b/src/main/java/org/kranonit/rentalStore/Rental.java @@ -3,6 +3,7 @@ class Rental { private Movie _movie; + private int _daysRented; public Rental(Movie movie, int daysRented) { @@ -11,15 +12,27 @@ public Rental(Movie movie, int daysRented) { } public double getCharge() { - return _movie.getCharge(_daysRented); + double thisAmount = 0; + // determine amounts for each line + switch (getMovie().getPriceCode()) { + case Movie.REGULAR: + thisAmount += 2; + if (getDaysRented() > 2) + thisAmount += (getDaysRented() - 2) * 1.5; + break; + case Movie.NEW_RELEASE: + thisAmount += getDaysRented() * 3; + break; + case Movie.CHILDRENS: + thisAmount += 1.5; + if (getDaysRented() > 3) + thisAmount += (getDaysRented() - 3) * 1.5; + break; + } + return thisAmount; } - public int getFrequentRenterPoints() { - - return _movie.getFrequentRenterPoints(_daysRented); - } - - public int getDaysRented() { + public int getDaysRented() { return _daysRented; } diff --git a/src/test/java/org/kranonit/rentalStore/CustomerTest.java b/src/test/java/org/kranonit/rentalStore/CustomerTest.java index 94da5cb..3d7175b 100644 --- a/src/test/java/org/kranonit/rentalStore/CustomerTest.java +++ b/src/test/java/org/kranonit/rentalStore/CustomerTest.java @@ -22,7 +22,7 @@ public void testStatement() throws Exception { c.addRental(new Rental(m3, 5)); c.addRental(new Rental(m4, 6)); String statementResult = c.statement(); - System.out.println(statementResult); + System.out.print(statementResult); Assert.assertEquals("Rental Record for stokito\n" + "\tЗа двумя зайцами\t3.5\n" + "\tВсё просто\t12.0\n" + @@ -31,26 +31,4 @@ public void testStatement() throws Exception { "Amount owed is 38.0\n" + "You earned 6 frequent renter points", statementResult); } - - @Test - public void testHtmlStatement() throws Exception { - Movie m1 = new Movie("За двумя зайцами", Movie.REGULAR); - Movie m2 = new Movie("Всё просто", Movie.NEW_RELEASE); - Movie m3 = new Movie("Хоббит", Movie.CHILDRENS); - Movie m4 = new Movie("Альф", Movie.NEW_RELEASE); - - Customer c = new Customer("stokito"); - c.addRental(new Rental(m1, 3)); - c.addRental(new Rental(m2, 4)); - c.addRental(new Rental(m3, 5)); - c.addRental(new Rental(m4, 6)); - String htmlStatementResult = c.htmlStatement(); - Assert.assertEquals("<Н1>0перации аренды для <ЕМ>stokito

\n" + - "За двумя зайцами3.5
\n" + - "Всё просто12.0
\n" + - "Хоббит4.5
\n" + - "Альф18.0
\n" + - "<Р>Ваша задолженность составляет <ЕМ>38.0

\n" + - "На этой аренде вы заработали <ЕМ>6 очков за активность<Р>", htmlStatementResult); - } } From 9a39bb72bdf4499ade709903fa497fd278e74705 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:05:50 +0200 Subject: [PATCH 02/11] Replace temp variable with Query ( thisAmount => each.getCharge() ) --- .idea/codeStyleSettings.xml | 6 +++++- src/main/java/org/kranonit/rentalStore/Customer.java | 5 ++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml index 1129f00..9178b38 100644 --- a/.idea/codeStyleSettings.xml +++ b/.idea/codeStyleSettings.xml @@ -2,7 +2,11 @@ diff --git a/src/main/java/org/kranonit/rentalStore/Customer.java b/src/main/java/org/kranonit/rentalStore/Customer.java index c901a9a..03cfc1f 100644 --- a/src/main/java/org/kranonit/rentalStore/Customer.java +++ b/src/main/java/org/kranonit/rentalStore/Customer.java @@ -25,7 +25,6 @@ public String statement() { String result = "Rental Record for " + getName() + "\n"; while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); - double thisAmount = each.getCharge(); // add frequent renter points frequentRenterPoints++; // add bonus for a two day new release rental @@ -34,8 +33,8 @@ public String statement() { frequentRenterPoints++; // show figures for this rental result += "\t" + each.getMovie().getTitle() + "\t" - + String.valueOf(thisAmount) + "\n"; - totalAmount += thisAmount; + + String.valueOf( each.getCharge() ) + "\n"; + totalAmount += each.getCharge();; } // add footer lines result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; From daaad26626dd091706e6208052ec2823cd0b65be Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:13:16 +0200 Subject: [PATCH 03/11] Exctract method (getFrequentRenterPoints) --- src/main/java/org/kranonit/rentalStore/Customer.java | 7 +------ src/main/java/org/kranonit/rentalStore/Rental.java | 6 ++++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/kranonit/rentalStore/Customer.java b/src/main/java/org/kranonit/rentalStore/Customer.java index 03cfc1f..38fbd89 100644 --- a/src/main/java/org/kranonit/rentalStore/Customer.java +++ b/src/main/java/org/kranonit/rentalStore/Customer.java @@ -25,12 +25,7 @@ public String statement() { String result = "Rental Record for " + getName() + "\n"; while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); - // 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++; + frequentRenterPoints+= each.getFrequentRenterPoints(); // show figures for this rental result += "\t" + each.getMovie().getTitle() + "\t" + String.valueOf( each.getCharge() ) + "\n"; diff --git a/src/main/java/org/kranonit/rentalStore/Rental.java b/src/main/java/org/kranonit/rentalStore/Rental.java index 0769fe7..4106102 100644 --- a/src/main/java/org/kranonit/rentalStore/Rental.java +++ b/src/main/java/org/kranonit/rentalStore/Rental.java @@ -32,6 +32,12 @@ public double getCharge() { return thisAmount; } + public int getFrequentRenterPoints(){ + if ((getMovie().getPriceCode() == Movie.NEW_RELEASE) && getDaysRented() > 1) + return 2; + return 1; + } + public int getDaysRented() { return _daysRented; } From bd41c69f88117b9bcab00f83abf9eeade1511929 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:19:17 +0200 Subject: [PATCH 04/11] Replace Temp with Query ( totalAmount => getTotalCharge() ) --- .../java/org/kranonit/rentalStore/Customer.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/kranonit/rentalStore/Customer.java b/src/main/java/org/kranonit/rentalStore/Customer.java index 38fbd89..8eb06da 100644 --- a/src/main/java/org/kranonit/rentalStore/Customer.java +++ b/src/main/java/org/kranonit/rentalStore/Customer.java @@ -20,7 +20,7 @@ public String getName() { } public String statement() { - double totalAmount = 0; int frequentRenterPoints = 0; + int frequentRenterPoints = 0; Enumeration rentals = _rentals.elements(); String result = "Rental Record for " + getName() + "\n"; while (rentals.hasMoreElements()) { @@ -29,13 +29,21 @@ public String statement() { // show figures for this rental result += "\t" + each.getMovie().getTitle() + "\t" + String.valueOf( each.getCharge() ) + "\n"; - totalAmount += each.getCharge();; } // add footer lines - result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; + result += "Amount owed is " + String.valueOf( getTotalCharge() ) + "\n"; result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; return result; } + private double getTotalCharge(){ + double totalCharge = 0; + Enumeration rentals = _rentals.elements(); + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + totalCharge += each.getCharge(); + } + return totalCharge; + } } \ No newline at end of file From 68a8070b0633cac90fbcd4dd2a12df3b6f1f7387 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:22:45 +0200 Subject: [PATCH 05/11] Replace Temp with Query ( frequentRenterPoints => getTotalFrequentRenterPoints() ) --- .../java/org/kranonit/rentalStore/Customer.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/kranonit/rentalStore/Customer.java b/src/main/java/org/kranonit/rentalStore/Customer.java index 8eb06da..67343a5 100644 --- a/src/main/java/org/kranonit/rentalStore/Customer.java +++ b/src/main/java/org/kranonit/rentalStore/Customer.java @@ -20,19 +20,17 @@ public String getName() { } public String statement() { - int frequentRenterPoints = 0; Enumeration rentals = _rentals.elements(); String result = "Rental Record for " + getName() + "\n"; while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); - frequentRenterPoints+= each.getFrequentRenterPoints(); // show figures for this rental result += "\t" + each.getMovie().getTitle() + "\t" + String.valueOf( each.getCharge() ) + "\n"; } // add footer lines result += "Amount owed is " + String.valueOf( getTotalCharge() ) + "\n"; - result += "You earned " + String.valueOf(frequentRenterPoints) + result += "You earned " + String.valueOf( getTotalFrequentRenterPoints() ) + " frequent renter points"; return result; } @@ -46,4 +44,14 @@ private double getTotalCharge(){ } return totalCharge; } + + private int getTotalFrequentRenterPoints(){ + int totalPoints = 0; + Enumeration rentals = _rentals.elements(); + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + totalPoints += each.getFrequentRenterPoints(); + } + return totalPoints; + } } \ No newline at end of file From 989b7d2ad2e75b23da74ae28f9c432e46780bbc3 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:34:16 +0200 Subject: [PATCH 06/11] Add htmlStatement method --- .../org/kranonit/rentalStore/Customer.java | 16 +++++++++++++ .../java/org/kranonit/rentalStore/Main.java | 2 ++ .../kranonit/rentalStore/CustomerTest.java | 23 +++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/main/java/org/kranonit/rentalStore/Customer.java b/src/main/java/org/kranonit/rentalStore/Customer.java index 67343a5..bdefc47 100644 --- a/src/main/java/org/kranonit/rentalStore/Customer.java +++ b/src/main/java/org/kranonit/rentalStore/Customer.java @@ -35,6 +35,22 @@ public String statement() { return result; } + public String htmlStatement() { + Enumeration rentals = _rentals.elements(); + String result = "

Rental Record for " + getName() + "

\n"; + while (rentals.hasMoreElements()) { + Rental each = (Rental) rentals.nextElement(); + // show figures for this rental + result += each.getMovie().getTitle() + ": " + + String.valueOf( each.getCharge() ) + "
\n"; + } + // add footer lines + result += "

Amount owed is " + String.valueOf( getTotalCharge() ) + "

\n"; + result += "You earned " + String.valueOf( getTotalFrequentRenterPoints() ) + + " frequent renter points

"; + return result; + } + private double getTotalCharge(){ double totalCharge = 0; Enumeration rentals = _rentals.elements(); diff --git a/src/main/java/org/kranonit/rentalStore/Main.java b/src/main/java/org/kranonit/rentalStore/Main.java index 61b0649..17cb770 100644 --- a/src/main/java/org/kranonit/rentalStore/Main.java +++ b/src/main/java/org/kranonit/rentalStore/Main.java @@ -13,6 +13,8 @@ public static void main(String[] args) { c.addRental(new Rental(m3, 5)); c.addRental(new Rental(m4, 6)); System.out.print(c.statement()); + System.out.print( "\n\nVersion for HTML:\n\n" ); + System.out.print(c.htmlStatement()); } } \ No newline at end of file diff --git a/src/test/java/org/kranonit/rentalStore/CustomerTest.java b/src/test/java/org/kranonit/rentalStore/CustomerTest.java index 3d7175b..431c9b9 100644 --- a/src/test/java/org/kranonit/rentalStore/CustomerTest.java +++ b/src/test/java/org/kranonit/rentalStore/CustomerTest.java @@ -31,4 +31,27 @@ public void testStatement() throws Exception { "Amount owed is 38.0\n" + "You earned 6 frequent renter points", statementResult); } + + @Test + public void testHTMLStatement() throws Exception { + Movie m1 = new Movie("За двумя зайцами", Movie.REGULAR); + Movie m2 = new Movie("Всё просто", Movie.NEW_RELEASE); + Movie m3 = new Movie("Хоббит", Movie.CHILDRENS); + Movie m4 = new Movie("Альф", Movie.NEW_RELEASE); + + Customer c = new Customer("stokito"); + c.addRental(new Rental(m1, 3)); + c.addRental(new Rental(m2, 4)); + c.addRental(new Rental(m3, 5)); + c.addRental(new Rental(m4, 6)); + String statementResult = c.htmlStatement(); + System.out.print(statementResult); + Assert.assertEquals("

Rental Record for stokito

\n" + + "За двумя зайцами: 3.5
\n" + + "Всё просто: 12.0
\n" + + "Хоббит: 4.5
\n" + + "Альф: 18.0
\n" + + "

Amount owed is 38.0

\n" + + "You earned 6 frequent renter points

", statementResult); + } } From be070fd265158d26dc2ffdb0c5c8237e734b3c4c Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:40:54 +0200 Subject: [PATCH 07/11] Move method ( getCharge() to Movie ) --- .../java/org/kranonit/rentalStore/Movie.java | 21 +++++++++++++++++++ .../java/org/kranonit/rentalStore/Rental.java | 19 +---------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java index f866a27..88a30e1 100644 --- a/src/main/java/org/kranonit/rentalStore/Movie.java +++ b/src/main/java/org/kranonit/rentalStore/Movie.java @@ -23,4 +23,25 @@ public void setPriceCode(int arg) { public String getTitle() { return _title; } + + public double getCharge( int daysRented ) { + double thisAmount = 0; + // determine amounts for each line + switch (getPriceCode()) { + case Movie.REGULAR: + thisAmount += 2; + if (daysRented > 2) + thisAmount += (daysRented - 2) * 1.5; + break; + case Movie.NEW_RELEASE: + thisAmount += daysRented * 3; + break; + case Movie.CHILDRENS: + thisAmount += 1.5; + if (daysRented > 3) + thisAmount += (daysRented - 3) * 1.5; + break; + } + return thisAmount; + } } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Rental.java b/src/main/java/org/kranonit/rentalStore/Rental.java index 4106102..44964fb 100644 --- a/src/main/java/org/kranonit/rentalStore/Rental.java +++ b/src/main/java/org/kranonit/rentalStore/Rental.java @@ -12,24 +12,7 @@ public Rental(Movie movie, int daysRented) { } public double getCharge() { - double thisAmount = 0; - // determine amounts for each line - switch (getMovie().getPriceCode()) { - case Movie.REGULAR: - thisAmount += 2; - if (getDaysRented() > 2) - thisAmount += (getDaysRented() - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - thisAmount += getDaysRented() * 3; - break; - case Movie.CHILDRENS: - thisAmount += 1.5; - if (getDaysRented() > 3) - thisAmount += (getDaysRented() - 3) * 1.5; - break; - } - return thisAmount; + return _movie.getCharge( getDaysRented() ); } public int getFrequentRenterPoints(){ From 76cfc0ebaba12be7c08980a00f8b45ecbf5eaae2 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:43:54 +0200 Subject: [PATCH 08/11] Move method ( getFrequentRenterPoints() to Movie ) --- src/main/java/org/kranonit/rentalStore/Movie.java | 6 ++++++ src/main/java/org/kranonit/rentalStore/Rental.java | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java index 88a30e1..39f05ae 100644 --- a/src/main/java/org/kranonit/rentalStore/Movie.java +++ b/src/main/java/org/kranonit/rentalStore/Movie.java @@ -44,4 +44,10 @@ public double getCharge( int daysRented ) { } return thisAmount; } + + public int getFrequentRenterPoints( int daysRented ){ + if ((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1) + return 2; + return 1; + } } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Rental.java b/src/main/java/org/kranonit/rentalStore/Rental.java index 44964fb..13f797d 100644 --- a/src/main/java/org/kranonit/rentalStore/Rental.java +++ b/src/main/java/org/kranonit/rentalStore/Rental.java @@ -16,9 +16,7 @@ public double getCharge() { } public int getFrequentRenterPoints(){ - if ((getMovie().getPriceCode() == Movie.NEW_RELEASE) && getDaysRented() > 1) - return 2; - return 1; + return _movie.getFrequentRenterPoints( getDaysRented() ); } public int getDaysRented() { From bcb93831f2249f31bc6917843913d29e342e3980 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:46:50 +0200 Subject: [PATCH 09/11] Replace assignment to method's call ( setPriceCode( priceCode ) ) --- src/main/java/org/kranonit/rentalStore/Movie.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java index 39f05ae..d48f4a5 100644 --- a/src/main/java/org/kranonit/rentalStore/Movie.java +++ b/src/main/java/org/kranonit/rentalStore/Movie.java @@ -9,7 +9,7 @@ public class Movie { public Movie(String title, int priceCode) { _title = title; - _priceCode = priceCode; + setPriceCode( priceCode ); } public int getPriceCode() { From 0583df707e2a65e08f974e07811a1c4612fa4e8e Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 19:57:24 +0200 Subject: [PATCH 10/11] Replace Type Code with State ( Price classes ) --- .../java/org/kranonit/rentalStore/Movie.java | 18 ++++++++++++--- .../java/org/kranonit/rentalStore/Price.java | 23 +++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/kranonit/rentalStore/Price.java diff --git a/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java index d48f4a5..e0fc0ba 100644 --- a/src/main/java/org/kranonit/rentalStore/Movie.java +++ b/src/main/java/org/kranonit/rentalStore/Movie.java @@ -5,7 +5,7 @@ public class Movie { public static final int REGULAR = 0; public static final int NEW_RELEASE = 1; private String _title; - private int _priceCode; + private Price _price; public Movie(String title, int priceCode) { _title = title; @@ -13,11 +13,23 @@ public Movie(String title, int priceCode) { } public int getPriceCode() { - return _priceCode; + return _price.getPriceCode(); } public void setPriceCode(int arg) { - _priceCode = arg; + switch (arg){ + case CHILDRENS: + _price = new ChildrensPrice(); + break; + case REGULAR: + _price = new RegularPrice(); + break; + case NEW_RELEASE: + _price = new NewReleasePrice(); + break; + default: + throw new IllegalArgumentException("Incorrect Price Code"); + } } public String getTitle() { diff --git a/src/main/java/org/kranonit/rentalStore/Price.java b/src/main/java/org/kranonit/rentalStore/Price.java new file mode 100644 index 0000000..e80b916 --- /dev/null +++ b/src/main/java/org/kranonit/rentalStore/Price.java @@ -0,0 +1,23 @@ +package org.kranonit.rentalStore; + +abstract class Price { + abstract int getPriceCode(); +} + +class RegularPrice extends Price { + int getPriceCode(){ + return Movie.REGULAR; + } +} + +class NewReleasePrice extends Price { + int getPriceCode(){ + return Movie.NEW_RELEASE; + } +} + +class ChildrensPrice extends Price { + int getPriceCode(){ + return Movie.CHILDRENS; + } +} From 0652b2769c050a67b5c470071e228fd3ca71e643 Mon Sep 17 00:00:00 2001 From: Anna Lutsko Date: Tue, 26 Feb 2013 20:03:40 +0200 Subject: [PATCH 11/11] Move method ( getCharge and getFrequentRenterPoints move to Price ) --- .../java/org/kranonit/rentalStore/Movie.java | 23 ++------------- .../java/org/kranonit/rentalStore/Price.java | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java index e0fc0ba..3b16e02 100644 --- a/src/main/java/org/kranonit/rentalStore/Movie.java +++ b/src/main/java/org/kranonit/rentalStore/Movie.java @@ -37,29 +37,10 @@ public String getTitle() { } public double getCharge( int daysRented ) { - double thisAmount = 0; - // determine amounts for each line - switch (getPriceCode()) { - case Movie.REGULAR: - thisAmount += 2; - if (daysRented > 2) - thisAmount += (daysRented - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - thisAmount += daysRented * 3; - break; - case Movie.CHILDRENS: - thisAmount += 1.5; - if (daysRented > 3) - thisAmount += (daysRented - 3) * 1.5; - break; - } - return thisAmount; + return _price.getCharge(daysRented); } public int getFrequentRenterPoints( int daysRented ){ - if ((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1) - return 2; - return 1; + return _price.getFrequentRenterPoints(daysRented); } } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Price.java b/src/main/java/org/kranonit/rentalStore/Price.java index e80b916..887fa08 100644 --- a/src/main/java/org/kranonit/rentalStore/Price.java +++ b/src/main/java/org/kranonit/rentalStore/Price.java @@ -1,23 +1,52 @@ package org.kranonit.rentalStore; abstract class Price { + abstract int getPriceCode(); + abstract double getCharge( int daysRented ); + + public int getFrequentRenterPoints( int daysRented ){ + if ((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1) + return 2; + return 1; + } } class RegularPrice extends Price { + int getPriceCode(){ return Movie.REGULAR; } + + double getCharge( int daysRented ){ + double result = 2; + if (daysRented > 2) + result += (daysRented - 2) * 1.5; + return result; + } } class NewReleasePrice extends Price { + int getPriceCode(){ return Movie.NEW_RELEASE; } + + double getCharge( int daysRented ){ + return daysRented * 3; + } } class ChildrensPrice extends Price { + int getPriceCode(){ return Movie.CHILDRENS; } + + double getCharge( int daysRented ){ + double result = 1.5; + if (daysRented > 3) + result += (daysRented - 3) * 1.5; + return result; + } }