Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 1 addition & 12 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 2 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion rentalStore.iml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
Expand Down
47 changes: 22 additions & 25 deletions src/main/java/org/kranonit/rentalStore/Customer.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,51 +26,48 @@ public String statement() {
Rental each = (Rental) rentals.nextElement();
// show figures for this rental
result += "\t" + each.getMovie().getTitle() + "\t"
+ String.valueOf(each.getCharge()) + "\n";
+ String.valueOf( each.getCharge() ) + "\n";
}
// add footer lines
result += "Amount owed is " + String.valueOf(getTotalCharge()) + "\n";
result += "You earned " + String.valueOf(getTotalFrequentRenterPoints())
result += "Amount owed is " + String.valueOf( getTotalCharge() ) + "\n";
result += "You earned " + String.valueOf( getTotalFrequentRenterPoints() )
+ " frequent renter points";
return result;
}

public String htmlStatement() {
Enumeration rentals = _rentals.elements();
String result = "<Н1>0перации аренды для <ЕМ>" + getName() + "</EM></H1><P>\n";
Enumeration<Rental> rentals = _rentals.elements();
String result = "<H1>Rental Record for <EM>" + getName() + "</EM></H1><P>\n";
while (rentals.hasMoreElements()) {
Rental each = (Rental) rentals.nextElement();
// показать результаты по каждой аренде
result += each.getMovie().getTitle() +
String.valueOf(each.getCharge()) + "<BR>\n";
// show figures for this rental
result += each.getMovie().getTitle() + ": "
+ String.valueOf( each.getCharge() ) + "<BR>\n";
}
//добавить нижний колонтитул
result += "<Р>Ваша задолженность составляет <ЕМ>" +
String.valueOf(getTotalCharge()) + "</EM><P>\n";
result += "На этой аренде вы заработали <ЕМ>" +
String.valueOf(getTotalFrequentRenterPoints()) + "</ЕМ> очков за активность<Р>";
// add footer lines
result += "<P>Amount owed is <EM>" + String.valueOf( getTotalCharge() ) + "</EM><P>\n";
result += "You earned <EM>" + String.valueOf( getTotalFrequentRenterPoints() )
+ "</EM> frequent renter points<P>";
return result;
}

