GWT + Google Maps API

Bez kategorii Komentarze (0) »

Od dawna miałem napisać już o połączeniu GWT z Google Maps API ale jakoś nigdy nie było czasu ani chęci. Ostatnio kolega miał parę pytań co do Google Maps no i tak mi się jakoś przypomniało o tym temacie : ) Na początek zrobimy najprościej jak się da po prostu stronka, na której jest mapka wycentrowana na jakimś punkcie. Więc do dzieła.

Najpierw utwórzmy projekt za pomocą wtyczki GWT do eclipse’a. Potem wywalamy z niego nie potrzebne klasy tak aby została nam tylko klasa o nazwie projektu (ta z EntryPoint’em):

Na początek wywalmy z niej całe wnętrze, tak aby zostało coś takiego:

[java]

package pl.kedziorski.gwtmaps.client;

import com.google.gwt.core.client.EntryPoint;

public class GWTMaps implements EntryPoint {

public void onModuleLoad() {
}
}

[/java]

Potem zabieramy się za uprzątnięcie pliku HTML - znajduję się on w katalogu war i też nazywa się tak jak projekt + .html : ) U mnie wygląda to tak:

[html]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="GWTMaps.css">
<title>GWT z Google Maps API</title>
<script type="text/javascript" language="javascript" src="gwtmaps/gwtmaps.nocache.js"></script>
</head>
<body>
<iframe src="javascript:”" id="__gwt_historyFrame" tabIndex=’-1′ style="position:absolute;width:0;height:0;border:0"></iframe>
</body>
</html>

[/html]

Jeszcze musimy wywalić info z pliku web.xml o servlecie, który usunęliśmy. U mnie po tym zabiegu plik wygląda tak:

[xml]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<!– Default page to serve –>
<welcome-file-list>
<welcome-file>GWTMaps.html</welcome-file>
</welcome-file-list>

</web-app>

[/xml]

Ok mamy już przygotowany “czyściutki” projekt. Potrzebujemy teraz liba z Google Maps API. Następnie dołączamy gwt-maps.jar do naszego Build Path. Ale to nie wszystko - żeby korzystać z Google Maps musimy jeszcze dodać odpowiedni wpis do pliku nazwaProjektu.gwt.xml :

[xml]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd">
<module rename-to=’gwtmaps’>
<inherits name=’com.google.gwt.user.User’/>
<inherits name=’com.google.gwt.user.theme.standard.Standard’/>
<inherits name=’com.google.gwt.maps.GoogleMaps’/>
<entry-point class=’pl.kedziorski.gwtmaps.client.GWTMaps’/>
<script src="http://maps.google.com/maps?gwt=1&amp;file=api&amp;v=2&amp;key=klucz_naszej_strony"/>
</module>

</module>

[/xml]

Klucz do API możemy stworzyć na tej stronie (możliwe, że już nie ma obowiązku tworzenia API key). Jednak jeśli uruchamiamy stronkę na localhost nie ma potrzeby wpisywania klucza - może zostać tak jak w podanym wyżej listingu.

No ok teraz już możemy zacząć oprogramowywać naszą mapkę. Na początek stwórzmy mapę, która jest automatycznie centrowana na Toruń.

[java]

package pl.kedziorski.gwtmaps.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.user.client.ui.RootPanel;

public class GWTMaps implements EntryPoint {

public void onModuleLoad() {
MapWidget map = new MapWidget(LatLng.newInstance(53.023664, 18.636932),12);
map.setSize("600px", "500px");
RootPanel.get().add(map);
}
}

[/java]

MapWidget to nasza mapka. LatLng to klasa przechowująca długość i szerokość geogreficzną. Współrzędne 53.023664, 18.636932 leżą gdzieś w Toruniu. Konstruktor MapWidget wymaga też podania początkowego zoomu - ja wybrałem 12 bo widać wtedy cały Toruń. SetSize() wiadomo co robi : ) Miałem dopisać jeszcze jak robić trochę inne bajery ale może innym razem : )

Lombok

Bez kategorii Komentarze (3) »

Dziś rano czytając przy kawie RSSy znalazłem fajną bibliotekę. Mowa tu o narzędziu Lombok. Zdarzało Wam się pewnie nie raz pisać Klasy które mają tylko przechowywać jakieś informacje - nazywa się to chyba fachowo DTO. Weźmy sobie taki przykładzik z naszą osobą:

[java]

import java.util.Date;

public class Person {
private String name;
private String surname;
private Date birthdate;
private int pesel;
private int nip;
private double salary;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Date getBirthdate() {
return birthdate;
}
public void setBirthdate(Date birthdate) {
this.birthdate = birthdate;
}
public int getPesel() {
return pesel;
}
public void setPesel(int pesel) {
this.pesel = pesel;
}
public int getNip() {
return nip;
}
public void setNip(int nip) {
this.nip = nip;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}

}

[/java]

Widzimy że nasz Person ma kilka pól żeby mieć do nich dostęp musimy napisać settery i gettery. Tylko że jak je dopiszemy to nasza klaska staję się bardzo/dość nieczytelna. O to jak wygląda kod dający ten sam efekt przy zastosowaniu biblioteki Lombok:

[java]

import java.util.Date;
import lombok.Getter;
import lombok.Setter;

public class Person {
private @Getter @Setter String name;
private @Getter @Setter String surname;
private @Getter @Setter Date birthdate;
private @Getter @Setter int pesel;
private @Getter @Setter int nip;
private @Getter @Setter double salary;
}

