Skip to content

Commit

Permalink
Merge pull request #53 from Segelzwerg/ISSUE_#45
Browse files Browse the repository at this point in the history
Updates the representation of pace and speed
  • Loading branch information
Marcel authored Dec 9, 2019
2 parents 02e727a + 01951d4 commit 980692e
Show file tree
Hide file tree
Showing 11 changed files with 209 additions and 118 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ public class SpeedPresenter {
private Knot knots;

public SpeedPresenter(Speed speed) {
kilometerPerHour = (KilometerPerHour) speed.toKilometerPerHour();
milesPerHour = (MilePerHour) speed.toMilePerHour();
knots = (Knot) speed.toKnot();
kilometerPerHour = (KilometerPerHour) speed.toKilometerPerHour().format();
milesPerHour = (MilePerHour) speed.toMilePerHour().format();
knots = (Knot) speed.toKnot().format();
}
}
94 changes: 54 additions & 40 deletions src/main/java/segelzwerg/sporttooolbox/IUnits/KilometerPerHour.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,44 +11,58 @@
@ToString
@EqualsAndHashCode
public class KilometerPerHour implements Speed {
private final float speed;

public KilometerPerHour(float speed) {
if (speed < 0) {
throw new IllegalArgumentException("Speed must not be negative.");
}
this.speed = speed;
}

/**
* Convert to kilometer per hour
* @return speed in kilometer per hour
*/
public Speed toKilometerPerHour() {
return this;
}

/**
* Convert to meter per second
* @return speed in meter per second
*/
public Speed toMeterPerSecond() {
return new MeterPerSecond(speed / Speed.METER_PER_SECOND_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to mile per hour
* @return speed in mile per hour
*/
public Speed toMilePerHour() {
return new MilePerHour(speed / Speed.MILE_PER_HOUR_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to knot
* @return speed in knot
*/
public Speed toKnot() {
return new Knot(speed / Speed.KNOT_TO_KILOMETER_PER_HOUR);
}
private final float speed;

public KilometerPerHour(float speed) {
if (speed < 0) {
throw new IllegalArgumentException("Speed must not be negative.");
}
this.speed = speed;
}

/**
* Convert to kilometer per hour
*
* @return speed in kilometer per hour
*/
public Speed toKilometerPerHour() {
return this;
}

/**
* Convert to meter per second
*
* @return speed in meter per second
*/
public Speed toMeterPerSecond() {
return new MeterPerSecond(speed / Speed.METER_PER_SECOND_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to mile per hour
*
* @return speed in mile per hour
*/
public Speed toMilePerHour() {
return new MilePerHour(speed / Speed.MILE_PER_HOUR_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to knot
*
* @return speed in knot
*/
public Speed toKnot() {
return new Knot(speed / Speed.KNOT_TO_KILOMETER_PER_HOUR);
}

/**
* formats the decimal to 2 digits
*
* @return a new KilometerPerHour
*/
@Override
public Speed format() {
return new KilometerPerHour((float) (Math.round(speed * 100.0) / 100.0));
}
}
94 changes: 54 additions & 40 deletions src/main/java/segelzwerg/sporttooolbox/IUnits/Knot.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,44 +11,58 @@
@Setter
@EqualsAndHashCode
public class Knot implements Speed {
private final float speed;

public Knot(float speed) {
if (speed < 0) {
throw new IllegalArgumentException("Speed must not be negative.");
}
this.speed = speed;
}

/**
* Convert to kilometer per hour
* @return speed in kilometer per hour
*/
public Speed toKilometerPerHour() {
return new KilometerPerHour(speed * Speed.KNOT_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to meter per second
* @return speed in meter per second
*/
public Speed toMeterPerSecond() {
return new MeterPerSecond(speed * Speed.KNOT_TO_KILOMETER_PER_HOUR / Speed.METER_PER_SECOND_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to mile per hour
* @return speed in mile per hour
*/
public Speed toMilePerHour() {
return new MilePerHour(speed * Speed.KNOT_TO_KILOMETER_PER_HOUR / Speed.MILE_PER_HOUR_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to knot
* @return speed in knot
*/
public Speed toKnot() {
return this;
}
private final float speed;

public Knot(float speed) {
if (speed < 0) {
throw new IllegalArgumentException("Speed must not be negative.");
}
this.speed = speed;
}

/**
* Convert to kilometer per hour
*
* @return speed in kilometer per hour
*/
public Speed toKilometerPerHour() {
return new KilometerPerHour(speed * Speed.KNOT_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to meter per second
*
* @return speed in meter per second
*/
public Speed toMeterPerSecond() {
return new MeterPerSecond(speed * Speed.KNOT_TO_KILOMETER_PER_HOUR / Speed.METER_PER_SECOND_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to mile per hour
*
* @return speed in mile per hour
*/
public Speed toMilePerHour() {
return new MilePerHour(speed * Speed.KNOT_TO_KILOMETER_PER_HOUR / Speed.MILE_PER_HOUR_TO_KILOMETER_PER_HOUR);
}

/**
* Convert to knot
*
* @return speed in knot
*/
public Speed toKnot() {
return this;
}

/**
* formats the decimal to 2 digits
*
* @return a new Speed
*/
@Override
public Speed format() {
return new Knot((float) (Math.round(speed * 100.0) / 100.0));
}
}
10 changes: 10 additions & 0 deletions src/main/java/segelzwerg/sporttooolbox/IUnits/MeterPerSecond.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,14 @@ public Speed toMilePerHour() {
public Speed toKnot() {
return new Knot(speed * Speed.METER_PER_SECOND_TO_KILOMETER_PER_HOUR / Speed.KNOT_TO_KILOMETER_PER_HOUR);
}

/**
* formats the decimal to 2 digits
*
* @return a new MeterPerSecond
*/
@Override
public Speed format() {
return new MeterPerSecond((float) (Math.round(speed * 100.0) / 100.0));
}
}
10 changes: 10 additions & 0 deletions src/main/java/segelzwerg/sporttooolbox/IUnits/MilePerHour.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,14 @@ public Speed toMilePerHour() {
public Speed toKnot() {
return new Knot(speed * Speed.MILE_PER_HOUR_TO_KILOMETER_PER_HOUR / Speed.KNOT_TO_KILOMETER_PER_HOUR);
}

/**
* formats the decimal to 2 digits
*
* @return a new MilePerHour
*/
@Override
public Speed format() {
return new MilePerHour(((float) (Math.round(speed * 100.0) / 100.0)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;

/**
* Pace of minutes per hundred meters
*/
@Getter
@ToString
@EqualsAndHashCode
public class MinutesPerHundredMeters implements Pace {
private final float pace;
Expand All @@ -19,6 +17,7 @@ public MinutesPerHundredMeters(float pace) {

/**
* Converting to minutes per kilometers
*
* @return Pace instance with a converted numeric value
*/
@Override
Expand All @@ -28,10 +27,21 @@ public Pace toMinutesPerKilometer() {

/**
* Converting to minutes per hundred meters
*
* @return itself, since there's no conversion to be made
*/
@Override
public Pace toMinutesPerHundredMeters() {
return this;
}

/**
* returns the pace in min:ss
*
* @return formatted String
*/
@Override
public String toString() {
return (int) Math.floor(pace) + ":" + (int) (Math.round(pace * 60.0));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;

/**
* Pace of minutes per kilometers
*/
@Getter
@ToString
@EqualsAndHashCode
public class MinutesPerKilometer implements Pace {
private final float pace;
Expand All @@ -19,6 +17,7 @@ public MinutesPerKilometer(float pace) {

/**
* Converting to minutes per kilometers
*
* @return itself, since there's no conversion to be made
*/
@Override
Expand All @@ -28,10 +27,21 @@ public Pace toMinutesPerKilometer() {

/**
* Converting to minutes per hundred meters
*
* @return Pace instance with a converted numeric value
*/
@Override
public Pace toMinutesPerHundredMeters() {
return new MinutesPerHundredMeters(pace * PER_KILOMETER_TO_PER_HUNDRED_METER);
}

/**
* returns the pace in min:ss
*
* @return formatted String
*/
@Override
public String toString() {
return (int) Math.floor(pace) + ":" + (int) (Math.round(pace * 60.0));
}
}
49 changes: 29 additions & 20 deletions src/main/java/segelzwerg/sporttooolbox/IUnits/Speed.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,39 @@
*/
public interface Speed {

public static final float METER_PER_SECOND_TO_KILOMETER_PER_HOUR = 3.6f;
public static final float MILE_PER_HOUR_TO_KILOMETER_PER_HOUR = 1.609344f;
public static final float KNOT_TO_KILOMETER_PER_HOUR = 1.852f;

/**
* Convert to kilometer per hour
* @return speed in kilometer per hour
*/
public static final float METER_PER_SECOND_TO_KILOMETER_PER_HOUR = 3.6f;
public static final float MILE_PER_HOUR_TO_KILOMETER_PER_HOUR = 1.609344f;
public static final float KNOT_TO_KILOMETER_PER_HOUR = 1.852f;

/**
* Convert to kilometer per hour
*
* @return speed in kilometer per hour
*/
Speed toKilometerPerHour();
/**
* Convert to meter per second
* @return speed in meter per second
*/

/**
* Convert to meter per second
*
* @return speed in meter per second
*/
Speed toMeterPerSecond();
/**
* Convert to mile per hour
* @return speed in mile per hour
*/

/**
* Convert to mile per hour
*
* @return speed in mile per hour
*/
Speed toMilePerHour();
/**
* Convert to knot
* @return speed in knot
*/

/**
* Convert to knot
*
* @return speed in knot
*/
Speed toKnot();

float getSpeed();

public Speed format();
}
3 changes: 2 additions & 1 deletion src/main/resources/templates/PaceForm.html
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ <h1>Pace Calculator</h1>
<div class="card-body">
<h5 class="card-title">Pace</h5>
<p class="card-text">
The average pace is <span th:text="${pace?.minutesPerKilometer.pace}">30</span> Minutes per
The average pace is <span th:text="${pace?.minutesPerKilometer.toString()}">30</span> Minutes
per
Kilometer
for travelling <span th:text="${form.major}">30</span> <span
th:text="${form.distanceMajorUnit}">kilometer</span> and
Expand Down
Loading

0 comments on commit 980692e

Please sign in to comment.