private double getTotalCharge() {
double result = 0;
Enumeration rentals = _rentals.elements();
private double getTotalCharge(){
double totalCharge = 0;
Enumeration<Rental> rentals = _rentals.elements();
while (rentals.hasMoreElements()) {
Rental each = (Rental)rentals.nextElement();
result += each.getCharge();
Rental each = (Rental) rentals.nextElement();
totalCharge += each.getCharge();
}
return result;
return totalCharge;
}

private int getTotalFrequentRenterPoints(){
int result = 0;
Enumeration rentals = _rentals.elements();
int totalPoints = 0;
Enumeration<Rental> rentals = _rentals.elements();
while (rentals.hasMoreElements()) {
Rental each = (Rental) rentals.nextElement();
result += each.getFrequentRenterPoints();
totalPoints += each.getFrequentRenterPoints();
}
return result;
return totalPoints;
}


}
4 changes: 3 additions & 1 deletion src/main/java/org/kranonit/rentalStore/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ 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());
System.out.print( "\n\nVersion for HTML:\n\n" );
System.out.print(c.htmlStatement());
}

}
22 changes: 11 additions & 11 deletions src/main/java/org/kranonit/rentalStore/Movie.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,25 @@ public class Movie {
public static final int REGULAR = 0;
public static final int NEW_RELEASE = 1;
private String _title;
Price _price;
private Price _price;

public Movie(String title, int priceCode) {
_title = title;
setPriceCode(priceCode);
setPriceCode( priceCode );
}

public int getPriceCode() {
return _price.getPriceCode();
}

public void setPriceCode(int arg) {
switch (arg) {
case REGULAR:
_price = new RegularPrice();
break;
switch (arg){
case CHILDRENS:
_price = new ChildrensPrice();
break;
case REGULAR:
_price = new RegularPrice();
break;
case NEW_RELEASE:
_price = new NewReleasePrice();
break;
Expand All @@ -32,15 +32,15 @@ public void setPriceCode(int arg) {
}
}

double getCharge(int daysRented) {
return _price.getCharge(daysRented);
}

public String getTitle() {
return _title;
}

int getFrequentRenterPoints(int daysRented) {
public double getCharge( int daysRented ) {
return _price.getCharge(daysRented);
}

public int getFrequentRenterPoints( int daysRented ){
return _price.getFrequentRenterPoints(daysRented);
}
}
50 changes: 25 additions & 25 deletions src/main/java/org/kranonit/rentalStore/Price.java
Original file line number Diff line number Diff line change
@@ -1,52 +1,52 @@
package org.kranonit.rentalStore;

abstract class Price {

abstract int getPriceCode();
abstract double getCharge(int daysRented);
abstract double getCharge( int daysRented );

int getFrequentRenterPoints(int daysRented) {
return 1;
public int getFrequentRenterPoints( int daysRented ){
if ((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1)
return 2;
return 1;
}
}

class ChildrensPrice extends Price {
int getPriceCode() {
return Movie.CHILDRENS;
class RegularPrice extends Price {

int getPriceCode(){
return Movie.REGULAR;
}

double getCharge(int daysRented) {
double result = 1.5;
if (daysRented > 3) {
result += (daysRented - 3) * 1.5;
}
double getCharge( int daysRented ){
double result = 2;
if (daysRented > 2)
result += (daysRented - 2) * 1.5;
return result;
}
}

class NewReleasePrice extends Price {
int getPriceCode() {

int getPriceCode(){
return Movie.NEW_RELEASE;
}

double getCharge(int daysRented) {
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;
class ChildrensPrice extends Price {

int getPriceCode(){
return Movie.CHILDRENS;
}

double getCharge(int daysRented){
double result = 2;
if (daysRented > 2) {
result += (daysRented - 2) * 1.5;
}
double getCharge( int daysRented ){
double result = 1.5;
if (daysRented > 3)
result += (daysRented - 3) * 1.5;
return result;
}
}
10 changes: 5 additions & 5 deletions src/main/java/org/kranonit/rentalStore/Rental.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
class Rental {

private Movie _movie;

private int _daysRented;

public Rental(Movie movie, int daysRented) {
Expand All @@ -11,15 +12,14 @@ public Rental(Movie movie, int daysRented) {
}

public double getCharge() {
return _movie.getCharge(_daysRented);
return _movie.getCharge( getDaysRented() );
}

public int getFrequentRenterPoints() {

return _movie.getFrequentRenterPoints(_daysRented);
public int getFrequentRenterPoints(){
return _movie.getFrequentRenterPoints( getDaysRented() );
}

public int getDaysRented() {
public int getDaysRented() {
return _daysRented;
}

Expand Down
21 changes: 11 additions & 10 deletions src/test/java/org/kranonit/rentalStore/CustomerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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" +
Expand All @@ -33,7 +33,7 @@ public void testStatement() throws Exception {
}

@Test
public void testHtmlStatement() throws Exception {
public void testHTMLStatement() throws Exception {
Movie m1 = new Movie("За двумя зайцами", Movie.REGULAR);
Movie m2 = new Movie("Всё просто", Movie.NEW_RELEASE);
Movie m3 = new Movie("Хоббит", Movie.CHILDRENS);
Expand All @@ -44,13 +44,14 @@ public void testHtmlStatement() throws Exception {
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</EM></H1><P>\n" +
"За двумя зайцами3.5<BR>\n" +
"Всё просто12.0<BR>\n" +
"Хоббит4.5<BR>\n" +
"Альф18.0<BR>\n" +
"<Р>Ваша задолженность составляет <ЕМ>38.0</EM><P>\n" +
"На этой аренде вы заработали <ЕМ>6</ЕМ> очков за активность<Р>", htmlStatementResult);
String statementResult = c.htmlStatement();
System.out.print(statementResult);
Assert.assertEquals("<H1>Rental Record for <EM>stokito</EM></H1><P>\n" +
"За двумя зайцами: 3.5<BR>\n" +
"Всё просто: 12.0<BR>\n" +
"Хоббит: 4.5<BR>\n" +
"Альф: 18.0<BR>\n" +
"<P>Amount owed is <EM>38.0</EM><P>\n" +
"You earned <EM>6</EM> frequent renter points<P>", statementResult);
}
}