[/java]

Prawda że ładniej i czytelniej ? : ) Dzięki adnotacjom @Getter i @Setter tworzymy (albo Lombok za nas tworzy) gettery i settery do danego pola. Ale możemy jeszcze bardziej sobie życie ułatwić i napisać tak:

[java]

import java.util.Date;
import lombok.Data;

public @Data class Person {
private String name;
private String surname;
private Date birthdate;
private int pesel;
private int nip;
private double salary;
}

[/java]

Teraz to już chyba nie da się skrócić bardziej : ) Adnotacja @Data tworzy nam settery i gettery ale to nie wszystko - dostajemy również metody toString() , hashCode() oraz eguals().

Biblioteka oferuje nam następujące opcje:

@Getter

@Setter

@Data

@ToString

@EqualsAndHashCode

@Cleanup

@Synchronized

@SneakyThrows

Wydaje mi się, że to całkiem ciekawa biblioteka - brawa dla autorów za pomysł.

Spora przerwa

Bez kategorii Komentarze (0) »

Ostatnio byłem trochę zabiegany i nie było czasu by napisać coś nowego na blogu. Teraz mam nadzieje, że już będzie luźniej ; ) W sumie sesję mam już za sobą - ostatni egzamin (język D) zdawałem 24 lipca - został teraz tylko egzamin licencjacki :) ale to we wrześniu czyli jeszcze całkiem sporo czasu mi zostało : ) Kolejnym powodem braku czasu była ładna pogoda : ), która bardzo skutecznie wyciągała mnie z domu nad przepełnione jeziorka : ) Ale że uwielbiam pływać nie mam żalu do pogody : )  No to by było na tyle jeśli chodzi o usprawiedliwienie ; ) Zaraz napisze wpis o nowym znalezisku : )

“Ksiażka o jUnit 4″

Bez kategorii Komentarze (0) »

Niedawno czytałem na którymś z polskich blogów, że nie ma żadnej publikacji książkowej dotyczącej jUnit’a poza JUnit. Pragmatyczne testy jednostkowe w Javie która niestety opisuje jUnit 3.8. No i fakt do tej pory nie znalazłem nic tylko o jUnit4. Ale dziś przeglądałem Helion.pl i trafiłem jakoś na książkę Java. Praktyczne narzędzia. Wchodzę w przykładowy rozdział i co ? Udostępnili akurat rozdział “Testowanie kodu
z wykorzystaniem frameworku JUnit” : ) Jako że książka została wydana (w PL) w czerwcu 2009 to jest na tyle aktualna by opisywać jUnit 4 : ) Swoją drogą może kiedyś zamówię tę książkę bo wypadałoby się zapoznać z Ant’em i/lub Maven’em w końcu : )

Zaczynamy “Kurs D” - Typy danych

Bez kategorii Komentarze (0) »

Chciałbym rozpocząć cykl wpisów na temat języka D. Na początek przyjrzyjmy się dostępnym w D typom danych. W tabelce poniżej przedstawię typy wraz z ich wartościami inicjalizacyjnymi i rozmiarem w pamięci.

Typ danych: Rozmiar: Init value:
void - -
bool 2 bity false
byte 8 bitów ze znakiem (signed) 0
ubyte 8 bitów bez znaku (unsigned) 0
short 16 bitów ze znakiem (signed) 0
ushort 16 bitów bez znaku (unsigned) 0
int 32 bity ze znakiem (signed) 0
uint 32 bity bez znaku (unsigned) 0
long 64 bity ze znakiem (signed) 0L
ulong 64 bity ze znakiem (signed) 0L
cent 128 bitów bez znaku (unsigned) 0
ucent 128 bitów bez znaku (unsigned) 0
float 32 bity float.nan
double 64 bity double.nan
real Największa dostępna sprzętowo real.nan
ifloat 32 bity float.nan * 1.0i
idouble 64 bity double.nan * 1.0i
ireal Największa dostępna sprzętowo real.nan * 1.0i
cfloat 32 bity float.nan + float.nan * 1.0i
cdouble 64 bity double.nan + double.nan * 1.0i
creal Największa dostępna sprzętowo real.nan + real.nan * 1.0i
char 8 bitów bez znaku (unsigned) 0xFF
wchar 16 bitów bez znaku (unsigned) 0xFFFF
dchar 32 bity bez znaku (unsigned) 0×0000FFFF

Jak widzimy cfloat, cdouble i creal służą do przechowywania licz zespolonych. Typy ifloat, idouble i ireal przechowują liczby urojone. Typy real zajmują największą możliwą na danym procesorze liczbę bitów (dla procesorów Intela 80 bitów). Typ char zapisujemy w UTF-8, typ wchar w UTF-16 a typ dchar w UTF-32. To chyba byłoby na tyle jeśli chodzi o typy danych. Jeśli czegoś Wam brakuje prosze o request w komentarzu - na pewno uzupełnię ;]

Silnik: Wordpress - Theme autorstwa N.Design Studio. Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj








Integracje Poznań .:. Eleganckie upominki .:. Usługi ogrodnicze Wielkopolska Imprezy plenerowe Wielkopolska .:. Imprezy plenerowe Poznań .:. Upominki firmowe .:. Ubezpieczenia OC Gdańsk .:. Bankiety firmowe Poznań