Raport końcowy

1. Implementacja bazy danych

Baza danych jaka została wykorzystana w naszym projekcie to sqlite3. Wybór padł na taką technologię ponieważ uznaliśmy, że najlepiej nadaje się do aplikacji stand-alone, gdzie użytkownik nie będzie musiał się matwić o konfigurację bardziej złożonej bazy jak np. postgreSql. Dostępem do bazy zajmuje się klasa Db działająca jako gateway. Posiada ona metody umożliwiające odczyt/zapis/aktualizację wszystkich danych w bazie. Jest również odpowiedzialna za utworzenie bazy jeśli jeszcze nie istnieje.

Przykładowy kod odpowiedzialny za tworzenie bazy:

public void create() {
        try {
            connect();
            stat = conn.createStatement();
            conn.setAutoCommit(false);
            stat.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS bases (   "
                    + "    base_name VARCHAR(30) PRIMARY KEY,              "
                    + "    type INTEGER NOT NULL,                  "
                    + "    created DATE NOT NULL,              "
                    + "    notify_type VARCHAR(6) NOT NULL,   "
                    + "    frequency INTEGER NOT NULL                  "
                    + ");                                              ");
            stat.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS channels (          "
                    + "    channelid INTEGER PRIMARY KEY,                      "
                    + "    uri VARCHAR(200) NOT NULL,                  "
                    + "    title VARCHAR(100),                         "
                    + "    last_modified DATE,                         "
                    + "    base_name VARCHAR(30) NOT NULL       "
                    + "            REFERENCES bases         "
                    + ");                                              ");
            stat.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS keywords (     "
                    + "    keywordid INTEGER PRIMARY KEY,                      "
                    + "    word VARCHAR(100) NOT NULL,                "
                    + "    base_name VARCHAR(30) NOT NULL       "
                    + "            REFERENCES bases         "
                    + ");                                              ");
            stat.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS entries (          "
                    + "        entryid INTEGER PRIMARY KEY,                  "
                    + "        title VARCHAR(40) NOT NULL,             "
                    + "        uri VARCHAR(200) NOT NULL,              "
                    + "        description TEXT NOT NULL,                    "
                    + "        created DATE,                   "
                    + "        reported INTEGER NOT NULL,           "
                    + "        channelid INTEGER NOT NULL                  "
                    + "                REFERENCES channel            "
                    + ");                                              ");
            stat.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS user (               "
                    + "        notifyMail VARCHAR(50),                 "
                    + "        notifyPhone VARCHAR(20),                "
                    + "        gmailLogin VARCHAR(30),                 "
                    + "        gmailPassword VARCHAR(50)                   "
                    + ");                                              ");
            conn.commit();
            conn.setAutoCommit(true);
        } catch (SQLException e) {
            System.err.println("Database creating error: " + e);
        } finally {
            try {
                conn.close();
            } catch (SQLException ignore) {
            }
        }
    }



2. Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych

Edycja i obsługa danych w RSSHunter odbywa się poprzez okna dialogowe.

Okno tworzenia nowej bazy



Okno parametrów bazy

a) Ustawień kanałów


b) Ustawień słów kluczowych


c) Ustawień powiadomień



Okno ustawień użytkownika



3. Zdefiniowanie dokumentów do przetwarzania i prezentacji danych

Za prezentację danych odpowiedzialne jest główne okno serwisu. Umożliwia ono przeglądanie zakwalifikowanych do bazy wpisów RSS. Zawiera listę baz ( a ), listę wpisów każdej z nich ( b ) oraz okno podglądowe ( c ).

Okno główne



4. Zdefiniowanie panelu sterowania aplikacji

Sterowanie aplikacją RSSHunter odbywa się poprzez okna dialogowe oraz główne okno, przedstawione w poprzednich punktach.

5. Zdefiniowanie makropoleceń dla realizacji typowych operacji

Realizacja operacji na bazie danych zawiera się w klasie DB opartej o JDBC. Zawiera ona podstawowe operacje odczytu/zapisu/dostępu do bazy danych. Operacje wykonywane w interfejsie użytkownika realizowane są wykorzystując Swinga, tzn. zdefiniowane w actionListenerach przypisanych do komponentów kontrolnych.

6. Uruchamianie i testowanie aplikacji

Aplikacja uruchamiana jest poprzez odpalenie odpowiedniego pliku jar. Jej testowanie odbywało się ręcznie przez cały czas implementacji.

7. Wprowadzanie danych

Dane użytkownika oraz parametry programu wprowadzane są ręcznie w oknach dialogowych. W taki sposób również odbywa się tworzenie baz przeszukiwań. Dane zawarte w każdej z baz pobierane są automatycznie z kanałów rss (lub zawartości danej strony internetowej). Bazy aktualizowane są cyklicznie, użytkownik decyduje o tym, jak często ma się to odbywać.

8. Wdrażanie systemu do użytkowania

System jest na tyle niewielką aplikacją, że może zostać wdrożony jako samodzielny program, gotowy do pobrania, z czasowymi poprawami istotniejszych błędów i wypuszczaniem kolejnych wersji.

9. Przeprowadzenie szkolenia użytkowników

Program ma na tyle prostą i intuicyjną obsługę, że nie wymaga szkoleń. W razie ewentualnych problemów można przejrzeć dokumentację, lub skontaktować się z developerami.

10. Zapewnienie dokumentacji technicznej i użytkowej

Dokumentacja RssHuntera wygląda następująco.

11. Zapewnienie obsługiwania systemu po wdrożeniu

System jest samodzielną aplikacją i nie wymaga dodatkowej obsługi po wdrożeniu. Kolejne wrożenia będą realizowane poprzez wypuszczenie kolejnej wersji.

12. Rozwijanie i modyfikowanie aplikacji

Aplikacja może być rozwijana i modyfikowana poprzez poprawianie błędów zgłaszanych przez użytkowników (np. przez Bugzillę lub Jirę).

13. Opracowanie doświadczeń wynikających z realizacji projektu

Realizacja projektu z pewnością wzbogaciła nas o nowe doświadczenia. Przede wszystkim mogliśmy zauważyć użyteczność stosowania wzorców projektowych, o których równolegle uczyliśmy się na innym przedmiocie. Niestety użyteczność tą doceniliśmy na podstawie popełnionych błędów. Najważniejsze z nich to:

  • Jedna klasa do obsługi bazy. Nie przewidzieliśmy tego, że z czasem, klasa ta bardzo się rozrośnie, stając się nieczytelną.
  • Brak wydzielenia warstwy abstrakcji – został szczególnie odczuty, gdy postanowiliśmy dodać do programu dodatkową możliwość badania czy strona html nie zmieniła się.



14. Wykaz literatury, załączniki

Strony i książki które pomogły nam przy realizacji projektu to:

http://www.zentus.com/sqlitejdbc/

http://www.sqlite.org/docs.html

http://docs.oracle.com/javase/

Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra - Head First Design Patterns

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Design Patterns: Elements of Reusable Object-Oriented Software

pl/dydaktyka/ztb/2012/projekty/rss/koncowy.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0