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
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