Skip to content

Whitecki/Jakub_Bialecki_Java_Krakow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Opis

Projekt Basket Splitter rozdziela listę produktów między dostawców, bazując na problemie pokrycia zbioru (Set Cover Problem), będącym wyzwaniem NP-trudnym. W klasie SplittingAlgorithm, algorytm generuje kombinacje dostawców, starając się maksymalizować ilość produktów dostarczanych przez każdego z nich. DeliveryCapabilityChecker ocenia, które kombinacje mogą dostarczyć wszystkie produkty, a SupplierProductAssigner finalizuje przydział produktów.

Struktura Projektu: Basket Splitter

Klasy Główne:
BasketSplitter: Klasa główna odpowiedzialna za dzielenie listy przedmiotów na grupy według dostawców zgodnie z załadowaną konfiguracją.

Klasy Pomocnicze:
ProductSupplierLoader: Wczytuje konfigurację z pliku JSON, mapując produkty na ich dostawców..

Klasy Algorytmiczne:
DeliveryCapabilityChecker: Analizuje i określa najbardziej zdolnego dostawcę do dostarczenia wszystkich przedmiotów, SplittingAlgorithm: Zawiera algorytm do znajdowania optymalnego przydziału dostawców dla danego zestawu przedmiotów., SupplierProductAssigner:Przydziela produkty dostawcom z preferencją dla konkretnego dostawcy.

Klasa Rekordu:
Product, Supplier, SupplierDeliveryInfo (wewnątrz DeliveryCapabilityChecker).

Wyjątek:
ItemNotFoundException.

Jak Korzystać

Budowanie z Gradle
W terminalu projektu uruchom:

./gradlew build

To skompiluje kod i utworzy plik JAR.

Tworzenie Fat-JAR
Dodaj plugin ShadowJar w build.gradle i wykonaj:

./gradlew shadowJar

Znajdziesz fat-JAR w build/libs.

Dodanie jako Zależność
Umieść fat-JAR w folderze libs Twojego projektu i dodaj w build.gradle:

dependencies {
    implementation files('libs/BasketSplitter-1.0-SNAPSHOT-all.jar')
}

Testy

  • testOptimalCourierSelection: Testuje, czy klasa BasketSplitter prawidłowo wybiera najbardziej optymalnego dostawcę dla podanej listy produktów, weryfikując, czy rozmiar największego koszyka wynosi 2.
  • testIllegalArgumentExceptionForEmptyItemList: Sprawdza, czy metoda split klasy BasketSplitter rzuca wyjątek IllegalArgumentException, gdy przekazana jest pusta lista przedmiotów.
  • testCourierCapacityEvaluation: Weryfikuje, czy algorytm klasy BasketSplitter prawidłowo ocenia pojemność kurierów.
  • testItemNotFoundExceptionForMissingItems: Sprawdza, czy klasa BasketSplitter zgłasza wyjątek ItemNotFoundException dla przedmiotów, które nie są obecne w mapie produktów do dostawców.
  • testReadJsonFile (w ProductSupplierLoaderTest): Testuje czy metoda readJsonFile klasy ProductSupplierLoader poprawnie odczytuje dane JSON.

Obsługa Wyjątków

  • ProductSupplierLoader: Rzuca RuntimeException, gdy nie znajdzie pliku konfiguracyjnego lub wystąpią inne błędy odczytu pliku.
  • Konstruktor BasketSplitter: Rzuca IllegalStateException, jeśli wystąpi problem z załadowaniem konfiguracji przez ProductSupplierLoader.
  • Metoda Split w BasketSplitter: Rzuca IllegalArgumentException, gdy lista przedmiotów jest pusta lub null oraz RuntimeException i ItemNotFoundExceptionw przypadku ogólnych błędów przetwarzania lub braku przedmiotu w konfiguracji.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages