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
8 changes: 0 additions & 8 deletions src/com/zerofiltre/parkingbot/Main.java

This file was deleted.

41 changes: 41 additions & 0 deletions src/com/zerofiltre/parkingbot/ParkingBot.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.zerofiltre.parkingbot;


import com.zerofiltre.parkingbot.model.Parking;
import com.zerofiltre.parkingbot.model.Vehicle;
import com.zerofiltre.parkingbot.service.ParkingService;

import java.util.List;

import static com.zerofiltre.parkingbot.model.ParkingTypeEnum.SPOT;

public class ParkingBot {

static ParkingService parkingService = new ParkingService();

/**
* Ceci est la méthode Main
*
* @param args : Tableau de données entrées lors du lancement de l'application
*/
public static void main(String[] args) {
Parking parking = parkingService.initParking();
listCars(parking);
}

static void listCars (Parking parking){
if (SPOT.equals(parking.getType())){
Vehicle vehicle = parking.getVehicle();
System.out.println("Vehicule d'immatriculation "
+ vehicle.getRegistrationNumber()
+" situé à la place "
+ vehicle.getParkingSpotNumber());
}else{
List<Parking> subParkings = parking.getSubParkings();
for (Parking subParking : subParkings){
listCars(subParking);
}
}
}

}
10 changes: 10 additions & 0 deletions src/com/zerofiltre/parkingbot/model/Bicycle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.zerofiltre.parkingbot.model;

public class Bicycle extends Vehicle{

@Override
public String getCategory() {
return "2 ROUES";
}

}
9 changes: 9 additions & 0 deletions src/com/zerofiltre/parkingbot/model/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.zerofiltre.parkingbot.model;

public class Car extends Vehicle{

@Override
public String getCategory() {
return "CITADINE";
}
}
47 changes: 47 additions & 0 deletions src/com/zerofiltre/parkingbot/model/Parking.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.zerofiltre.parkingbot.model;

import java.util.ArrayList;
import java.util.List;

public class Parking {

List<Parking> subParkings = new ArrayList<>();
Vehicle vehicle;
int number;

public Vehicle getVehicle() {
return vehicle;
}

public void setVehicle(Vehicle vehicle) {
this.vehicle = vehicle;
}

public List<Parking> getSubParkings() {
return subParkings;
}

public void setSubParkings(List<Parking> subParkings) {
this.subParkings = subParkings;
}

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

public ParkingTypeEnum getType() {
return type;
}

public void setType(ParkingTypeEnum type) {
this.type = type;
}

ParkingTypeEnum type;


}
9 changes: 9 additions & 0 deletions src/com/zerofiltre/parkingbot/model/ParkingTypeEnum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.zerofiltre.parkingbot.model;

public enum ParkingTypeEnum {

BUILDING,
FLOOR,
HALL,
SPOT
}
49 changes: 49 additions & 0 deletions src/com/zerofiltre/parkingbot/model/Ticket.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.zerofiltre.parkingbot.model;

import java.util.Date;

public class Ticket {

private double amount;
private Vehicle vehicle;
private Date enteringTime;
private Date exitTime;

public double getAmount() {
return amount;
}

public void setAmount(double amount) {
this.amount = amount;
}

public Vehicle getVehicle() {
return vehicle;
}

public void setVehicle(Vehicle vehicle) {
this.vehicle = vehicle;
}

public Date getEnteringTime() {
return enteringTime;
}

public void setEnteringTime(Date enteringTime) {
this.enteringTime = enteringTime;
}

public Date getExitTime() {
return exitTime;
}

public void setExitTime(Date exitTime) {
this.exitTime = exitTime;
}

@Override
public String toString() {
return "Ticket d'un montant de :" +amount+ " € pour véhicule de type " + vehicle.getCategory() + " immatriculé: " +vehicle.getRegistrationNumber()+ " entré à " + enteringTime + " et sorti à " + exitTime;

}
}
28 changes: 28 additions & 0 deletions src/com/zerofiltre/parkingbot/model/Vehicle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.zerofiltre.parkingbot.model;

public class Vehicle {

private String registrationNumber;

private String parkingSpotNumber;

public String getRegistrationNumber() {
return registrationNumber;
}

public void setRegistrationNumber(String registrationNumber) {
this.registrationNumber = registrationNumber;
}

public String getCategory() {
return "VEHICLE";
}

public String getParkingSpotNumber() {
return parkingSpotNumber;
}

public void setParkingSpotNumber(String parkingSpotNumber) {
this.parkingSpotNumber = parkingSpotNumber;
}
}
80 changes: 80 additions & 0 deletions src/com/zerofiltre/parkingbot/service/ParkingService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.zerofiltre.parkingbot.service;

import com.zerofiltre.parkingbot.model.Parking;
import com.zerofiltre.parkingbot.model.ParkingTypeEnum;
import com.zerofiltre.parkingbot.model.Ticket;
import com.zerofiltre.parkingbot.model.Vehicle;
import java.security.SecureRandom;
import java.util.Date;

public class ParkingService {

public Ticket processIncomingVehicle(Vehicle vehicle) {
Ticket ticket = new Ticket();
Date now = new Date();
ticket.setEnteringTime(now);
ticket.setVehicle(vehicle);
return ticket;
}

public Ticket processExitingVehicle(Ticket ticket) {
long now = new Date().getTime();
now += 60 * 60 * 1000;

Date exitTime = new Date(now);
ticket.setExitTime(exitTime);

Vehicle vehicle = ticket.getVehicle();
String category = vehicle.getCategory();

double pricePerMinForCitadine = 0.08;
double pricePerMinFor2Roues = 0.02;
double defaultPricePerMin = 0.05;
long durationInMinutes = (ticket.getExitTime().getTime() - ticket.getEnteringTime().getTime()) / (60 * 1000);

double finalPrice = 0;

if ("CITADINE".equals(category)) {
finalPrice = durationInMinutes * pricePerMinForCitadine;
} else if ("2 ROUES".equals(category)) {
finalPrice = durationInMinutes * pricePerMinFor2Roues;
} else {
finalPrice = durationInMinutes * defaultPricePerMin;
}
ticket.setAmount(finalPrice);

return ticket;

}

public Parking initParking() {
Parking building = new Parking();
building.setType(ParkingTypeEnum.BUILDING);
building.setNumber(1);
for (int i = 0; i < 50; i++) {
Parking floor = new Parking();
floor.setType(ParkingTypeEnum.FLOOR);
floor.setNumber(i);

for (int j = 1; j <= 30; j++) {
Parking hall = new Parking();
hall.setType(ParkingTypeEnum.HALL);
hall.setNumber(j);
for (int k = 1; k <= 20; k++) {
Parking spot = new Parking();
spot.setType(ParkingTypeEnum.SPOT);
spot.setNumber(k);
Vehicle vehicle = new Vehicle();
vehicle.setRegistrationNumber(String.valueOf(new SecureRandom().nextInt(10000)));
vehicle.setParkingSpotNumber("");
vehicle.setParkingSpotNumber("1-" + i + "-" + j + "-" + k);
spot.setVehicle(vehicle);
hall.getSubParkings().add(spot);
}
floor.getSubParkings().add(hall);
}
building.getSubParkings().add(floor);
}
return building;
}
}