Kosárra dobás játék

Ebben a programban egy egyetemnek szánt, leegyszerűsített közösségi alkalmazás alapjait fogjuk megvalósítani. Ez abban fog kimerülni, hogy létrehozunk egy rendszert felhasználók tárolására, illetve felhasználók közötti kapcsolatok ábrázolására.

Általános információk

A részfeladatok megoldása során ügyeljünk arra, hogy a megadottakon kívül egyetlen osztály se tartalmazzon más publikus metódust vagy adattagot, illetve egyik csomag se tartalmazzon más osztályokat! Ha az implementáció megköveteli, akkor az osztályok rejtett adattagokkal és metódusokkal szabadon bõvíthetõk. A megoldást egyetlen .zip állományként kell feltölteni, amely tartalmazza a csomagnak megfelelõ könyvtárszerkezetben az összes forráskódot. A fordítás során keletkezõ .class állományokat viszont már nem szabad mellékelni! A fordításhoz legalább a Java Standard Edition 8 használata kötelezõ.

A feladat megoldása során be kell tartani a kódolási konvenciókat.
A kódolási konvenciók közül külön kiemelendõ, hogy ha valamilyen feladat vagy ellenõrzés elvégzésére valamelyik osztály már tartalmaz megfelelõ metódust, akkor azt kell használni, nem pedig újra leprogramozni (vagy átmásolni) az adott részt. (Bizonyos helyeken ezt a feladat külön ki is emeli, de erre külön figyelmeztetés nélkül is ügyelni kell.)

A feladathoz tartozik egy letölthetõ segédlet, ahol találunk minta bemeneti fájlokat és egy azokhoz tartozó kimeneti fájlt.

Kivételek

NodeNotFoundException

Hozzunk létre NodeNotFoundException nevű osztályt elte.hu.eltecom.graph.exceptions csomagban. Ez legyen egy ellenőrzött kivétel, melynek egy konstruktora van, mely egy egész számot vár (int), ami egy felhasználó azonosítót jelöl. Az ősosztály konstruktorának adja át az alábbi üzenetet:

Node with id: [felhasználó_azonosító] is not found!

UnsupportedGraphOperation

Hozzunk létre UnsupportedGraphOperation nevű osztályt elte.hu.eltecom.graph.exceptions csomagban. Ez legyen egy nem ellenőrzött kivétel, melynek egy konstruktora van, mely egy üzenetet vár egy String változóban. Az ősosztály konstruktorának adja át a kapott üzenetet.

Gráfok

A felhasználók közötti kapcsolatokat gráfokban fogjuk tárolni. Egy gráfot egy interfészen keresztül fogunk használni, de adunk két implementációt is. A gráfok felhasználókat reprezentáló objektumokat fognak tárolni (User osztály), ezekről részletesen majd később. A gráfok irányított gráfok lesznek. A felhasználók közötti ismerettségeknek nem kell feltétlen kölcsönösnek lennie, megengedjük, hogy A ismerősnek jelölje B-t anélkül is, hogy ez B-re is igaz lenne.

Graph

Hozzuk létre a Graph nevű interfészt a elte.hu.eltecom.graph csomagban. Ennek az interfésznek a következő metódusai legyenek:

PrintableGraph

Hozzuk létre a PrintableGraph nevű interfészt a elte.hu.eltecom.graph csomagban. Ez származzon a Graph interfészből. Egy metódussa legyen:

Node

Hozzuk létre a Node nevű osztályt a elte.hu.eltecom.graph csomagban. Ez egy csúcspontot fog reprezentálni a gráfunkban, mely a csúcs értékét és szomszédait tárolja.

UnlimitedGraph

Hozzuk létre a UnlimitedGraph nevű osztályt a elte.hu.eltecom.graph csomagban. Ez az osztály megvalósítja a Graph interfészt. Egy irányított gráfot valósít meg láncolt ábrázolással.

Implementálja a Graph intefész metódusait, ezek során használja a findNode metódust ahol csak lehet / érdemes.

LimitedGraph

Hozzuk létre a LimitedGraph nevű osztályt a elte.hu.eltecom.graph csomagban. Ez az osztály megvalósítja a PrintableGraph interfészt. Egy irányított gráfot valósít meg mátrixos ábrázolással.

Implementálja a PrintableGraph intefész metódusait, ezek során használja a findNode metódust ahol csak lehet / érdemes.

[felhasználó_1_szöveges_reprezentációja]
...
[felhasználó_n_szöveges_reprezentációja]
[csúcspont_1_szomszédainak_értékei]
...
[csúcspont_n_szomszédainak_értékei]

például: HUN A HUN B false true true false

GraphFactory

Hozzuk létre a GraphFactory nevű osztályt a elte.hu.eltecom.graph csomagban.

Felhasználó

Language

Hozzon létre egy Language felsorolási típust a elte.hu.eltecom.user csomagban, melynek három értéke van: HUN, ENG, GER

User

Hozzon létre egy User osztályt a elte.hu.eltecom.user csomagban.

AdminUser

Hozzon létre egy AdminUser osztályt a elte.hu.eltecom.user csomagban. Származzon a User osztályból.

Műveletek

Manager

Hozzon létre egy Manager osztályt a elte.hu.eltecom csomagban. Ezen az osztályon keresztül fogjuk kezelni a gráfot.

FileManager

Hozzon létre egy FileManager osztályt a elte.hu.eltecom.file csomagban. Ez az osztály felel a gráf beolvasásáért illetve fájlba írásáért.

Main

Hozza létre a Main osztályt a elte.hu.eltecom csomagban. Ennek legyen egy main metódusa, ez lesz a program belépési pontja. Parancssori argumentunként adjuk át a mappa elérési útvonalát, mely tartalmazza a bemenő fájlt. Ha nem adták át, akkor térjen vissza a program. Olvassa be a fájlt. A létrejött Manager objektumon keresztül kérje le a felhasználót 3-as id-val. Ha ez a felhasználó admin, akkor a manageren kickUser metódus segítségével rakja ki a rendszerből az 1 és 2 azonosítóval rendelkező felhasználókat. Hozzon létre egy Grabowski nevű felhasználót magyar nyelvvel. Ő jelölje be az admin felhasználót ismerősének. Írjak ki fájlba az gráfot ugyanabba a mappába.