Pod koniec kwietnia powitaliśmy NetBeans w wersji 6.1. Zawierał on niezliczoną liczbę poprawek i udogodnień, jeszcze nie zdążyliśmy ochłonąć, a już za kilka dni pojawi się najnowsza wersja największego „konkurenta” czyli Eclipse o nazwie kodowej Ganymede.
Najlepiej poznawać nowe możliwości pisząc jakiś przykładowy program. Niech będzie to aplikacja która będzie przeliczać waluty na podstawie danych z wyszukiwarki Google.
Przygotowanie
Z racji, że lubię swoje projekty trzymać w repozytorium (SVN) muszę zainstalować najpierw wtyczkę SVN (niestety nadal nie jest ona w podstawowym pakiecie, mamy natomiast CVS-a) i tu pierwszy szok. Całkowicie przepisany system aktualizacji oraz instalacji pluginów.
Teraz zamiast conajmniej dziwnego kreatora mamy przejrzyste okienko z listą zainstalowanych pluginów oraz zakładke pozwalającą zainstalować nowe.
Wtyczka obsługująca SVN nazywa się Subversiv a opis jej instalacji można znaleźć w moim poprzednim wpisie. Przy okazji dodam, że znalazłem mały bug w wersji linuxowej, podczas instalacji pluginów w oknie z podsumowaniem nie pojawiła mi się lista dodatków do zainstalowania, dopiero w następnym oknie (z licencją) mogłem podejrzeć co instaluję.
Tworzymy nowy projekt
Pora na utworzenie nowego projektu , tutaj raczej nic się nie zmieniło, standardowe okiengo z możliwością nadania nazwy, wersji Javy, a także dodaniem bibliotek zewnętrznych. Dodawanie klas do już istniejącego projektu również nie uległo zmianie.
Czas przystąpić do do dzieła
Naszego projektu dodajemy klasę odpowiedzialną za konwersje walut (nazywać się będzie CurrencyChecker).
Nasza klasa wymaga kilku pól i klas. Jej podstawowa forma wygląda tak:
public class CurrencyChecker { private final String googleQuery = "/search?q={QUERY}&ie=utf-8&oe=utf-8&aq=t"; private String baseCurrency; private String toCurrency; private float amount = 0.0f; private float value = 0.0f; private float result = 0.0f; public CurrencyChecker(String from, String to, float amount) { this.baseCurrency = from; this.toCurrency = to; this.amount = amount; } }
Mamy pola: baseCurrency które mówi nam z jakiej waluty będziemy konwerterować, toCurrency do jakiej waluty, wartość typu float amount która mówi nam jaką sume chcemy przekonwerterować. mamy jeszcze pole value które przechowuje jednostkową wartość waluty docelowej, a pole result wynik konwersji.Wydawać by się mogło, że to dość nadmiarowa liczba pól, ale warto je stworzyć na niedaleką przyszłość gdzie będziemy przechowywać wynik/wyniki ostatniej/ostatnich konwersji.Do konwerterowania walut użyjemy poczciwej wyszukiwarki Google-a. Będziemy ją pytać o wartość jednostkową, a potem przeliczać podaną przez nas liczbę.Pobranie wartości jednostkowej odbywa się w metodzie getBaseValue() i wygląda następująco:
private float getBaseValue() throws Exception{ URL u = null; URLConnection uc = null; float value = 0.0f; StringBuffer sb = new StringBuffer(); try{ String query = googleQuery.replace("{QUERY}", "1%20"+this.baseCurrency+"%20IN%20"+this.toCurrency); u = new URL("http","www.google.pl",query); uc = u.openConnection(); uc.setRequestProperty("User-Agent","Firefox/3.0"); BufferedReader bf = new BufferedReader(new InputStreamReader(uc.getInputStream())); String line; while((line = bf.readLine())!=null){ sb.append(line); } }catch (IOException e) { throw new Exception(e.getMessage()); } Scanner sc = new Scanner(sb.toString()); if((sc.findInLine("calc_img.gif")!=null) && (sc.findInLine("= |DecimalNumeral")!=null)){ value = Float.valueOf(sc.next()); }else{ throw new Exception("No data from google"); } return value; }
Po krótce można powiedzieć, że metoda pobiera stronę która jest wynikiem wyszukiwania frazy:
1 podstawowaWaluta IN walutaDocelowa (np „1 PLN IN EUR – złotówka w euro).
Nastepnie sprawdzamy czy wyniki wyszukiwania zawierają wynik kalkulatora (a dokładniej jego ikonę która świadczy o jego istnieniu w wynikach) oraz pobiera wynik który rzutuje na wartość float. Ta zwracana jest i na jej podstawie obliczany jest wynik.
Końcowe obliczenia dokonywane są w metodzie convert() która wygląda jak poniżej:
public float convert(){ try{ this.value = this.getBaseValue(); this.result = this.amount * this.value; }catch(Exception e){ System.out.println("Currency cannot be converted.n"+e.getMessage()); } return this.result; }
Prosta metoda nie potrzebująca komentarza. Pozwala przekonwerterować zadaną przez nas wartość z waluty bazowej do waluty docelowej.
Podsumowanie
Pomimo, że Ganymede nie wprowadza wielu nowości (przynajmniej dla programisty JSE), widać, że kierują się w dobrymkierunku czyli ułatwić i umilić pracę programiście.
Można zauważyć wzrost wydajności aplikacji, uruchamia się ona znacznie szybciej a również odpowiada naakcje użytkownika bez jakichkolwiek zająknięć. Pomimo, że nie jest to jeszcze wersja finalna działa całkiem stabilnie (poza kilkoma niewielkimi problemami).
Moim zdaniem największą bolączką Eclipse-a są zbyt rozbudowane opcje, i początkowa mała intuicyjność. Jeśli ktoś się pierwszy raz spotyka z Eclipsem trudno jest mu znaleźć opcje których szuka (a one przecież są ;))
W sobotę w Krakowie odbywa się Eclipse DemoCamp więc na pewno dowiem się coś więcej o nowościach w eclipse.

