From 7d924a5267138027515b8e0089560a7986c9dd77 Mon Sep 17 00:00:00 2001 From: RadhaChanaspur Date: Fri, 26 Jul 2024 19:30:49 +0530 Subject: [PATCH 1/2] Parking Lot : IssueTicket --- src/ParkingLot/Client.java | 69 ++++++-------- .../DataBase/DataBaseController.java | 89 ++++++++++++++++++ src/ParkingLot/Services/TicketService.java | 91 +++++++++++++++++++ .../RandomSlotAssignmentStrategy.java | 10 +- .../Strategy/SlotAssignmentFactory.java | 12 +++ .../Strategy/SlotAssignmentStrategy.java | 9 ++ .../controllers/TicketController.java | 45 ++++----- .../dtos/IssueTicketRequestDTO.java | 35 +++---- .../dtos/IssueTicketResponseDTO.java | 51 ++++++----- src/ParkingLot/dtos/ResponseStatus.java | 2 +- src/ParkingLot/models/AllowedVehicleType.java | 7 ++ src/ParkingLot/models/Bill.java | 58 +++++------- src/ParkingLot/models/Gate.java | 16 ++-- src/ParkingLot/models/GateStatus.java | 4 +- src/ParkingLot/models/GateType.java | 4 +- src/ParkingLot/models/Operator.java | 22 ++++- src/ParkingLot/models/ParkingFloor.java | 35 ++++--- src/ParkingLot/models/ParkingFloorStatus.java | 4 +- src/ParkingLot/models/ParkingLot.java | 87 +++++++----------- src/ParkingLot/models/ParkingLotStatus.java | 8 -- src/ParkingLot/models/ParkingSlot.java | 39 +++++--- src/ParkingLot/models/ParkingSlotStatus.java | 3 +- src/ParkingLot/models/Payment.java | 46 +--------- src/ParkingLot/models/PaymentMode.java | 5 +- src/ParkingLot/models/PaymentStatus.java | 6 +- src/ParkingLot/models/Ticket.java | 42 ++++----- src/ParkingLot/models/Vehicle.java | 19 ++-- src/ParkingLot/models/VehicleType.java | 11 --- .../models/VehicleTypeCapacity.java | 6 +- .../repositories/GateRepository.java | 20 +++- .../repositories/OperatorRepository.java | 24 +++++ .../repositories/ParkingFloorRepository.java | 17 ++++ ...ingFloorVehicleTypeCapacityRepository.java | 37 ++++++++ .../repositories/ParkingLotRepository.java | 42 +++------ .../repositories/ParkingSlotRepository.java | 17 ++++ .../repositories/TicketRepository.java | 23 ++--- .../repositories/VehicleRepository.java | 17 +++- src/ParkingLot/service/TicketService.java | 80 ---------------- .../strategies/SlotAssignmentStrategy.java | 14 --- .../SlotAssignmentStrategyFactory.java | 12 --- 40 files changed, 632 insertions(+), 506 deletions(-) create mode 100644 src/ParkingLot/DataBase/DataBaseController.java create mode 100644 src/ParkingLot/Services/TicketService.java rename src/ParkingLot/{strategies => Strategy}/RandomSlotAssignmentStrategy.java (56%) create mode 100644 src/ParkingLot/Strategy/SlotAssignmentFactory.java create mode 100644 src/ParkingLot/Strategy/SlotAssignmentStrategy.java create mode 100644 src/ParkingLot/models/AllowedVehicleType.java delete mode 100644 src/ParkingLot/models/ParkingLotStatus.java delete mode 100644 src/ParkingLot/models/VehicleType.java create mode 100644 src/ParkingLot/repositories/OperatorRepository.java create mode 100644 src/ParkingLot/repositories/ParkingFloorRepository.java create mode 100644 src/ParkingLot/repositories/ParkingFloorVehicleTypeCapacityRepository.java create mode 100644 src/ParkingLot/repositories/ParkingSlotRepository.java delete mode 100644 src/ParkingLot/service/TicketService.java delete mode 100644 src/ParkingLot/strategies/SlotAssignmentStrategy.java delete mode 100644 src/ParkingLot/strategies/SlotAssignmentStrategyFactory.java diff --git a/src/ParkingLot/Client.java b/src/ParkingLot/Client.java index 319b4e7..6fb0b63 100644 --- a/src/ParkingLot/Client.java +++ b/src/ParkingLot/Client.java @@ -1,56 +1,45 @@ package ParkingLot; -import ParkingLot.controllers.TicketController; +import ParkingLot.Controllers.TicketController; +import ParkingLot.DataBase.DataBaseController; +import ParkingLot.Repositories.*; +import ParkingLot.Services.TicketService; import ParkingLot.dtos.IssueTicketRequestDTO; -import ParkingLot.models.Gate; -import ParkingLot.models.VehicleType; -import ParkingLot.repositories.GateRepository; -import ParkingLot.repositories.ParkingLotRepository; -import ParkingLot.repositories.TicketRepository; -import ParkingLot.repositories.VehicleRepository; -import ParkingLot.service.TicketService; +import ParkingLot.dtos.IssueTicketResponseDTO; +import ParkingLot.models.AllowedVehicleType; public class Client { public static void main(String[] args) { - VehicleRepository vehicleRepository = new VehicleRepository(); - TicketRepository ticketRepository = new TicketRepository(); - ParkingLotRepository parkingLotRepository = new ParkingLotRepository(); GateRepository gateRepository = new GateRepository(); + ParkingLotRepository parkingLotRepository = new ParkingLotRepository(); + TicketRepository ticketRepository = new TicketRepository(); + VehicleRepository vehicleRepository = new VehicleRepository(); + OperatorRepository operatorRepository = new OperatorRepository(); + ParkingSlotRepository parkingSlotRepository = new ParkingSlotRepository(); + ParkingFloorRepository parkingFloorRepository = new ParkingFloorRepository(); - TicketService ticketService = new TicketService( - gateRepository, - vehicleRepository, - parkingLotRepository, - ticketRepository - ); - TicketController ticketController = new TicketController(ticketService); + DataBaseController.InitializeDataBaseTransaction(gateRepository,parkingLotRepository,operatorRepository,parkingFloorRepository,parkingSlotRepository); - IssueTicketRequestDTO request = new IssueTicketRequestDTO(); - request.setGateId(1); - request.setOwnerName("Mohit"); - request.setVehicleType(VehicleType.AUTO); - request.setVehicleNumber("DL 1VC 0001"); - request.setParkingLotId(1); + TicketService ticketService = new TicketService(gateRepository,vehicleRepository, + parkingLotRepository,ticketRepository); - ticketController.issueTicket(request); - } -} + TicketController ticketController = new TicketController(ticketService); -// Controllers -// Services -// Repository + IssueTicketRequestDTO issueTicketRequestDTO = new IssueTicketRequestDTO(); + issueTicketRequestDTO.setGateNumber("1A"); + issueTicketRequestDTO.setVehicleNumber("KA 09 567"); + issueTicketRequestDTO.setOwnerName("Radha"); + issueTicketRequestDTO.setVehicleType(AllowedVehicleType.CAR); + issueTicketRequestDTO.setParkingLotId(1); -// C <- S <- R + IssueTicketResponseDTO issueTicketResponseDTO = ticketController.issueTicket(issueTicketRequestDTO); -// Generate the ticket : CRUD : Ticket : TicketController + System.out.println("Ticket Details Below"); + System.out.println("Ticket Id : " + issueTicketResponseDTO.getTicketId()); + System.out.println("Assigned Slot : "+ issueTicketResponseDTO.getParkingSlotNumber()); -// Gathered requirement -// class diagram -// schema design -// code models -// code controller - // DTO -// Issue ticket completion -// HW : Generating the bill , check-out \ No newline at end of file + + } +} diff --git a/src/ParkingLot/DataBase/DataBaseController.java b/src/ParkingLot/DataBase/DataBaseController.java new file mode 100644 index 0000000..b8a0084 --- /dev/null +++ b/src/ParkingLot/DataBase/DataBaseController.java @@ -0,0 +1,89 @@ +package ParkingLot.DataBase; + +import ParkingLot.Repositories.*; +import ParkingLot.models.*; + +import java.util.Arrays; + + +public class DataBaseController { + public static void InitializeDataBaseTransaction(GateRepository gateRepository, ParkingLotRepository parkingLotRepository, + OperatorRepository operatorRepository, + ParkingFloorRepository parkingFloorRepository, + ParkingSlotRepository parkingSlotRepository) { + //Operator + Operator operator1 = new Operator(); + operator1.setName("Rachana"); + operator1.setPhoneNumber(12334); + operatorRepository.save(operator1); + + + Operator operator2= new Operator(); + operator2.setName("Rambo"); + operator2.setPhoneNumber(56789); + operatorRepository.save(operator2); + + //Gate + Gate gate1 = new Gate(); + gate1.setGateNumber("1A"); + gate1.setGateType(GateType.ENTRY_GATE); + gate1.setOperator(operator1); + gate1.setGateStatus(GateStatus.OPEN); + gateRepository.saveGate(gate1); + + Gate gate2 = new Gate(); + gate2.setGateNumber("1B"); + gate2.setGateType(GateType.EXIT_GATE); + gate2.setOperator(operator2); + gate2.setGateStatus(GateStatus.OPEN); + gateRepository.saveGate(gate2); + + + + //ParkingFloor + ParkingFloor parkingFloor = new ParkingFloor(); + parkingFloor.setParkingFloorName("GroundFloor"); + parkingFloor.setAllowedVehicleTypes(Arrays.asList(AllowedVehicleType.CAR,AllowedVehicleType.CAR)); + parkingFloor.setParkingFloorStatus(ParkingFloorStatus.OPEN); + parkingFloor = parkingFloorRepository.Save(parkingFloor); + + VehicleTypeCapacity vehicleTypeCapacity1 = new VehicleTypeCapacity(); + vehicleTypeCapacity1.setVehicleType(AllowedVehicleType.CAR); + vehicleTypeCapacity1.setCapacity(0); + + VehicleTypeCapacity vehicleTypeCapacity2 = new VehicleTypeCapacity(); + vehicleTypeCapacity2.setVehicleType(AllowedVehicleType.AUTO); + vehicleTypeCapacity2.setCapacity(0); + + parkingFloor.setVehicleTypeCapacity(Arrays.asList(vehicleTypeCapacity1, vehicleTypeCapacity2)); + +// ParkingFloorVehicleTypeCapacityRepository. +// LoadData(parkingFloor.getParkingFloorName(), (ArrayList) Arrays.asList(vehicleTypeCapacity1,vehicleTypeCapacity2)); + + + //ParkingSlot + ParkingSlot parkingSlot = new ParkingSlot(); + parkingSlot.setParkingSlotId("GA"); + parkingSlot.setAllowedVehicleType(AllowedVehicleType.CAR); + parkingSlot.setParkingSlotStatus(ParkingSlotStatus.EMPTY); + parkingSlot.setVehicle(null); + parkingSlot.setParkingFloor(parkingFloor); + parkingSlot = parkingSlotRepository.SaveParkingSlot(parkingSlot); + + + //add this slot to the floor + parkingFloor.setParkingSlots(Arrays.asList(parkingSlot)); + + + //ParkingLot + ParkingLot parkingLot = new ParkingLot(); + parkingLot.setLocation("Bangalore"); + parkingLot.setAllowedVehicleTypes(Arrays.asList(AllowedVehicleType.AUTO,AllowedVehicleType.BIKE,AllowedVehicleType.CAR)); + parkingLot.setParkingFloors(Arrays.asList(parkingFloor)); + parkingLot.setEntryGateList(Arrays.asList(gate1,gate2)); + parkingLot.setExitGateList(Arrays.asList(gate2,gate1)); + parkingLot.setParkingSlotAssignmentStrategyType(SlotAssignmentStrategyType.RANDOM); + parkingLotRepository.save(parkingLot); + + } +} diff --git a/src/ParkingLot/Services/TicketService.java b/src/ParkingLot/Services/TicketService.java new file mode 100644 index 0000000..4d7f1b7 --- /dev/null +++ b/src/ParkingLot/Services/TicketService.java @@ -0,0 +1,91 @@ +package ParkingLot.Services; + +import ParkingLot.Repositories.GateRepository; +import ParkingLot.Repositories.ParkingLotRepository; +import ParkingLot.Repositories.TicketRepository; +import ParkingLot.Repositories.VehicleRepository; +import ParkingLot.Strategy.SlotAssignmentFactory; +import ParkingLot.models.*; + +import java.util.Date; +import java.util.Optional; + +public class TicketService { + private GateRepository gateRepository; + private VehicleRepository vehicleRepository; + private ParkingLotRepository parkingLotRepository; + private TicketRepository ticketRepository; + + public TicketService(GateRepository gateRepository, + VehicleRepository vehicleRepository, + ParkingLotRepository parkingLotRepository, + TicketRepository ticketRepository) { + this.gateRepository = gateRepository; + this.vehicleRepository = vehicleRepository; + this.parkingLotRepository = parkingLotRepository; + this.ticketRepository = ticketRepository; + } + + public Ticket issueTicket(String gateNumber, String vehicleNumber, + AllowedVehicleType allowedVehicleType, String ownerName, int parkingLotId) { +// 1.create Ticket +// 2.Assign slot +// 3.return ticket + + Ticket ticket = new Ticket(); + + //Gate + Optional gateOptional = gateRepository.getGateByGateNumber(gateNumber); + Gate gate; + if(gateOptional.isEmpty()) { + throw new IllegalArgumentException("Gate not found"); + } + gate = gateOptional.get(); + ticket.setGate(gate); + ticket.setEntryTime(new Date()); + + //Vehicle + Optional vehicleOptional = vehicleRepository.findVehicleByVehicleNumber(vehicleNumber); + Vehicle vehicle ; + if(vehicleOptional.isEmpty()) { + vehicle = new Vehicle(); + vehicle.setVehicleNumber(vehicleNumber); + vehicle.setOwnerName(ownerName); + vehicle.setVehicleType(allowedVehicleType); + vehicle = vehicleRepository.save(vehicle); + }else{ + vehicle = vehicleOptional.get(); + } + ticket.setVehicle(vehicle); + + //Assign Slot + + Optional parkingLotOptional = parkingLotRepository.getParkingLotByID(parkingLotId); + ParkingLot parkingLot ; + if(parkingLotOptional.isEmpty()) { + throw new IllegalArgumentException("ParkingLot not found"); + } + + parkingLot = parkingLotOptional.get(); + + //find the slot now + ParkingSlot parkingSlot = SlotAssignmentFactory. + getSlotAssignmentStrategy(parkingLot.getParkingSlotAssignmentStrategyType()) + .FindParkingSlot(parkingLot,allowedVehicleType); + if(parkingSlot == null) { + throw new RuntimeException("ParkingSlot not found"); + } + + ticket.setParkingSlot(parkingSlot); + parkingSlot.setParkingSlotStatus(ParkingSlotStatus.FILLED); + parkingSlot.setVehicle(vehicle); + + //update vehicle capacity in floor and lot + ParkingFloor parkingFloor = parkingSlot.getParkingFloor(); + VehicleTypeCapacity vehicleTypeCapacity = new VehicleTypeCapacity(); + + return ticketRepository.save(ticket); + + + } +} diff --git a/src/ParkingLot/strategies/RandomSlotAssignmentStrategy.java b/src/ParkingLot/Strategy/RandomSlotAssignmentStrategy.java similarity index 56% rename from src/ParkingLot/strategies/RandomSlotAssignmentStrategy.java rename to src/ParkingLot/Strategy/RandomSlotAssignmentStrategy.java index c8b2c48..2acc3fc 100644 --- a/src/ParkingLot/strategies/RandomSlotAssignmentStrategy.java +++ b/src/ParkingLot/Strategy/RandomSlotAssignmentStrategy.java @@ -1,18 +1,18 @@ -package ParkingLot.strategies; +package ParkingLot.Strategy; import ParkingLot.models.*; -public class RandomSlotAssignmentStrategy implements SlotAssignmentStrategy { +public class RandomSlotAssignmentStrategy implements SlotAssignmentStrategy{ @Override - public ParkingSlot assignSlot(ParkingLot parkingLot, VehicleType vehicleType) { + public ParkingSlot FindParkingSlot(ParkingLot parkingLot, AllowedVehicleType vehicleType) { for(ParkingFloor parkingFloor : parkingLot.getParkingFloors()){ - for(ParkingSlot parkingSlot : parkingFloor.getParkingSlots()){ - if(parkingSlot.getParkingSlotStatus().equals(ParkingSlotStatus.EMPTY) && parkingSlot.getVehicleType().equals(vehicleType)){ + if(parkingSlot.getAllowedVehicleType().equals(vehicleType) && parkingSlot.getParkingSlotStatus().equals(ParkingSlotStatus.EMPTY)){ return parkingSlot; } } } + return null; } } diff --git a/src/ParkingLot/Strategy/SlotAssignmentFactory.java b/src/ParkingLot/Strategy/SlotAssignmentFactory.java new file mode 100644 index 0000000..50a7781 --- /dev/null +++ b/src/ParkingLot/Strategy/SlotAssignmentFactory.java @@ -0,0 +1,12 @@ +package ParkingLot.Strategy; + +import ParkingLot.models.SlotAssignmentStrategyType; + +public class SlotAssignmentFactory { + public static SlotAssignmentStrategy getSlotAssignmentStrategy(SlotAssignmentStrategyType slotAssignmentStrategyType){ + if(slotAssignmentStrategyType.equals(SlotAssignmentStrategyType.RANDOM)){ + return new RandomSlotAssignmentStrategy(); + } + return null; + } +} diff --git a/src/ParkingLot/Strategy/SlotAssignmentStrategy.java b/src/ParkingLot/Strategy/SlotAssignmentStrategy.java new file mode 100644 index 0000000..f2f5754 --- /dev/null +++ b/src/ParkingLot/Strategy/SlotAssignmentStrategy.java @@ -0,0 +1,9 @@ +package ParkingLot.Strategy; + +import ParkingLot.models.AllowedVehicleType; +import ParkingLot.models.ParkingLot; +import ParkingLot.models.ParkingSlot; + +public interface SlotAssignmentStrategy { + public ParkingSlot FindParkingSlot(ParkingLot parkingLot, AllowedVehicleType vehicleType); +} diff --git a/src/ParkingLot/controllers/TicketController.java b/src/ParkingLot/controllers/TicketController.java index 4e5b8b2..1c6e3f9 100644 --- a/src/ParkingLot/controllers/TicketController.java +++ b/src/ParkingLot/controllers/TicketController.java @@ -1,43 +1,36 @@ -package ParkingLot.controllers; +package ParkingLot.Controllers; +import ParkingLot.Services.TicketService; import ParkingLot.dtos.IssueTicketRequestDTO; import ParkingLot.dtos.IssueTicketResponseDTO; import ParkingLot.dtos.ResponseStatus; -import ParkingLot.models.Gate; -import ParkingLot.models.Operator; import ParkingLot.models.Ticket; -import ParkingLot.models.Vehicle; -import ParkingLot.service.TicketService; + public class TicketController { - private TicketService ticketService; + TicketService ticketService = null; public TicketController(TicketService ticketService) { this.ticketService = ticketService; } - public IssueTicketResponseDTO issueTicket(IssueTicketRequestDTO request){ - IssueTicketResponseDTO response = new IssueTicketResponseDTO(); + public IssueTicketResponseDTO issueTicket(IssueTicketRequestDTO issueTicketRequestDTO) { + IssueTicketResponseDTO issueTicketResponseDTO = new IssueTicketResponseDTO(); try{ - Ticket ticket = ticketService.issueTicket( - request.getGateId(), - request.getVehicleNumber(), - request.getOwnerName(), - request.getVehicleType(), - request.getParkingLotId() - ); - response.setTicketId(ticket.getId()); - response.setParkingSlotNumber(ticket.getParkingSlot().getSlotNumber()); - response.setResponseStatus(ResponseStatus.SUCCESS); - } catch (Exception e){ - response.setResponseStatus(ResponseStatus.FAILURE); + Ticket ticket = ticketService.issueTicket(issueTicketRequestDTO.getGateNumber(), + issueTicketRequestDTO.getVehicleNumber(), + issueTicketRequestDTO.getVehicleType(), + issueTicketRequestDTO.getOwnerName(), + issueTicketRequestDTO.getParkingLotId()); + + issueTicketResponseDTO.setTicketId(ticket.getId()); + issueTicketResponseDTO.setParkingSlotNumber(ticket.getParkingSlot().getParkingSlotId()); + issueTicketResponseDTO.setResponseStatus(ResponseStatus.SUCCESS); } - return response; + catch (RuntimeException e){ + issueTicketResponseDTO.setResponseStatus(ResponseStatus.FAILED); + } + return issueTicketResponseDTO; } } - -// DTO : Data Transfer Object - -// business logic -// service \ No newline at end of file diff --git a/src/ParkingLot/dtos/IssueTicketRequestDTO.java b/src/ParkingLot/dtos/IssueTicketRequestDTO.java index 5812f3f..51fd925 100644 --- a/src/ParkingLot/dtos/IssueTicketRequestDTO.java +++ b/src/ParkingLot/dtos/IssueTicketRequestDTO.java @@ -1,28 +1,21 @@ package ParkingLot.dtos; -import ParkingLot.models.VehicleType; + +import ParkingLot.models.AllowedVehicleType; public class IssueTicketRequestDTO { - private int gateId; + private String gateNumber; private String vehicleNumber; private String ownerName; - private VehicleType vehicleType; + private AllowedVehicleType vehicleType; private int parkingLotId; - public int getParkingLotId() { - return parkingLotId; - } - - public void setParkingLotId(int parkingLotId) { - this.parkingLotId = parkingLotId; - } - - public int getGateId() { - return gateId; + public String getGateNumber() { + return gateNumber; } - public void setGateId(int gateId) { - this.gateId = gateId; + public void setGateNumber(String gateNumber) { + this.gateNumber = gateNumber; } public String getVehicleNumber() { @@ -41,11 +34,19 @@ public void setOwnerName(String ownerName) { this.ownerName = ownerName; } - public VehicleType getVehicleType() { + public AllowedVehicleType getVehicleType() { return vehicleType; } - public void setVehicleType(VehicleType vehicleType) { + public void setVehicleType(AllowedVehicleType vehicleType) { this.vehicleType = vehicleType; } + + public int getParkingLotId() { + return parkingLotId; + } + + public void setParkingLotId(int parkingLotId) { + this.parkingLotId = parkingLotId; + } } diff --git a/src/ParkingLot/dtos/IssueTicketResponseDTO.java b/src/ParkingLot/dtos/IssueTicketResponseDTO.java index 61cbd16..4f61663 100644 --- a/src/ParkingLot/dtos/IssueTicketResponseDTO.java +++ b/src/ParkingLot/dtos/IssueTicketResponseDTO.java @@ -1,32 +1,41 @@ package ParkingLot.dtos; +import ParkingLot.models.Gate; +import ParkingLot.models.ParkingLot; +import ParkingLot.models.ParkingSlot; +import ParkingLot.models.Vehicle; + +import java.util.Date; + public class IssueTicketResponseDTO { - private int ticketId; - private String parkingSlotNumber; - private ResponseStatus responseStatus; - public String getParkingSlotNumber() { - return parkingSlotNumber; - } + private int ticketId; + private String parkingSlotNumber; + private ResponseStatus responseStatus; + + public String getParkingSlotNumber() { + return parkingSlotNumber; + } + + public void setParkingSlotNumber(String parkingSlotNumber) { + this.parkingSlotNumber = parkingSlotNumber; + } - public void setParkingSlotNumber(String parkingSlotNumber) { - this.parkingSlotNumber = parkingSlotNumber; - } + public int getTicketId() { + return ticketId; + } - public ResponseStatus getResponseStatus() { - return responseStatus; - } + public void setTicketId(int ticketId) { + this.ticketId = ticketId; + } - public void setResponseStatus(ResponseStatus responseStatus) { - this.responseStatus = responseStatus; - } + public ResponseStatus getResponseStatus() { + return responseStatus; + } - public int getTicketId() { - return ticketId; - } + public void setResponseStatus(ResponseStatus responseStatus) { + this.responseStatus = responseStatus; + } - public void setTicketId(int ticketId) { - this.ticketId = ticketId; - } } diff --git a/src/ParkingLot/dtos/ResponseStatus.java b/src/ParkingLot/dtos/ResponseStatus.java index 0b8d520..02e00d2 100644 --- a/src/ParkingLot/dtos/ResponseStatus.java +++ b/src/ParkingLot/dtos/ResponseStatus.java @@ -2,5 +2,5 @@ public enum ResponseStatus { SUCCESS, - FAILURE + FAILED } diff --git a/src/ParkingLot/models/AllowedVehicleType.java b/src/ParkingLot/models/AllowedVehicleType.java new file mode 100644 index 0000000..8ef52d6 --- /dev/null +++ b/src/ParkingLot/models/AllowedVehicleType.java @@ -0,0 +1,7 @@ +package ParkingLot.models; + +public enum AllowedVehicleType { + BIKE, + AUTO, + CAR +} diff --git a/src/ParkingLot/models/Bill.java b/src/ParkingLot/models/Bill.java index 95b3a89..1e5b715 100644 --- a/src/ParkingLot/models/Bill.java +++ b/src/ParkingLot/models/Bill.java @@ -1,19 +1,14 @@ package ParkingLot.models; - import java.util.Date; import java.util.List; public class Bill extends BaseModel{ private Date exitTime; + private Gate exitGate; private Ticket ticket; - private int amount; - private Gate gate; - private Operator operator; - private List payment; - // there can be partial payments - // Cash : 20 , UPI : 30 - // AmazonPay : 20 , CC : 50 - + private Payment payment; + private float amount; + private List payments; public Date getExitTime() { return exitTime; @@ -23,48 +18,43 @@ public void setExitTime(Date exitTime) { this.exitTime = exitTime; } - public Ticket getTicket() { - return ticket; + public Gate getExitGate() { + return exitGate; } - public void setTicket(Ticket ticket) { - this.ticket = ticket; + public void setExitGate(Gate exitGate) { + this.exitGate = exitGate; } - public int getAmount() { - return amount; + public Ticket getTicket() { + return ticket; } - public void setAmount(int amount) { - this.amount = amount; + public void setTicket(Ticket ticket) { + this.ticket = ticket; } - public Gate getGate() { - return gate; + public Payment getPayment() { + return payment; } - public void setGate(Gate gate) { - this.gate = gate; + public void setPayment(Payment payment) { + this.payment = payment; } - public Operator getOperator() { - return operator; + public float getAmount() { + return amount; } - public void setOperator(Operator operator) { - this.operator = operator; + public void setAmount(float amount) { + this.amount = amount; } - public List getPayment() { - return payment; + public List getPayments() { + return payments; } - public void setPayment(List payment) { - this.payment = payment; + public void setPayments(List payments) { + this.payments = payments; } } - -// double amount -// 1.0000000001 == 0.99999999 : true -// double float : stores approximations -// 30.45 3045 \ No newline at end of file diff --git a/src/ParkingLot/models/Gate.java b/src/ParkingLot/models/Gate.java index 7b05bd0..2ba5d66 100644 --- a/src/ParkingLot/models/Gate.java +++ b/src/ParkingLot/models/Gate.java @@ -1,9 +1,11 @@ package ParkingLot.models; -public class Gate extends BaseModel{ +import java.util.Spliterator; + +public class Gate extends BaseModel{ private String gateNumber; private GateType gateType; - private Operator currentOperator; + private Operator operator; private GateStatus gateStatus; public String getGateNumber() { @@ -22,12 +24,12 @@ public void setGateType(GateType gateType) { this.gateType = gateType; } - public Operator getCurrentOperator() { - return currentOperator; + public Operator getOperator() { + return operator; } - public void setCurrentOperator(Operator currentOperator) { - this.currentOperator = currentOperator; + public void setOperator(Operator operator) { + this.operator = operator; } public GateStatus getGateStatus() { @@ -37,4 +39,6 @@ public GateStatus getGateStatus() { public void setGateStatus(GateStatus gateStatus) { this.gateStatus = gateStatus; } + + } diff --git a/src/ParkingLot/models/GateStatus.java b/src/ParkingLot/models/GateStatus.java index 104a2b9..34e39c2 100644 --- a/src/ParkingLot/models/GateStatus.java +++ b/src/ParkingLot/models/GateStatus.java @@ -1,6 +1,6 @@ package ParkingLot.models; public enum GateStatus { - OPEN, - CLOSED + CLOSED, + OPEN } diff --git a/src/ParkingLot/models/GateType.java b/src/ParkingLot/models/GateType.java index ec94d1f..3eaf309 100644 --- a/src/ParkingLot/models/GateType.java +++ b/src/ParkingLot/models/GateType.java @@ -1,6 +1,6 @@ package ParkingLot.models; public enum GateType { - ENTRY, - EXIT + ENTRY_GATE, + EXIT_GATE } diff --git a/src/ParkingLot/models/Operator.java b/src/ParkingLot/models/Operator.java index 382f67d..13db319 100644 --- a/src/ParkingLot/models/Operator.java +++ b/src/ParkingLot/models/Operator.java @@ -1,6 +1,22 @@ package ParkingLot.models; -public class Operator extends BaseModel{ - private String Name; - private Gate gate; +public class Operator extends BaseModel{ + private String name; + private long phoneNumber; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(long phoneNumber) { + this.phoneNumber = phoneNumber; + } } diff --git a/src/ParkingLot/models/ParkingFloor.java b/src/ParkingLot/models/ParkingFloor.java index 697ccb9..34df5f3 100644 --- a/src/ParkingLot/models/ParkingFloor.java +++ b/src/ParkingLot/models/ParkingFloor.java @@ -1,20 +1,27 @@ package ParkingLot.models; +import java.util.List; -import java.util.List; -import java.util.Map; - -public class ParkingFloor extends BaseModel { - private String floorName; +public class ParkingFloor extends BaseModel{ + private String parkingFloorName; + private List allowedVehicleTypes; private List parkingSlots; private ParkingFloorStatus parkingFloorStatus; - private List vehicleCapacities; + private List vehicleTypeCapacity; + + public String getParkingFloorName() { + return parkingFloorName; + } + + public void setParkingFloorName(String parkingFloorName) { + this.parkingFloorName = parkingFloorName; + } - public String getFloorName() { - return floorName; + public List getAllowedVehicleTypes() { + return allowedVehicleTypes; } - public void setFloorName(String floorName) { - this.floorName = floorName; + public void setAllowedVehicleTypes(List allowedVehicleTypes) { + this.allowedVehicleTypes = allowedVehicleTypes; } public List getParkingSlots() { @@ -33,11 +40,11 @@ public void setParkingFloorStatus(ParkingFloorStatus parkingFloorStatus) { this.parkingFloorStatus = parkingFloorStatus; } - public List getVehicleCapacities() { - return vehicleCapacities; + public List getVehicleTypeCapacity() { + return vehicleTypeCapacity; } - public void setVehicleCapacities(List vehicleCapacities) { - this.vehicleCapacities = vehicleCapacities; + public void setVehicleTypeCapacity(List vehicleTypeCapacity) { + this.vehicleTypeCapacity = vehicleTypeCapacity; } } diff --git a/src/ParkingLot/models/ParkingFloorStatus.java b/src/ParkingLot/models/ParkingFloorStatus.java index d75bfcf..9b01002 100644 --- a/src/ParkingLot/models/ParkingFloorStatus.java +++ b/src/ParkingLot/models/ParkingFloorStatus.java @@ -3,6 +3,6 @@ public enum ParkingFloorStatus { CLOSED, OPEN, - FULL, - UNDER_MAINTENANCE + UNDER_MAINTENANCE, + FULL } diff --git a/src/ParkingLot/models/ParkingLot.java b/src/ParkingLot/models/ParkingLot.java index 59412e6..99eaa56 100644 --- a/src/ParkingLot/models/ParkingLot.java +++ b/src/ParkingLot/models/ParkingLot.java @@ -1,47 +1,31 @@ package ParkingLot.models; - -import java.util.ArrayList; import java.util.List; -import java.util.Map; +import ParkingLot.Strategy.SlotAssignmentStrategy; + +public class ParkingLot extends BaseModel{ -public class ParkingLot extends BaseModel{ - private String name; + private String location; + private List allowedVehicleTypes; private List parkingFloors; - private List entryGates; - private List exitGates; - // capacity - private List vehicleCapacities; - private ParkingLotStatus parkingLotStatus; - private SlotAssignmentStrategyType slotAssignmentStrategyType; - // you can create a separate class of address -// private String address; - - public ParkingLot(){ - parkingFloors = new ArrayList(); - parkingFloors.add(new ParkingFloor()); - name = "New Parking Lot"; - entryGates = new ArrayList<>(); - entryGates.add(new Gate()); - exitGates = new ArrayList<>(); - vehicleCapacities = new ArrayList<>(); - parkingLotStatus = ParkingLotStatus.OPEN; - slotAssignmentStrategyType = SlotAssignmentStrategyType.RANDOM; - } + private List entryGateList; + private List exitGateList; + private List vehicleTypeCapacities; + private SlotAssignmentStrategyType parkingSlotAssignmentStrategyType; - public SlotAssignmentStrategyType getSlotAssignmentStrategyType() { - return slotAssignmentStrategyType; + public String getLocation() { + return location; } - public void setSlotAssignmentStrategyType(SlotAssignmentStrategyType slotAssignmentStrategyType) { - this.slotAssignmentStrategyType = slotAssignmentStrategyType; + public void setLocation(String location) { + this.location = location; } - public String getName() { - return name; + public List getAllowedVehicleTypes() { + return allowedVehicleTypes; } - public void setName(String name) { - this.name = name; + public void setAllowedVehicleTypes(List allowedVehicleTypes) { + this.allowedVehicleTypes = allowedVehicleTypes; } public List getParkingFloors() { @@ -52,40 +36,35 @@ public void setParkingFloors(List parkingFloors) { this.parkingFloors = parkingFloors; } - public List getEntryGates() { - return entryGates; + public List getEntryGateList() { + return entryGateList; } - public void setEntryGates(List entryGates) { - this.entryGates = entryGates; + public void setEntryGateList(List entryGateList) { + this.entryGateList = entryGateList; } - public List getExitGates() { - return exitGates; + public List getExitGateList() { + return exitGateList; } - public void setExitGates(List exitGates) { - this.exitGates = exitGates; + public void setExitGateList(List exitGateList) { + this.exitGateList = exitGateList; } - public List getVehicleCapacities() { - return vehicleCapacities; + public List getVehicleTypeCapacities() { + return vehicleTypeCapacities; } - public void setVehicleCapacities(List vehicleCapacities) { - this.vehicleCapacities = vehicleCapacities; + public void setVehicleTypeCapacities(List vehicleTypeCapacities) { + this.vehicleTypeCapacities = vehicleTypeCapacities; } - public ParkingLotStatus getParkingLotStatus() { - return parkingLotStatus; + public SlotAssignmentStrategyType getParkingSlotAssignmentStrategyType() { + return parkingSlotAssignmentStrategyType; } - public void setParkingLotStatus(ParkingLotStatus parkingLotStatus) { - this.parkingLotStatus = parkingLotStatus; + public void setParkingSlotAssignmentStrategyType(SlotAssignmentStrategyType parkingSlotAssignmentStrategyType) { + this.parkingSlotAssignmentStrategyType = parkingSlotAssignmentStrategyType; } } - -// all the classes are going to have some common -// id -// created_at -// modified_at \ No newline at end of file diff --git a/src/ParkingLot/models/ParkingLotStatus.java b/src/ParkingLot/models/ParkingLotStatus.java deleted file mode 100644 index 401a034..0000000 --- a/src/ParkingLot/models/ParkingLotStatus.java +++ /dev/null @@ -1,8 +0,0 @@ -package ParkingLot.models; - -public enum ParkingLotStatus { - CLOSED, - OPEN, - FULL, - UNDER_MAINTENANCE -} diff --git a/src/ParkingLot/models/ParkingSlot.java b/src/ParkingLot/models/ParkingSlot.java index 423e6b6..ed5d53a 100644 --- a/src/ParkingLot/models/ParkingSlot.java +++ b/src/ParkingLot/models/ParkingSlot.java @@ -1,25 +1,26 @@ package ParkingLot.models; -public class ParkingSlot extends BaseModel { - private String slotNumber; +public class ParkingSlot extends BaseModel{ + private String parkingSlotId; + private AllowedVehicleType allowedVehicleType; private ParkingSlotStatus parkingSlotStatus; - private VehicleType vehicleType; + private Vehicle Vehicle; private ParkingFloor parkingFloor; - public ParkingFloor getParkingFloor() { - return parkingFloor; + public String getParkingSlotId() { + return parkingSlotId; } - public void setParkingFloor(ParkingFloor parkingFloor) { - this.parkingFloor = parkingFloor; + public void setParkingSlotId(String parkingSlotId) { + this.parkingSlotId = parkingSlotId; } - public String getSlotNumber() { - return slotNumber; + public AllowedVehicleType getAllowedVehicleType() { + return allowedVehicleType; } - public void setSlotNumber(String slotNumber) { - this.slotNumber = slotNumber; + public void setAllowedVehicleType(AllowedVehicleType allowedVehicleType) { + this.allowedVehicleType = allowedVehicleType; } public ParkingSlotStatus getParkingSlotStatus() { @@ -30,11 +31,19 @@ public void setParkingSlotStatus(ParkingSlotStatus parkingSlotStatus) { this.parkingSlotStatus = parkingSlotStatus; } - public VehicleType getVehicleType() { - return vehicleType; + public Vehicle getVehicle() { + return Vehicle; + } + + public void setVehicle(Vehicle vehicle) { + Vehicle = vehicle; } - public void setVehicleType(VehicleType vehicleType) { - this.vehicleType = vehicleType; + public ParkingFloor getParkingFloor() { + return parkingFloor; + } + + public void setParkingFloor(ParkingFloor parkingFloor) { + this.parkingFloor = parkingFloor; } } diff --git a/src/ParkingLot/models/ParkingSlotStatus.java b/src/ParkingLot/models/ParkingSlotStatus.java index bdd7e92..e39162b 100644 --- a/src/ParkingLot/models/ParkingSlotStatus.java +++ b/src/ParkingLot/models/ParkingSlotStatus.java @@ -2,5 +2,6 @@ public enum ParkingSlotStatus { EMPTY, - FILLED + FILLED, + BLOCKED } diff --git a/src/ParkingLot/models/Payment.java b/src/ParkingLot/models/Payment.java index a225e9c..76c14f5 100644 --- a/src/ParkingLot/models/Payment.java +++ b/src/ParkingLot/models/Payment.java @@ -3,49 +3,9 @@ import java.util.Date; public class Payment extends BaseModel{ - private int amount; - private PaymentMode paymentMode; - private String refNumber; + private String referenceNumber; private Date paymentDate; + private PaymentMode paymentMode; private PaymentStatus paymentStatus; - - public int getAmount() { - return amount; - } - - public void setAmount(int amount) { - this.amount = amount; - } - - public PaymentMode getPaymentMode() { - return paymentMode; - } - - public void setPaymentMode(PaymentMode paymentMode) { - this.paymentMode = paymentMode; - } - - public String getRefNumber() { - return refNumber; - } - - public void setRefNumber(String refNumber) { - this.refNumber = refNumber; - } - - public Date getPaymentDate() { - return paymentDate; - } - - public void setPaymentDate(Date paymentDate) { - this.paymentDate = paymentDate; - } - - public PaymentStatus getPaymentStatus() { - return paymentStatus; - } - - public void setPaymentStatus(PaymentStatus paymentStatus) { - this.paymentStatus = paymentStatus; - } + private float amount; } diff --git a/src/ParkingLot/models/PaymentMode.java b/src/ParkingLot/models/PaymentMode.java index 1fbe9bd..ad8ff19 100644 --- a/src/ParkingLot/models/PaymentMode.java +++ b/src/ParkingLot/models/PaymentMode.java @@ -1,8 +1,7 @@ package ParkingLot.models; public enum PaymentMode { - CASH, + UPI, CREDIT_CARD, - DEBIT_CARD, - UPI + CASH } diff --git a/src/ParkingLot/models/PaymentStatus.java b/src/ParkingLot/models/PaymentStatus.java index abe2106..4a15389 100644 --- a/src/ParkingLot/models/PaymentStatus.java +++ b/src/ParkingLot/models/PaymentStatus.java @@ -2,7 +2,7 @@ public enum PaymentStatus { SUCCESS, - PENDING, - CANCELLED, - FAILED + FAILED, + IN_PROGRESS + } diff --git a/src/ParkingLot/models/Ticket.java b/src/ParkingLot/models/Ticket.java index 9e65162..a2a7341 100644 --- a/src/ParkingLot/models/Ticket.java +++ b/src/ParkingLot/models/Ticket.java @@ -1,20 +1,20 @@ package ParkingLot.models; - import java.util.Date; -public class Ticket extends BaseModel{ - private Date entryTime; - private Gate gate; - private Operator operator; +public class Ticket extends BaseModel{ + private Vehicle vehicle; + private Gate gate; private ParkingSlot parkingSlot; + private Date entryTime; - public Date getEntryTime() { - return entryTime; + + public Vehicle getVehicle() { + return vehicle; } - public void setEntryTime(Date entryTime) { - this.entryTime = entryTime; + public void setVehicle(Vehicle vehicle) { + this.vehicle = vehicle; } public Gate getGate() { @@ -25,22 +25,6 @@ public void setGate(Gate gate) { this.gate = gate; } - public Operator getOperator() { - return operator; - } - - public void setOperator(Operator operator) { - this.operator = operator; - } - - public Vehicle getVehicle() { - return vehicle; - } - - public void setVehicle(Vehicle vehicle) { - this.vehicle = vehicle; - } - public ParkingSlot getParkingSlot() { return parkingSlot; } @@ -48,4 +32,12 @@ public ParkingSlot getParkingSlot() { public void setParkingSlot(ParkingSlot parkingSlot) { this.parkingSlot = parkingSlot; } + + public Date getEntryTime() { + return entryTime; + } + + public void setEntryTime(Date entryTime) { + this.entryTime = entryTime; + } } diff --git a/src/ParkingLot/models/Vehicle.java b/src/ParkingLot/models/Vehicle.java index 208eb0f..dcd4fa6 100644 --- a/src/ParkingLot/models/Vehicle.java +++ b/src/ParkingLot/models/Vehicle.java @@ -1,16 +1,17 @@ package ParkingLot.models; -public class Vehicle extends BaseModel{ - private String licensePlate; +public class Vehicle extends BaseModel { + private String vehicleNumber; private String ownerName; - private VehicleType vehicleType; + private AllowedVehicleType vehicleType; - public String getLicensePlate() { - return licensePlate; + + public String getVehicleNumber() { + return vehicleNumber; } - public void setLicensePlate(String licensePlate) { - this.licensePlate = licensePlate; + public void setVehicleNumber(String vehicleNumber) { + this.vehicleNumber = vehicleNumber; } public String getOwnerName() { @@ -21,11 +22,11 @@ public void setOwnerName(String ownerName) { this.ownerName = ownerName; } - public VehicleType getVehicleType() { + public AllowedVehicleType getVehicleType() { return vehicleType; } - public void setVehicleType(VehicleType vehicleType) { + public void setVehicleType(AllowedVehicleType vehicleType) { this.vehicleType = vehicleType; } } diff --git a/src/ParkingLot/models/VehicleType.java b/src/ParkingLot/models/VehicleType.java deleted file mode 100644 index c05cdd7..0000000 --- a/src/ParkingLot/models/VehicleType.java +++ /dev/null @@ -1,11 +0,0 @@ -package ParkingLot.models; - -public enum VehicleType { - CAR, - BIKE, - CYCLE, - SCOOTER, - TRUCK, - AUTO, - BUS -} diff --git a/src/ParkingLot/models/VehicleTypeCapacity.java b/src/ParkingLot/models/VehicleTypeCapacity.java index 3ac40cb..15dc403 100644 --- a/src/ParkingLot/models/VehicleTypeCapacity.java +++ b/src/ParkingLot/models/VehicleTypeCapacity.java @@ -1,14 +1,14 @@ package ParkingLot.models; public class VehicleTypeCapacity { - private VehicleType vehicleType; + private AllowedVehicleType vehicleType; private int capacity; - public VehicleType getVehicleType() { + public AllowedVehicleType getVehicleType() { return vehicleType; } - public void setVehicleType(VehicleType vehicleType) { + public void setVehicleType(AllowedVehicleType vehicleType) { this.vehicleType = vehicleType; } diff --git a/src/ParkingLot/repositories/GateRepository.java b/src/ParkingLot/repositories/GateRepository.java index 5a401cd..c2f803a 100644 --- a/src/ParkingLot/repositories/GateRepository.java +++ b/src/ParkingLot/repositories/GateRepository.java @@ -1,14 +1,24 @@ -package ParkingLot.repositories; +package ParkingLot.Repositories; import ParkingLot.models.Gate; +import java.util.HashMap; import java.util.Optional; public class GateRepository { - public Optional findGateById(int gateId){ + HashMap gates = new HashMap(); + int gateId =0; + + public Optional getGateByGateNumber(String gateNumber){ + if(gates.containsKey(gateNumber)) + return Optional.ofNullable(gates.get(gateNumber)); + return Optional.empty(); } + + public void saveGate(Gate gate){ + gateId+=1; + gate.setId(gateId); + gates.put(gate.getGateNumber(), gate); + } } -// ORM -// 'select * from gate where id = 5'; -// some data => Gate Object \ No newline at end of file diff --git a/src/ParkingLot/repositories/OperatorRepository.java b/src/ParkingLot/repositories/OperatorRepository.java new file mode 100644 index 0000000..a4334e8 --- /dev/null +++ b/src/ParkingLot/repositories/OperatorRepository.java @@ -0,0 +1,24 @@ +package ParkingLot.Repositories; + +import ParkingLot.models.Operator; + +import java.util.HashMap; + +public class OperatorRepository { + HashMap operators = new HashMap(); + int operatorId = 0; + + + public void save(Operator operator) { + operatorId+=1; + operator.setId(operatorId); + operators.put(operator.getName(), operator); + } + + public Operator getOperatorByName(String name) { + if(operators.containsKey(name)) { + return operators.get(name); + } + return null; + } +} diff --git a/src/ParkingLot/repositories/ParkingFloorRepository.java b/src/ParkingLot/repositories/ParkingFloorRepository.java new file mode 100644 index 0000000..c95ae49 --- /dev/null +++ b/src/ParkingLot/repositories/ParkingFloorRepository.java @@ -0,0 +1,17 @@ +package ParkingLot.Repositories; + +import ParkingLot.models.ParkingFloor; + +import java.util.HashMap; + +public class ParkingFloorRepository { + HashMap parkingFloors = new HashMap(); + int parkingFloorID =0; + + public ParkingFloor Save(ParkingFloor parkingFloor) { + parkingFloorID+=1; + parkingFloor.setId(parkingFloorID); + parkingFloors.put(parkingFloor.getParkingFloorName(),parkingFloor); + return parkingFloor; + } +} diff --git a/src/ParkingLot/repositories/ParkingFloorVehicleTypeCapacityRepository.java b/src/ParkingLot/repositories/ParkingFloorVehicleTypeCapacityRepository.java new file mode 100644 index 0000000..65e1008 --- /dev/null +++ b/src/ParkingLot/repositories/ParkingFloorVehicleTypeCapacityRepository.java @@ -0,0 +1,37 @@ +package ParkingLot.Repositories; + +import ParkingLot.models.AllowedVehicleType; +import ParkingLot.models.ParkingFloor; +import ParkingLot.models.VehicleTypeCapacity; + +import java.util.ArrayList; +import java.util.HashMap; + +public class ParkingFloorVehicleTypeCapacityRepository { + HashMap> vehicleTypeCapacities= + new HashMap<>(); + + public void LoadData(String parkingFloorName, ArrayList vehicleTypes) { + for(VehicleTypeCapacity vehicleTypeCapacity : vehicleTypes) { + HashMap hm = new HashMap(); + + } + } + + public int getVehicleTypeCapacity(String parkingFloorId, AllowedVehicleType allowedVehicleType) { + HashMap vehicleTypeCapacity = vehicleTypeCapacities.get(parkingFloorId); + if(vehicleTypeCapacity.containsKey(allowedVehicleType)) { + return vehicleTypeCapacity.get(allowedVehicleType); + } + return 0; + } + + public void Save(String parkingFloorId, AllowedVehicleType allowedVehicleType) { + + HashMap vehicleTypeCapacity = vehicleTypeCapacities.get(parkingFloorId); + vehicleTypeCapacity.put(allowedVehicleType, vehicleTypeCapacity.getOrDefault(allowedVehicleType,0) + 1); + } + + + +} diff --git a/src/ParkingLot/repositories/ParkingLotRepository.java b/src/ParkingLot/repositories/ParkingLotRepository.java index 8c3f378..9e76d3c 100644 --- a/src/ParkingLot/repositories/ParkingLotRepository.java +++ b/src/ParkingLot/repositories/ParkingLotRepository.java @@ -1,42 +1,24 @@ -package ParkingLot.repositories; +package ParkingLot.Repositories; -import ParkingLot.models.Gate; import ParkingLot.models.ParkingLot; -import java.util.ArrayList; -import java.util.Map; +import java.util.HashMap; import java.util.Optional; -import java.util.TreeMap; public class ParkingLotRepository { - private Map parkingLots = new TreeMap<>(); + HashMap parkingLots = new HashMap<>(); + int parkingLotId=0; - public ParkingLotRepository() { - ParkingLot parkingLot = new ParkingLot(); - parkingLot.setId(1); - parkingLots.put(parkingLot.getId(), parkingLot); - } - - ParkingLot findParkingLotByGate(Gate gate){ - for(ParkingLot parkingLot : parkingLots.values()){ - for(Gate gate1 : parkingLot.getEntryGates()){ - if(gate1.getId() == gate.getId()){ - return parkingLot; - } - } + public Optional getParkingLotByID(int id) { + if(parkingLots.containsKey(id)) { + return Optional.ofNullable(parkingLots.get(id)); } - return null; + return Optional.empty(); } - public Optional findParkingLotById(int parkingLotId){ - if(parkingLots.containsKey(parkingLotId)){ - return Optional.of(parkingLots.get(parkingLotId)); - } - return Optional.empty(); + public void save(ParkingLot parkingLot) { + parkingLotId+=1; + parkingLot.setId(parkingLotId); + parkingLots.put(parkingLotId, parkingLot); } } - -// Gate , Vehicle -// slot : vehicleType , availableSlots : Floors : ParkingLot - -// you can design API better \ No newline at end of file diff --git a/src/ParkingLot/repositories/ParkingSlotRepository.java b/src/ParkingLot/repositories/ParkingSlotRepository.java new file mode 100644 index 0000000..4e6f22c --- /dev/null +++ b/src/ParkingLot/repositories/ParkingSlotRepository.java @@ -0,0 +1,17 @@ +package ParkingLot.Repositories; + +import ParkingLot.models.ParkingSlot; + +import java.util.HashMap; + +public class ParkingSlotRepository { + HashMap parkingSlots = new HashMap(); + public int parkingSlotId=0; + + public ParkingSlot SaveParkingSlot(ParkingSlot parkingSlot){ + parkingSlotId++; + parkingSlot.setId(parkingSlotId); + parkingSlots.put(parkingSlot.getParkingSlotId(), parkingSlot); + return parkingSlot; + } +} diff --git a/src/ParkingLot/repositories/TicketRepository.java b/src/ParkingLot/repositories/TicketRepository.java index f4fdbf1..b9f27a1 100644 --- a/src/ParkingLot/repositories/TicketRepository.java +++ b/src/ParkingLot/repositories/TicketRepository.java @@ -1,20 +1,17 @@ -package ParkingLot.repositories; +package ParkingLot.Repositories; import ParkingLot.models.Ticket; -import java.util.Map; -import java.util.TreeMap; +import java.util.HashMap; public class TicketRepository { - private static Map tickets = new TreeMap<>(); - private static int previousId = 0; - public Ticket save(Ticket ticket){ - // the diff both the objects are the id - previousId += 1; - ticket.setId(previousId); - tickets.put(ticket.getId(), ticket); - return ticket; - } - + HashMap tickets = new HashMap<>(); + int ticketID = 0; + public Ticket save(Ticket ticket) { + ticketID+=1; + ticket.setId(ticketID); + tickets.put(ticketID, ticket); + return ticket; + } } diff --git a/src/ParkingLot/repositories/VehicleRepository.java b/src/ParkingLot/repositories/VehicleRepository.java index 66090bc..3c36be4 100644 --- a/src/ParkingLot/repositories/VehicleRepository.java +++ b/src/ParkingLot/repositories/VehicleRepository.java @@ -1,17 +1,26 @@ -package ParkingLot.repositories; +package ParkingLot.Repositories; import ParkingLot.models.Vehicle; +import java.util.HashMap; import java.util.Optional; public class VehicleRepository { - public Optional findVehicleByVehicleNumber(String vehicleNumber){ + HashMap vehicles = new HashMap<>(); + public static int vehicleID=0; + + public Optional findVehicleByVehicleNumber(String vehicleNumber) { + if(vehicles.containsKey(vehicleNumber)) { + return Optional.ofNullable(vehicles.get(vehicleNumber)); + } return Optional.empty(); } + public Vehicle save(Vehicle vehicle){ - // save this to db - vehicle.setId(1); + vehicleID+=1; + vehicle.setId(vehicleID); + vehicles.put(vehicle.getVehicleNumber(), vehicle); return vehicle; } } diff --git a/src/ParkingLot/service/TicketService.java b/src/ParkingLot/service/TicketService.java deleted file mode 100644 index 54b5a22..0000000 --- a/src/ParkingLot/service/TicketService.java +++ /dev/null @@ -1,80 +0,0 @@ -package ParkingLot.service; - -import ExceptionHandling.D; -import ParkingLot.models.*; -import ParkingLot.repositories.GateRepository; -import ParkingLot.repositories.ParkingLotRepository; -import ParkingLot.repositories.TicketRepository; -import ParkingLot.repositories.VehicleRepository; -import ParkingLot.strategies.SlotAssignmentStrategyFactory; - -import java.util.Date; -import java.util.Optional; - -public class TicketService { - private GateRepository gateRepository; - private VehicleRepository vehicleRepository; - private ParkingLotRepository parkingLotRepository; - private TicketRepository ticketRepository; - - public TicketService( - GateRepository gateRepository, - VehicleRepository vehicleRepository, - ParkingLotRepository parkingLotRepository, - TicketRepository ticketRepository - ){ - this.gateRepository = gateRepository; - this.vehicleRepository = vehicleRepository; - this.parkingLotRepository = parkingLotRepository; - this.ticketRepository = ticketRepository; - } - public Ticket issueTicket( - int gateId, - String vehicleNumber, - String ownerName, - VehicleType vehicleType, - int parkingLotId - ){ - // 1. create the ticket obj - Ticket ticket = new Ticket(); - ticket.setEntryTime(new Date()); - - Optional gateOptional = gateRepository.findGateById(gateId); - if(gateOptional.isEmpty()){ - throw new RuntimeException("Gate not found"); - } - Gate gate = gateOptional.get(); - ticket.setGate(gate); - ticket.setOperator(gate.getCurrentOperator()); - - Optional vehicleOptional = vehicleRepository.findVehicleByVehicleNumber(vehicleNumber); - Vehicle vehicle; - if(vehicleOptional.isEmpty()){ - vehicle = new Vehicle(); - vehicle.setVehicleType(vehicleType); - vehicle.setOwnerName(ownerName); - vehicle.setLicensePlate(vehicleNumber); - vehicle = vehicleRepository.save(vehicle); - } else { - vehicle = vehicleOptional.get(); - } - ticket.setVehicle(vehicle); - // 2. Assignment of Slot - Optional parkingLotOptional = parkingLotRepository.findParkingLotById(parkingLotId); - if(parkingLotOptional.isEmpty()){ - throw new RuntimeException("Parking Lot not found"); - } - ParkingLot parkingLot = parkingLotOptional.get(); - // Multiple different ways : Random , nearest , farthest. - // 3. Return - ParkingSlot parkingSlot = - SlotAssignmentStrategyFactory - .getSlotAssignmentStrategyByType(parkingLot.getSlotAssignmentStrategyType()) - .assignSlot(parkingLot , vehicleType); - - ticket.setParkingSlot(parkingSlot); - // update the capacity if required - parkingSlot.setParkingSlotStatus(ParkingSlotStatus.FILLED); - return ticketRepository.save(ticket); - } -} diff --git a/src/ParkingLot/strategies/SlotAssignmentStrategy.java b/src/ParkingLot/strategies/SlotAssignmentStrategy.java deleted file mode 100644 index 2a5632e..0000000 --- a/src/ParkingLot/strategies/SlotAssignmentStrategy.java +++ /dev/null @@ -1,14 +0,0 @@ -package ParkingLot.strategies; - -import ParkingLot.models.ParkingLot; -import ParkingLot.models.ParkingSlot; -import ParkingLot.models.Vehicle; -import ParkingLot.models.VehicleType; - -public interface SlotAssignmentStrategy { - public ParkingSlot assignSlot(ParkingLot parkingLot , VehicleType vehicleType); -} -// using the Gate , can you get the Parking Lot -// - -// schema : gate has parking_lot_id \ No newline at end of file diff --git a/src/ParkingLot/strategies/SlotAssignmentStrategyFactory.java b/src/ParkingLot/strategies/SlotAssignmentStrategyFactory.java deleted file mode 100644 index 9f84d4e..0000000 --- a/src/ParkingLot/strategies/SlotAssignmentStrategyFactory.java +++ /dev/null @@ -1,12 +0,0 @@ -package ParkingLot.strategies; - -import ParkingLot.models.SlotAssignmentStrategyType; - -public class SlotAssignmentStrategyFactory { - public static SlotAssignmentStrategy getSlotAssignmentStrategyByType(SlotAssignmentStrategyType slotAssignmentStrategyType){ - if(slotAssignmentStrategyType.equals(SlotAssignmentStrategyType.RANDOM)){ - return new RandomSlotAssignmentStrategy(); - } - return null; - } -} From 42f71b9a8a2dc79191a0af362c4b50f8507b5085 Mon Sep 17 00:00:00 2001 From: RadhaChanaspur Date: Fri, 26 Jul 2024 19:49:11 +0530 Subject: [PATCH 2/2] check in comment --- src/ParkingLot/models/AllowedVehicleType.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ParkingLot/models/AllowedVehicleType.java b/src/ParkingLot/models/AllowedVehicleType.java index 8ef52d6..c0b3837 100644 --- a/src/ParkingLot/models/AllowedVehicleType.java +++ b/src/ParkingLot/models/AllowedVehicleType.java @@ -3,5 +3,6 @@ public enum AllowedVehicleType { BIKE, AUTO, - CAR + CAR, + CYCLE }